mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-09-30 03:23:13 +00:00
docs: land reorg in ledger, fix path refs, ship plan artifacts (C7)
C7 of the domain-reorg adoption (build plan docs/upstream-sync/domain-reorg/ reorg-build-plan.md, step C7): - CLAUDE.md / AGENTS.md: retarget architecture path references to the new layout — graph entrypoints via agent.graphs.* shims, the agent/api/ + agent/webhooks/*_routes.py FastAPI split (webapp.py now a shim), agent/review/ package, tests/<domain>/ test paths, and the new-graph/ test conventions. README.md already pointed at docs/ (C1) — no change. - triage.jsonl: flip 8356eb34 (#1726) to landed on branch refactor/domain-reorg-adoption; add re-triage notes to the 8 unblocked rows (#1732/#1761/#1744/#1748/#1742 clean, #1736/#1758/#1760 near-clean). triage.md regenerated via make triage-render. - Ship the plan, scoping report, move-map artifacts, and the domain-reorg-adoption workflow so the exercise is reproducible. Memory + Confluence handled out-of-band (not in this commit): project memory updated with the new module layout; Confluence check found no IT page documents the repo module map — no Confluence change required.
This commit is contained in:
parent
4d51410dc8
commit
373d888426
15 changed files with 3260 additions and 44 deletions
229
.claude/workflows/domain-reorg-adoption.mjs
Normal file
229
.claude/workflows/domain-reorg-adoption.mjs
Normal file
|
|
@ -0,0 +1,229 @@
|
|||
export const meta = {
|
||||
name: 'domain-reorg-adoption',
|
||||
description: 'Execute the gate-approved C1-C7 domain-reorg build plan: moves, webapp split, security review, PR — no merge',
|
||||
whenToUse: 'Run once, after Adam gives the go for the reorg build. Requires clean dev; plan + scoping artifacts live in docs/upstream-sync/domain-reorg/.',
|
||||
phases: [
|
||||
{ title: 'Preflight', detail: 'clean tree, artifacts present, branch created', model: 'haiku' },
|
||||
{ title: 'C1 docs/resources', detail: 'doc moves + prompt loader + wheel check', model: 'sonnet' },
|
||||
{ title: 'C2 review package', detail: '9 module moves + 38 importer rewrites', model: 'sonnet' },
|
||||
{ title: 'C3 shims+manifest', detail: '21 shims, ci_monitor, langgraph.json, bun pin', model: 'sonnet' },
|
||||
{ title: 'C4 webapp split', detail: 'the critical auth-surface split', model: 'fable' },
|
||||
{ title: 'C4 security review', detail: 'detector fan-out + proof-or-kill verify' },
|
||||
{ title: 'C5 test moves', detail: 'tests/<domain>/ mechanical moves', model: 'sonnet' },
|
||||
{ title: 'C6 UI moves', detail: 'ui/src/features/ moves + import rewrites', model: 'sonnet' },
|
||||
{ title: 'C7 docs/ledger/memory', detail: 'docs, triage ledger, memory, Confluence check', model: 'opus' },
|
||||
{ title: 'PR', detail: 'push branch, open PR, final report — NO merge' },
|
||||
],
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Shared context strings
|
||||
// ---------------------------------------------------------------------------
|
||||
const REPO = '/Users/adammoussa/Documents/repositories/seahaven/open-swe'
|
||||
const SCRATCH = '/Users/adammoussa/Documents/repositories/seahaven/open-swe/docs/upstream-sync/domain-reorg'
|
||||
const BRANCH = 'refactor/domain-reorg-adoption'
|
||||
|
||||
const COMMON = `
|
||||
You are executing one commit of a gate-approved build plan in ${REPO} (branch ${BRANCH}).
|
||||
Plan: ${SCRATCH}/reorg-build-plan.md — READ IT FIRST, plus the section of ${SCRATCH}/reorg-scoping-report.md relevant to your commit.
|
||||
Move-map artifacts: ${SCRATCH}/movemap-m50.txt, ${SCRATCH}/cross.json, ${SCRATCH}/forkonly.json.
|
||||
HARD RULES (violations = abort and report, do not improvise):
|
||||
- Fork file contents, upstream layout. Upstream content ONLY for the 21 structural "A" shims listed in the scoping report.
|
||||
- NEVER adopt upstream content for agent/webhooks/{github,linear,slack}.py, tests/conftest.py, tests/e2e/harness.py.
|
||||
- Use "git mv" for moves so rename tracking survives. One commit for your cascade class only; commit message follows the repo's conventional style (see recent git log), body references the plan step.
|
||||
- No pushes from your stage. No force operations. No edits outside your commit's scope. Do not touch docs/upstream-sync/* unless your stage says so.
|
||||
- Gate ladder before committing: ruff check && ruff format --check, then uv run pytest --co -q, then the stage-specific gates. If a gate fails, fix within scope; if you cannot, ABORT: git reset --hard to the pre-stage SHA you recorded at start, and report the failure.
|
||||
Return JSON: {ok, commit_sha, gates: {name: pass|fail|skipped}, notes, aborted_reason}`
|
||||
|
||||
const RESULT_SCHEMA = {
|
||||
type: 'object',
|
||||
properties: {
|
||||
ok: { type: 'boolean' },
|
||||
commit_sha: { type: 'string' },
|
||||
gates: { type: 'object' },
|
||||
notes: { type: 'string' },
|
||||
aborted_reason: { type: 'string' },
|
||||
},
|
||||
required: ['ok', 'notes'],
|
||||
}
|
||||
|
||||
const results = { commits: [], securityReview: null, pr: null }
|
||||
|
||||
function ensure(stage, r) {
|
||||
if (!r || !r.ok) {
|
||||
throw new Error(`${stage} failed: ${r ? r.aborted_reason || r.notes : 'agent returned null'}`)
|
||||
}
|
||||
results.commits.push({ stage, sha: r.commit_sha, gates: r.gates, notes: r.notes })
|
||||
return r
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Preflight — cheap checks, haiku
|
||||
// ---------------------------------------------------------------------------
|
||||
phase('Preflight')
|
||||
const pre = await agent(
|
||||
`${COMMON}
|
||||
STAGE: Preflight (no commit).
|
||||
1. Verify ${REPO} is on dev and dev == origin/dev (fetch first is allowed here). Tree must be clean EXCEPT untracked files under docs/upstream-sync/domain-reorg/ and .claude/workflows/, which are expected (they are committed in C7).
|
||||
2. Verify the plan file, scoping report, and all three move-map artifacts exist and are non-empty.
|
||||
3. Verify branch ${BRANCH} does not already exist locally or on origin.
|
||||
4. Create ${BRANCH} off dev. Record the base SHA.
|
||||
Return JSON with ok, notes, and base_sha in notes.`,
|
||||
{ label: 'preflight', phase: 'Preflight', model: 'haiku', effort: 'low', schema: RESULT_SCHEMA },
|
||||
)
|
||||
if (!pre || !pre.ok) throw new Error(`Preflight failed: ${pre ? pre.notes : 'null'}`)
|
||||
log('Preflight OK — branch created')
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// C1–C3: independent-of-C4 stages, sequential commits on the shared branch
|
||||
// ---------------------------------------------------------------------------
|
||||
phase('C1 docs/resources')
|
||||
ensure('C1', await agent(
|
||||
`${COMMON}
|
||||
STAGE: C1 — docs/resources/assets (plan section "C1").
|
||||
Moves: INSTALLATION.md and CUSTOMIZATION.md -> docs/, static/ -> assets/ (fix README refs), default_prompt.md -> agent/resources/ (+ __init__.py). Apply the importlib.resources loader hunk to the fork's prompt.py exactly as described in scoping §2b (upstream's hunk pattern, fork's file).
|
||||
Extra gate: build the wheel (uv build or python -m build) and verify agent/resources/default_prompt.md is inside it; if missing, add the explicit hatchling include and note it.`,
|
||||
{ label: 'C1', phase: 'C1 docs/resources', model: 'sonnet', schema: RESULT_SCHEMA },
|
||||
))
|
||||
|
||||
phase('C2 review package')
|
||||
ensure('C2', await agent(
|
||||
`${COMMON}
|
||||
STAGE: C2 — agent/review/ package (plan section "C2", scoping §2a/2b reviewer rows).
|
||||
git mv the 9 reviewer/style modules per the move-map (reviewer_findings.py -> agent/review/findings.py etc.), replicate upstream's import-rewire pattern on FORK content for the R<100 ones, rewrite all 38 importer files (grep for reviewer_ and review_style_ imports to find them — do not trust the count blindly), create agent/review/__init__.py exporting the fork's existing public surface.
|
||||
Extra gate: full reviewer/findings unit suites pass (uv run pytest tests/ -k "review or finding" plus any suite the moved modules own).`,
|
||||
{ label: 'C2', phase: 'C2 review package', model: 'sonnet', schema: RESULT_SCHEMA },
|
||||
))
|
||||
|
||||
phase('C3 shims+manifest')
|
||||
ensure('C3', await agent(
|
||||
`${COMMON}
|
||||
STAGE: C3 — graphs/runtime/providers shims + langgraph.json + CI hardening (plan section "C3").
|
||||
Adopt the 21 upstream "A" shim files verbatim-then-verify: for each, confirm every import it makes resolves against FORK modules (they delegate to agent.server etc.); fix delegation targets if fork names differ. Add fork-only agent/graphs/ci_monitor.py shim following the same pattern. Retarget langgraph.json graph entrypoints to agent.graphs.* (http.app stays agent.webapp:app). Pin bun-version in .github/workflows/ci.yml to the version in ui/ (check .bun-version / package.json engines; else current stable — note which).
|
||||
Extra gate: timeout-bounded "make dev" boot check — all six graphs (agent, reviewer, analyzer, chat, scheduler, ci_monitor) register and the FastAPI app mounts; kill it after verifying startup logs.`,
|
||||
{ label: 'C3', phase: 'C3 shims+manifest', model: 'sonnet', schema: RESULT_SCHEMA },
|
||||
))
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// C4 — the critical commit. Strongest model, high effort.
|
||||
// ---------------------------------------------------------------------------
|
||||
phase('C4 webapp split')
|
||||
ensure('C4', await agent(
|
||||
`${COMMON}
|
||||
STAGE: C4 — FastAPI split (plan section "C4" + approved decisions 1-2). THE critical auth-surface commit.
|
||||
Split the fork's 2,590-line agent/webapp.py into: agent/webhooks/common.py (shared verify/dispatch helpers), agent/api/app.py (composition), agent/api/health.py (/health + /webhooks/run-complete), and per-source github_routes.py / linear_routes.py / slack_routes.py / jira_routes.py / confluence_routes.py. Atlassian Connect lifecycle + descriptor routes (/connect/*) go INTO confluence_routes.py (approved decision 2). webapp.py becomes the compatibility shim re-exporting app (mirror upstream's shim shape).
|
||||
Preserve EXACTLY: all signature-verification logic (GitHub HMAC, Slack, Linear, verify_jira_secret + optional HMAC/timestamp, Connect JWT/qsh), token-attribution gating, TID-COLLIDE-01 binding, the renamed _is_repo_auto_review_enabled gates, ci-autofix trigger wiring. Handlers keep module-attribute access style (common.X / service.X).
|
||||
Retarget the ~240 monkeypatch.setattr(webapp, ...) sites across the 11 test files + tests/conftest.py + tests/e2e/harness.py per upstream's retarget pattern (webhook_common / handler modules) — find every site by grep, not by count.
|
||||
Extra gates before committing: full unit suite; FULL E2E (Playwright + real langgraph dev server); residual-importer sweep — git grep for "agent.webapp"/"from agent import webapp" must return only the shim and intentional compat references (list what remains in notes).`,
|
||||
{ label: 'C4', phase: 'C4 webapp split', model: 'fable', effort: 'high', schema: RESULT_SCHEMA },
|
||||
))
|
||||
log('C4 committed — entering security review (hard gate before C5)')
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// C4 security review — detector fan-out (sonnet lenses) + proof-or-kill verifier (opus),
|
||||
// with a bounded fix loop (fable) per the approved failure path (new commits, no rewrites).
|
||||
// ---------------------------------------------------------------------------
|
||||
phase('C4 security review')
|
||||
const LENSES = [
|
||||
{ key: 'authz', focus: 'broken object-level auth, missing access checks, webhook signature verification gaps (GitHub HMAC / Slack / Linear / Jira shared-secret+HMAC / Connect JWT+qsh), token-attribution gating, TID-COLLIDE-01 thread binding, the _is_repo_auto_review_enabled gates' },
|
||||
{ key: 'injection', focus: 'untrusted webhook payload handling: parsing, header trust, SSRF-prone fetches, path handling in the moved dispatch code' },
|
||||
{ key: 'logic', focus: 'multi-step invariants broken by the split: dispatch ordering, dedup/replay protection, race conditions across the new module boundaries, dropped code paths (diff every moved function against its pre-split source)' },
|
||||
]
|
||||
const FINDINGS_SCHEMA = {
|
||||
type: 'object',
|
||||
properties: { findings: { type: 'array', items: { type: 'object' } } },
|
||||
required: ['findings'],
|
||||
}
|
||||
const VERDICT_SCHEMA = {
|
||||
type: 'object',
|
||||
properties: { confirmed: { type: 'array', items: { type: 'object' } }, unverified: { type: 'array', items: { type: 'object' } } },
|
||||
required: ['confirmed', 'unverified'],
|
||||
}
|
||||
|
||||
let reviewRound = 0
|
||||
let confirmedHighs = []
|
||||
while (true) {
|
||||
reviewRound += 1
|
||||
const c4diff = `the C4 split commit(s) on ${BRANCH} in ${REPO} (git show for each C4/C4a commit; compare moved code against pre-split agent/webapp.py at the merge base)`
|
||||
const found = (await parallel(LENSES.map(l => () =>
|
||||
agent(
|
||||
`You are a hostile ${l.key} security auditor. Audit ONLY ${l.key} issues in ${c4diff}. Focus: ${l.focus}. Read the actual files at both revisions; for each checklist area either cite the specific safe line or file a finding {id,title,claimed_severity,file,line,data_flow,proof:{input,outcome},recommendation}. Findings must be about the SPLIT (regressions vs pre-split behavior), not pre-existing issues. Return {findings:[...]}.`,
|
||||
{ label: `detect:${l.key}:r${reviewRound}`, phase: 'C4 security review', model: 'sonnet', schema: FINDINGS_SCHEMA },
|
||||
)))).filter(Boolean).flatMap(r => r.findings)
|
||||
|
||||
if (!found.length) { results.securityReview = { rounds: reviewRound, confirmed: [], outcome: 'clean' }; break }
|
||||
|
||||
const verdict = await agent(
|
||||
`You are a skeptical exploitation verifier — you did NOT find these and are rewarded for killing weak claims. For each candidate finding on ${c4diff}, demand a concrete proof-of-exploit (specific input -> specific bad outcome, consistent with the code at HEAD of ${BRANCH}). Default to unverified when uncertain. Candidates: ${JSON.stringify(found)}. Return {confirmed:[...], unverified:[...]} keeping severity only on confirmed items.`,
|
||||
{ label: `verify:r${reviewRound}`, phase: 'C4 security review', model: 'opus', effort: 'high', schema: VERDICT_SCHEMA },
|
||||
)
|
||||
confirmedHighs = (verdict?.confirmed || []).filter(f => ['critical', 'high'].includes((f.claimed_severity || f.severity || '').toLowerCase()))
|
||||
if (!confirmedHighs.length) {
|
||||
results.securityReview = { rounds: reviewRound, confirmed: verdict?.confirmed || [], unverified: verdict?.unverified || [], outcome: 'pass' }
|
||||
break
|
||||
}
|
||||
if (reviewRound >= 3) {
|
||||
results.securityReview = { rounds: reviewRound, confirmed: confirmedHighs, outcome: 'BLOCKED' }
|
||||
throw new Error(`Security review still has ${confirmedHighs.length} confirmed critical/high after ${reviewRound} rounds — plan failure path: fundamental-flaw handling, return to Adam. Branch left intact for inspection.`)
|
||||
}
|
||||
log(`Security round ${reviewRound}: ${confirmedHighs.length} confirmed critical/high — dispatching fix commit C4a`)
|
||||
ensure(`C4a-r${reviewRound}`, await agent(
|
||||
`${COMMON}
|
||||
STAGE: C4a — address confirmed security-review findings as a NEW commit on ${BRANCH} (plan failure path: no history rewrite, no force-push). Findings with proofs: ${JSON.stringify(confirmedHighs)}. Fix each within the split's scope; re-run full unit + E2E before committing.`,
|
||||
{ label: `C4a:r${reviewRound}`, phase: 'C4 security review', model: 'fable', effort: 'high', schema: RESULT_SCHEMA },
|
||||
))
|
||||
}
|
||||
log(`Security review outcome: ${results.securityReview.outcome} after ${results.securityReview.rounds} round(s)`)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// HARD GATE passed — C5 and C6 (sequential commits; C6 depends only on branch order, not C5 content)
|
||||
// ---------------------------------------------------------------------------
|
||||
phase('C5 test moves')
|
||||
ensure('C5', await agent(
|
||||
`${COMMON}
|
||||
STAGE: C5 — tests/<domain>/ moves (plan section "C5", scoping §2a + §2c placements).
|
||||
git mv every test per the move-map; apply remaining R<100 monkeypatch retargets not already done in C4; place the 13 fork-only tests per the approved table (webhooks/, auth/, tools/, sandbox/, github/). Path-only commit — zero logic edits.
|
||||
Extra gate: uv run pytest --co -q collects everything (no import errors, count matches pre-move) then full unit green.`,
|
||||
{ label: 'C5', phase: 'C5 test moves', model: 'sonnet', effort: 'low', schema: RESULT_SCHEMA },
|
||||
))
|
||||
|
||||
phase('C6 UI moves')
|
||||
ensure('C6', await agent(
|
||||
`${COMMON}
|
||||
STAGE: C6 — ui/src/features/ moves (plan section "C6").
|
||||
git mv per the move-map including ported/ -> features/agents/experiments|chat; rewrite @/components/agents and @/lib/agents imports across the 54 importer files AND the moved files themselves (grep-driven); swap the tsconfig/eslint exclude lists for the single experiments glob; retarget the AgentPromptBar shim; delete ui/pnpm-workspace.yaml. Fork-diverged files (PlanReview.tsx, WorkflowApprovalCard.tsx, AgentsSidebar.tsx, SidebarFilterMenu.tsx, AgentGitPanel.tsx, AutomationEditor.tsx, DiffView.tsx, CloudPromptBar.tsx) keep fork content — imports only.
|
||||
Extra gate: cd ui && bun install && bunx tsc --noEmit && bun run build, then Playwright E2E.`,
|
||||
{ label: 'C6', phase: 'C6 UI moves', model: 'sonnet', schema: RESULT_SCHEMA },
|
||||
))
|
||||
|
||||
phase('C7 docs/ledger/memory')
|
||||
ensure('C7', await agent(
|
||||
`${COMMON}
|
||||
STAGE: C7 — docs + ledger + memory (plan section "C7" — read its obligations verbatim; you own them).
|
||||
1. Update fork CLAUDE.md / README.md / AGENTS.md path references (architecture sections naming agent/webapp.py, old test paths, ui paths).
|
||||
2. Ledger: flip 8356eb34 to landed in docs/upstream-sync/triage.jsonl with branch ${BRANCH}; add re-triage notes to the 8 unblocked rows per scoping §5; make triage-render; make triage-check must pass.
|
||||
3. Memory: update /Users/adammoussa/.claude/projects/-Users-adammoussa-Documents-repositories-seahaven-open-swe/memory/open-swe-upstream-triage-status.md (+ MEMORY.md hook if needed) with the new module layout summary (agent/{graphs,runtime,api,review,resources,webhooks/*_routes}, tests/<domain>/, ui/src/features/) and the reorg-landed status. Memory edits are NOT part of the git commit.
|
||||
4. Confluence check: via ToolSearch load the Atlassian MCP search tools; search the IT space for any page documenting this repo's module map. If found, update it; if none, or if Confluence is unreachable, record the exact outcome string ("updated page <id>" / "no Confluence change required" / "OUTSTANDING as of <today> — Confluence inaccessible") in your notes AND in the memory file.
|
||||
5. Stage docs/upstream-sync/domain-reorg/ and .claude/workflows/domain-reorg-adoption.mjs so the plan, scoping artifacts, and this workflow ship with the exercise.
|
||||
Commit all repo-file changes as the C7 commit; run ruff + triage-check as gates.`,
|
||||
{ label: 'C7', phase: 'C7 docs/ledger/memory', model: 'opus', schema: RESULT_SCHEMA },
|
||||
))
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// PR — push and open, NO merge. Merge is Adam's (after @openswe review).
|
||||
// ---------------------------------------------------------------------------
|
||||
phase('PR')
|
||||
results.pr = await agent(
|
||||
`${COMMON}
|
||||
STAGE: PR (no commit). Push ${BRANCH} to origin (plain push — the pre-push hook runs security scanners; if it blocks, report, never bypass). Open a PR against dev with gh pr create --base dev. Title: "refactor: adopt upstream domain reorg (8356eb34) — fork content, upstream layout". Body MUST include: the commit-by-commit summary from this build (paste from your reading of git log), explicit review-scope callouts for C2 (reviewer-module moves) and C4 (auth-surface split), the security-review outcome (${JSON.stringify(results.securityReview?.outcome)}), the C7 Confluence-check outcome, the post-deploy verification checklist from the plan (as unchecked boxes), and "MERGE-COMMIT ONLY — do not squash/rebase". Do NOT merge, do NOT approve, do NOT comment @openswe — Adam drives the review.
|
||||
Return JSON: {ok, notes} with the PR URL in notes.`,
|
||||
{ label: 'open-pr', phase: 'PR', model: 'sonnet', schema: RESULT_SCHEMA },
|
||||
)
|
||||
|
||||
return {
|
||||
branch: BRANCH,
|
||||
commits: results.commits,
|
||||
securityReview: results.securityReview,
|
||||
pr: results.pr?.notes || 'PR step failed — branch is pushed or local; open manually',
|
||||
next: 'Adam: review PR (C2+C4 scope), run @openswe review, merge with a MERGE COMMIT, then run the post-deploy checklist and post results to the PR.',
|
||||
}
|
||||
28
AGENTS.md
28
AGENTS.md
|
|
@ -14,25 +14,27 @@ Dependencies are managed with **uv**. Tests use pytest (`asyncio_mode = "auto"`)
|
|||
|
||||
```bash
|
||||
make install # uv pip install -e .
|
||||
make dev # uv run langgraph dev — serves all three graphs + the FastAPI app from langgraph.json
|
||||
make dev # uv run langgraph dev — serves all six graphs + the FastAPI app from langgraph.json
|
||||
make run # uvicorn agent.webapp:app --reload --port 8000 (FastAPI only, no LangGraph runtime)
|
||||
make test # uv run pytest -vvv tests/
|
||||
make test TEST_FILE=tests/test_open_pr_middleware.py # single test file
|
||||
uv run pytest -vvv tests/test_open_pr_middleware.py::test_name # single test
|
||||
make test TEST_FILE=tests/github/test_open_pull_request.py # single test file
|
||||
uv run pytest -vvv tests/github/test_open_pull_request.py::test_name # single test
|
||||
make lint # ruff check + ruff format --diff
|
||||
make format # ruff format + ruff check --fix
|
||||
```
|
||||
|
||||
`langgraph.json` declares three graph entrypoints and the FastAPI app, all served together by `langgraph dev`:
|
||||
`langgraph.json` declares six graph entrypoints and the FastAPI app, all served together by `langgraph dev`. Every graph entrypoint targets a thin `agent.graphs.*` re-export shim that delegates to the unmoved factory module (domain reorg):
|
||||
|
||||
| Graph | Entrypoint | Purpose |
|
||||
|---|---|---|
|
||||
| `agent` | `agent.server:get_agent` | Main coding agent (Slack/Linear/Jira/Confluence/GitHub-triggered). |
|
||||
| `reviewer` | `agent.reviewer:get_reviewer_agent` | Read-only PR reviewer. Findings model + `publish_review`. |
|
||||
| `analyzer` | `agent.analyzer:get_analyzer` | Learns per-repo reviewer style from historical PRs and this reviewer's own finding outcomes. |
|
||||
| `ci_monitor` | `agent.ci_monitor:get_ci_monitor` | Polling fallback for CI auto-fix: each tick sweeps open agent-authored PRs for failing checks / merge conflicts via `agent.ci_autofix.sweep_open_prs`. |
|
||||
| `agent` | `agent.graphs.agent:traced_agent` (shim → `agent.server:get_agent`) | Main coding agent (Slack/Linear/Jira/Confluence/GitHub-triggered). |
|
||||
| `reviewer` | `agent.graphs.reviewer:traced_reviewer_agent` (shim → `agent.reviewer:get_reviewer_agent`) | Read-only PR reviewer. Findings model + `publish_review`. |
|
||||
| `analyzer` | `agent.graphs.analyzer:traced_analyzer` (shim → `agent.analyzer:get_analyzer`) | Learns per-repo reviewer style from historical PRs and this reviewer's own finding outcomes. |
|
||||
| `chat` | `agent.graphs.chat:traced_chat_agent` | Dashboard Agents chat graph. |
|
||||
| `scheduler` | `agent.graphs.scheduler:get_scheduler` | Reconcile sweep for stragglers. |
|
||||
| `ci_monitor` | `agent.graphs.ci_monitor:get_ci_monitor` (shim → `agent.ci_monitor:get_ci_monitor`) | Polling fallback for CI auto-fix: each tick sweeps open agent-authored PRs for failing checks / merge conflicts via `agent.ci_autofix.sweep_open_prs`. |
|
||||
|
||||
The FastAPI app is `agent.webapp:app`.
|
||||
The FastAPI app is `agent.webapp:app` — now a compatibility shim re-exporting `agent.api.app:app`.
|
||||
|
||||
CI auto-fix ("PR babysitting") lives in `agent/ci_autofix.py`: when a CI check fails (webhook `check_run` / `check_suite` / `workflow_run` / `status`) or a reviewer leaves actionable feedback on a PR Open SWE opened, it locates the originating agent thread (by `pr_url` metadata) and dispatches a confidence-gated fix run on the `agent` graph. Gated by the per-user `auto_fix_ci` profile flag, the enabled-repos opt-in, and a per-PR `@open-swe autofix on|off` toggle (`agent/dashboard/autofix_state.py`). Skip-rules (base-branch failures, human commits, same-head dedupe, batching while runs are active, loop cap) all live in `ci_autofix.py`.
|
||||
|
||||
|
|
@ -41,9 +43,9 @@ CI auto-fix ("PR babysitting") lives in `agent/ci_autofix.py`: when a CI check f
|
|||
### Entrypoints
|
||||
|
||||
- **`agent/server.py` → `get_agent(config)`** — main graph factory. Called per-thread. Resolves the GitHub token, gets-or-creates the sandbox for the thread, resolves the team/profile/per-thread model + effort, then constructs a fresh `create_deep_agent(...)` with the curated tool list and middleware stack. The agent itself is stateless — all per-thread state lives in the sandbox + thread metadata.
|
||||
- **`agent/reviewer.py` → `get_reviewer_agent(config)`** — reviewer graph factory. Shares `ensure_sandbox_for_thread` with the main agent but wires a reviewer-only toolset (`add_finding`, `update_finding`, `list_findings`, `publish_review`, `web_search`, `fetch_url`, `http_request`) and a different system prompt that pins the single-evolving-findings model and the diff-anchored bar for filing a finding. Read-only: no commit/push/PR-opening tools.
|
||||
- **`agent/reviewer.py` → `get_reviewer_agent(config)`** — reviewer graph factory. Shares `ensure_sandbox_for_thread` with the main agent but wires a reviewer-only toolset (`add_finding`, `update_finding`, `list_findings`, `publish_review`, `web_search`, `fetch_url`, `http_request`) and a different system prompt that pins the single-evolving-findings model and the diff-anchored bar for filing a finding. Read-only: no commit/push/PR-opening tools. Its supporting modules live in the `agent/review/` package (domain reorg): `findings.py`, `publish.py`, `reconcile.py`, `trace_context.py`, `diff.py`, `groups.py`, `eval_store.py`, `style_collector.py`, `style_guidance.py`.
|
||||
- **`agent/analyzer.py` → `get_analyzer(config)`** — small graph that emits a per-repo style prompt via the `save_review_style_prompt` tool, consumed by the reviewer as a "repository-specific review style" appendix. It runs in one of two modes (`analyzer_mode` in `configurable`): **bootstrap** (cold-start: crawl historical PR reviews) and **continual** (nightly: refine using this reviewer's own finding outcomes via `read_finding_outcomes`). Each mode's procedure lives in a deepagents **skill** (`agent/skills/bootstrap-repo-analysis/`, `agent/skills/continual-learning/`) served as virtual files via a `CompositeBackend` `/skills/` route + `StateBackend` (seeded into the run's `files` channel by the launcher — never written to the sandbox). Launchers and the per-repo nightly cron live in `agent/dashboard/review_style_jobs.py` and `agent/dashboard/analyzer_cron.py`; the cron is registered when bootstrap completes.
|
||||
- **`agent/webapp.py`** — custom FastAPI routes mounted alongside the LangGraph server. Webhooks land here (GitHub, Linear, Slack, Jira, and the Confluence Atlassian Connect `/connect/*` routes). Each webhook resolves a deterministic `thread_id` (so follow-up messages route to the same agent run) and triggers/streams a run via the `langgraph_sdk` client. Also auto-reviews PRs on `opened` / `ready_for_review` events when the repo+author opt in. The Atlassian triggers (`agent/webhooks/{jira,confluence}.py`, `agent/utils/atlassian_connect.py`) verify webhook trust — a Jira Automation shared secret / optional HMAC, and a Confluence Connect HS256-JWT + `qsh` with RS256 signed-install — then re-fetch the triggering comment server-side before deriving identity.
|
||||
- **FastAPI layer (`agent/api/` + `agent/webhooks/`)** — custom FastAPI routes mounted alongside the LangGraph server. The domain reorg split the fork's former `agent/webapp.py` monolith into `agent/api/app.py` (app composition + router mounts), `agent/api/health.py` (`/health`, `/webhooks/run-complete`), shared helpers in `agent/webhooks/common.py`, and per-source route modules `agent/webhooks/{github,linear,slack,jira,confluence}_routes.py`; `agent/webapp.py` remains a compatibility shim re-exporting `app`. Webhooks land in those route modules (GitHub, Linear, Slack, Jira, and the Confluence Atlassian Connect `/connect/*` routes, which fold into `confluence_routes.py`). Each webhook resolves a deterministic `thread_id` (so follow-up messages route to the same agent run) and triggers/streams a run via the `langgraph_sdk` client. Also auto-reviews PRs on `opened` / `ready_for_review` events when the repo+author opt in. The Atlassian triggers (`agent/webhooks/{jira,confluence}.py`, `agent/utils/atlassian_connect.py`) verify webhook trust — a Jira Automation shared secret / optional HMAC, and a Confluence Connect HS256-JWT + `qsh` with RS256 signed-install — then re-fetch the triggering comment server-side before deriving identity.
|
||||
- **`agent/dashboard/`** — `router` mounted under the FastAPI app at startup (`app.include_router(dashboard_router)`). Owns GitHub OAuth, per-user profiles, admin endpoints, team defaults, enabled-repo lists, review-style management, and the Agents chat thread API used by the UI in `ui/`.
|
||||
|
||||
### Sandbox lifecycle (the tricky part)
|
||||
|
|
@ -114,10 +116,10 @@ Webhooks compute deterministic thread ids so the same Linear issue / Slack threa
|
|||
|
||||
## Conventions
|
||||
|
||||
- Tests are unit-only by default (`tests/`). Integration tests would go under `tests/integration_tests/` (currently empty — `make integration_tests` no-ops if missing).
|
||||
- Tests are unit-only by default and organized by domain under `tests/<domain>/` (`tests/agent/`, `tests/auth/`, `tests/github/`, `tests/webhooks/`, `tests/reviewer/`, `tests/sandbox/`, `tests/middleware/`, `tests/models/`, `tests/slack/`, `tests/tools/`, `tests/dashboard/`, `tests/analyzer/`); `tests/conftest.py` and the `tests/e2e/` harness stay at the top level. Integration tests would go under `tests/integration_tests/` (currently empty — `make integration_tests` no-ops if missing).
|
||||
- New sandbox providers: add a module under `agent/integrations/` and wire it into `SANDBOX_FACTORIES` in `agent/utils/sandbox.py`. See `CUSTOMIZATION.md`.
|
||||
- New tools: add to `agent/tools/`, export from `agent/tools/__init__.py`, add to the `tools=[...]` list in `server.py:get_agent` (or `reviewer.py` for reviewer-only tools).
|
||||
- New middleware: add to `agent/middleware/`, export from `agent/middleware/__init__.py`, add to the `middleware=[...]` list in `server.py:get_agent` — order is significant (see the stack above).
|
||||
- New dashboard endpoints: add to `agent/dashboard/routes.py`. The router is auto-mounted on the FastAPI app.
|
||||
- New graphs: register the entrypoint in `langgraph.json` under `graphs`.
|
||||
- New graphs: add an `agent/graphs/<name>.py` re-export shim that delegates to the factory module, then register the shim entrypoint (`agent.graphs.<name>:<symbol>`) in `langgraph.json` under `graphs`.
|
||||
- Minimal-to-no code comments — only when the *why* isn't obvious from the code.
|
||||
|
|
|
|||
33
CLAUDE.md
33
CLAUDE.md
|
|
@ -14,33 +14,40 @@ Dependencies are managed with **uv**. Tests use pytest (`asyncio_mode = "auto"`)
|
|||
|
||||
```bash
|
||||
make install # uv pip install -e .
|
||||
make dev # uv run langgraph dev — serves all three graphs + the FastAPI app from langgraph.json
|
||||
make dev # uv run langgraph dev — serves all six graphs + the FastAPI app from langgraph.json
|
||||
make run # uvicorn agent.webapp:app --reload --port 8000 (FastAPI only, no LangGraph runtime)
|
||||
make test # uv run pytest -vvv tests/
|
||||
make test TEST_FILE=tests/test_open_pr_middleware.py # single test file
|
||||
uv run pytest -vvv tests/test_open_pr_middleware.py::test_name # single test
|
||||
make test TEST_FILE=tests/github/test_open_pull_request.py # single test file
|
||||
uv run pytest -vvv tests/github/test_open_pull_request.py::test_name # single test
|
||||
make lint # ruff check + ruff format --diff
|
||||
make format # ruff format + ruff check --fix
|
||||
```
|
||||
|
||||
`langgraph.json` declares three graph entrypoints and the FastAPI app, all served together by `langgraph dev`:
|
||||
`langgraph.json` declares six graph entrypoints and the FastAPI app, all served together by `langgraph dev`. Since the domain reorg, every graph entrypoint targets a thin `agent.graphs.*` re-export shim (`agent/graphs/<name>.py`) rather than the factory module directly; the shims delegate to the unmoved factories (`agent/server.py`, `agent/reviewer.py`, `agent/analyzer.py`, `agent/chat.py`, `agent/scheduler.py`, `agent/ci_monitor.py`):
|
||||
|
||||
| Graph | Entrypoint | Purpose |
|
||||
|---|---|---|
|
||||
| `agent` | `agent.server:traced_agent` (wraps `get_agent`) | Main coding agent (Slack/Linear/Jira/Confluence/GitHub-triggered). |
|
||||
| `reviewer` | `agent.reviewer:traced_reviewer_agent` (wraps `get_reviewer_agent`) | Read-only PR reviewer. Findings model + `publish_review`. |
|
||||
| `analyzer` | `agent.analyzer:traced_analyzer` (wraps `get_analyzer`) | Learns per-repo reviewer style from historical PRs and this reviewer's own finding outcomes. |
|
||||
| `agent` | `agent.graphs.agent:traced_agent` (shim → `agent.server:get_agent`) | Main coding agent (Slack/Linear/Jira/Confluence/GitHub-triggered). |
|
||||
| `reviewer` | `agent.graphs.reviewer:traced_reviewer_agent` (shim → `agent.reviewer:get_reviewer_agent`) | Read-only PR reviewer. Findings model + `publish_review`. |
|
||||
| `analyzer` | `agent.graphs.analyzer:traced_analyzer` (shim → `agent.analyzer:get_analyzer`) | Learns per-repo reviewer style from historical PRs and this reviewer's own finding outcomes. |
|
||||
| `chat` | `agent.graphs.chat:traced_chat_agent` | Dashboard Agents chat graph. |
|
||||
| `scheduler` | `agent.graphs.scheduler:get_scheduler` | Reconcile sweep for stragglers. |
|
||||
| `ci_monitor` | `agent.graphs.ci_monitor:get_ci_monitor` | Fork-only polling fallback for the CI auto-fix flow. |
|
||||
|
||||
The FastAPI app is `agent.webapp:app`.
|
||||
The FastAPI app is `agent.webapp:app` — now a compatibility shim that re-exports `agent.api.app:app` (see the FastAPI split under "Entrypoints").
|
||||
|
||||
## Architecture
|
||||
|
||||
### Entrypoints
|
||||
|
||||
- **`agent/server.py` → `get_agent(config)`** — main graph factory. Called per-thread. Resolves the GitHub token, gets-or-creates the sandbox for the thread, resolves the team/profile/per-thread model + effort, then constructs a fresh `create_deep_agent(...)` with the curated tool list and middleware stack. The agent itself is stateless — all per-thread state lives in the sandbox + thread metadata.
|
||||
- **`agent/reviewer.py` → `get_reviewer_agent(config)`** — reviewer graph factory. Shares `ensure_sandbox_for_thread` with the main agent but wires a reviewer-only toolset (`add_finding`, `update_finding`, `list_findings`, `publish_review`, `web_search`, `fetch_url`, `http_request`) and a different system prompt that pins the single-evolving-findings model and the diff-anchored bar for filing a finding. Read-only: no commit/push/PR-opening tools.
|
||||
- **`agent/reviewer.py` → `get_reviewer_agent(config)`** — reviewer graph factory. Shares `ensure_sandbox_for_thread` with the main agent but wires a reviewer-only toolset (`add_finding`, `update_finding`, `list_findings`, `publish_review`, `web_search`, `fetch_url`, `http_request`) and a different system prompt that pins the single-evolving-findings model and the diff-anchored bar for filing a finding. Read-only: no commit/push/PR-opening tools. Its supporting modules live in the **`agent/review/`** package (domain reorg): `findings.py`, `publish.py`, `reconcile.py`, `trace_context.py`, `diff.py`, `groups.py`, `eval_store.py`, `style_collector.py`, `style_guidance.py`.
|
||||
- **`agent/analyzer.py` → `get_analyzer(config)`** — small graph that emits a per-repo style prompt via the `save_review_style_prompt` tool, consumed by the reviewer as a "repository-specific review style" appendix. It runs in one of two modes (`analyzer_mode` in `configurable`): **bootstrap** (cold-start: crawl historical PR reviews) and **continual** (nightly: refine using this reviewer's own finding outcomes via `read_finding_outcomes`). Each mode's procedure lives in a deepagents **skill** (`agent/skills/bootstrap-repo-analysis/`, `agent/skills/continual-learning/`) served as virtual files via a `CompositeBackend` `/skills/` route + `StateBackend` (seeded into the run's `files` channel by the launcher — never written to the sandbox). Launchers and the per-repo nightly cron live in `agent/dashboard/review_style_jobs.py` and `agent/dashboard/analyzer_cron.py`; the cron is registered when bootstrap completes.
|
||||
- **`agent/webapp.py`** — thin FastAPI routing layer mounted alongside the LangGraph server. Defines the webhook routes (GitHub, Linear, Slack, Jira, Confluence Connect `/connect/*`) plus `/webhooks/run-complete`, and keeps the shared helpers/constants; the per-source handlers live in **`agent/webhooks/{github,slack,linear,jira,confluence}.py`** (re-exported from `webapp` so existing call sites and tests keep working). Each webhook resolves a deterministic `thread_id` (so follow-up messages route to the same agent run) and triggers a run through the single durable dispatch contract in **`agent/dispatch.py`** (`dispatch_agent_run`: `multitask_strategy="interrupt"` + `durability="sync"` + completion webhook); `agent/completion.py` posts a failure reply if a run dies, and `agent/reconcile.py` (a `scheduler`-graph sweep) catches stragglers. The GitHub handler also auto-reviews PRs on `opened` / `ready_for_review` and drives the CI auto-fix flow (`agent/ci_autofix.py`).
|
||||
- **FastAPI layer (`agent/api/` + `agent/webhooks/`)** — the domain reorg split the fork's former 2,590-line `agent/webapp.py` monolith into a per-source layout; `agent/webapp.py` is now a 4-line compatibility shim (`from .api.app import app`). The pieces:
|
||||
- **`agent/api/app.py`** composes the FastAPI app and mounts every router; **`agent/api/health.py`** owns `/health` and `/webhooks/run-complete`.
|
||||
- **`agent/webhooks/common.py`** holds the shared verify/dispatch helpers and constants (signature verification, thread-id derivation, the dispatch entry). Route modules and handlers reach these via **module-attribute access** (`common.X`) so the ~240 `monkeypatch.setattr` test sites retarget cleanly.
|
||||
- Per-source **route modules** `agent/webhooks/{github,linear,slack,jira,confluence}_routes.py` define the HTTP routes (GitHub, Linear, Slack, Jira, and the Confluence Atlassian Connect `/connect/*` + `/webhooks/jira` routes; the fork-only `jira_routes.py`/`confluence_routes.py` mirror upstream's `github_routes.py` pattern, and the Connect lifecycle/descriptor routes fold into `confluence_routes.py`). The **handler modules** `agent/webhooks/{github,slack,linear,jira,confluence}.py` carry the per-source logic.
|
||||
- Each webhook resolves a deterministic `thread_id` (so follow-up messages route to the same agent run) and triggers a run through the single durable dispatch contract in **`agent/dispatch.py`** (`dispatch_agent_run`: `multitask_strategy="interrupt"` + `durability="sync"` + completion webhook); `agent/completion.py` posts a failure reply if a run dies, and `agent/reconcile.py` (a `scheduler`-graph sweep) catches stragglers. The GitHub handler also auto-reviews PRs on `opened` / `ready_for_review` and drives the CI auto-fix flow (`agent/ci_autofix.py`).
|
||||
- **Atlassian triggers.** The Jira trigger is a Jira **Automation** rule POSTing to `/webhooks/jira` with a shared-secret header (`verify_jira_secret`; optional HMAC-body+timestamp via `JIRA_WEBHOOK_REQUIRE_SIGNATURE`), since Jira Cloud has no native webhook signing. The Confluence trigger is a private **Atlassian Connect app** (`agent/utils/atlassian_connect.py`): the `comment_created` webhook is HS256-JWT-verified against the per-tenant stored `sharedSecret` with a hand-rolled `qsh` (query-string-hash) check; `signed-install` is on, so install/uninstall lifecycle callbacks are RS256-verified against Atlassian's published keys (no trust-on-first-use). Install secrets are stored **encrypted** in the LangGraph store, keyed by `clientKey`. Both Atlassian webhook bodies are treated as pointers only — the triggering comment's real author/text is re-fetched server-side via the Basic-auth service account before anything security-relevant is derived, and attribution is gated on an active user mapping (mirrors the GitHub-login / token-attribution flow). Descriptor served at `GET /connect/atlassian-connect.json`.
|
||||
- **`agent/dashboard/`** — `router` mounted under the FastAPI app at startup (`app.include_router(dashboard_router)`). Owns GitHub OAuth, per-user profiles, admin endpoints, team defaults, enabled-repo lists, review-style management, and the Agents chat thread API used by the UI in `ui/`.
|
||||
|
||||
|
|
@ -112,17 +119,17 @@ Webhooks compute deterministic thread ids so the same Linear issue / Slack threa
|
|||
|
||||
## Conventions
|
||||
|
||||
- Tests are unit-only by default (`tests/`). Integration tests would go under `tests/integration_tests/` (currently empty — `make integration_tests` no-ops if missing).
|
||||
- Tests are unit-only by default and organized by domain under `tests/<domain>/` (`tests/agent/`, `tests/auth/`, `tests/github/`, `tests/webhooks/`, `tests/reviewer/`, `tests/sandbox/`, `tests/middleware/`, `tests/models/`, `tests/slack/`, `tests/tools/`, `tests/dashboard/`, `tests/analyzer/`); `tests/conftest.py` and the `tests/e2e/` harness stay at the top level. Integration tests would go under `tests/integration_tests/` (currently empty — `make integration_tests` no-ops if missing).
|
||||
- New sandbox providers: add a module under `agent/integrations/` and wire it into `SANDBOX_FACTORIES` in `agent/utils/sandbox.py`. See `CUSTOMIZATION.md`.
|
||||
- New tools: add to `agent/tools/`, export from `agent/tools/__init__.py`, add to the `tools=[...]` list in `server.py:get_agent` (or `reviewer.py` for reviewer-only tools).
|
||||
- New middleware: add to `agent/middleware/`, export from `agent/middleware/__init__.py`, add to the `middleware=[...]` list in `server.py:get_agent` — order is significant (see the stack above).
|
||||
- New dashboard endpoints: add to `agent/dashboard/routes.py`. The router is auto-mounted on the FastAPI app.
|
||||
- New graphs: register the entrypoint in `langgraph.json` under `graphs`.
|
||||
- New graphs: add an `agent/graphs/<name>.py` re-export shim that delegates to the factory module, then register the shim entrypoint (`agent.graphs.<name>:<symbol>`) in `langgraph.json` under `graphs`.
|
||||
- Minimal-to-no code comments — only when the *why* isn't obvious from the code.
|
||||
|
||||
## Fork maintenance — syncing `upstream/main`
|
||||
|
||||
This is a long-lived fork of `langchain-ai/open-swe` with Sea Haven customizations woven into upstream-owned files (notably `agent/prompt.py` prompt constants, `agent/webapp.py`, and the tool/middleware wiring). Merging upstream is a triage exercise, not a fast-forward. When you want upstream's clean changes but must **defer a large structural refactor** (and its entangled features), work in this order:
|
||||
This is a long-lived fork of `langchain-ai/open-swe` with Sea Haven customizations woven into upstream-owned files (notably `agent/prompt.py` prompt constants, the `agent/api/` + `agent/webhooks/` FastAPI layer — the former `agent/webapp.py` monolith, now split and left as a shim — and the tool/middleware wiring). Merging upstream is a triage exercise, not a fast-forward. When you want upstream's clean changes but must **defer a large structural refactor** (and its entangled features), work in this order:
|
||||
|
||||
1. **Triage before resolving.** Merge-base is `git merge-base HEAD upstream/main`. The truthful conflict set is the combined merge, `git merge-tree --write-tree --name-only HEAD upstream/main` — a per-commit probe against each commit's parent *overstates* conflicts (a file a refactor merely added shows up as a phantom `modify/delete`). Decide keep-baseline vs adopt-refactor **before** resolving, and surface the choice to a human for any auth/webhook/IAM surface.
|
||||
2. **Chase the cascade, not just the textual conflicts.** The hard part is the non-conflicting files the refactor also touched. Get the refactor's file set (`git diff-tree --no-commit-id --name-status -r <refactor-sha>`) and cross-reference the files this fork modified (`git diff --name-only <fork-base> HEAD`). Files in both = hand-resolve; files only the refactor touched = mechanical.
|
||||
|
|
|
|||
1
docs/upstream-sync/domain-reorg/cross.json
Normal file
1
docs/upstream-sync/domain-reorg/cross.json
Normal file
File diff suppressed because one or more lines are too long
322
docs/upstream-sync/domain-reorg/fork-divergence-status.txt
Normal file
322
docs/upstream-sync/domain-reorg/fork-divergence-status.txt
Normal file
|
|
@ -0,0 +1,322 @@
|
|||
A .env.example
|
||||
A .githooks/_reject_guard.sh
|
||||
A .githooks/commit-msg
|
||||
A .githooks/post-commit
|
||||
A .githooks/pre-push
|
||||
A .githooks/prepare-commit-msg
|
||||
A .github/CODEOWNERS
|
||||
A .github/ISSUE_TEMPLATE/bug.yml
|
||||
A .github/ISSUE_TEMPLATE/config.yml
|
||||
A .github/ISSUE_TEMPLATE/feature.yml
|
||||
A .github/ISSUE_TEMPLATE/task.yml
|
||||
A .github/PULL_REQUEST_TEMPLATE.md
|
||||
M .github/dependabot.yml
|
||||
A .github/scripts/check-dev-green.sh
|
||||
M .github/workflows/ci.yml
|
||||
A .github/workflows/dependency-review.yml
|
||||
A .github/workflows/labeler.yml
|
||||
M .github/workflows/pr_lint.yml
|
||||
A .github/workflows/promote-to-main.yml
|
||||
D .github/workflows/promote_main_to_prod.yml
|
||||
R096 .github/workflows/reviewer_eval.yml .github/workflows/reviewer-eval.yml
|
||||
A .github/workflows/upstream-ledger-sync.yml
|
||||
M .gitignore
|
||||
A .nvmrc
|
||||
A .security-review/suppressions.json
|
||||
M AGENTS.md
|
||||
M CLAUDE.md
|
||||
M CUSTOMIZATION.md
|
||||
M Dockerfile
|
||||
M INSTALLATION.md
|
||||
M Makefile
|
||||
M README.md
|
||||
M SECURITY.md
|
||||
M agent/analyzer.py
|
||||
M agent/chat.py
|
||||
M agent/ci_autofix.py
|
||||
A agent/completion.py
|
||||
M agent/dashboard/__init__.py
|
||||
M agent/dashboard/agent_overrides.py
|
||||
M agent/dashboard/eval_jobs.py
|
||||
M agent/dashboard/oauth.py
|
||||
M agent/dashboard/options.py
|
||||
M agent/dashboard/plan_api.py
|
||||
M agent/dashboard/plan_store.py
|
||||
M agent/dashboard/repo_access.py
|
||||
M agent/dashboard/review_api.py
|
||||
M agent/dashboard/review_chat_api.py
|
||||
M agent/dashboard/routes.py
|
||||
M agent/dashboard/schedules.py
|
||||
M agent/dashboard/slack_oauth.py
|
||||
M agent/dashboard/team_settings.py
|
||||
M agent/dashboard/thread_api.py
|
||||
M agent/dashboard/user_mappings.py
|
||||
A agent/dashboard/workflow_approval.py
|
||||
A agent/dashboard/workflow_approval_api.py
|
||||
A agent/dispatch.py
|
||||
A agent/integrations/e2b.py
|
||||
M agent/integrations/local.py
|
||||
M agent/middleware/__init__.py
|
||||
M agent/middleware/check_message_queue.py
|
||||
A agent/middleware/ensure_no_empty_msg.py
|
||||
M agent/middleware/model_fallback.py
|
||||
M agent/middleware/plan_mode.py
|
||||
A agent/middleware/pr_creation_guard.py
|
||||
M agent/middleware/refresh_slack_status.py
|
||||
A agent/middleware/sanitize_fireworks_messages.py
|
||||
A agent/middleware/sanitize_openai_responses.py
|
||||
M agent/middleware/sanitize_thinking_blocks.py
|
||||
A agent/middleware/subdir_agents.py
|
||||
A agent/middleware/task_retry.py
|
||||
A agent/middleware/timeout_wrapup.py
|
||||
A agent/middleware/workflow_push_guard.py
|
||||
M agent/prompt.py
|
||||
A agent/reconcile.py
|
||||
M agent/reviewer.py
|
||||
M agent/reviewer_findings.py
|
||||
M agent/reviewer_publish.py
|
||||
M agent/reviewer_reconcile.py
|
||||
A agent/reviewer_trace_context.py
|
||||
M agent/scheduler.py
|
||||
M agent/server.py
|
||||
M agent/tools/__init__.py
|
||||
M agent/tools/add_finding.py
|
||||
A agent/tools/confluence_comment.py
|
||||
A agent/tools/confluence_create_page.py
|
||||
A agent/tools/confluence_get_page.py
|
||||
A agent/tools/confluence_search.py
|
||||
A agent/tools/confluence_update_page.py
|
||||
M agent/tools/enter_plan_mode.py
|
||||
M agent/tools/fetch_url.py
|
||||
M agent/tools/http_request.py
|
||||
A agent/tools/jira_comment.py
|
||||
A agent/tools/jira_create_issue.py
|
||||
A agent/tools/jira_get_issue.py
|
||||
A agent/tools/jira_get_issue_comments.py
|
||||
A agent/tools/jira_list_projects.py
|
||||
A agent/tools/jira_update_issue.py
|
||||
M agent/tools/linear_comment.py
|
||||
M agent/tools/linear_create_issue.py
|
||||
M agent/tools/linear_delete_issue.py
|
||||
M agent/tools/linear_get_issue.py
|
||||
M agent/tools/linear_get_issue_comments.py
|
||||
M agent/tools/linear_list_teams.py
|
||||
M agent/tools/linear_update_issue.py
|
||||
M agent/tools/list_findings.py
|
||||
M agent/tools/list_review_findings.py
|
||||
M agent/tools/open_pull_request.py
|
||||
M agent/tools/publish_review.py
|
||||
M agent/tools/read_repo_file.py
|
||||
M agent/tools/reply_to_finding_thread.py
|
||||
A agent/tools/report_platform_issue.py
|
||||
M agent/tools/request_pr_review.py
|
||||
M agent/tools/resolve_finding_thread.py
|
||||
M agent/tools/save_plan.py
|
||||
M agent/tools/save_review_style.py
|
||||
M agent/tools/schedule_thread_wakeup.py
|
||||
M agent/tools/search_repo_code.py
|
||||
A agent/tools/slack_add_reaction.py
|
||||
M agent/tools/slack_read_thread_messages.py
|
||||
A agent/tools/slack_start_new_thread.py
|
||||
M agent/tools/slack_thread_reply.py
|
||||
M agent/tools/update_finding.py
|
||||
M agent/tools/web_search.py
|
||||
A agent/utils/adf.py
|
||||
M agent/utils/analyzer_skills.py
|
||||
A agent/utils/atlassian_connect.py
|
||||
M agent/utils/auth.py
|
||||
M agent/utils/authorship.py
|
||||
A agent/utils/confluence.py
|
||||
A agent/utils/confluence_space_repo_map.py
|
||||
A agent/utils/dashboard_handoff.py
|
||||
M agent/utils/dashboard_links.py
|
||||
A agent/utils/deferred_model.py
|
||||
A agent/utils/gateway.py
|
||||
M agent/utils/github_app.py
|
||||
M agent/utils/github_comments.py
|
||||
M agent/utils/github_org_membership.py
|
||||
M agent/utils/github_proxy.py
|
||||
M agent/utils/github_token.py
|
||||
A agent/utils/http.py
|
||||
A agent/utils/jira.py
|
||||
A agent/utils/jira_project_repo_map.py
|
||||
M agent/utils/linear.py
|
||||
M agent/utils/model.py
|
||||
M agent/utils/multimodal.py
|
||||
M agent/utils/sandbox.py
|
||||
M agent/utils/sandbox_state.py
|
||||
M agent/utils/slack.py
|
||||
A agent/utils/thread_ids.py
|
||||
M agent/utils/thread_ops.py
|
||||
A agent/utils/url_safety.py
|
||||
M agent/webapp.py
|
||||
A agent/webhooks/__init__.py
|
||||
A agent/webhooks/confluence.py
|
||||
A agent/webhooks/github.py
|
||||
A agent/webhooks/jira.py
|
||||
A agent/webhooks/linear.py
|
||||
A agent/webhooks/slack.py
|
||||
M default_prompt.md
|
||||
A deploy/MIGRATION.md
|
||||
A docs/repo-conventions/AGENTS.md.aws
|
||||
A docs/repo-conventions/AGENTS.md.cdk
|
||||
A docs/repo-conventions/AGENTS.md.ec2
|
||||
A docs/repo-conventions/AGENTS.md.sam
|
||||
A docs/repo-conventions/README.md
|
||||
A docs/upstream-sync/cherry-pick-hook-plan.md
|
||||
A docs/upstream-sync/cherry-pick-runbook.md
|
||||
A docs/upstream-sync/triage.jsonl
|
||||
A docs/upstream-sync/triage.md
|
||||
M evals/reviewer/README.md
|
||||
M evals/reviewer/config.toml
|
||||
M evals/reviewer/judge.py
|
||||
M evals/reviewer/run_eval.py
|
||||
M evals/reviewer/target.py
|
||||
M pyproject.toml
|
||||
A scripts/git-cp
|
||||
A scripts/install-hooks.sh
|
||||
A scripts/purge_wakeup_crons.py
|
||||
A scripts/triage.py
|
||||
M tests/conftest.py
|
||||
M tests/e2e/README.md
|
||||
M tests/e2e/fake_llm.py
|
||||
M tests/e2e/fakes.py
|
||||
M tests/e2e/harness.py
|
||||
M tests/e2e/package-lock.json
|
||||
M tests/e2e/package.json
|
||||
M tests/e2e/patches.py
|
||||
A tests/e2e/screenshots/queued-messages-dashboard.png
|
||||
M tests/e2e/static/slack.html
|
||||
M tests/e2e/tests/dashboard.spec.ts
|
||||
M tests/e2e/tests/full_flow.spec.ts
|
||||
M tests/e2e/tests/plan_review.spec.ts
|
||||
A tests/e2e/tests/sandbox_id.spec.ts
|
||||
A tests/test_agent_assembly_context.py
|
||||
M tests/test_agent_schedules.py
|
||||
M tests/test_agent_subagent_models.py
|
||||
A tests/test_anthropic_model.py
|
||||
A tests/test_app_bot_identity.py
|
||||
A tests/test_atlassian_connect.py
|
||||
A tests/test_auth_error_leak.py
|
||||
M tests/test_auth_sources.py
|
||||
M tests/test_authorship.py
|
||||
M tests/test_autofix_webhook.py
|
||||
M tests/test_ci_autofix.py
|
||||
A tests/test_completion_webhook.py
|
||||
A tests/test_confluence_utils.py
|
||||
A tests/test_confluence_webhook.py
|
||||
M tests/test_corridor_mcp.py
|
||||
A tests/test_dashboard_oauth_redirect.py
|
||||
M tests/test_dashboard_thread_api.py
|
||||
M tests/test_dashboard_web_handoff.py
|
||||
A tests/test_dispatch.py
|
||||
A tests/test_e2b_integration.py
|
||||
A tests/test_ensure_no_empty_msg.py
|
||||
M tests/test_fireworks_model.py
|
||||
A tests/test_gateway.py
|
||||
M tests/test_github_app.py
|
||||
M tests/test_github_comment_prompts.py
|
||||
M tests/test_github_issue_webhook.py
|
||||
M tests/test_github_proxy_refresh.py
|
||||
M tests/test_github_token_ttl.py
|
||||
D tests/test_google_model.py
|
||||
M tests/test_http_security.py
|
||||
A tests/test_jira_utils.py
|
||||
A tests/test_jira_webhook_author.py
|
||||
A tests/test_jira_webhook_corroboration.py
|
||||
A tests/test_jira_webhook_replay.py
|
||||
A tests/test_linear_webhook_author.py
|
||||
A tests/test_linear_webhook_replay.py
|
||||
M tests/test_local_integration.py
|
||||
M tests/test_model_fallback_middleware.py
|
||||
M tests/test_model_fallback_resolution.py
|
||||
M tests/test_open_pull_request.py
|
||||
M tests/test_plan_mode.py
|
||||
M tests/test_plan_review.py
|
||||
A tests/test_pr_creation_guard.py
|
||||
M tests/test_pr_ready_auto_review.py
|
||||
M tests/test_proxy_auth.py
|
||||
A tests/test_reconcile_sweep.py
|
||||
A tests/test_repo_binding_isolation.py
|
||||
A tests/test_report_platform_issue_tool.py
|
||||
M tests/test_review_chat.py
|
||||
M tests/test_reviewer.py
|
||||
A tests/test_reviewer_eval_judge.py
|
||||
M tests/test_reviewer_eval_target.py
|
||||
M tests/test_reviewer_findings.py
|
||||
M tests/test_reviewer_publish.py
|
||||
M tests/test_reviewer_reconcile.py
|
||||
M tests/test_reviewer_tools.py
|
||||
A tests/test_reviewer_trace_context.py
|
||||
M tests/test_reviewer_watch.py
|
||||
A tests/test_sanitize_fireworks_messages.py
|
||||
A tests/test_sanitize_openai_responses.py
|
||||
M tests/test_sanitize_thinking_blocks.py
|
||||
M tests/test_schedule_thread_wakeup.py
|
||||
A tests/test_slack_add_reaction_tool.py
|
||||
M tests/test_slack_assistants_status.py
|
||||
M tests/test_slack_context.py
|
||||
A tests/test_slack_start_new_thread_tool.py
|
||||
M tests/test_slack_thread_reply_tool.py
|
||||
A tests/test_slack_webhook_errors.py
|
||||
A tests/test_subdir_agents_middleware.py
|
||||
A tests/test_team_settings_fable.py
|
||||
M tests/test_team_settings_grouping.py
|
||||
M tests/test_team_settings_org_guidelines.py
|
||||
A tests/test_workflow_push_guard.py
|
||||
A ui/AGENTS.md
|
||||
M ui/bun.lock
|
||||
M ui/package.json
|
||||
A ui/pnpm-workspace.yaml
|
||||
M ui/src/client.tsx
|
||||
A ui/src/components/PwaUpdateToast.tsx
|
||||
M ui/src/components/agents/AgentGitPanel.tsx
|
||||
M ui/src/components/agents/AgentThreadView.tsx
|
||||
M ui/src/components/agents/AgentsSidebar.tsx
|
||||
M ui/src/components/agents/AutomationEditor.tsx
|
||||
M ui/src/components/agents/PlanReview.tsx
|
||||
A ui/src/components/agents/PrHeader.tsx
|
||||
M ui/src/components/agents/ReviewMainBody.tsx
|
||||
M ui/src/components/agents/ReviewSidebar.tsx
|
||||
A ui/src/components/agents/SidebarFilterMenu.tsx
|
||||
A ui/src/components/agents/WorkflowApprovalCard.tsx
|
||||
M ui/src/components/agents/messages/AgentMessage.tsx
|
||||
A ui/src/components/agents/messages/MessageTimestamp.tsx
|
||||
M ui/src/components/agents/messages/Messages.tsx
|
||||
M ui/src/components/agents/messages/UserMessage.tsx
|
||||
M ui/src/components/agents/messages/types.ts
|
||||
M ui/src/components/agents/utils/diffUtils.ts
|
||||
M ui/src/lib/agents/api.ts
|
||||
A ui/src/lib/agents/messageTimestamps.ts
|
||||
M ui/src/lib/agents/provider/useSubmitAgentMessage.ts
|
||||
M ui/src/lib/agents/queries.ts
|
||||
A ui/src/lib/agents/sidebarFilter.test.ts
|
||||
A ui/src/lib/agents/sidebarFilter.ts
|
||||
A ui/src/lib/agents/sidebarPrefs.ts
|
||||
M ui/src/lib/agents/streamMessagesToUi.ts
|
||||
M ui/src/lib/agents/types.ts
|
||||
M ui/src/lib/api.ts
|
||||
A ui/src/lib/auth-redirect-core.ts
|
||||
A ui/src/lib/auth-redirect.test.ts
|
||||
A ui/src/lib/auth-redirect.tsx
|
||||
M ui/src/lib/plan.ts
|
||||
M ui/src/routeTree.gen.ts
|
||||
A ui/src/routes/$owner.$repo.pull.$number.tsx
|
||||
M ui/src/routes/admin.tsx
|
||||
M ui/src/routes/admin_.evals.tsx
|
||||
M ui/src/routes/agents.tsx
|
||||
M ui/src/routes/agents/$threadId_.plan.tsx
|
||||
M ui/src/routes/agents/reviews/$owner.$repo.$number.tsx
|
||||
M ui/src/routes/agents_.instructions.tsx
|
||||
M ui/src/routes/agents_.snapshots.tsx
|
||||
M ui/src/routes/cloud-agents.tsx
|
||||
M ui/src/routes/login.tsx
|
||||
M ui/src/routes/my-settings.tsx
|
||||
M ui/src/routes/review.tsx
|
||||
M ui/src/routes/review_.repositories.$owner.tsx
|
||||
M ui/src/routes/review_.styles.tsx
|
||||
M ui/src/routes/usage.tsx
|
||||
M ui/vercel.json
|
||||
M ui/vite.config.ts
|
||||
D ui/yarn.lock
|
||||
M uv.lock
|
||||
1
docs/upstream-sync/domain-reorg/forkonly.json
Normal file
1
docs/upstream-sync/domain-reorg/forkonly.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"true_fork_only": [".env.example", ".githooks/_reject_guard.sh", ".githooks/commit-msg", ".githooks/post-commit", ".githooks/pre-push", ".githooks/prepare-commit-msg", ".github/CODEOWNERS", ".github/ISSUE_TEMPLATE/bug.yml", ".github/ISSUE_TEMPLATE/config.yml", ".github/ISSUE_TEMPLATE/feature.yml", ".github/ISSUE_TEMPLATE/task.yml", ".github/PULL_REQUEST_TEMPLATE.md", ".github/scripts/check-dev-green.sh", ".github/workflows/dependency-review.yml", ".github/workflows/labeler.yml", ".github/workflows/promote-to-main.yml", ".github/workflows/reviewer-eval.yml", ".github/workflows/upstream-ledger-sync.yml", ".nvmrc", ".security-review/suppressions.json", "agent/tools/confluence_comment.py", "agent/tools/confluence_create_page.py", "agent/tools/confluence_get_page.py", "agent/tools/confluence_search.py", "agent/tools/confluence_update_page.py", "agent/tools/jira_comment.py", "agent/tools/jira_create_issue.py", "agent/tools/jira_get_issue.py", "agent/tools/jira_get_issue_comments.py", "agent/tools/jira_list_projects.py", "agent/tools/jira_update_issue.py", "agent/utils/adf.py", "agent/utils/atlassian_connect.py", "agent/utils/confluence.py", "agent/utils/confluence_space_repo_map.py", "agent/utils/jira.py", "agent/utils/jira_project_repo_map.py", "agent/webhooks/confluence.py", "agent/webhooks/jira.py", "deploy/MIGRATION.md", "docs/repo-conventions/AGENTS.md.aws", "docs/repo-conventions/AGENTS.md.cdk", "docs/repo-conventions/AGENTS.md.ec2", "docs/repo-conventions/AGENTS.md.sam", "docs/repo-conventions/README.md", "docs/upstream-sync/cherry-pick-hook-plan.md", "docs/upstream-sync/cherry-pick-runbook.md", "docs/upstream-sync/triage.jsonl", "docs/upstream-sync/triage.md", "scripts/git-cp", "scripts/install-hooks.sh", "scripts/triage.py", "tests/test_app_bot_identity.py", "tests/test_atlassian_connect.py", "tests/test_auth_error_leak.py", "tests/test_confluence_utils.py", "tests/test_confluence_webhook.py", "tests/test_jira_utils.py", "tests/test_jira_webhook_author.py", "tests/test_jira_webhook_corroboration.py", "tests/test_jira_webhook_replay.py", "tests/test_linear_webhook_replay.py", "tests/test_repo_binding_isolation.py", "ui/src/components/PwaUpdateToast.tsx"], "shared_pre": ["agent/completion.py", "agent/dashboard/workflow_approval.py", "agent/dashboard/workflow_approval_api.py", "agent/dispatch.py", "agent/integrations/e2b.py", "agent/middleware/ensure_no_empty_msg.py", "agent/middleware/pr_creation_guard.py", "agent/middleware/sanitize_fireworks_messages.py", "agent/middleware/sanitize_openai_responses.py", "agent/middleware/subdir_agents.py", "agent/middleware/task_retry.py", "agent/middleware/timeout_wrapup.py", "agent/middleware/workflow_push_guard.py", "agent/reconcile.py", "agent/reviewer_trace_context.py", "agent/tools/report_platform_issue.py", "agent/tools/slack_add_reaction.py", "agent/tools/slack_start_new_thread.py", "agent/utils/dashboard_handoff.py", "agent/utils/deferred_model.py", "agent/utils/gateway.py", "agent/utils/http.py", "agent/utils/thread_ids.py", "agent/utils/url_safety.py", "agent/webhooks/__init__.py", "agent/webhooks/github.py", "agent/webhooks/linear.py", "agent/webhooks/slack.py", "scripts/purge_wakeup_crons.py", "tests/e2e/screenshots/queued-messages-dashboard.png", "tests/e2e/tests/sandbox_id.spec.ts", "tests/test_agent_assembly_context.py", "tests/test_anthropic_model.py", "tests/test_completion_webhook.py", "tests/test_dashboard_oauth_redirect.py", "tests/test_dispatch.py", "tests/test_e2b_integration.py", "tests/test_ensure_no_empty_msg.py", "tests/test_gateway.py", "tests/test_linear_webhook_author.py", "tests/test_pr_creation_guard.py", "tests/test_reconcile_sweep.py", "tests/test_report_platform_issue_tool.py", "tests/test_reviewer_eval_judge.py", "tests/test_reviewer_trace_context.py", "tests/test_sanitize_fireworks_messages.py", "tests/test_sanitize_openai_responses.py", "tests/test_slack_add_reaction_tool.py", "tests/test_slack_start_new_thread_tool.py", "tests/test_slack_webhook_errors.py", "tests/test_subdir_agents_middleware.py", "tests/test_team_settings_fable.py", "tests/test_workflow_push_guard.py", "ui/AGENTS.md", "ui/pnpm-workspace.yaml", "ui/src/components/agents/PrHeader.tsx", "ui/src/components/agents/SidebarFilterMenu.tsx", "ui/src/components/agents/WorkflowApprovalCard.tsx", "ui/src/components/agents/messages/MessageTimestamp.tsx", "ui/src/lib/agents/messageTimestamps.ts", "ui/src/lib/agents/sidebarFilter.test.ts", "ui/src/lib/agents/sidebarFilter.ts", "ui/src/lib/agents/sidebarPrefs.ts", "ui/src/lib/auth-redirect-core.ts", "ui/src/lib/auth-redirect.test.ts", "ui/src/lib/auth-redirect.tsx", "ui/src/routes/$owner.$repo.pull.$number.tsx"], "shared_post": []}
|
||||
589
docs/upstream-sync/domain-reorg/head-tree.txt
Normal file
589
docs/upstream-sync/domain-reorg/head-tree.txt
Normal file
|
|
@ -0,0 +1,589 @@
|
|||
.codespellignore
|
||||
.dockerignore
|
||||
.env.example
|
||||
.githooks/_reject_guard.sh
|
||||
.githooks/commit-msg
|
||||
.githooks/post-commit
|
||||
.githooks/pre-push
|
||||
.githooks/prepare-commit-msg
|
||||
.github/CODEOWNERS
|
||||
.github/ISSUE_TEMPLATE/bug.yml
|
||||
.github/ISSUE_TEMPLATE/config.yml
|
||||
.github/ISSUE_TEMPLATE/feature.yml
|
||||
.github/ISSUE_TEMPLATE/task.yml
|
||||
.github/PULL_REQUEST_TEMPLATE.md
|
||||
.github/dependabot.yml
|
||||
.github/scripts/check-dev-green.sh
|
||||
.github/workflows/ci.yml
|
||||
.github/workflows/dependency-review.yml
|
||||
.github/workflows/labeler.yml
|
||||
.github/workflows/pr_lint.yml
|
||||
.github/workflows/promote-to-main.yml
|
||||
.github/workflows/reviewer-eval.yml
|
||||
.github/workflows/upstream-ledger-sync.yml
|
||||
.gitignore
|
||||
.nvmrc
|
||||
.security-review/suppressions.json
|
||||
.vscode/settings.json
|
||||
AGENTS.md
|
||||
CLAUDE.md
|
||||
CUSTOMIZATION.md
|
||||
Dockerfile
|
||||
INSTALLATION.md
|
||||
LICENSE
|
||||
Makefile
|
||||
README.md
|
||||
SECURITY.md
|
||||
agent/analyzer.py
|
||||
agent/chat.py
|
||||
agent/ci_autofix.py
|
||||
agent/ci_monitor.py
|
||||
agent/completion.py
|
||||
agent/dashboard/__init__.py
|
||||
agent/dashboard/admin.py
|
||||
agent/dashboard/agent_instructions.py
|
||||
agent/dashboard/agent_overrides.py
|
||||
agent/dashboard/agent_usage.py
|
||||
agent/dashboard/analyzer_cron.py
|
||||
agent/dashboard/autofix_state.py
|
||||
agent/dashboard/enabled_repos.py
|
||||
agent/dashboard/eval_jobs.py
|
||||
agent/dashboard/notion_oauth.py
|
||||
agent/dashboard/oauth.py
|
||||
agent/dashboard/options.py
|
||||
agent/dashboard/plan_api.py
|
||||
agent/dashboard/plan_store.py
|
||||
agent/dashboard/pr_diff.py
|
||||
agent/dashboard/profiles.py
|
||||
agent/dashboard/repo_access.py
|
||||
agent/dashboard/repo_snapshots.py
|
||||
agent/dashboard/review_api.py
|
||||
agent/dashboard/review_chat_api.py
|
||||
agent/dashboard/review_style_jobs.py
|
||||
agent/dashboard/review_styles.py
|
||||
agent/dashboard/routes.py
|
||||
agent/dashboard/schedules.py
|
||||
agent/dashboard/slack_oauth.py
|
||||
agent/dashboard/team_credentials.py
|
||||
agent/dashboard/team_settings.py
|
||||
agent/dashboard/thread_api.py
|
||||
agent/dashboard/user_credentials.py
|
||||
agent/dashboard/user_mappings.py
|
||||
agent/dashboard/workflow_approval.py
|
||||
agent/dashboard/workflow_approval_api.py
|
||||
agent/dispatch.py
|
||||
agent/encryption.py
|
||||
agent/integrations/__init__.py
|
||||
agent/integrations/corridor_mcp.py
|
||||
agent/integrations/currents_tools.py
|
||||
agent/integrations/datadog_mcp.py
|
||||
agent/integrations/daytona.py
|
||||
agent/integrations/e2b.py
|
||||
agent/integrations/langsmith.py
|
||||
agent/integrations/langsmith_tools.py
|
||||
agent/integrations/local.py
|
||||
agent/integrations/modal.py
|
||||
agent/integrations/notion_mcp.py
|
||||
agent/integrations/runloop.py
|
||||
agent/middleware/__init__.py
|
||||
agent/middleware/check_message_queue.py
|
||||
agent/middleware/ensure_no_empty_msg.py
|
||||
agent/middleware/exclude_tools.py
|
||||
agent/middleware/model_fallback.py
|
||||
agent/middleware/notify_step_limit.py
|
||||
agent/middleware/plan_mode.py
|
||||
agent/middleware/pr_creation_guard.py
|
||||
agent/middleware/refresh_github_proxy.py
|
||||
agent/middleware/refresh_slack_status.py
|
||||
agent/middleware/repair_orphaned_tool_calls.py
|
||||
agent/middleware/sandbox_circuit_breaker.py
|
||||
agent/middleware/sanitize_fireworks_messages.py
|
||||
agent/middleware/sanitize_openai_responses.py
|
||||
agent/middleware/sanitize_thinking_blocks.py
|
||||
agent/middleware/sanitize_tool_inputs.py
|
||||
agent/middleware/settle_review_check.py
|
||||
agent/middleware/subdir_agents.py
|
||||
agent/middleware/task_retry.py
|
||||
agent/middleware/timeout_wrapup.py
|
||||
agent/middleware/tool_artifact.py
|
||||
agent/middleware/tool_error_handler.py
|
||||
agent/middleware/workflow_push_guard.py
|
||||
agent/prompt.py
|
||||
agent/reconcile.py
|
||||
agent/review_style_collector.py
|
||||
agent/review_style_guidance.py
|
||||
agent/reviewer.py
|
||||
agent/reviewer_diff.py
|
||||
agent/reviewer_eval_store.py
|
||||
agent/reviewer_findings.py
|
||||
agent/reviewer_groups.py
|
||||
agent/reviewer_publish.py
|
||||
agent/reviewer_reconcile.py
|
||||
agent/reviewer_trace_context.py
|
||||
agent/scheduler.py
|
||||
agent/server.py
|
||||
agent/skills/bootstrap-repo-analysis/SKILL.md
|
||||
agent/skills/continual-learning/SKILL.md
|
||||
agent/tools/__init__.py
|
||||
agent/tools/add_finding.py
|
||||
agent/tools/confluence_comment.py
|
||||
agent/tools/confluence_create_page.py
|
||||
agent/tools/confluence_get_page.py
|
||||
agent/tools/confluence_search.py
|
||||
agent/tools/confluence_update_page.py
|
||||
agent/tools/enter_plan_mode.py
|
||||
agent/tools/fetch_url.py
|
||||
agent/tools/http_request.py
|
||||
agent/tools/jira_comment.py
|
||||
agent/tools/jira_create_issue.py
|
||||
agent/tools/jira_get_issue.py
|
||||
agent/tools/jira_get_issue_comments.py
|
||||
agent/tools/jira_list_projects.py
|
||||
agent/tools/jira_update_issue.py
|
||||
agent/tools/linear_comment.py
|
||||
agent/tools/linear_create_issue.py
|
||||
agent/tools/linear_delete_issue.py
|
||||
agent/tools/linear_get_issue.py
|
||||
agent/tools/linear_get_issue_comments.py
|
||||
agent/tools/linear_list_teams.py
|
||||
agent/tools/linear_update_issue.py
|
||||
agent/tools/list_findings.py
|
||||
agent/tools/list_review_findings.py
|
||||
agent/tools/open_pull_request.py
|
||||
agent/tools/publish_review.py
|
||||
agent/tools/read_finding_outcomes.py
|
||||
agent/tools/read_repo_file.py
|
||||
agent/tools/reply_to_finding_thread.py
|
||||
agent/tools/report_platform_issue.py
|
||||
agent/tools/request_pr_review.py
|
||||
agent/tools/resolve_finding_thread.py
|
||||
agent/tools/save_plan.py
|
||||
agent/tools/save_review_style.py
|
||||
agent/tools/schedule_thread_wakeup.py
|
||||
agent/tools/search_repo_code.py
|
||||
agent/tools/slack_add_reaction.py
|
||||
agent/tools/slack_read_thread_messages.py
|
||||
agent/tools/slack_start_new_thread.py
|
||||
agent/tools/slack_thread_reply.py
|
||||
agent/tools/update_finding.py
|
||||
agent/tools/web_search.py
|
||||
agent/utils/adf.py
|
||||
agent/utils/agents_md.py
|
||||
agent/utils/analyzer_skills.py
|
||||
agent/utils/api_standards_skill.py
|
||||
agent/utils/atlassian_connect.py
|
||||
agent/utils/auth.py
|
||||
agent/utils/authorship.py
|
||||
agent/utils/comments.py
|
||||
agent/utils/confluence.py
|
||||
agent/utils/confluence_space_repo_map.py
|
||||
agent/utils/dashboard_handoff.py
|
||||
agent/utils/dashboard_links.py
|
||||
agent/utils/deferred_model.py
|
||||
agent/utils/gateway.py
|
||||
agent/utils/github_app.py
|
||||
agent/utils/github_checks.py
|
||||
agent/utils/github_ci.py
|
||||
agent/utils/github_comments.py
|
||||
agent/utils/github_feedback.py
|
||||
agent/utils/github_http.py
|
||||
agent/utils/github_org_membership.py
|
||||
agent/utils/github_proxy.py
|
||||
agent/utils/github_token.py
|
||||
agent/utils/http.py
|
||||
agent/utils/jira.py
|
||||
agent/utils/jira_project_repo_map.py
|
||||
agent/utils/langsmith.py
|
||||
agent/utils/linear.py
|
||||
agent/utils/linear_team_repo_map.py
|
||||
agent/utils/model.py
|
||||
agent/utils/multimodal.py
|
||||
agent/utils/repo.py
|
||||
agent/utils/repo_prep.py
|
||||
agent/utils/reviewer_outcomes.py
|
||||
agent/utils/sandbox.py
|
||||
agent/utils/sandbox_paths.py
|
||||
agent/utils/sandbox_state.py
|
||||
agent/utils/slack.py
|
||||
agent/utils/slack_feedback.py
|
||||
agent/utils/thread_ids.py
|
||||
agent/utils/thread_ops.py
|
||||
agent/utils/tracing.py
|
||||
agent/utils/url_safety.py
|
||||
agent/webapp.py
|
||||
agent/webhooks/__init__.py
|
||||
agent/webhooks/confluence.py
|
||||
agent/webhooks/github.py
|
||||
agent/webhooks/jira.py
|
||||
agent/webhooks/linear.py
|
||||
agent/webhooks/slack.py
|
||||
default_prompt.md
|
||||
deploy/MIGRATION.md
|
||||
docs/repo-conventions/AGENTS.md.aws
|
||||
docs/repo-conventions/AGENTS.md.cdk
|
||||
docs/repo-conventions/AGENTS.md.ec2
|
||||
docs/repo-conventions/AGENTS.md.sam
|
||||
docs/repo-conventions/README.md
|
||||
docs/upstream-sync/cherry-pick-hook-plan.md
|
||||
docs/upstream-sync/cherry-pick-runbook.md
|
||||
docs/upstream-sync/triage.jsonl
|
||||
docs/upstream-sync/triage.md
|
||||
evals/reviewer/README.md
|
||||
evals/reviewer/build_dataset.py
|
||||
evals/reviewer/config.toml
|
||||
evals/reviewer/golden_comments/cal_dot_com.json
|
||||
evals/reviewer/golden_comments/discourse.json
|
||||
evals/reviewer/golden_comments/grafana.json
|
||||
evals/reviewer/golden_comments/keycloak.json
|
||||
evals/reviewer/golden_comments/sentry.json
|
||||
evals/reviewer/judge.py
|
||||
evals/reviewer/run_eval.py
|
||||
evals/reviewer/store_reporter.py
|
||||
evals/reviewer/target.py
|
||||
langgraph.json
|
||||
package.json
|
||||
pyproject.toml
|
||||
scripts/__init__.py
|
||||
scripts/check_pr_merge_status.py
|
||||
scripts/create_sandbox_snapshot.py
|
||||
scripts/git-cp
|
||||
scripts/install-hooks.sh
|
||||
scripts/list_snapshots.py
|
||||
scripts/purge_wakeup_crons.py
|
||||
scripts/triage.py
|
||||
static/dark.svg
|
||||
static/light.svg
|
||||
tests/conftest.py
|
||||
tests/e2e/.gitignore
|
||||
tests/e2e/README.md
|
||||
tests/e2e/agent_entrypoint.py
|
||||
tests/e2e/dev-mock.sh
|
||||
tests/e2e/e2e_env.py
|
||||
tests/e2e/fake_llm.py
|
||||
tests/e2e/fakes.py
|
||||
tests/e2e/global-setup.ts
|
||||
tests/e2e/harness.py
|
||||
tests/e2e/langgraph.e2e.json
|
||||
tests/e2e/package-lock.json
|
||||
tests/e2e/package.json
|
||||
tests/e2e/patches.py
|
||||
tests/e2e/playwright.config.ts
|
||||
tests/e2e/screenshots/queued-messages-dashboard.png
|
||||
tests/e2e/static/github.html
|
||||
tests/e2e/static/slack.html
|
||||
tests/e2e/tests/dashboard.spec.ts
|
||||
tests/e2e/tests/full_flow.spec.ts
|
||||
tests/e2e/tests/plan_review.spec.ts
|
||||
tests/e2e/tests/sandbox_id.spec.ts
|
||||
tests/middleware/test_sandbox_recovery.py
|
||||
tests/test_account_link.py
|
||||
tests/test_agent_assembly_context.py
|
||||
tests/test_agent_instructions.py
|
||||
tests/test_agent_schedules.py
|
||||
tests/test_agent_subagent_models.py
|
||||
tests/test_agent_thread_pr_state.py
|
||||
tests/test_agent_usage.py
|
||||
tests/test_agents_md.py
|
||||
tests/test_analyzer_cron.py
|
||||
tests/test_analyzer_skills.py
|
||||
tests/test_anthropic_effort.py
|
||||
tests/test_anthropic_model.py
|
||||
tests/test_api_standards_skill.py
|
||||
tests/test_app_bot_identity.py
|
||||
tests/test_atlassian_connect.py
|
||||
tests/test_auth_error_leak.py
|
||||
tests/test_auth_sources.py
|
||||
tests/test_authorship.py
|
||||
tests/test_autofix_state.py
|
||||
tests/test_autofix_webhook.py
|
||||
tests/test_check_message_queue.py
|
||||
tests/test_ci_autofix.py
|
||||
tests/test_completion_webhook.py
|
||||
tests/test_confluence_utils.py
|
||||
tests/test_confluence_webhook.py
|
||||
tests/test_corridor_mcp.py
|
||||
tests/test_currents_tools.py
|
||||
tests/test_dashboard_admin.py
|
||||
tests/test_dashboard_csrf.py
|
||||
tests/test_dashboard_links.py
|
||||
tests/test_dashboard_oauth_redirect.py
|
||||
tests/test_dashboard_org_login_gate.py
|
||||
tests/test_dashboard_repo_optional.py
|
||||
tests/test_dashboard_repos.py
|
||||
tests/test_dashboard_reviews.py
|
||||
tests/test_dashboard_run_email.py
|
||||
tests/test_dashboard_thread_api.py
|
||||
tests/test_dashboard_thread_api_activity.py
|
||||
tests/test_dashboard_web_handoff.py
|
||||
tests/test_daytona_integration.py
|
||||
tests/test_dispatch.py
|
||||
tests/test_e2b_integration.py
|
||||
tests/test_encryption.py
|
||||
tests/test_ensure_no_empty_msg.py
|
||||
tests/test_eval_jobs.py
|
||||
tests/test_eval_store_reporter.py
|
||||
tests/test_fireworks_model.py
|
||||
tests/test_gateway.py
|
||||
tests/test_github_app.py
|
||||
tests/test_github_checks.py
|
||||
tests/test_github_ci.py
|
||||
tests/test_github_comment_prompts.py
|
||||
tests/test_github_feedback.py
|
||||
tests/test_github_http.py
|
||||
tests/test_github_issue_webhook.py
|
||||
tests/test_github_oauth_refresh.py
|
||||
tests/test_github_proxy_refresh.py
|
||||
tests/test_github_token_ttl.py
|
||||
tests/test_http_security.py
|
||||
tests/test_jira_utils.py
|
||||
tests/test_jira_webhook_author.py
|
||||
tests/test_jira_webhook_corroboration.py
|
||||
tests/test_jira_webhook_replay.py
|
||||
tests/test_langsmith_sandbox_config.py
|
||||
tests/test_langsmith_sandbox_timeout.py
|
||||
tests/test_langsmith_trace_url.py
|
||||
tests/test_linear_webhook_author.py
|
||||
tests/test_linear_webhook_replay.py
|
||||
tests/test_local_integration.py
|
||||
tests/test_model_fallback_middleware.py
|
||||
tests/test_model_fallback_resolution.py
|
||||
tests/test_multimodal.py
|
||||
tests/test_normalize_repo.py
|
||||
tests/test_notify_step_limit_middleware.py
|
||||
tests/test_notion_oauth.py
|
||||
tests/test_observability_tools.py
|
||||
tests/test_open_pull_request.py
|
||||
tests/test_plan_mode.py
|
||||
tests/test_plan_review.py
|
||||
tests/test_pr_creation_guard.py
|
||||
tests/test_pr_ready_auto_review.py
|
||||
tests/test_prompt_default_repo.py
|
||||
tests/test_proxy_auth.py
|
||||
tests/test_public_repo_org_gate.py
|
||||
tests/test_recent_comments.py
|
||||
tests/test_reconcile_sweep.py
|
||||
tests/test_refresh_slack_status_middleware.py
|
||||
tests/test_repair_orphaned_tool_calls.py
|
||||
tests/test_repo_binding_isolation.py
|
||||
tests/test_repo_extraction.py
|
||||
tests/test_repo_prep.py
|
||||
tests/test_repo_snapshots.py
|
||||
tests/test_report_platform_issue_tool.py
|
||||
tests/test_review_api.py
|
||||
tests/test_review_chat.py
|
||||
tests/test_review_style_collector.py
|
||||
tests/test_review_style_sync.py
|
||||
tests/test_review_styles_store.py
|
||||
tests/test_reviewer.py
|
||||
tests/test_reviewer_diff.py
|
||||
tests/test_reviewer_eval_judge.py
|
||||
tests/test_reviewer_eval_run.py
|
||||
tests/test_reviewer_eval_target.py
|
||||
tests/test_reviewer_findings.py
|
||||
tests/test_reviewer_groups.py
|
||||
tests/test_reviewer_outcomes.py
|
||||
tests/test_reviewer_publish.py
|
||||
tests/test_reviewer_reconcile.py
|
||||
tests/test_reviewer_tools.py
|
||||
tests/test_reviewer_trace_context.py
|
||||
tests/test_reviewer_watch.py
|
||||
tests/test_sandbox_paths.py
|
||||
tests/test_sanitize_fireworks_messages.py
|
||||
tests/test_sanitize_openai_responses.py
|
||||
tests/test_sanitize_thinking_blocks.py
|
||||
tests/test_sanitize_tool_inputs.py
|
||||
tests/test_schedule_thread_wakeup.py
|
||||
tests/test_slack_add_reaction_tool.py
|
||||
tests/test_slack_assistants_status.py
|
||||
tests/test_slack_context.py
|
||||
tests/test_slack_feedback.py
|
||||
tests/test_slack_oauth.py
|
||||
tests/test_slack_start_new_thread_tool.py
|
||||
tests/test_slack_thread_reply_tool.py
|
||||
tests/test_slack_webhook_errors.py
|
||||
tests/test_stale_sandbox_creating.py
|
||||
tests/test_subdir_agents_middleware.py
|
||||
tests/test_team_credentials.py
|
||||
tests/test_team_settings_fable.py
|
||||
tests/test_team_settings_grouping.py
|
||||
tests/test_team_settings_org_guidelines.py
|
||||
tests/test_tool_artifact_middleware.py
|
||||
tests/test_user_credentials.py
|
||||
tests/test_user_mappings.py
|
||||
tests/test_workflow_push_guard.py
|
||||
ui/.cta.json
|
||||
ui/.gitignore
|
||||
ui/.prettierignore
|
||||
ui/.prettierrc
|
||||
ui/AGENTS.md
|
||||
ui/README.md
|
||||
ui/assets/LangChain_Symbol_LightBlue.png
|
||||
ui/assets/ic_launcher_round.png
|
||||
ui/assets/playstore-icon.png
|
||||
ui/bun.lock
|
||||
ui/components.json
|
||||
ui/eslint.config.js
|
||||
ui/package.json
|
||||
ui/pnpm-workspace.yaml
|
||||
ui/public/apple-touch-icon.png
|
||||
ui/public/favicon.png
|
||||
ui/public/gh-open-in-open-swe-dark.svg
|
||||
ui/public/gh-open-in-open-swe-light.svg
|
||||
ui/public/logo-mark.png
|
||||
ui/public/logo512.png
|
||||
ui/public/robots.txt
|
||||
ui/src/client.tsx
|
||||
ui/src/components/AgentInstructionsPanel.tsx
|
||||
ui/src/components/AppShell.tsx
|
||||
ui/src/components/AppSidebar.tsx
|
||||
ui/src/components/InstructionsEditor.tsx
|
||||
ui/src/components/PwaUpdateToast.tsx
|
||||
ui/src/components/RepoSnapshotsPanel.tsx
|
||||
ui/src/components/ReviewStylesPanel.tsx
|
||||
ui/src/components/SidebarUserMenu.tsx
|
||||
ui/src/components/agents/AgentGitPanel.tsx
|
||||
ui/src/components/agents/AgentPromptBar.tsx
|
||||
ui/src/components/agents/AgentRunCard.tsx
|
||||
ui/src/components/agents/AgentThreadView.tsx
|
||||
ui/src/components/agents/AgentsHome.tsx
|
||||
ui/src/components/agents/AgentsSidebar.tsx
|
||||
ui/src/components/agents/AgentsThreadsPage.tsx
|
||||
ui/src/components/agents/AutomationEditor.tsx
|
||||
ui/src/components/agents/AutomationTemplates.tsx
|
||||
ui/src/components/agents/AutomationsList.tsx
|
||||
ui/src/components/agents/OnboardingDialog.tsx
|
||||
ui/src/components/agents/PlanReview.tsx
|
||||
ui/src/components/agents/PrHeader.tsx
|
||||
ui/src/components/agents/RepoSelector.tsx
|
||||
ui/src/components/agents/ReviewChat.tsx
|
||||
ui/src/components/agents/ReviewCommentsMenu.tsx
|
||||
ui/src/components/agents/ReviewMainBody.tsx
|
||||
ui/src/components/agents/ReviewSidebar.tsx
|
||||
ui/src/components/agents/ReviewTab.tsx
|
||||
ui/src/components/agents/ScheduleTriggerPicker.tsx
|
||||
ui/src/components/agents/SidebarFilterMenu.tsx
|
||||
ui/src/components/agents/WorkflowApprovalCard.tsx
|
||||
ui/src/components/agents/messages/AgentMessage.tsx
|
||||
ui/src/components/agents/messages/ChunkRenderer.tsx
|
||||
ui/src/components/agents/messages/MessageTimestamp.tsx
|
||||
ui/src/components/agents/messages/Messages.tsx
|
||||
ui/src/components/agents/messages/ReasoningBlock.tsx
|
||||
ui/src/components/agents/messages/ThinkingSpinner.tsx
|
||||
ui/src/components/agents/messages/TurnChangedFilesCard.tsx
|
||||
ui/src/components/agents/messages/UserMessage.tsx
|
||||
ui/src/components/agents/messages/WorkSummary.tsx
|
||||
ui/src/components/agents/messages/index.ts
|
||||
ui/src/components/agents/messages/renderItems.ts
|
||||
ui/src/components/agents/messages/summarizeChangedFiles.ts
|
||||
ui/src/components/agents/messages/types.ts
|
||||
ui/src/components/agents/ported/BranchSelector.tsx
|
||||
ui/src/components/agents/ported/BubblePrefix.tsx
|
||||
ui/src/components/agents/ported/ChatView.tsx
|
||||
ui/src/components/agents/ported/CloudPromptBar.tsx
|
||||
ui/src/components/agents/ported/CodeBlock.tsx
|
||||
ui/src/components/agents/ported/CompactingIndicator.tsx
|
||||
ui/src/components/agents/ported/ContextIndicator.tsx
|
||||
ui/src/components/agents/ported/DiffView.tsx
|
||||
ui/src/components/agents/ported/Footer.tsx
|
||||
ui/src/components/agents/ported/HeaderBar.tsx
|
||||
ui/src/components/agents/ported/Logo.tsx
|
||||
ui/src/components/agents/ported/Markdown.tsx
|
||||
ui/src/components/agents/ported/MarkdownTable.tsx
|
||||
ui/src/components/agents/ported/PanelResizeHandle.tsx
|
||||
ui/src/components/agents/ported/PromptBar.tsx
|
||||
ui/src/components/agents/ported/ReplyCard.tsx
|
||||
ui/src/components/agents/ported/ShellCommand.tsx
|
||||
ui/src/components/agents/ported/SourceControlPanel.tsx
|
||||
ui/src/components/agents/ported/SourceControlTile.tsx
|
||||
ui/src/components/agents/ported/ThreadPicker.tsx
|
||||
ui/src/components/agents/ported/TodoList.tsx
|
||||
ui/src/components/agents/ported/ToolExecution.tsx
|
||||
ui/src/components/agents/ported/index.ts
|
||||
ui/src/components/agents/subagents/SubagentActivity.tsx
|
||||
ui/src/components/agents/subagents/SubagentCard.tsx
|
||||
ui/src/components/agents/subagents/SubagentGroup.tsx
|
||||
ui/src/components/agents/subagents/index.ts
|
||||
ui/src/components/agents/utils/diffStats.ts
|
||||
ui/src/components/agents/utils/diffUtils.test.ts
|
||||
ui/src/components/agents/utils/diffUtils.ts
|
||||
ui/src/components/agents/z-index.ts
|
||||
ui/src/components/sidebar-layout.tsx
|
||||
ui/src/components/ui/avatar.tsx
|
||||
ui/src/components/ui/badge.tsx
|
||||
ui/src/components/ui/button.tsx
|
||||
ui/src/components/ui/card.tsx
|
||||
ui/src/components/ui/combobox.tsx
|
||||
ui/src/components/ui/input-group.tsx
|
||||
ui/src/components/ui/input.tsx
|
||||
ui/src/components/ui/label.tsx
|
||||
ui/src/components/ui/select.tsx
|
||||
ui/src/components/ui/separator.tsx
|
||||
ui/src/components/ui/skeleton.tsx
|
||||
ui/src/components/ui/switch.tsx
|
||||
ui/src/components/ui/textarea.tsx
|
||||
ui/src/lib/agents/AgentThreadStreamProvider.tsx
|
||||
ui/src/lib/agents/api.ts
|
||||
ui/src/lib/agents/automation-templates.ts
|
||||
ui/src/lib/agents/cron.ts
|
||||
ui/src/lib/agents/messageTimestamps.ts
|
||||
ui/src/lib/agents/provider/useIsInAgentThreadStream.tsx
|
||||
ui/src/lib/agents/provider/useLiveMarkdownMessageId.ts
|
||||
ui/src/lib/agents/provider/useModelOptions.ts
|
||||
ui/src/lib/agents/provider/useSubmitAgentMessage.ts
|
||||
ui/src/lib/agents/queries.ts
|
||||
ui/src/lib/agents/sidebarFilter.test.ts
|
||||
ui/src/lib/agents/sidebarFilter.ts
|
||||
ui/src/lib/agents/sidebarPrefs.ts
|
||||
ui/src/lib/agents/streamMessagesToUi.ts
|
||||
ui/src/lib/agents/types.ts
|
||||
ui/src/lib/agents/useRunCompletionNotifier.ts
|
||||
ui/src/lib/api.ts
|
||||
ui/src/lib/auth-redirect-core.ts
|
||||
ui/src/lib/auth-redirect.test.ts
|
||||
ui/src/lib/auth-redirect.tsx
|
||||
ui/src/lib/hotkeys.ts
|
||||
ui/src/lib/notifications.ts
|
||||
ui/src/lib/plan.ts
|
||||
ui/src/lib/profile.ts
|
||||
ui/src/lib/query.ts
|
||||
ui/src/lib/repo.test.ts
|
||||
ui/src/lib/repo.ts
|
||||
ui/src/lib/reviewImage.test.ts
|
||||
ui/src/lib/session.ts
|
||||
ui/src/lib/theme.ts
|
||||
ui/src/lib/useIsMobile.ts
|
||||
ui/src/lib/utils.ts
|
||||
ui/src/logo.svg
|
||||
ui/src/routeTree.gen.ts
|
||||
ui/src/router.tsx
|
||||
ui/src/routes/$owner.$repo.pull.$number.tsx
|
||||
ui/src/routes/__root.tsx
|
||||
ui/src/routes/admin.tsx
|
||||
ui/src/routes/admin_.evals.tsx
|
||||
ui/src/routes/agents.tsx
|
||||
ui/src/routes/agents/$threadId.tsx
|
||||
ui/src/routes/agents/$threadId_.plan.tsx
|
||||
ui/src/routes/agents/automations/$scheduleId.tsx
|
||||
ui/src/routes/agents/automations/index.tsx
|
||||
ui/src/routes/agents/automations/new.tsx
|
||||
ui/src/routes/agents/index.tsx
|
||||
ui/src/routes/agents/reviews/$owner.$repo.$number.tsx
|
||||
ui/src/routes/agents/reviews/index.tsx
|
||||
ui/src/routes/agents/threads.tsx
|
||||
ui/src/routes/agents_.instructions.tsx
|
||||
ui/src/routes/agents_.snapshots.tsx
|
||||
ui/src/routes/cloud-agents.tsx
|
||||
ui/src/routes/index.tsx
|
||||
ui/src/routes/integrations.tsx
|
||||
ui/src/routes/login.tsx
|
||||
ui/src/routes/my-settings.tsx
|
||||
ui/src/routes/review.tsx
|
||||
ui/src/routes/review_.repositories.$owner.tsx
|
||||
ui/src/routes/review_.styles.tsx
|
||||
ui/src/routes/usage.tsx
|
||||
ui/src/styles.css
|
||||
ui/src/styles/agents.css
|
||||
ui/tsconfig.json
|
||||
ui/vercel.json
|
||||
ui/vite.config.ts
|
||||
uv.lock
|
||||
435
docs/upstream-sync/domain-reorg/merge-tree-now.txt
Normal file
435
docs/upstream-sync/domain-reorg/merge-tree-now.txt
Normal file
|
|
@ -0,0 +1,435 @@
|
|||
2e93de8920fab3ba052901838106fa250708e1f0
|
||||
.github/workflows/ci.yml
|
||||
.github/workflows/promote_main_to_prod.yml
|
||||
.github/workflows/reviewer-eval.yml
|
||||
AGENTS.md
|
||||
CLAUDE.md
|
||||
Dockerfile
|
||||
Makefile
|
||||
README.md
|
||||
agent/analyzer.py
|
||||
agent/chat.py
|
||||
agent/ci_autofix.py
|
||||
agent/completion.py
|
||||
agent/dashboard/__init__.py
|
||||
agent/dashboard/eval_jobs.py
|
||||
agent/dashboard/options.py
|
||||
agent/dashboard/plan_api.py
|
||||
agent/dashboard/review_api.py
|
||||
agent/dashboard/review_chat_api.py
|
||||
agent/dashboard/schedules.py
|
||||
agent/dashboard/team_settings.py
|
||||
agent/dashboard/thread_api.py
|
||||
agent/dashboard/workflow_approval.py
|
||||
agent/dashboard/workflow_approval_api.py
|
||||
agent/dispatch.py
|
||||
agent/middleware/__init__.py
|
||||
agent/middleware/ensure_no_empty_msg.py
|
||||
agent/middleware/model_fallback.py
|
||||
agent/middleware/pr_creation_guard.py
|
||||
agent/middleware/sanitize_fireworks_messages.py
|
||||
agent/middleware/subdir_agents.py
|
||||
agent/middleware/timeout_wrapup.py
|
||||
agent/middleware/workflow_push_guard.py
|
||||
agent/prompt.py
|
||||
agent/review/findings.py
|
||||
agent/reviewer.py
|
||||
agent/server.py
|
||||
agent/tools/__init__.py
|
||||
agent/tools/add_finding.py
|
||||
agent/tools/fetch_url.py
|
||||
agent/tools/http_request.py
|
||||
agent/tools/open_pull_request.py
|
||||
agent/tools/publish_review.py
|
||||
agent/tools/request_pr_review.py
|
||||
agent/tools/slack_start_new_thread.py
|
||||
agent/tools/slack_thread_reply.py
|
||||
agent/tools/update_finding.py
|
||||
agent/tools/web_search.py
|
||||
agent/utils/analyzer_skills.py
|
||||
agent/utils/auth.py
|
||||
agent/utils/deferred_model.py
|
||||
agent/utils/gateway.py
|
||||
agent/utils/github_app.py
|
||||
agent/utils/github_proxy.py
|
||||
agent/utils/github_token.py
|
||||
agent/utils/model.py
|
||||
agent/utils/multimodal.py
|
||||
agent/utils/sandbox.py
|
||||
agent/utils/sandbox_state.py
|
||||
agent/utils/slack.py
|
||||
agent/utils/url_safety.py
|
||||
agent/webapp.py
|
||||
agent/webhooks/github.py
|
||||
agent/webhooks/linear.py
|
||||
agent/webhooks/slack.py
|
||||
docs/INSTALLATION.md
|
||||
evals/reviewer/config.toml
|
||||
evals/reviewer/judge.py
|
||||
evals/reviewer/run_eval.py
|
||||
evals/reviewer/target.py
|
||||
pyproject.toml
|
||||
tests/auth/test_auth_sources.py
|
||||
tests/auth/test_github_token_ttl.py
|
||||
tests/conftest.py
|
||||
tests/dashboard/test_dashboard_thread_api.py
|
||||
tests/dashboard/test_dashboard_web_handoff.py
|
||||
tests/dashboard/test_team_settings_grouping.py
|
||||
tests/dashboard/test_team_settings_org_guidelines.py
|
||||
tests/e2e/fake_llm.py
|
||||
tests/e2e/harness.py
|
||||
tests/e2e/tests/dashboard.spec.ts
|
||||
tests/e2e/tests/full_flow.spec.ts
|
||||
tests/github/test_github_comment_prompts.py
|
||||
tests/github/test_github_issue_webhook.py
|
||||
tests/github/test_open_pull_request.py
|
||||
tests/middleware/test_model_fallback_middleware.py
|
||||
tests/middleware/test_sanitize_thinking_blocks.py
|
||||
tests/models/test_agent_subagent_models.py
|
||||
tests/models/test_google_model.py
|
||||
tests/reviewer/test_pr_ready_auto_review.py
|
||||
tests/reviewer/test_reviewer.py
|
||||
tests/reviewer/test_reviewer_findings.py
|
||||
tests/reviewer/test_reviewer_publish.py
|
||||
tests/reviewer/test_reviewer_tools.py
|
||||
tests/reviewer/test_reviewer_watch.py
|
||||
tests/sandbox/test_local_integration.py
|
||||
tests/sandbox/test_proxy_auth.py
|
||||
tests/slack/test_slack_context.py
|
||||
tests/slack/test_slack_thread_reply_tool.py
|
||||
tests/test_autofix_webhook.py
|
||||
tests/test_ci_autofix.py
|
||||
tests/test_http_security.py
|
||||
tests/test_model_fallback_resolution.py
|
||||
tests/test_plan_review.py
|
||||
ui/AGENTS.md
|
||||
ui/bun.lock
|
||||
ui/package.json
|
||||
ui/src/client.tsx
|
||||
ui/src/components/agents/PlanReview.tsx
|
||||
ui/src/features/agents/components/AgentGitPanel.tsx
|
||||
ui/src/features/agents/components/AgentThreadView.tsx
|
||||
ui/src/features/agents/components/AgentsSidebar.tsx
|
||||
ui/src/features/agents/components/PrHeader.tsx
|
||||
ui/src/features/agents/components/SidebarFilterMenu.tsx
|
||||
ui/src/features/agents/components/WorkflowApprovalCard.tsx
|
||||
ui/src/features/agents/components/messages/AgentMessage.tsx
|
||||
ui/src/features/agents/components/messages/MessageTimestamp.tsx
|
||||
ui/src/features/agents/components/messages/UserMessage.tsx
|
||||
ui/src/features/agents/components/messages/types.ts
|
||||
ui/src/features/agents/lib/api.ts
|
||||
ui/src/features/agents/lib/messageTimestamps.ts
|
||||
ui/src/features/agents/lib/queries.ts
|
||||
ui/src/features/agents/lib/sidebarFilter.test.ts
|
||||
ui/src/features/agents/lib/sidebarFilter.ts
|
||||
ui/src/features/agents/lib/sidebarPrefs.ts
|
||||
ui/src/features/agents/lib/streamMessagesToUi.ts
|
||||
ui/src/features/agents/lib/types.ts
|
||||
ui/src/features/reviews/components/ReviewMainBody.tsx
|
||||
ui/src/lib/agents/provider/useSubmitAgentMessage.ts
|
||||
ui/src/lib/auth-redirect-core.ts
|
||||
ui/src/lib/auth-redirect.test.ts
|
||||
ui/src/routes/admin.tsx
|
||||
ui/src/routes/agents.tsx
|
||||
ui/src/routes/agents/$threadId_.plan.tsx
|
||||
ui/vercel.json
|
||||
ui/vite.config.ts
|
||||
uv.lock
|
||||
|
||||
Auto-merging .github/workflows/ci.yml
|
||||
CONFLICT (content): Merge conflict in .github/workflows/ci.yml
|
||||
CONFLICT (modify/delete): .github/workflows/promote_main_to_prod.yml deleted in HEAD and modified in upstream/main. Version upstream/main of .github/workflows/promote_main_to_prod.yml left in tree.
|
||||
Auto-merging .github/workflows/reviewer-eval.yml
|
||||
CONFLICT (content): Merge conflict in .github/workflows/reviewer-eval.yml
|
||||
Auto-merging .gitignore
|
||||
Auto-merging AGENTS.md
|
||||
CONFLICT (content): Merge conflict in AGENTS.md
|
||||
Auto-merging CLAUDE.md
|
||||
CONFLICT (content): Merge conflict in CLAUDE.md
|
||||
Auto-merging Dockerfile
|
||||
CONFLICT (content): Merge conflict in Dockerfile
|
||||
Auto-merging Makefile
|
||||
CONFLICT (content): Merge conflict in Makefile
|
||||
Auto-merging README.md
|
||||
CONFLICT (content): Merge conflict in README.md
|
||||
Auto-merging agent/analyzer.py
|
||||
CONFLICT (content): Merge conflict in agent/analyzer.py
|
||||
Auto-merging agent/chat.py
|
||||
CONFLICT (content): Merge conflict in agent/chat.py
|
||||
CONFLICT (modify/delete): agent/ci_autofix.py deleted in upstream/main and modified in HEAD. Version HEAD of agent/ci_autofix.py left in tree.
|
||||
Auto-merging agent/completion.py
|
||||
CONFLICT (add/add): Merge conflict in agent/completion.py
|
||||
Auto-merging agent/dashboard/__init__.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/__init__.py
|
||||
Auto-merging agent/dashboard/eval_jobs.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/eval_jobs.py
|
||||
Auto-merging agent/dashboard/options.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/options.py
|
||||
Auto-merging agent/dashboard/plan_api.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/plan_api.py
|
||||
Auto-merging agent/dashboard/review_api.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/review_api.py
|
||||
Auto-merging agent/dashboard/review_chat_api.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/review_chat_api.py
|
||||
Auto-merging agent/dashboard/routes.py
|
||||
Auto-merging agent/dashboard/schedules.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/schedules.py
|
||||
Auto-merging agent/dashboard/team_settings.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/team_settings.py
|
||||
Auto-merging agent/dashboard/thread_api.py
|
||||
CONFLICT (content): Merge conflict in agent/dashboard/thread_api.py
|
||||
Auto-merging agent/dashboard/workflow_approval.py
|
||||
CONFLICT (add/add): Merge conflict in agent/dashboard/workflow_approval.py
|
||||
Auto-merging agent/dashboard/workflow_approval_api.py
|
||||
CONFLICT (add/add): Merge conflict in agent/dashboard/workflow_approval_api.py
|
||||
Auto-merging agent/dispatch.py
|
||||
CONFLICT (add/add): Merge conflict in agent/dispatch.py
|
||||
Auto-merging agent/middleware/__init__.py
|
||||
CONFLICT (content): Merge conflict in agent/middleware/__init__.py
|
||||
Auto-merging agent/middleware/check_message_queue.py
|
||||
Auto-merging agent/middleware/ensure_no_empty_msg.py
|
||||
CONFLICT (add/add): Merge conflict in agent/middleware/ensure_no_empty_msg.py
|
||||
Auto-merging agent/middleware/model_fallback.py
|
||||
CONFLICT (content): Merge conflict in agent/middleware/model_fallback.py
|
||||
Auto-merging agent/middleware/plan_mode.py
|
||||
Auto-merging agent/middleware/pr_creation_guard.py
|
||||
CONFLICT (add/add): Merge conflict in agent/middleware/pr_creation_guard.py
|
||||
Auto-merging agent/middleware/refresh_slack_status.py
|
||||
Auto-merging agent/middleware/sanitize_fireworks_messages.py
|
||||
CONFLICT (add/add): Merge conflict in agent/middleware/sanitize_fireworks_messages.py
|
||||
Auto-merging agent/middleware/sanitize_thinking_blocks.py
|
||||
Auto-merging agent/middleware/subdir_agents.py
|
||||
CONFLICT (add/add): Merge conflict in agent/middleware/subdir_agents.py
|
||||
Auto-merging agent/middleware/timeout_wrapup.py
|
||||
CONFLICT (add/add): Merge conflict in agent/middleware/timeout_wrapup.py
|
||||
Auto-merging agent/middleware/workflow_push_guard.py
|
||||
CONFLICT (add/add): Merge conflict in agent/middleware/workflow_push_guard.py
|
||||
Auto-merging agent/prompt.py
|
||||
CONFLICT (content): Merge conflict in agent/prompt.py
|
||||
Auto-merging agent/review/findings.py
|
||||
CONFLICT (content): Merge conflict in agent/review/findings.py
|
||||
Auto-merging agent/review/publish.py
|
||||
Auto-merging agent/review/reconcile.py
|
||||
Auto-merging agent/reviewer.py
|
||||
CONFLICT (content): Merge conflict in agent/reviewer.py
|
||||
Auto-merging agent/server.py
|
||||
CONFLICT (content): Merge conflict in agent/server.py
|
||||
Auto-merging agent/tools/__init__.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/__init__.py
|
||||
Auto-merging agent/tools/add_finding.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/add_finding.py
|
||||
Auto-merging agent/tools/fetch_url.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/fetch_url.py
|
||||
Auto-merging agent/tools/http_request.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/http_request.py
|
||||
Auto-merging agent/tools/list_findings.py
|
||||
Auto-merging agent/tools/list_review_findings.py
|
||||
Auto-merging agent/tools/open_pull_request.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/open_pull_request.py
|
||||
Auto-merging agent/tools/publish_review.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/publish_review.py
|
||||
Auto-merging agent/tools/reply_to_finding_thread.py
|
||||
Auto-merging agent/tools/request_pr_review.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/request_pr_review.py
|
||||
Auto-merging agent/tools/resolve_finding_thread.py
|
||||
Auto-merging agent/tools/schedule_thread_wakeup.py
|
||||
Auto-merging agent/tools/slack_read_thread_messages.py
|
||||
Auto-merging agent/tools/slack_start_new_thread.py
|
||||
CONFLICT (add/add): Merge conflict in agent/tools/slack_start_new_thread.py
|
||||
Auto-merging agent/tools/slack_thread_reply.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/slack_thread_reply.py
|
||||
Auto-merging agent/tools/update_finding.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/update_finding.py
|
||||
Auto-merging agent/tools/web_search.py
|
||||
CONFLICT (content): Merge conflict in agent/tools/web_search.py
|
||||
Auto-merging agent/utils/analyzer_skills.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/analyzer_skills.py
|
||||
Auto-merging agent/utils/auth.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/auth.py
|
||||
Auto-merging agent/utils/deferred_model.py
|
||||
CONFLICT (add/add): Merge conflict in agent/utils/deferred_model.py
|
||||
Auto-merging agent/utils/gateway.py
|
||||
CONFLICT (add/add): Merge conflict in agent/utils/gateway.py
|
||||
Auto-merging agent/utils/github_app.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/github_app.py
|
||||
Auto-merging agent/utils/github_comments.py
|
||||
Auto-merging agent/utils/github_org_membership.py
|
||||
Auto-merging agent/utils/github_proxy.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/github_proxy.py
|
||||
Auto-merging agent/utils/github_token.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/github_token.py
|
||||
Auto-merging agent/utils/linear.py
|
||||
Auto-merging agent/utils/model.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/model.py
|
||||
Auto-merging agent/utils/multimodal.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/multimodal.py
|
||||
Auto-merging agent/utils/sandbox.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/sandbox.py
|
||||
Auto-merging agent/utils/sandbox_state.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/sandbox_state.py
|
||||
Auto-merging agent/utils/slack.py
|
||||
CONFLICT (content): Merge conflict in agent/utils/slack.py
|
||||
Auto-merging agent/utils/url_safety.py
|
||||
CONFLICT (add/add): Merge conflict in agent/utils/url_safety.py
|
||||
Auto-merging agent/webapp.py
|
||||
CONFLICT (content): Merge conflict in agent/webapp.py
|
||||
Auto-merging agent/webhooks/github.py
|
||||
CONFLICT (add/add): Merge conflict in agent/webhooks/github.py
|
||||
Auto-merging agent/webhooks/linear.py
|
||||
CONFLICT (add/add): Merge conflict in agent/webhooks/linear.py
|
||||
Auto-merging agent/webhooks/slack.py
|
||||
CONFLICT (add/add): Merge conflict in agent/webhooks/slack.py
|
||||
Auto-merging docs/CUSTOMIZATION.md
|
||||
Auto-merging docs/INSTALLATION.md
|
||||
CONFLICT (content): Merge conflict in docs/INSTALLATION.md
|
||||
Auto-merging evals/reviewer/README.md
|
||||
Auto-merging evals/reviewer/config.toml
|
||||
CONFLICT (content): Merge conflict in evals/reviewer/config.toml
|
||||
Auto-merging evals/reviewer/judge.py
|
||||
CONFLICT (content): Merge conflict in evals/reviewer/judge.py
|
||||
Auto-merging evals/reviewer/run_eval.py
|
||||
CONFLICT (content): Merge conflict in evals/reviewer/run_eval.py
|
||||
Auto-merging evals/reviewer/target.py
|
||||
CONFLICT (content): Merge conflict in evals/reviewer/target.py
|
||||
Auto-merging pyproject.toml
|
||||
CONFLICT (content): Merge conflict in pyproject.toml
|
||||
Auto-merging tests/agent/test_agent_schedules.py
|
||||
Auto-merging tests/agent/test_plan_mode.py
|
||||
Auto-merging tests/auth/test_auth_sources.py
|
||||
CONFLICT (content): Merge conflict in tests/auth/test_auth_sources.py
|
||||
Auto-merging tests/auth/test_github_token_ttl.py
|
||||
CONFLICT (content): Merge conflict in tests/auth/test_github_token_ttl.py
|
||||
Auto-merging tests/conftest.py
|
||||
CONFLICT (content): Merge conflict in tests/conftest.py
|
||||
Auto-merging tests/dashboard/test_dashboard_thread_api.py
|
||||
CONFLICT (content): Merge conflict in tests/dashboard/test_dashboard_thread_api.py
|
||||
Auto-merging tests/dashboard/test_dashboard_web_handoff.py
|
||||
CONFLICT (content): Merge conflict in tests/dashboard/test_dashboard_web_handoff.py
|
||||
Auto-merging tests/dashboard/test_team_settings_grouping.py
|
||||
CONFLICT (content): Merge conflict in tests/dashboard/test_team_settings_grouping.py
|
||||
Auto-merging tests/dashboard/test_team_settings_org_guidelines.py
|
||||
CONFLICT (content): Merge conflict in tests/dashboard/test_team_settings_org_guidelines.py
|
||||
Auto-merging tests/e2e/fake_llm.py
|
||||
CONFLICT (content): Merge conflict in tests/e2e/fake_llm.py
|
||||
Auto-merging tests/e2e/harness.py
|
||||
CONFLICT (content): Merge conflict in tests/e2e/harness.py
|
||||
Auto-merging tests/e2e/patches.py
|
||||
Auto-merging tests/e2e/tests/dashboard.spec.ts
|
||||
CONFLICT (content): Merge conflict in tests/e2e/tests/dashboard.spec.ts
|
||||
Auto-merging tests/e2e/tests/full_flow.spec.ts
|
||||
CONFLICT (content): Merge conflict in tests/e2e/tests/full_flow.spec.ts
|
||||
Auto-merging tests/e2e/tests/plan_review.spec.ts
|
||||
Auto-merging tests/github/test_github_app.py
|
||||
Auto-merging tests/github/test_github_comment_prompts.py
|
||||
CONFLICT (content): Merge conflict in tests/github/test_github_comment_prompts.py
|
||||
Auto-merging tests/github/test_github_issue_webhook.py
|
||||
CONFLICT (content): Merge conflict in tests/github/test_github_issue_webhook.py
|
||||
Auto-merging tests/github/test_github_proxy_refresh.py
|
||||
Auto-merging tests/github/test_open_pull_request.py
|
||||
CONFLICT (content): Merge conflict in tests/github/test_open_pull_request.py
|
||||
Auto-merging tests/middleware/test_model_fallback_middleware.py
|
||||
CONFLICT (content): Merge conflict in tests/middleware/test_model_fallback_middleware.py
|
||||
Auto-merging tests/middleware/test_sanitize_thinking_blocks.py
|
||||
CONFLICT (content): Merge conflict in tests/middleware/test_sanitize_thinking_blocks.py
|
||||
Auto-merging tests/models/test_agent_subagent_models.py
|
||||
CONFLICT (content): Merge conflict in tests/models/test_agent_subagent_models.py
|
||||
Auto-merging tests/models/test_fireworks_model.py
|
||||
CONFLICT (rename/delete): tests/test_google_model.py renamed to tests/models/test_google_model.py in upstream/main, but deleted in HEAD.
|
||||
CONFLICT (modify/delete): tests/models/test_google_model.py deleted in HEAD and modified in upstream/main. Version upstream/main of tests/models/test_google_model.py left in tree.
|
||||
Auto-merging tests/reviewer/test_pr_ready_auto_review.py
|
||||
CONFLICT (content): Merge conflict in tests/reviewer/test_pr_ready_auto_review.py
|
||||
Auto-merging tests/reviewer/test_review_chat.py
|
||||
Auto-merging tests/reviewer/test_reviewer.py
|
||||
CONFLICT (content): Merge conflict in tests/reviewer/test_reviewer.py
|
||||
Auto-merging tests/reviewer/test_reviewer_eval_target.py
|
||||
Auto-merging tests/reviewer/test_reviewer_findings.py
|
||||
CONFLICT (content): Merge conflict in tests/reviewer/test_reviewer_findings.py
|
||||
Auto-merging tests/reviewer/test_reviewer_publish.py
|
||||
CONFLICT (content): Merge conflict in tests/reviewer/test_reviewer_publish.py
|
||||
Auto-merging tests/reviewer/test_reviewer_reconcile.py
|
||||
Auto-merging tests/reviewer/test_reviewer_tools.py
|
||||
CONFLICT (content): Merge conflict in tests/reviewer/test_reviewer_tools.py
|
||||
Auto-merging tests/reviewer/test_reviewer_watch.py
|
||||
CONFLICT (content): Merge conflict in tests/reviewer/test_reviewer_watch.py
|
||||
Auto-merging tests/sandbox/test_local_integration.py
|
||||
CONFLICT (content): Merge conflict in tests/sandbox/test_local_integration.py
|
||||
Auto-merging tests/sandbox/test_proxy_auth.py
|
||||
CONFLICT (content): Merge conflict in tests/sandbox/test_proxy_auth.py
|
||||
Auto-merging tests/slack/test_slack_assistants_status.py
|
||||
Auto-merging tests/slack/test_slack_context.py
|
||||
CONFLICT (content): Merge conflict in tests/slack/test_slack_context.py
|
||||
Auto-merging tests/slack/test_slack_thread_reply_tool.py
|
||||
CONFLICT (content): Merge conflict in tests/slack/test_slack_thread_reply_tool.py
|
||||
CONFLICT (modify/delete): tests/test_autofix_webhook.py deleted in upstream/main and modified in HEAD. Version HEAD of tests/test_autofix_webhook.py left in tree.
|
||||
CONFLICT (modify/delete): tests/test_ci_autofix.py deleted in upstream/main and modified in HEAD. Version HEAD of tests/test_ci_autofix.py left in tree.
|
||||
CONFLICT (modify/delete): tests/test_http_security.py deleted in upstream/main and modified in HEAD. Version HEAD of tests/test_http_security.py left in tree.
|
||||
CONFLICT (modify/delete): tests/test_model_fallback_resolution.py deleted in upstream/main and modified in HEAD. Version HEAD of tests/test_model_fallback_resolution.py left in tree.
|
||||
CONFLICT (modify/delete): tests/test_plan_review.py deleted in upstream/main and modified in HEAD. Version HEAD of tests/test_plan_review.py left in tree.
|
||||
Auto-merging tests/tools/test_corridor_mcp.py
|
||||
Auto-merging ui/AGENTS.md
|
||||
CONFLICT (add/add): Merge conflict in ui/AGENTS.md
|
||||
CONFLICT (modify/delete): ui/bun.lock deleted in upstream/main and modified in HEAD. Version HEAD of ui/bun.lock left in tree.
|
||||
Auto-merging ui/package.json
|
||||
CONFLICT (content): Merge conflict in ui/package.json
|
||||
Auto-merging ui/src/client.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/client.tsx
|
||||
CONFLICT (modify/delete): ui/src/components/agents/PlanReview.tsx deleted in upstream/main and modified in HEAD. Version HEAD of ui/src/components/agents/PlanReview.tsx left in tree.
|
||||
Auto-merging ui/src/features/agents/components/AgentGitPanel.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/components/AgentGitPanel.tsx
|
||||
Auto-merging ui/src/features/agents/components/AgentThreadView.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/components/AgentThreadView.tsx
|
||||
Auto-merging ui/src/features/agents/components/AgentsSidebar.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/components/AgentsSidebar.tsx
|
||||
CONFLICT (file location): ui/src/components/agents/PrHeader.tsx added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/components/PrHeader.tsx.
|
||||
CONFLICT (file location): ui/src/components/agents/SidebarFilterMenu.tsx added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/components/SidebarFilterMenu.tsx.
|
||||
Auto-merging ui/src/features/agents/components/SidebarFilterMenu.tsx
|
||||
CONFLICT (add/add): Merge conflict in ui/src/features/agents/components/SidebarFilterMenu.tsx
|
||||
CONFLICT (file location): ui/src/components/agents/WorkflowApprovalCard.tsx added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/components/WorkflowApprovalCard.tsx.
|
||||
Auto-merging ui/src/features/agents/components/WorkflowApprovalCard.tsx
|
||||
CONFLICT (add/add): Merge conflict in ui/src/features/agents/components/WorkflowApprovalCard.tsx
|
||||
Auto-merging ui/src/features/agents/components/messages/AgentMessage.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/components/messages/AgentMessage.tsx
|
||||
CONFLICT (file location): ui/src/components/agents/messages/MessageTimestamp.tsx added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/components/messages/MessageTimestamp.tsx.
|
||||
Auto-merging ui/src/features/agents/components/messages/Messages.tsx
|
||||
Auto-merging ui/src/features/agents/components/messages/UserMessage.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/components/messages/UserMessage.tsx
|
||||
Auto-merging ui/src/features/agents/components/messages/types.ts
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/components/messages/types.ts
|
||||
Auto-merging ui/src/features/agents/lib/api.ts
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/lib/api.ts
|
||||
CONFLICT (file location): ui/src/lib/agents/messageTimestamps.ts added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/lib/messageTimestamps.ts.
|
||||
Auto-merging ui/src/features/agents/lib/queries.ts
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/lib/queries.ts
|
||||
CONFLICT (file location): ui/src/lib/agents/sidebarFilter.test.ts added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/lib/sidebarFilter.test.ts.
|
||||
CONFLICT (file location): ui/src/lib/agents/sidebarFilter.ts added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/lib/sidebarFilter.ts.
|
||||
CONFLICT (file location): ui/src/lib/agents/sidebarPrefs.ts added in HEAD inside a directory that was renamed in upstream/main, suggesting it should perhaps be moved to ui/src/features/agents/lib/sidebarPrefs.ts.
|
||||
Auto-merging ui/src/features/agents/lib/sidebarPrefs.ts
|
||||
CONFLICT (add/add): Merge conflict in ui/src/features/agents/lib/sidebarPrefs.ts
|
||||
Auto-merging ui/src/features/agents/lib/streamMessagesToUi.ts
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/lib/streamMessagesToUi.ts
|
||||
Auto-merging ui/src/features/agents/lib/types.ts
|
||||
CONFLICT (content): Merge conflict in ui/src/features/agents/lib/types.ts
|
||||
Auto-merging ui/src/features/automations/components/AutomationEditor.tsx
|
||||
Auto-merging ui/src/features/reviews/components/ReviewMainBody.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/features/reviews/components/ReviewMainBody.tsx
|
||||
Auto-merging ui/src/features/reviews/components/ReviewSidebar.tsx
|
||||
CONFLICT (modify/delete): ui/src/lib/agents/provider/useSubmitAgentMessage.ts deleted in upstream/main and modified in HEAD. Version HEAD of ui/src/lib/agents/provider/useSubmitAgentMessage.ts left in tree.
|
||||
Auto-merging ui/src/lib/api.ts
|
||||
Auto-merging ui/src/lib/auth-redirect-core.ts
|
||||
CONFLICT (add/add): Merge conflict in ui/src/lib/auth-redirect-core.ts
|
||||
Auto-merging ui/src/lib/auth-redirect.test.ts
|
||||
CONFLICT (add/add): Merge conflict in ui/src/lib/auth-redirect.test.ts
|
||||
Auto-merging ui/src/routes/admin.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/routes/admin.tsx
|
||||
Auto-merging ui/src/routes/agents.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/routes/agents.tsx
|
||||
Auto-merging ui/src/routes/agents/$threadId_.plan.tsx
|
||||
CONFLICT (content): Merge conflict in ui/src/routes/agents/$threadId_.plan.tsx
|
||||
Auto-merging ui/src/routes/agents/reviews/$owner.$repo.$number.tsx
|
||||
Auto-merging ui/src/routes/cloud-agents.tsx
|
||||
Auto-merging ui/vercel.json
|
||||
CONFLICT (content): Merge conflict in ui/vercel.json
|
||||
Auto-merging ui/vite.config.ts
|
||||
CONFLICT (content): Merge conflict in ui/vite.config.ts
|
||||
Auto-merging uv.lock
|
||||
CONFLICT (content): Merge conflict in uv.lock
|
||||
298
docs/upstream-sync/domain-reorg/movemap-m50.txt
Normal file
298
docs/upstream-sync/domain-reorg/movemap-m50.txt
Normal file
|
|
@ -0,0 +1,298 @@
|
|||
M AGENTS.md
|
||||
M CLAUDE.md
|
||||
M README.md
|
||||
M agent/analyzer.py
|
||||
A agent/api/__init__.py
|
||||
A agent/api/app.py
|
||||
A agent/api/health.py
|
||||
M agent/chat.py
|
||||
M agent/dashboard/agent_usage.py
|
||||
M agent/dashboard/eval_jobs.py
|
||||
M agent/dashboard/review_api.py
|
||||
M agent/dashboard/review_chat_api.py
|
||||
M agent/dashboard/review_style_jobs.py
|
||||
A agent/graphs/__init__.py
|
||||
A agent/graphs/agent.py
|
||||
A agent/graphs/analyzer.py
|
||||
A agent/graphs/chat.py
|
||||
A agent/graphs/reviewer.py
|
||||
A agent/graphs/scheduler.py
|
||||
M agent/middleware/settle_review_check.py
|
||||
M agent/prompt.py
|
||||
A agent/providers/__init__.py
|
||||
A agent/resources/__init__.py
|
||||
R100 default_prompt.md agent/resources/default_prompt.md
|
||||
A agent/review/__init__.py
|
||||
R098 agent/reviewer_diff.py agent/review/diff.py
|
||||
R100 agent/reviewer_eval_store.py agent/review/eval_store.py
|
||||
R100 agent/reviewer_findings.py agent/review/findings.py
|
||||
R098 agent/reviewer_groups.py agent/review/groups.py
|
||||
R099 agent/reviewer_publish.py agent/review/publish.py
|
||||
R099 agent/reviewer_reconcile.py agent/review/reconcile.py
|
||||
R100 agent/review_style_collector.py agent/review/style_collector.py
|
||||
R100 agent/review_style_guidance.py agent/review/style_guidance.py
|
||||
R098 agent/reviewer_trace_context.py agent/review/trace_context.py
|
||||
M agent/reviewer.py
|
||||
A agent/runtime/__init__.py
|
||||
A agent/runtime/constants.py
|
||||
A agent/runtime/execution.py
|
||||
A agent/runtime/sandbox.py
|
||||
M agent/server.py
|
||||
M agent/tools/add_finding.py
|
||||
M agent/tools/list_findings.py
|
||||
M agent/tools/list_review_findings.py
|
||||
M agent/tools/publish_review.py
|
||||
M agent/tools/reply_to_finding_thread.py
|
||||
M agent/tools/request_pr_review.py
|
||||
M agent/tools/resolve_finding_thread.py
|
||||
M agent/tools/update_finding.py
|
||||
M agent/utils/github_feedback.py
|
||||
M agent/utils/github_org_membership.py
|
||||
M agent/webapp.py
|
||||
A agent/webhooks/common.py
|
||||
M agent/webhooks/github.py
|
||||
A agent/webhooks/github_routes.py
|
||||
M agent/webhooks/linear.py
|
||||
A agent/webhooks/linear_routes.py
|
||||
M agent/webhooks/slack.py
|
||||
A agent/webhooks/slack_routes.py
|
||||
R100 static/dark.svg assets/dark.svg
|
||||
R100 static/light.svg assets/light.svg
|
||||
R099 CUSTOMIZATION.md docs/CUSTOMIZATION.md
|
||||
R100 INSTALLATION.md docs/INSTALLATION.md
|
||||
M evals/reviewer/judge.py
|
||||
M evals/reviewer/run_eval.py
|
||||
M evals/reviewer/store_reporter.py
|
||||
M evals/reviewer/target.py
|
||||
M langgraph.json
|
||||
R100 tests/test_agent_assembly_context.py tests/agent/test_agent_assembly_context.py
|
||||
R100 tests/test_agent_instructions.py tests/agent/test_agent_instructions.py
|
||||
R100 tests/test_agent_schedules.py tests/agent/test_agent_schedules.py
|
||||
R068 tests/test_agent_thread_pr_state.py tests/agent/test_agent_thread_pr_state.py
|
||||
R100 tests/test_agent_usage.py tests/agent/test_agent_usage.py
|
||||
R100 tests/test_agents_md.py tests/agent/test_agents_md.py
|
||||
R100 tests/test_api_standards_skill.py tests/agent/test_api_standards_skill.py
|
||||
R100 tests/test_dispatch.py tests/agent/test_dispatch.py
|
||||
R100 tests/test_import_hygiene.py tests/agent/test_import_hygiene.py
|
||||
R100 tests/test_langsmith_trace_url.py tests/agent/test_langsmith_trace_url.py
|
||||
R100 tests/test_multimodal.py tests/agent/test_multimodal.py
|
||||
R100 tests/test_plan_mode.py tests/agent/test_plan_mode.py
|
||||
R100 tests/test_plan_review.py tests/agent/test_plan_review.py
|
||||
R100 tests/test_prompt_default_repo.py tests/agent/test_prompt_default_repo.py
|
||||
R100 tests/test_repo_prep.py tests/agent/test_repo_prep.py
|
||||
R100 tests/test_task_retry.py tests/agent/test_task_retry.py
|
||||
R100 tests/test_timeout_wrapup.py tests/agent/test_timeout_wrapup.py
|
||||
R100 tests/test_workflow_push_guard.py tests/agent/test_workflow_push_guard.py
|
||||
R100 tests/test_analyzer_cron.py tests/analyzer/test_analyzer_cron.py
|
||||
R100 tests/test_analyzer_skills.py tests/analyzer/test_analyzer_skills.py
|
||||
R100 tests/test_eval_jobs.py tests/analyzer/test_eval_jobs.py
|
||||
R100 tests/test_eval_store_reporter.py tests/analyzer/test_eval_store_reporter.py
|
||||
R100 tests/test_auth_sources.py tests/auth/test_auth_sources.py
|
||||
R100 tests/test_authorship.py tests/auth/test_authorship.py
|
||||
R100 tests/test_encryption.py tests/auth/test_encryption.py
|
||||
R100 tests/test_github_oauth_refresh.py tests/auth/test_github_oauth_refresh.py
|
||||
R093 tests/test_github_token_ttl.py tests/auth/test_github_token_ttl.py
|
||||
R100 tests/test_notion_oauth.py tests/auth/test_notion_oauth.py
|
||||
R100 tests/test_slack_oauth.py tests/auth/test_slack_oauth.py
|
||||
R100 tests/test_user_credentials.py tests/auth/test_user_credentials.py
|
||||
M tests/conftest.py
|
||||
R073 tests/test_account_link.py tests/dashboard/test_account_link.py
|
||||
R100 tests/test_autofix_state.py tests/dashboard/test_autofix_state.py
|
||||
R100 tests/test_dashboard_admin.py tests/dashboard/test_dashboard_admin.py
|
||||
R100 tests/test_dashboard_csrf.py tests/dashboard/test_dashboard_csrf.py
|
||||
R100 tests/test_dashboard_links.py tests/dashboard/test_dashboard_links.py
|
||||
R100 tests/test_dashboard_oauth_redirect.py tests/dashboard/test_dashboard_oauth_redirect.py
|
||||
R100 tests/test_dashboard_org_login_gate.py tests/dashboard/test_dashboard_org_login_gate.py
|
||||
R100 tests/test_dashboard_repo_optional.py tests/dashboard/test_dashboard_repo_optional.py
|
||||
R100 tests/test_dashboard_repos.py tests/dashboard/test_dashboard_repos.py
|
||||
R098 tests/test_dashboard_reviews.py tests/dashboard/test_dashboard_reviews.py
|
||||
R100 tests/test_dashboard_run_email.py tests/dashboard/test_dashboard_run_email.py
|
||||
R100 tests/test_dashboard_thread_api.py tests/dashboard/test_dashboard_thread_api.py
|
||||
R100 tests/test_dashboard_thread_api_activity.py tests/dashboard/test_dashboard_thread_api_activity.py
|
||||
R100 tests/test_dashboard_web_handoff.py tests/dashboard/test_dashboard_web_handoff.py
|
||||
R089 tests/test_public_repo_org_gate.py tests/dashboard/test_public_repo_org_gate.py
|
||||
R100 tests/test_team_credentials.py tests/dashboard/test_team_credentials.py
|
||||
R100 tests/test_team_settings_fable.py tests/dashboard/test_team_settings_fable.py
|
||||
R100 tests/test_team_settings_grouping.py tests/dashboard/test_team_settings_grouping.py
|
||||
R100 tests/test_team_settings_org_guidelines.py tests/dashboard/test_team_settings_org_guidelines.py
|
||||
R100 tests/test_user_mappings.py tests/dashboard/test_user_mappings.py
|
||||
R100 tests/test_workflow_approval_api.py tests/dashboard/test_workflow_approval_api.py
|
||||
M tests/e2e/harness.py
|
||||
R100 tests/test_github_app.py tests/github/test_github_app.py
|
||||
R099 tests/test_github_checks.py tests/github/test_github_checks.py
|
||||
R100 tests/test_github_ci.py tests/github/test_github_ci.py
|
||||
R099 tests/test_github_comment_prompts.py tests/github/test_github_comment_prompts.py
|
||||
R095 tests/test_github_feedback.py tests/github/test_github_feedback.py
|
||||
R100 tests/test_github_http.py tests/github/test_github_http.py
|
||||
R078 tests/test_github_issue_webhook.py tests/github/test_github_issue_webhook.py
|
||||
R100 tests/test_github_proxy_refresh.py tests/github/test_github_proxy_refresh.py
|
||||
R100 tests/test_normalize_repo.py tests/github/test_normalize_repo.py
|
||||
R100 tests/test_open_pull_request.py tests/github/test_open_pull_request.py
|
||||
R100 tests/test_pr_creation_guard.py tests/github/test_pr_creation_guard.py
|
||||
R091 tests/test_repo_extraction.py tests/github/test_repo_extraction.py
|
||||
R100 tests/test_check_message_queue.py tests/middleware/test_check_message_queue.py
|
||||
R100 tests/test_ensure_no_empty_msg.py tests/middleware/test_ensure_no_empty_msg.py
|
||||
R100 tests/test_model_fallback_middleware.py tests/middleware/test_model_fallback_middleware.py
|
||||
R100 tests/test_notify_step_limit_middleware.py tests/middleware/test_notify_step_limit_middleware.py
|
||||
R100 tests/test_prepare_run_middleware.py tests/middleware/test_prepare_run_middleware.py
|
||||
R100 tests/test_repair_orphaned_tool_calls.py tests/middleware/test_repair_orphaned_tool_calls.py
|
||||
R100 tests/test_sanitize_fireworks_messages.py tests/middleware/test_sanitize_fireworks_messages.py
|
||||
R100 tests/test_sanitize_openai_responses.py tests/middleware/test_sanitize_openai_responses.py
|
||||
R100 tests/test_sanitize_thinking_blocks.py tests/middleware/test_sanitize_thinking_blocks.py
|
||||
R100 tests/test_sanitize_tool_inputs.py tests/middleware/test_sanitize_tool_inputs.py
|
||||
R100 tests/test_subdir_agents_middleware.py tests/middleware/test_subdir_agents_middleware.py
|
||||
R100 tests/test_tool_artifact_middleware.py tests/middleware/test_tool_artifact_middleware.py
|
||||
R100 tests/test_agent_subagent_models.py tests/models/test_agent_subagent_models.py
|
||||
R100 tests/test_anthropic_effort.py tests/models/test_anthropic_effort.py
|
||||
R100 tests/test_anthropic_model.py tests/models/test_anthropic_model.py
|
||||
R100 tests/test_deferred_model.py tests/models/test_deferred_model.py
|
||||
R100 tests/test_fireworks_model.py tests/models/test_fireworks_model.py
|
||||
R100 tests/test_google_model.py tests/models/test_google_model.py
|
||||
R100 tests/test_model_fallback_resolution.py tests/models/test_model_fallback_resolution.py
|
||||
R062 tests/test_pr_ready_auto_review.py tests/reviewer/test_pr_ready_auto_review.py
|
||||
R100 tests/test_recent_comments.py tests/reviewer/test_recent_comments.py
|
||||
R100 tests/test_reconcile_sweep.py tests/reviewer/test_reconcile_sweep.py
|
||||
R099 tests/test_review_api.py tests/reviewer/test_review_api.py
|
||||
R100 tests/test_review_chat.py tests/reviewer/test_review_chat.py
|
||||
R094 tests/test_review_style_collector.py tests/reviewer/test_review_style_collector.py
|
||||
R100 tests/test_review_style_sync.py tests/reviewer/test_review_style_sync.py
|
||||
R100 tests/test_review_styles_store.py tests/reviewer/test_review_styles_store.py
|
||||
R100 tests/test_reviewer.py tests/reviewer/test_reviewer.py
|
||||
R096 tests/test_reviewer_diff.py tests/reviewer/test_reviewer_diff.py
|
||||
R100 tests/test_reviewer_eval_judge.py tests/reviewer/test_reviewer_eval_judge.py
|
||||
R100 tests/test_reviewer_eval_run.py tests/reviewer/test_reviewer_eval_run.py
|
||||
R099 tests/test_reviewer_eval_target.py tests/reviewer/test_reviewer_eval_target.py
|
||||
R088 tests/test_reviewer_findings.py tests/reviewer/test_reviewer_findings.py
|
||||
R092 tests/test_reviewer_groups.py tests/reviewer/test_reviewer_groups.py
|
||||
R100 tests/test_reviewer_outcomes.py tests/reviewer/test_reviewer_outcomes.py
|
||||
R098 tests/test_reviewer_publish.py tests/reviewer/test_reviewer_publish.py
|
||||
R087 tests/test_reviewer_reconcile.py tests/reviewer/test_reviewer_reconcile.py
|
||||
R099 tests/test_reviewer_tools.py tests/reviewer/test_reviewer_tools.py
|
||||
R096 tests/test_reviewer_trace_context.py tests/reviewer/test_reviewer_trace_context.py
|
||||
R064 tests/test_reviewer_watch.py tests/reviewer/test_reviewer_watch.py
|
||||
R098 tests/test_daytona_integration.py tests/sandbox/test_daytona_integration.py
|
||||
R098 tests/test_e2b_integration.py tests/sandbox/test_e2b_integration.py
|
||||
R100 tests/test_gateway.py tests/sandbox/test_gateway.py
|
||||
R100 tests/test_langsmith_sandbox_config.py tests/sandbox/test_langsmith_sandbox_config.py
|
||||
R100 tests/test_langsmith_sandbox_timeout.py tests/sandbox/test_langsmith_sandbox_timeout.py
|
||||
R100 tests/test_local_integration.py tests/sandbox/test_local_integration.py
|
||||
R100 tests/test_proxy_auth.py tests/sandbox/test_proxy_auth.py
|
||||
R100 tests/test_repo_snapshots.py tests/sandbox/test_repo_snapshots.py
|
||||
R100 tests/test_sandbox_paths.py tests/sandbox/test_sandbox_paths.py
|
||||
R100 tests/middleware/test_sandbox_recovery.py tests/sandbox/test_sandbox_recovery.py
|
||||
R100 tests/test_sandbox_state.py tests/sandbox/test_sandbox_state.py
|
||||
R100 tests/test_stale_sandbox_creating.py tests/sandbox/test_stale_sandbox_creating.py
|
||||
R100 tests/test_refresh_slack_status_middleware.py tests/slack/test_refresh_slack_status_middleware.py
|
||||
R100 tests/test_slack_add_reaction_tool.py tests/slack/test_slack_add_reaction_tool.py
|
||||
R100 tests/test_slack_assistants_status.py tests/slack/test_slack_assistants_status.py
|
||||
R082 tests/test_slack_context.py tests/slack/test_slack_context.py
|
||||
R090 tests/test_slack_feedback.py tests/slack/test_slack_feedback.py
|
||||
R100 tests/test_slack_start_new_thread_tool.py tests/slack/test_slack_start_new_thread_tool.py
|
||||
R100 tests/test_slack_thread_reply_tool.py tests/slack/test_slack_thread_reply_tool.py
|
||||
R082 tests/test_slack_webhook_errors.py tests/slack/test_slack_webhook_errors.py
|
||||
R100 tests/test_corridor_mcp.py tests/tools/test_corridor_mcp.py
|
||||
R100 tests/test_currents_tools.py tests/tools/test_currents_tools.py
|
||||
R100 tests/test_http_security.py tests/tools/test_http_security.py
|
||||
R100 tests/test_observability_tools.py tests/tools/test_observability_tools.py
|
||||
R100 tests/test_report_platform_issue_tool.py tests/tools/test_report_platform_issue_tool.py
|
||||
R100 tests/test_schedule_thread_wakeup.py tests/tools/test_schedule_thread_wakeup.py
|
||||
R100 tests/test_stagehand_browser.py tests/tools/test_stagehand_browser.py
|
||||
R100 tests/test_completion_webhook.py tests/webhooks/test_completion_webhook.py
|
||||
R091 tests/test_linear_webhook_author.py tests/webhooks/test_linear_webhook_author.py
|
||||
M ui/eslint.config.js
|
||||
D ui/src/components/agents/AgentPromptBar.tsx
|
||||
R097 ui/src/components/agents/AgentGitPanel.tsx ui/src/features/agents/components/AgentGitPanel.tsx
|
||||
A ui/src/features/agents/components/AgentPromptBar.tsx
|
||||
R098 ui/src/components/agents/AgentRunCard.tsx ui/src/features/agents/components/AgentRunCard.tsx
|
||||
R092 ui/src/components/agents/AgentThreadView.tsx ui/src/features/agents/components/AgentThreadView.tsx
|
||||
R089 ui/src/components/agents/AgentsHome.tsx ui/src/features/agents/components/AgentsHome.tsx
|
||||
R098 ui/src/components/agents/AgentsSidebar.tsx ui/src/features/agents/components/AgentsSidebar.tsx
|
||||
R098 ui/src/components/agents/AgentsThreadsPage.tsx ui/src/features/agents/components/AgentsThreadsPage.tsx
|
||||
R100 ui/src/components/agents/OnboardingDialog.tsx ui/src/features/agents/components/OnboardingDialog.tsx
|
||||
R099 ui/src/components/agents/PlanReview.tsx ui/src/features/agents/components/PlanReview.tsx
|
||||
R097 ui/src/components/agents/SidebarFilterMenu.tsx ui/src/features/agents/components/SidebarFilterMenu.tsx
|
||||
R098 ui/src/components/agents/WorkflowApprovalCard.tsx ui/src/features/agents/components/WorkflowApprovalCard.tsx
|
||||
R097 ui/src/components/agents/ported/CloudPromptBar.tsx ui/src/features/agents/components/chat/CloudPromptBar.tsx
|
||||
R100 ui/src/components/agents/ported/CodeBlock.tsx ui/src/features/agents/components/chat/CodeBlock.tsx
|
||||
R088 ui/src/components/agents/ported/DiffView.tsx ui/src/features/agents/components/chat/DiffView.tsx
|
||||
R100 ui/src/components/agents/ported/Logo.tsx ui/src/features/agents/components/chat/Logo.tsx
|
||||
R100 ui/src/components/agents/ported/Markdown.tsx ui/src/features/agents/components/chat/Markdown.tsx
|
||||
R098 ui/src/components/agents/ported/ReplyCard.tsx ui/src/features/agents/components/chat/ReplyCard.tsx
|
||||
R098 ui/src/components/agents/ported/ShellCommand.tsx ui/src/features/agents/components/chat/ShellCommand.tsx
|
||||
R097 ui/src/components/agents/ported/ToolExecution.tsx ui/src/features/agents/components/chat/ToolExecution.tsx
|
||||
R096 ui/src/components/agents/messages/AgentMessage.tsx ui/src/features/agents/components/messages/AgentMessage.tsx
|
||||
R083 ui/src/components/agents/messages/ChunkRenderer.tsx ui/src/features/agents/components/messages/ChunkRenderer.tsx
|
||||
R100 ui/src/components/agents/messages/MessageTimestamp.tsx ui/src/features/agents/components/messages/MessageTimestamp.tsx
|
||||
R098 ui/src/components/agents/messages/Messages.tsx ui/src/features/agents/components/messages/Messages.tsx
|
||||
R100 ui/src/components/agents/messages/ReasoningBlock.tsx ui/src/features/agents/components/messages/ReasoningBlock.tsx
|
||||
R100 ui/src/components/agents/messages/ThinkingSpinner.tsx ui/src/features/agents/components/messages/ThinkingSpinner.tsx
|
||||
R097 ui/src/components/agents/messages/TurnChangedFilesCard.tsx ui/src/features/agents/components/messages/TurnChangedFilesCard.tsx
|
||||
R097 ui/src/components/agents/messages/UserMessage.tsx ui/src/features/agents/components/messages/UserMessage.tsx
|
||||
R100 ui/src/components/agents/messages/WorkSummary.tsx ui/src/features/agents/components/messages/WorkSummary.tsx
|
||||
R100 ui/src/components/agents/messages/index.ts ui/src/features/agents/components/messages/index.ts
|
||||
R098 ui/src/components/agents/messages/renderItems.ts ui/src/features/agents/components/messages/renderItems.ts
|
||||
R092 ui/src/components/agents/messages/summarizeChangedFiles.ts ui/src/features/agents/components/messages/summarizeChangedFiles.ts
|
||||
R094 ui/src/components/agents/messages/types.ts ui/src/features/agents/components/messages/types.ts
|
||||
R100 ui/src/components/agents/subagents/SubagentActivity.tsx ui/src/features/agents/components/subagents/SubagentActivity.tsx
|
||||
R092 ui/src/components/agents/subagents/SubagentCard.tsx ui/src/features/agents/components/subagents/SubagentCard.tsx
|
||||
R091 ui/src/components/agents/subagents/SubagentGroup.tsx ui/src/features/agents/components/subagents/SubagentGroup.tsx
|
||||
R100 ui/src/components/agents/subagents/index.ts ui/src/features/agents/components/subagents/index.ts
|
||||
R100 ui/src/components/agents/z-index.ts ui/src/features/agents/components/z-index.ts
|
||||
R100 ui/src/components/agents/ported/BranchSelector.tsx ui/src/features/agents/experiments/BranchSelector.tsx
|
||||
R089 ui/src/components/agents/ported/BubblePrefix.tsx ui/src/features/agents/experiments/BubblePrefix.tsx
|
||||
R099 ui/src/components/agents/ported/ChatView.tsx ui/src/features/agents/experiments/ChatView.tsx
|
||||
R100 ui/src/components/agents/ported/CompactingIndicator.tsx ui/src/features/agents/experiments/CompactingIndicator.tsx
|
||||
R100 ui/src/components/agents/ported/ContextIndicator.tsx ui/src/features/agents/experiments/ContextIndicator.tsx
|
||||
R100 ui/src/components/agents/ported/Footer.tsx ui/src/features/agents/experiments/Footer.tsx
|
||||
R100 ui/src/components/agents/ported/HeaderBar.tsx ui/src/features/agents/experiments/HeaderBar.tsx
|
||||
R100 ui/src/components/agents/ported/MarkdownTable.tsx ui/src/features/agents/experiments/MarkdownTable.tsx
|
||||
R100 ui/src/components/agents/ported/PanelResizeHandle.tsx ui/src/features/agents/experiments/PanelResizeHandle.tsx
|
||||
R099 ui/src/components/agents/ported/PromptBar.tsx ui/src/features/agents/experiments/PromptBar.tsx
|
||||
R100 ui/src/components/agents/ported/SourceControlPanel.tsx ui/src/features/agents/experiments/SourceControlPanel.tsx
|
||||
R099 ui/src/components/agents/ported/SourceControlTile.tsx ui/src/features/agents/experiments/SourceControlTile.tsx
|
||||
R099 ui/src/components/agents/ported/ThreadPicker.tsx ui/src/features/agents/experiments/ThreadPicker.tsx
|
||||
R098 ui/src/components/agents/ported/TodoList.tsx ui/src/features/agents/experiments/TodoList.tsx
|
||||
R093 ui/src/components/agents/ported/index.ts ui/src/features/agents/experiments/index.ts
|
||||
R100 ui/src/lib/agents/AgentThreadStreamProvider.tsx ui/src/features/agents/lib/AgentThreadStreamProvider.tsx
|
||||
R100 ui/src/lib/agents/api.ts ui/src/features/agents/lib/api.ts
|
||||
R100 ui/src/lib/agents/messageTimestamps.ts ui/src/features/agents/lib/messageTimestamps.ts
|
||||
R100 ui/src/lib/agents/provider/useIsInAgentThreadStream.tsx ui/src/features/agents/lib/provider/useIsInAgentThreadStream.tsx
|
||||
R096 ui/src/lib/agents/provider/useLiveMarkdownMessageId.ts ui/src/features/agents/lib/provider/useLiveMarkdownMessageId.ts
|
||||
R100 ui/src/lib/agents/provider/useModelOptions.ts ui/src/features/agents/lib/provider/useModelOptions.ts
|
||||
R095 ui/src/lib/agents/provider/useSubmitAgentMessage.ts ui/src/features/agents/lib/provider/useSubmitAgentMessage.ts
|
||||
R100 ui/src/lib/agents/queries.ts ui/src/features/agents/lib/queries.ts
|
||||
R100 ui/src/lib/agents/sidebarFilter.test.ts ui/src/features/agents/lib/sidebarFilter.test.ts
|
||||
R100 ui/src/lib/agents/sidebarFilter.ts ui/src/features/agents/lib/sidebarFilter.ts
|
||||
R096 ui/src/lib/agents/sidebarPrefs.ts ui/src/features/agents/lib/sidebarPrefs.ts
|
||||
R100 ui/src/lib/agents/streamMessagesToUi.ts ui/src/features/agents/lib/streamMessagesToUi.ts
|
||||
R100 ui/src/lib/agents/types.ts ui/src/features/agents/lib/types.ts
|
||||
R095 ui/src/lib/agents/useRunCompletionNotifier.ts ui/src/features/agents/lib/useRunCompletionNotifier.ts
|
||||
R100 ui/src/components/agents/utils/diffStats.ts ui/src/features/agents/utils/diffStats.ts
|
||||
R100 ui/src/components/agents/utils/diffUtils.test.ts ui/src/features/agents/utils/diffUtils.test.ts
|
||||
R100 ui/src/components/agents/utils/diffUtils.ts ui/src/features/agents/utils/diffUtils.ts
|
||||
R095 ui/src/components/agents/AutomationEditor.tsx ui/src/features/automations/components/AutomationEditor.tsx
|
||||
R091 ui/src/components/agents/AutomationTemplates.tsx ui/src/features/automations/components/AutomationTemplates.tsx
|
||||
R096 ui/src/components/agents/AutomationsList.tsx ui/src/features/automations/components/AutomationsList.tsx
|
||||
R097 ui/src/components/agents/ScheduleTriggerPicker.tsx ui/src/features/automations/components/ScheduleTriggerPicker.tsx
|
||||
R100 ui/src/lib/agents/automation-templates.ts ui/src/features/automations/lib/automation-templates.ts
|
||||
R100 ui/src/lib/agents/cron.ts ui/src/features/automations/lib/cron.ts
|
||||
R100 ui/src/components/agents/PrHeader.tsx ui/src/features/reviews/components/PrHeader.tsx
|
||||
R099 ui/src/components/agents/ReviewChat.tsx ui/src/features/reviews/components/ReviewChat.tsx
|
||||
R100 ui/src/components/agents/ReviewCommentsMenu.tsx ui/src/features/reviews/components/ReviewCommentsMenu.tsx
|
||||
R099 ui/src/components/agents/ReviewMainBody.tsx ui/src/features/reviews/components/ReviewMainBody.tsx
|
||||
R099 ui/src/components/agents/ReviewSidebar.tsx ui/src/features/reviews/components/ReviewSidebar.tsx
|
||||
R093 ui/src/components/agents/ReviewTab.tsx ui/src/features/reviews/components/ReviewTab.tsx
|
||||
R100 ui/src/components/agents/RepoSelector.tsx ui/src/features/settings/components/RepoSelector.tsx
|
||||
M ui/src/lib/notifications.ts
|
||||
M ui/src/routes/agents.tsx
|
||||
M ui/src/routes/agents/$threadId.tsx
|
||||
M ui/src/routes/agents/$threadId_.plan.tsx
|
||||
M ui/src/routes/agents/automations/$scheduleId.tsx
|
||||
M ui/src/routes/agents/automations/index.tsx
|
||||
M ui/src/routes/agents/automations/new.tsx
|
||||
M ui/src/routes/agents/index.tsx
|
||||
M ui/src/routes/agents/reviews/$owner.$repo.$number.tsx
|
||||
M ui/src/routes/agents/threads.tsx
|
||||
M ui/src/routes/cloud-agents.tsx
|
||||
M ui/tsconfig.json
|
||||
M ui/vite.config.ts
|
||||
66
docs/upstream-sync/domain-reorg/reorg-build-plan.md
Normal file
66
docs/upstream-sync/domain-reorg/reorg-build-plan.md
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
# Build plan — adopt upstream domain reorg `8356eb34` (#1726) into the Sea Haven open-swe fork
|
||||
|
||||
Date: 2026-07-17. Base: `dev` (clean, `a518a129`). Scoping report: `reorg-scoping-report.md` (same directory: `docs/upstream-sync/domain-reorg/`).
|
||||
|
||||
## Goal & strategy
|
||||
|
||||
Adopt upstream's 298-file domain reorg as a **file-move exercise applied to the fork's tree**: fork file contents, upstream layout. Never take upstream file contents except the 21 verified thin structural "A" shims (`agent/graphs/*`, `agent/runtime/*`, `agent/api/*`, `agent/webhooks/{common,*_routes}.py` skeletons, package `__init__.py`s). Rationale: the fork has settled permanent divergences (sync sandbox lifecycle + 4-case `__creating__` sentinel, workflow-token security model, bun toolchain, Atlassian integration, plan-mode #130, TID-COLLIDE-01 guard) — adoption is layout convergence, not content convergence.
|
||||
|
||||
Payoff: kills the per-pick path-remap tax on all future upstream cherry-picks; 8 of 19 deferred ledger rows become clean/near-clean, including priority security pick #1736 (written against `agent/webhooks/common.py`, which only exists after this exercise).
|
||||
|
||||
## Approved decisions (Adam, 2026-07-17)
|
||||
|
||||
1. **FastAPI/webapp split: APPROVED.** Fork's 2,590-line `agent/webapp.py` splits into `agent/webhooks/common.py` (shared verify/dispatch helpers), `agent/api/{app,health}.py`, and per-source `{github,linear,slack,jira,confluence}_routes.py`; `webapp.py` remains a compatibility shim. `/sh-security-review` required on that commit before merge.
|
||||
2. **Atlassian placement (re-confirmed by Adam 2026-07-17):** fork-only `jira_routes.py` + `confluence_routes.py` mirroring upstream's per-source pattern; **Atlassian Connect lifecycle/descriptor routes (`/connect/*`) fold into `confluence_routes.py`** (Connect is the Confluence trigger; Jira uses Automation webhooks). JWT/qsh machinery stays in `agent/utils/atlassian_connect.py` (unmoved). Split out a `connect_routes.py` later only if Jira migrates to Connect.
|
||||
3. `langgraph.json` graph entrypoints retarget to `agent.graphs.*` shims; add fork-only `agent/graphs/ci_monitor.py` shim for symmetry. `http.app` stays `agent.webapp:app`.
|
||||
4. Reviewer modules → `agent/review/` package (9 pure moves; fork reviewer content rides along).
|
||||
5. CI-autofix cluster (upstream-deleted): keep-baseline; wire its webhook triggers through the split `github.py`/`common.py`; tests → `tests/github/`.
|
||||
6. UI `ported/` → `features/agents/experiments/` + single tsconfig/eslint exclude glob; bun stays; delete stray `ui/pnpm-workspace.yaml`.
|
||||
7. Sequencing: reorg lands **before** #1736.
|
||||
|
||||
## Hard rules (from fork-maintenance playbook + scoping hazards)
|
||||
|
||||
- **Content-source discipline:** upstream content only for the 21 "A" shims. `agent/webhooks/{github,linear,slack}.py`, `tests/conftest.py`, `tests/e2e/harness.py` exist on both sides with different content — always fork content + replicated import rewires; never `git checkout upstream` on them.
|
||||
- Handlers keep **module-attribute access style** (`common.X`, `service.X`) exactly as upstream did, so the 240 `monkeypatch.setattr(webapp, ...)` test sites retarget cleanly and no re-import rebind hazard is introduced.
|
||||
- Every moved test keeps its impl-side pairing (impls mostly don't move; 13 fork-only tests get the placements from scoping §2c: Atlassian webhook tests → `tests/webhooks/`, `test_atlassian_connect.py` → `tests/auth/`, client-util tests → `tests/tools/`, `test_repo_binding_isolation.py` → `tests/sandbox/`, `test_auth_error_leak.py` → `tests/auth/`, `test_app_bot_identity.py`/autofix tests → `tests/github/`).
|
||||
- Verify wheel packaging ships `agent/resources/default_prompt.md` (hatchling `packages=["agent"]` should carry it — build and inspect the wheel in C1; add explicit include only if missing).
|
||||
- No secrets/config placement changes anywhere in this exercise (no new env vars, no Secrets Manager/SSM changes).
|
||||
- CI ladder per commit: `ruff check` + `ruff format --check` → `pytest --co -q` → full unit → E2E (Playwright + real LangGraph dev server) where the commit touches wiring; `bunx tsc --noEmit` + bun build for UI commits. `make dev` boot-check for C3 (all graphs + FastAPI app load).
|
||||
|
||||
## Jira linkage
|
||||
|
||||
No Jira issue tracks this work; per handbook `git-workflow.md`, the branch omits the issue key and uses a plain description. (If Adam cuts a ticket, rename branch to `refactor/<KEY>-domain-reorg-adoption` before the PR opens.)
|
||||
|
||||
## Commit sequence (branch `refactor/domain-reorg-adoption` off dev; one PR; **merge-commit merge ONLY** — squash and rebase are explicitly forbidden for this PR to preserve per-cascade bisectability; dev ruleset allows merge commits)
|
||||
|
||||
- **C1 — docs/resources/assets** (~1h): `git mv` `INSTALLATION.md`/`CUSTOMIZATION.md` → `docs/`, `static/` → `assets/` (fix README refs), `default_prompt.md` → `agent/resources/` + apply the `importlib.resources` loader hunk to fork's `prompt.py` + `__init__.py`. Gate: ruff + unit + **wheel build inspection**.
|
||||
- **C2 — `agent/review/` package** (~half day): mv 9 reviewer/style modules per map, rewrite 38 importer files, `agent/review/__init__.py` with fork's export surface. Gate: ruff + `pytest --co` + reviewer unit suite.
|
||||
- **C3 — graphs/runtime/providers shims + `langgraph.json` + CI hardening** (~2h): adopt the 21 upstream A-shims (verify each delegates to fork modules), add `agent/graphs/ci_monitor.py`, retarget `langgraph.json`; **pin `bun-version` in `.github/workflows/ci.yml`** (removes the setup-bun latest-resolution flake documented in project memory). Gate: `pytest --co` + `make dev` boots all graphs (incl. `ci_monitor`) + FastAPI app.
|
||||
- **C4 — FastAPI split** (~1–1.5 days, critical): split fork `webapp.py` per approved decisions 1–2; sed handler modules `webapp.` → `common.`; retarget the 240 monkeypatch sites, `tests/conftest.py`, `tests/e2e/harness.py`; keep `webapp.py` shim. Gate: full unit + **full E2E** (the only layer catching wiring drift) + **residual-importer sweep**: `git grep -l 'agent\.webapp\|from agent import webapp'` across the whole tree must return only the shim and intentional compat references, so the shim cannot silently mask missed rewires. **`/sh-security-review` on this commit's diff. Failure path: findings are addressed as NEW commits on top of the branch (e.g. "C4a: address security-review findings") — no history rewrite or force-push once any review (security or PR) has started, preserving the review/CI trail; the PR must not merge until the review passes — no exceptions.**
|
||||
- **HARD GATE:** C5 must not begin until C4 has full unit + E2E green **and** `/sh-security-review` passed. (C1–C3 may proceed independently before C4.)
|
||||
- **C5 — `tests/<domain>/` moves** (~half day): mechanical map moves + remaining R<100 monkeypatch retargets + the 13 fork-only placements. Gate: `pytest --co` + full unit.
|
||||
- **C6 — UI `features/` moves** (~half day–1 day): `git mv` per map incl. `ported/` → `experiments|chat`, rewrite `@/` imports (54 importers + moved files), exclude-glob swap, AgentPromptBar shim retarget, delete `ui/pnpm-workspace.yaml`. Gate: `bunx tsc --noEmit` + bun build + Playwright E2E.
|
||||
- **C7 — docs + ledger + memory** (~2h): update fork `CLAUDE.md`/`README.md`/`AGENTS.md` path references (CLAUDE.md architecture sections name `agent/webapp.py` and old test paths); flip `8356eb34` → Landed in `triage.jsonl` + re-triage notes on the 8 unblocked rows + `make triage-render`. **Documentation/memory obligations (owned by the C7 executor, i.e. Claude in this conversation):** (a) update the `open-swe-upstream-triage-status` and project memory entries **including a summary of the new module layout** (`agent/{graphs,runtime,api,review,resources,webhooks/*_routes}`, `tests/<domain>/`, `ui/src/features/`); (b) perform the Confluence check — search IT-space pages for any repo module-map documentation; update it if found, and **record the outcome either way ("updated page <id>" or "no Confluence change required — no IT page documents the module map") in the PR description and in project memory**. The AWS Architecture Map is unaffected (no AWS resource changes). **Fallback per standing policy: if Confluence is inaccessible, state so explicitly in the PR description and project memory — the documentation update is then outstanding, not silently skipped.** C7's doc/ledger changes ship inside the PR, so they are covered by the PR review; memory-file updates are summarized in the PR description for the same visibility.
|
||||
|
||||
## Merge & deployment
|
||||
|
||||
- PR from `refactor/domain-reorg-adoption` → `dev`; CI green (all layers) → `@openswe` review (or Adam-delegated review) → **merge commit only** (no squash/rebase). PR review scope must explicitly name the C2 reviewer-module moves (review-automation surface) and the C4 auth-surface split so the reviewer examines both.
|
||||
- `/sh-security-review` must have run on C4 with confirmed critical/highs resolved (or machine-suppressed with justification) before merge — see C4 failure path. GPT-4.1 cross-family review: not strictly triggered (no IAM/policy or Lambda-signature change — `publish_review`-style tool contracts untouched; `langgraph.json` strings are deployment manifest, not IAM), but run as **opt-in on the C4 diff** given webhook-verification code movement.
|
||||
- **Post-deploy verification checklist (explicit, before declaring done):** LangGraph deployment redeploys with the retargeted `langgraph.json`; all graphs (agent, reviewer, analyzer, chat, scheduler, ci_monitor) registered; `/health` OK; `GET /connect/atlassian-connect.json` serves the descriptor; one webhook round-trip per source (GitHub PR comment, Slack mention, Linear, Jira Automation test-fire, Confluence comment) where feasible. Note: external registrations (GitHub App webhook URL, Slack event URL, Jira Automation rule, Connect descriptor URL) are verified UNCHANGED by this exercise — the HTTP surface and all routes keep their paths — so no external system updates are required; the checklist confirms this empirically rather than assuming it.
|
||||
- **Rollback:** revert the merge commit restores the pre-reorg layout wholesale; because the HTTP surface and external registrations are unchanged, a rollback requires NO external-system reverts — re-verify with the same checklist after any rollback. C1–C3 independently revertible pre-merge; C5/C6 path-only.
|
||||
- **Post-merge cleanup (git-workflow convention):** delete `refactor/domain-reorg-adoption` on origin after merge; delete local copies and prune worktrees.
|
||||
- **Verification records:** post-deploy checklist results are recorded in the PR description (or a comment) as the traceability artifact — **responsibility: the C7 executor (Claude in this conversation)**. After any rollback, normal operation does not resume until the same checklist fully passes.
|
||||
- **Confluence-outstanding follow-up:** if Confluence is inaccessible at merge time, the outstanding update is recorded in project memory with an explicit "outstanding as of <date>" marker so it surfaces at the next session on this project — it does not defer indefinitely.
|
||||
- **Severity clarification for the C4 failure path:** fixes are stacked as new commits regardless of severity, full stop. If the security review reveals a *fundamental design flaw* in the split (not a fixable finding), the response is not a history rewrite — the PR is closed, the plan returns to the drafting stage, and a revised plan goes back through `/sh-plan-review` on a fresh branch.
|
||||
- **Shim lifetime:** `webapp.py` (and the `agent/graphs/*` shims) mirror upstream's own permanent compatibility shims — they are kept for as long as upstream keeps theirs, since layout parity is the goal; revisit only if upstream removes them.
|
||||
- **bun-version pin:** permanent policy (version bumped deliberately like any dependency), not a temporary workaround — resolves the setup-bun latest-resolution flake class permanently.
|
||||
|
||||
## Post-merge follow-ups (separate work, not this PR)
|
||||
|
||||
1. Pick #1736 (GitHub token binding) — near-clean post-split; still gated by its ledger row: GPT-4.1 cross-family review + `/sh-security-review`.
|
||||
2. Re-triage the 5 now-clean picks (#1732, #1761, #1744, #1748, #1742) — cheap batch.
|
||||
3. Update `sh-openswe` deployment notes/memory if the redeploy surfaces anything.
|
||||
|
||||
## Rollback story
|
||||
|
||||
Single revert of the merge commit restores pre-reorg layout wholesale. Before merge: each cascade commit is independently droppable except C4→C5 ordering (C5 assumes post-split monkeypatch targets). Working artifacts for the build agents: `docs/upstream-sync/domain-reorg/{movemap-m50.txt, cross.json, forkonly.json}`.
|
||||
163
docs/upstream-sync/domain-reorg/reorg-scoping-report.md
Normal file
163
docs/upstream-sync/domain-reorg/reorg-scoping-report.md
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
# Scoping report — adopting upstream domain reorg `8356eb34` (#1726) as a file-move exercise
|
||||
|
||||
Date: 2026-07-17. Repo: `/Users/adammoussa/Documents/repositories/seahaven/open-swe` (branch `dev`, clean).
|
||||
Strategy scoped: **fork file contents, upstream layout** — replay the reorg's *moves* onto the fork's own tree; never take upstream file contents.
|
||||
Merge-base with `upstream/main`: `f6c215ff`. Reorg commit sits 91 upstream commits past the merge-base.
|
||||
Current truthful conflict surface (`git merge-tree --write-tree --name-only HEAD upstream/main`): **140 conflicted paths** (`docs/upstream-sync/domain-reorg/merge-tree-now.txt`).
|
||||
|
||||
---
|
||||
|
||||
## 1. Move-map (`git diff-tree -r -M50 --name-status 8356eb34^ 8356eb34`)
|
||||
|
||||
298 entries total (raw file: `docs/upstream-sync/domain-reorg/movemap-m50.txt`):
|
||||
|
||||
| class | count | meaning |
|
||||
|---|---|---|
|
||||
| **R100** pure renames | **150** | byte-identical moves (mostly `tests/*` → `tests/<domain>/`, `ui/src/{components,lib}/agents/*` → `ui/src/features/*`, `agent/reviewer_*`/`review_style_*` → `agent/review/`) |
|
||||
| **R<100** rename+edit | **77** | scores R062–R099; **every sampled edit is an import-path / monkeypatch-target rewrite only** (see §Spot-checks) |
|
||||
| **M** in-place edits | **49** | shim-ification (`webapp.py` 2007-line reduction, `server.py` constant extraction), import rewires in `agent/tools/*`, `agent/webhooks/*`, `evals/`, `ui/src/routes/*`, config files |
|
||||
| **A** true adds | **21** | all thin structure: `agent/graphs/{agent,analyzer,chat,reviewer,scheduler}.py` (re-export shims), `agent/runtime/{constants,execution,sandbox}.py` (constants + delegating wrappers around `agent.server`), `agent/api/{app,health}.py`, `agent/webhooks/{common,github_routes,linear_routes,slack_routes}.py`, `agent/{providers,resources,review,runtime,graphs,api}/__init__.py` |
|
||||
| **D** true deletes | **1** | `ui/src/components/agents/AgentPromptBar.tsx` — a 2-line re-export shim, re-added at `ui/src/features/agents/components/AgentPromptBar.tsx` with the path retargeted (A/D pair is cosmetic, not a content loss) |
|
||||
|
||||
Content-consolidations (real redistribution rather than move): effectively **one** — the FastAPI layer.
|
||||
`agent/webapp.py` (upstream pre-reorg ~2k lines) is split into `agent/webhooks/common.py` (shared dispatch/verify helpers), `agent/api/app.py` (composition), `agent/api/health.py` (`/health` + `/webhooks/run-complete`), and per-source `*_routes.py`; `webapp.py` becomes a 4-line compatibility shim (`from .api.app import app`). Secondary micro-extractions: `server.py` → `runtime/constants.py` (`DEFAULT_LLM_MODEL_ID`, `DEFAULT_LLM_MAX_TOKENS`, `DEFAULT_RECURSION_LIMIT`, `MODEL_CALL_RECURSION_LIMIT`) and `runtime/execution.py` (`graph_loaded_for_execution`); `prompt.py` → `default_prompt.md` loaded via `importlib.resources` from `agent/resources/`.
|
||||
The "consolidate reviewer modules" sub-commit is **not** a content merge — it is nine 1:1 module moves into `agent/review/` (R098–R100) plus import rewires.
|
||||
|
||||
`langgraph.json` **does change**: graph entrypoints retarget from `agent.server:traced_agent` / `agent.reviewer:...` / `agent.analyzer:...` / `agent.chat:...` / `agent.scheduler:...` to `agent.graphs.<name>:<same symbol>`. The targets are pure re-export shims (e.g. `agent/graphs/agent.py` = `from agent.server import get_agent, traced_agent`), so *behavior* is unchanged, but the deployment manifest strings are not. `http.app` stays `agent.webapp:app` (via the compat shim). See §Hazards (d).
|
||||
|
||||
---
|
||||
|
||||
## 2. Collision set (move-map × fork divergence)
|
||||
|
||||
Fork divergence since merge-base: 322 paths (130 A / 188 M / 3 D / 1 R; raw: `docs/upstream-sync/domain-reorg/fork-divergence-status.txt`). Fork-added files split against upstream trees: **67 are shared** (cherry-picked, exist upstream pre-reorg → move-map applies) and **64 are TRUE fork-only** (exist nowhere upstream).
|
||||
|
||||
Headline classification:
|
||||
|
||||
| bucket | count |
|
||||
|---|---|
|
||||
| MECHANICAL — fork-touched, R100 pure rename → `git mv` fork's version | **57** |
|
||||
| MECHANICAL-trivial — moved by reorg, fork never touched → `git mv` (identical either way) | **127** |
|
||||
| HAND-CARRY (light) — fork-touched, R<100 → `git mv` + replicate upstream's import-rewrite pattern on fork content | **34** |
|
||||
| HAND-CARRY (real) — fork-modified AND reorg-modified-in-place (M×M) | **34** (≈10 substantive, rest are 1–3-line import seds) |
|
||||
| FORK-ONLY placement decisions | **64** files, of which **13 test files** need explicit new homes; nearly all fork-only *source* stays put (reorg does not move `agent/tools/`, `agent/utils/`, `agent/middleware/`, `agent/integrations/`, `agent/dashboard/`, `agent/webhooks/` handler modules) |
|
||||
| moved upstream but absent from fork (added in the 91 interim commits — no-op for us) | 9 |
|
||||
|
||||
### 2a. MECHANICAL (fork-touched, pure rename — the bulk)
|
||||
`git mv` fork's file to the new path; no content change. 57 files:
|
||||
|
||||
- Root/docs/resources: `INSTALLATION.md → docs/INSTALLATION.md`, `default_prompt.md → agent/resources/default_prompt.md` (pairs with the `prompt.py` loader hunk — see HAND-CARRY), `agent/reviewer_findings.py → agent/review/findings.py`.
|
||||
- Tests (46): the full `tests/test_*.py → tests/<domain>/test_*.py` set, e.g. `tests/test_dispatch.py → tests/agent/`, `tests/test_workflow_push_guard.py → tests/agent/`, `tests/test_plan_mode.py`, `tests/test_plan_review.py → tests/agent/`, `tests/test_auth_sources.py`, `tests/test_authorship.py`, `tests/test_encryption*→ tests/auth/`, `tests/test_github_app.py`, `tests/test_open_pull_request.py`, `tests/test_pr_creation_guard.py → tests/github/`, `tests/test_gateway.py`, `tests/test_proxy_auth.py`, `tests/test_local_integration.py → tests/sandbox/`, sanitize/middleware tests → `tests/middleware/`, model tests → `tests/models/`, Slack tool tests → `tests/slack/`, dashboard/team-settings tests → `tests/dashboard/`, `tests/test_completion_webhook.py → tests/webhooks/`, etc. (full list in `docs/upstream-sync/domain-reorg/cross.json`, key `mech`).
|
||||
- UI (10): `ui/src/lib/agents/{api,queries,types,streamMessagesToUi,sidebarFilter,messageTimestamps}.ts → ui/src/features/agents/lib/`, `ui/src/components/agents/PrHeader.tsx → ui/src/features/reviews/components/`, `MessageTimestamp.tsx`, `diffUtils.ts`.
|
||||
|
||||
Plus the 127 fork-untouched moved files (same treatment, zero divergence risk).
|
||||
|
||||
### 2b. HAND-CARRY
|
||||
|
||||
**(i) R<100 moved files fork also touched — 34 files.** Upstream's edits are exclusively path rewires; replicate the same rewires on the fork's content after `git mv`:
|
||||
- Python: `agent/reviewer_publish.py → agent/review/publish.py` (R099: `from .reviewer_findings import` → `from .findings import`, `from .utils.X` → `from ..utils.X`), same for `reviewer_reconcile.py`, `reviewer_trace_context.py`; reviewer test files R062–R099 retarget `webapp` → `webhook_common` / `github_webhooks` monkeypatch modules; `tests/test_e2b_integration.py → tests/sandbox/` (fork re-implemented E2B sync — keep fork content, fix imports only).
|
||||
- UI: 20 `.tsx/.ts` files where the only edits are `@/components/agents/...` → `@/features/agents/components/...` and `@/lib/agents/...` → `@/features/agents/lib/...` (verified zero non-import edits on the worst-looking case, `AgentThreadView.tsx` R092). Fork-diverged files in this set that must keep fork content: `PlanReview.tsx` (plan-mode #130), `WorkflowApprovalCard.tsx`, `AgentsSidebar.tsx`, `SidebarFilterMenu.tsx`, `AgentGitPanel.tsx`, `AutomationEditor.tsx`.
|
||||
|
||||
**(ii) M×M in-place overlap — 34 files, of which the substantive ten:**
|
||||
|
||||
| file | upstream's reorg edit | fork action |
|
||||
|---|---|---|
|
||||
| `agent/webapp.py` (fork: **2,590 lines**) | gutted to 4-line shim; content → `webhooks/common.py` + `api/app.py` + `api/health.py` + `*_routes.py` | **the big one** — split the fork's monolith the same way, carrying fork-only Jira/Confluence/Connect routes (see §3) |
|
||||
| `agent/server.py` | extract 4 constants → `runtime/constants.py`, `graph_loaded_for_execution` → `runtime/execution.py`; adds public aliases `get_cached_sandbox_backend` etc. | replicate extraction on fork content; fork's sync sandbox lifecycle stays in `server.py`/`utils/sandbox_state.py` untouched — `runtime/sandbox.py` shim delegates to `agent.server` (upstream's own shim does exactly this, so it wraps fork code cleanly) |
|
||||
| `agent/prompt.py` | `DEFAULT_PROMPT_PATH` env-only + `importlib.resources` load of `agent/resources/default_prompt.md` | apply this one hunk by hand to fork's heavily customized `prompt.py`; **verify the wheel packages the .md** (upstream did *not* touch `pyproject.toml`; `packages=["agent"]` under hatchling should carry it — build and check) |
|
||||
| `agent/reviewer.py` / `agent/analyzer.py` / `agent/chat.py` | import rewires to `agent.review.*` / small | sed-level on fork content |
|
||||
| `agent/webhooks/{github,linear,slack}.py` | `from agent import webapp` → `from . import common`; `webapp.X` → `common.X` (module-attribute style preserved so monkeypatching keeps working) | **caution:** these exist on *both* sides with different content (fork built its own split earlier). No `git mv` applies — sed the fork's files; never adopt upstream's |
|
||||
| `tests/conftest.py` | `from agent import webapp` → `from agent.webhooks import common as webhook_common` (auto-review fixture) | same sed on fork's conftest |
|
||||
| `tests/e2e/harness.py` | `from agent.webapp import app, generate_thread_id_from_slack_thread` → `from agent.api.app import app` + `from agent.utils.thread_ids import ...` | fork already has `agent/utils/thread_ids.py` — same retarget |
|
||||
| `ui/tsconfig.json` / `ui/eslint.config.js` | replace the 8-file `ported/` exclude lists with `src/features/agents/experiments/**` | adopt the glob (simplification, no behavior change); `ui/vite.config.ts` upstream edit is cosmetic churn on the fork-only mock-harness plugin — skip |
|
||||
| `langgraph.json` | entrypoints → `agent.graphs.*` | retarget fork's file **and add `ci_monitor": "agent.graphs.ci_monitor:get_ci_monitor"` shim** for the fork-only graph (upstream deleted its ci-autofix cluster; fork keeps it) |
|
||||
| `AGENTS.md`/`CLAUDE.md`/`README.md` | doc-path updates | fork-rewritten docs — update path references manually (CLAUDE.md architecture sections name `agent/webapp.py`, tool/test paths) |
|
||||
|
||||
The remaining ~24 M×M files (`agent/tools/add_finding.py` and the other reviewer tools, `agent/dashboard/{eval_jobs,review_api,review_chat_api}.py`, `evals/reviewer/*`, `ui/src/routes/*.tsx`, `agent/utils/github_org_membership.py`, `agent/middleware/settle_review_check.py`) take 1–3-line import seds (`..reviewer_findings` → `..review.findings`, `@/components/agents` → `@/features/...`).
|
||||
|
||||
**Blast-radius counts (fork tree):** 38 Python files import `reviewer_*`/`review_style_*` modules; 12 Python files import `agent.webapp`; **240 `monkeypatch.setattr(webapp, ...)` sites across 11 test files** must retarget to `webhook_common`/handler modules; 54 UI files import `@/components/agents` or `@/lib/agents`.
|
||||
|
||||
### 2c. FORK-ONLY placement proposals (64 true fork-only files)
|
||||
|
||||
Upstream's domain logic: tools stay flat in `agent/tools/`; util clients in `agent/utils/`; webhook *handlers* in `agent/webhooks/<source>.py` with HTTP routes in `agent/webhooks/<source>_routes.py`; tests in `tests/<domain>/`.
|
||||
|
||||
**Source — stays put (no move needed):**
|
||||
- Atlassian tools `agent/tools/{jira_*,confluence_*}.py` (11 files) → stay (`agent/tools/` unmoved by reorg).
|
||||
- `agent/utils/{jira,confluence,adf,atlassian_connect,jira_project_repo_map,confluence_space_repo_map}.py` → stay.
|
||||
- Fork middleware, `agent/integrations/e2b.py`, dashboard additions, `.githooks/`, `.github/`, `scripts/`, `docs/upstream-sync/`, `docs/repo-conventions/`, `deploy/` → stay.
|
||||
|
||||
**Source — new homes created by the split (part of the webapp-split commit):**
|
||||
- `agent/webhooks/jira.py`, `agent/webhooks/confluence.py` → stay as handler modules; **add fork-only `agent/webhooks/jira_routes.py` and `agent/webhooks/confluence_routes.py`** mirroring upstream's `github_routes.py` pattern (routes access helpers via `common.X`).
|
||||
- Atlassian Connect lifecycle/descriptor routes (`/connect/*`, `GET /connect/atlassian-connect.json`) → propose `agent/webhooks/confluence_routes.py` (they are Confluence-trigger plumbing) or a dedicated `agent/webhooks/connect_routes.py` if cleaner; register in fork's `agent/api/app.py`.
|
||||
|
||||
**Tests — 13 fork-only/uncovered files:**
|
||||
|
||||
| file | proposed home |
|
||||
|---|---|
|
||||
| `tests/test_jira_webhook_{author,corroboration,replay}.py`, `tests/test_confluence_webhook.py`, `tests/test_linear_webhook_replay.py` | `tests/webhooks/` |
|
||||
| `tests/test_atlassian_connect.py` | `tests/auth/` (JWT/qsh verification surface; alternative `tests/webhooks/`) |
|
||||
| `tests/test_jira_utils.py`, `tests/test_confluence_utils.py` | `tests/tools/` (client layer backing the Jira/Confluence tools) |
|
||||
| `tests/test_repo_binding_isolation.py` (TID-COLLIDE-01 guard) | `tests/sandbox/` (it exercises the sandbox/GitHub-token per-thread caches; alternative `tests/webhooks/`) |
|
||||
| `tests/test_auth_error_leak.py` | `tests/auth/` |
|
||||
| `tests/test_app_bot_identity.py` | `tests/github/` (bot authorship/PR attribution) |
|
||||
| `tests/test_ci_autofix.py`, `tests/test_autofix_webhook.py` | `tests/github/` (upstream deleted the impl cluster; fork keeps `agent/ci_autofix.py`, `agent/ci_monitor.py` in place) |
|
||||
|
||||
UI fork-only: `ui/src/components/PwaUpdateToast.tsx` → `ui/src/components/` stays (not an agents-feature file); `ui/src/lib/auth-redirect*.{ts,tsx}` → stay in `ui/src/lib/` (upstream kept non-agents lib files there); `ui/src/routes/$owner.$repo.pull.$number.tsx` → stays (`routes/` not moved). `tests/e2e/**` (fork harness + specs) → stays; upstream kept `tests/e2e/` in place.
|
||||
|
||||
---
|
||||
|
||||
## 3. Consolidations / decision list for Adam
|
||||
|
||||
1. **FastAPI layer split (the only true consolidation) — FLAG-HUMAN, auth surface.** Fork's 2,590-line `agent/webapp.py` carries fork-only webhook auth: `verify_jira_secret` (+ optional HMAC/timestamp), Atlassian Connect JWT/qsh handling, the GitHub/Slack/Linear signature paths, token-attribution gating, TID-COLLIDE-01 thread-binding. Splitting it into `webhooks/common.py` + `api/` + `*_routes.py` moves signature-verification and dispatch code across files. Recommendation: **adopt the split** (it is behavior-preserving by construction — upstream kept module-attribute access precisely so monkeypatched tests stay valid, and the fork's webhook tests are the safety net), but treat the split commit as a sensitive change: **/sh-security-review required** (auth/webhook surface), and per the fork playbook surface the resolution choice to you before merge. No GPT-4.1 cross-family review strictly triggered (no IAM/Lambda-signature change), but the split of webhook verification code is a reasonable opt-in candidate.
|
||||
2. **`langgraph.json` entrypoint retarget** — deployment-manifest change (graphs → `agent.graphs.*` shims; `http.app` unchanged). Verify the LangGraph deployment redeploys cleanly; decide whether fork-only `ci_monitor` gets a `agent/graphs/ci_monitor.py` shim (recommended, for symmetry) or keeps its old path (inconsistent).
|
||||
3. **Reviewer consolidation** → `agent/review/` package: adopt. It is 9 pure moves + import rewires; fork's reviewer customizations (#1713 reconciliation, findings model, publish flow) ride along untouched. No content decision needed.
|
||||
4. **CI-autofix cluster** (upstream deleted `agent/ci_autofix.py`; fork keeps it): confirm keep-baseline, and approve its post-split wiring point (its webhook triggers live in the split `github.py`/`common.py`) + test placement (`tests/github/`).
|
||||
5. **UI `experiments/` adoption**: upstream renames `ported/` → `features/agents/experiments/` + `chat/` and swaps the 8-file tsconfig/eslint exclude lists for one glob. Adopt (pure simplification). Fork-diverged `DiffView.tsx`, `CloudPromptBar.tsx`, etc. keep fork content.
|
||||
6. **Atlassian placements** (§2c): approve `jira_routes.py`/`confluence_routes.py` naming and where Connect lifecycle routes land — this is fork-only auth surface; your call on `connect_routes.py` vs folding into `confluence_routes.py`.
|
||||
7. **Sequencing vs #1736 (bind cached GitHub tokens to users — priority security pick)**: recommend adopting the reorg **first**, because #1736 is written against `agent/webhooks/common.py`, which only exists after the split; it then lands near-clean (still gated by cross-review + /sh-security-review per its ledger row).
|
||||
|
||||
## 4. Hazards check (CLAUDE.md playbook)
|
||||
|
||||
- **(a) Thin-router re-import rebinds:** post-reorg upstream is *clean* — `git grep 'from \.webhooks\.' 8356eb34 -- agent/webapp.py agent/api agent/webhooks/common.py` returns nothing; routes access handlers via `from . import github as service` + `service.X`/`common.X` module-attribute style, so the rebind hazard the playbook documents is designed out. Residual risk only if a hand-carry file drifts toward upstream *content*: `agent/webhooks/{github,linear,slack}.py` exist on both sides with different content (fork versions carry the fixes) — taking upstream's file here silently drops fork behavior. Same for `tests/conftest.py` and `tests/e2e/harness.py`. Rule for the exercise: **upstream content may only be taken for the 21 "A" structural shims**, everything else moves fork content.
|
||||
- **(b) Paired tests move with impls:** the map's test moves are 1:1 with unmoved impls (impl modules stay importable at old or shimmed paths), so no vertical splits arise; the 13 uncovered fork tests get the placements in §2c. Keep `tests/test_e2b_integration.py` (fork's sync E2B) as fork content when moving to `tests/sandbox/`. `tests/middleware/test_sandbox_recovery.py` → `tests/sandbox/` (fork has `tests/middleware/`? — it exists only as the upstream pre-path; fork's copy sits wherever it was cherry-picked; include in the mechanical sweep).
|
||||
- **(c) Tooling path references:** verified —
|
||||
- `Makefile`: only generic `tests/` (`TEST_FILE ?= tests/`) — unaffected; `make triage-render/-check` scripts don't reference moved paths.
|
||||
- `pyproject.toml`: `packages = ["agent"]`, `testpaths = ["tests"]` — both recursive, unaffected; **verify wheel includes `agent/resources/default_prompt.md`** (only real packaging check).
|
||||
- `.github/workflows/ci.yml`: references `tests/e2e/**` (unmoved) and `ui/` bun checks — unaffected; `reviewer-eval.yml` → `evals/` (unmoved).
|
||||
- `langgraph.json` — changes (see decision 2); fork-only `tests/e2e/langgraph.e2e.json` uses its own `agent_entrypoint.py` (imports `agent.server:traced_agent`, which remains valid) — no change needed.
|
||||
- UI: `@` alias root (`src/`) unchanged; `vite.config.ts`/`tsconfig.json`/`eslint.config.js` need only the exclude-glob swap; **bun stays** — do not import upstream's pnpm bits (fork oddly carries a `ui/pnpm-workspace.yaml`; consider deleting it in this exercise as lockfile hygiene, per playbook rule 7).
|
||||
- `scripts/`, `.githooks/`: no moved-path references found.
|
||||
- **(d) Public entrypoints:** upstream's claim "without changing its public entrypoints" is true **behaviorally, false textually** — `langgraph.json` graph strings all change to `agent.graphs.*` (verified by diff). HTTP surface (`agent.webapp:app`) and all webhook URLs unchanged. Fork must mirror the graph-string change plus its `ci_monitor` extra.
|
||||
|
||||
## 5. Payoff — the 20 deferred ledger rows (docs/upstream-sync/triage.md)
|
||||
|
||||
Of the 19 deferred rows besides `8356eb34` itself:
|
||||
|
||||
- **Clean picks after adoption (path remap was the blocker): 5** — #1732 dashboard label rendering, #1761 capitalize labels, #1744 collapse git panel, #1748 Linear issue search (test-path remap), #1742 defensive copy.
|
||||
- **Near-clean after adoption (small content deltas or review gates remain): 3** — **#1736 GitHub token binding** (biggest beneficiary: written against `webhooks/common.py`; auth gates still apply), #1758 sandbox-create JSON env, #1760 separate LangSmith key/endpoint (both additive to diverged `integrations/langsmith.py` — small reconciles).
|
||||
- **Still content reconciliation for fork-divergence reasons: 9** — #1724 (Slack NL plan approvals), #1731 (OpenAI Responses history vs #155 middleware), #1734 (Slack DMs), #1737 (reviewer diff bounds), #1741 (SSRF image fetches), #1733 (todos default-off vs fork prompt), #1735 (untagged two-party Slack), #1747 (Slack run links), #1719 (web-tool offload vs sync sandbox lifecycle). Adoption still removes their test/UI path-remap tax.
|
||||
- **Not path-related (product/deps decisions): 2** — #1727 (GPT-5.5 default; rides the no-OpenAI-models decision), #1745 (deepagents 0.7.0a7 alpha validation).
|
||||
|
||||
Net: **8 of 19 rows become clean/near-clean**, and *every future upstream commit* stops needing path remaps — the standing tax on the cherry-pick pipeline disappears (recent won't-merge rows #1759/#1769 cited the layout mismatch explicitly).
|
||||
|
||||
## 6. Execution plan sketch (one commit per cascade class; validate ruff → `pytest --co` → unit → e2e per layer)
|
||||
|
||||
Work on a throwaway branch off `dev`; promote as one PR with granular commits.
|
||||
|
||||
1. **C1 — docs/resources/assets** (~1h): `git mv` `INSTALLATION.md`/`CUSTOMIZATION.md` → `docs/`, `static/` → `assets/` (check README badge/image refs), `default_prompt.md` → `agent/resources/` + apply the `prompt.py` importlib.resources hunk + `agent/resources/__init__.py`; build wheel, confirm the .md ships. Gate: ruff + unit.
|
||||
2. **C2 — `agent/review/` package** (~half day): mv 9 reviewer/style modules, rewrite the 38 importer files, add `agent/review/__init__.py` (fork's export surface). Gate: ruff + `pytest --co` + reviewer unit tests.
|
||||
3. **C3 — graphs/runtime/providers shims + `langgraph.json`** (~2h): take upstream's 21 structural A-files nearly verbatim (they delegate to `agent.server` etc., which is fork code), add fork-only `agent/graphs/ci_monitor.py`, retarget `langgraph.json`. Gate: `pytest --co` + `make dev` boots all graphs. **Adam sign-off: decision 2.**
|
||||
4. **C4 — FastAPI split** (~1–1.5 days, the critical commit): split fork's `webapp.py` → `webhooks/common.py` + `api/{app,health}.py` + `{github,linear,slack,jira,confluence}_routes.py` (+ Connect routes per decision 6); sed handlers `webapp.` → `common.`; retarget 240 test monkeypatch sites + `tests/conftest.py` + `tests/e2e/harness.py`; keep `webapp.py` shim. Gate: full unit + **E2E (Playwright + real LangGraph dev server)** — the only layer that catches wiring drift. **Adam sign-offs: decisions 1, 4, 6; /sh-security-review on this commit.**
|
||||
5. **C5 — tests/<domain>/ moves** (~half day): mechanical map moves (§2a) + R<100 monkeypatch retargets not already done in C4 + the 13 fork-only placements (§2c). Gate: `pytest --co` + full unit (paths only, no logic).
|
||||
6. **C6 — UI features/ moves** (~half day–1 day): `git mv` per map incl. `ported/` → `experiments|chat`, rewrite `@/` imports in the 54 importer files + moved files, tsconfig/eslint exclude glob, AgentPromptBar shim retarget, delete `ui/pnpm-workspace.yaml` (lockfile hygiene). Gate: `bunx tsc --noEmit` + bun build + Playwright e2e. **Adam sign-off: decision 5.**
|
||||
7. **C7 — docs + ledger + memory** (~2h): update fork `CLAUDE.md`/`README`/`AGENTS.md` path references, flip `8356eb34` to Landed in `triage.jsonl` (+ re-triage notes on the 8 unblocked rows), update the open-swe project memory, Confluence architecture page if module map is documented there.
|
||||
|
||||
**Effort estimate: 3–5 focused days** end-to-end, dominated by C4. Rollback story is clean: each commit is independently revertable until C4; after C4, C5/C6 are path-only.
|
||||
|
||||
## Spot-checks validating the classification method
|
||||
|
||||
1. **Mechanical** — `tests/test_dispatch.py → tests/agent/test_dispatch.py` listed `R100` in the diff-tree output (byte-identical move); fork's diverged copy moves via `git mv` untouched.
|
||||
2. **Hand-carry (R<100)** — `agent/reviewer_publish.py → agent/review/publish.py` (R099): upstream's entire edit is the import block (`from .reviewer_findings import` → `from .findings import`, `from .utils.github_http import` → `from ..utils.github_http import`); no logic lines. Worst-scoring test `tests/test_pr_ready_auto_review.py` (R062): every hunk is `monkeypatch.setattr(webapp, ...)` → `monkeypatch.setattr(webhook_common, ...)` / `webapp.process_github_pr_ready` → `github_webhooks.process_github_pr_ready`. Worst-scoring fork-diverged UI file `AgentThreadView.tsx` (R092): grep of the rename diff shows 0 non-import changed lines.
|
||||
3. **Consolidation** — post-reorg `agent/webapp.py` is exactly `from .api.app import app` (4 lines, verified via `git show 8356eb34:agent/webapp.py`); `agent/webhooks/github.py`'s reorg diff swaps `from agent import webapp` for `from . import common` and rewrites `webapp.X` → `common.X` with the docstring explicitly noting module-attribute access is preserved for monkeypatching.
|
||||
4. **Test pairing** — `tests/conftest.py` reorg diff retargets the autouse auto-review fixture from `agent.webapp` to `agent.webhooks.common`, confirming test fixtures follow the split, not the moves.
|
||||
|
||||
Working artifacts: `docs/upstream-sync/domain-reorg/{movemap-m50.txt, fork-divergence-status.txt, cross.json, forkonly.json, merge-tree-now.txt, head-tree.txt, upstream-pre-tree.txt, upstream-main-tree.txt}`.
|
||||
568
docs/upstream-sync/domain-reorg/upstream-main-tree.txt
Normal file
568
docs/upstream-sync/domain-reorg/upstream-main-tree.txt
Normal file
|
|
@ -0,0 +1,568 @@
|
|||
.codespellignore
|
||||
.dockerignore
|
||||
.github/dependabot.yml
|
||||
.github/workflows/ci.yml
|
||||
.github/workflows/pr_lint.yml
|
||||
.github/workflows/promote_main_to_prod.yml
|
||||
.github/workflows/reviewer_eval.yml
|
||||
.gitignore
|
||||
AGENTS.md
|
||||
CLAUDE.md
|
||||
Dockerfile
|
||||
LICENSE
|
||||
Makefile
|
||||
README.md
|
||||
SECURITY.md
|
||||
agent/analyzer.py
|
||||
agent/api/__init__.py
|
||||
agent/api/app.py
|
||||
agent/api/health.py
|
||||
agent/chat.py
|
||||
agent/completion.py
|
||||
agent/dashboard/__init__.py
|
||||
agent/dashboard/admin.py
|
||||
agent/dashboard/agent_instructions.py
|
||||
agent/dashboard/agent_overrides.py
|
||||
agent/dashboard/agent_usage.py
|
||||
agent/dashboard/analyzer_cron.py
|
||||
agent/dashboard/autofix_state.py
|
||||
agent/dashboard/enabled_repos.py
|
||||
agent/dashboard/eval_jobs.py
|
||||
agent/dashboard/notion_oauth.py
|
||||
agent/dashboard/oauth.py
|
||||
agent/dashboard/options.py
|
||||
agent/dashboard/plan_api.py
|
||||
agent/dashboard/plan_store.py
|
||||
agent/dashboard/pr_diff.py
|
||||
agent/dashboard/profiles.py
|
||||
agent/dashboard/repo_access.py
|
||||
agent/dashboard/repo_snapshots.py
|
||||
agent/dashboard/review_api.py
|
||||
agent/dashboard/review_chat_api.py
|
||||
agent/dashboard/review_style_jobs.py
|
||||
agent/dashboard/review_styles.py
|
||||
agent/dashboard/routes.py
|
||||
agent/dashboard/schedules.py
|
||||
agent/dashboard/slack_oauth.py
|
||||
agent/dashboard/team_credentials.py
|
||||
agent/dashboard/team_settings.py
|
||||
agent/dashboard/thread_api.py
|
||||
agent/dashboard/user_credentials.py
|
||||
agent/dashboard/user_mappings.py
|
||||
agent/dashboard/workflow_approval.py
|
||||
agent/dashboard/workflow_approval_api.py
|
||||
agent/dispatch.py
|
||||
agent/encryption.py
|
||||
agent/graphs/__init__.py
|
||||
agent/graphs/agent.py
|
||||
agent/graphs/analyzer.py
|
||||
agent/graphs/chat.py
|
||||
agent/graphs/reviewer.py
|
||||
agent/graphs/scheduler.py
|
||||
agent/integrations/__init__.py
|
||||
agent/integrations/corridor_mcp.py
|
||||
agent/integrations/currents_tools.py
|
||||
agent/integrations/datadog_mcp.py
|
||||
agent/integrations/daytona.py
|
||||
agent/integrations/e2b.py
|
||||
agent/integrations/langsmith.py
|
||||
agent/integrations/langsmith_tools.py
|
||||
agent/integrations/local.py
|
||||
agent/integrations/modal.py
|
||||
agent/integrations/notion_mcp.py
|
||||
agent/integrations/runloop.py
|
||||
agent/integrations/stagehand_browser.py
|
||||
agent/middleware/__init__.py
|
||||
agent/middleware/check_message_queue.py
|
||||
agent/middleware/ensure_no_empty_msg.py
|
||||
agent/middleware/exclude_tools.py
|
||||
agent/middleware/model_fallback.py
|
||||
agent/middleware/notify_step_limit.py
|
||||
agent/middleware/plan_mode.py
|
||||
agent/middleware/pr_creation_guard.py
|
||||
agent/middleware/prepare_run.py
|
||||
agent/middleware/refresh_github_proxy.py
|
||||
agent/middleware/refresh_slack_status.py
|
||||
agent/middleware/repair_orphaned_tool_calls.py
|
||||
agent/middleware/sandbox_circuit_breaker.py
|
||||
agent/middleware/sanitize_fireworks_messages.py
|
||||
agent/middleware/sanitize_thinking_blocks.py
|
||||
agent/middleware/sanitize_tool_inputs.py
|
||||
agent/middleware/settle_review_check.py
|
||||
agent/middleware/subdir_agents.py
|
||||
agent/middleware/task_retry.py
|
||||
agent/middleware/timeout_wrapup.py
|
||||
agent/middleware/tool_artifact.py
|
||||
agent/middleware/tool_error_handler.py
|
||||
agent/middleware/workflow_push_guard.py
|
||||
agent/prompt.py
|
||||
agent/providers/__init__.py
|
||||
agent/reconcile.py
|
||||
agent/resources/__init__.py
|
||||
agent/resources/default_prompt.md
|
||||
agent/review/__init__.py
|
||||
agent/review/diff.py
|
||||
agent/review/eval_store.py
|
||||
agent/review/findings.py
|
||||
agent/review/groups.py
|
||||
agent/review/publish.py
|
||||
agent/review/reconcile.py
|
||||
agent/review/style_collector.py
|
||||
agent/review/style_guidance.py
|
||||
agent/review/trace_context.py
|
||||
agent/reviewer.py
|
||||
agent/runtime/__init__.py
|
||||
agent/runtime/constants.py
|
||||
agent/runtime/execution.py
|
||||
agent/runtime/sandbox.py
|
||||
agent/scheduler.py
|
||||
agent/server.py
|
||||
agent/skills/bootstrap-repo-analysis/SKILL.md
|
||||
agent/skills/continual-learning/SKILL.md
|
||||
agent/tools/__init__.py
|
||||
agent/tools/_sandbox_output.py
|
||||
agent/tools/add_finding.py
|
||||
agent/tools/enter_plan_mode.py
|
||||
agent/tools/fetch_review_diff.py
|
||||
agent/tools/fetch_url.py
|
||||
agent/tools/http_request.py
|
||||
agent/tools/linear_comment.py
|
||||
agent/tools/linear_create_issue.py
|
||||
agent/tools/linear_delete_issue.py
|
||||
agent/tools/linear_get_issue.py
|
||||
agent/tools/linear_get_issue_comments.py
|
||||
agent/tools/linear_list_teams.py
|
||||
agent/tools/linear_search_issues.py
|
||||
agent/tools/linear_update_issue.py
|
||||
agent/tools/list_findings.py
|
||||
agent/tools/list_review_findings.py
|
||||
agent/tools/open_pull_request.py
|
||||
agent/tools/publish_review.py
|
||||
agent/tools/read_finding_outcomes.py
|
||||
agent/tools/read_repo_file.py
|
||||
agent/tools/reply_to_finding_thread.py
|
||||
agent/tools/report_platform_issue.py
|
||||
agent/tools/request_pr_review.py
|
||||
agent/tools/resolve_finding_thread.py
|
||||
agent/tools/save_plan.py
|
||||
agent/tools/save_review_style.py
|
||||
agent/tools/schedule_thread_wakeup.py
|
||||
agent/tools/search_repo_code.py
|
||||
agent/tools/slack_add_reaction.py
|
||||
agent/tools/slack_read_thread_messages.py
|
||||
agent/tools/slack_start_new_thread.py
|
||||
agent/tools/slack_thread_reply.py
|
||||
agent/tools/update_finding.py
|
||||
agent/tools/web_search.py
|
||||
agent/utils/agents_md.py
|
||||
agent/utils/analyzer_skills.py
|
||||
agent/utils/api_standards_skill.py
|
||||
agent/utils/auth.py
|
||||
agent/utils/authorship.py
|
||||
agent/utils/comments.py
|
||||
agent/utils/dashboard_handoff.py
|
||||
agent/utils/dashboard_links.py
|
||||
agent/utils/deferred_model.py
|
||||
agent/utils/gateway.py
|
||||
agent/utils/github_app.py
|
||||
agent/utils/github_checks.py
|
||||
agent/utils/github_ci.py
|
||||
agent/utils/github_comments.py
|
||||
agent/utils/github_feedback.py
|
||||
agent/utils/github_http.py
|
||||
agent/utils/github_org_membership.py
|
||||
agent/utils/github_proxy.py
|
||||
agent/utils/github_token.py
|
||||
agent/utils/http.py
|
||||
agent/utils/json_types.py
|
||||
agent/utils/langsmith.py
|
||||
agent/utils/linear.py
|
||||
agent/utils/linear_team_repo_map.py
|
||||
agent/utils/model.py
|
||||
agent/utils/multimodal.py
|
||||
agent/utils/repo.py
|
||||
agent/utils/repo_prep.py
|
||||
agent/utils/reviewer_outcomes.py
|
||||
agent/utils/sandbox.py
|
||||
agent/utils/sandbox_paths.py
|
||||
agent/utils/sandbox_state.py
|
||||
agent/utils/slack.py
|
||||
agent/utils/slack_feedback.py
|
||||
agent/utils/thread_ids.py
|
||||
agent/utils/thread_ops.py
|
||||
agent/utils/tracing.py
|
||||
agent/utils/ttl_cache.py
|
||||
agent/utils/url_safety.py
|
||||
agent/webapp.py
|
||||
agent/webhooks/__init__.py
|
||||
agent/webhooks/common.py
|
||||
agent/webhooks/github.py
|
||||
agent/webhooks/github_routes.py
|
||||
agent/webhooks/linear.py
|
||||
agent/webhooks/linear_routes.py
|
||||
agent/webhooks/slack.py
|
||||
agent/webhooks/slack_routes.py
|
||||
assets/dark.svg
|
||||
assets/light.svg
|
||||
docs/CUSTOMIZATION.md
|
||||
docs/INSTALLATION.md
|
||||
evals/reviewer/README.md
|
||||
evals/reviewer/build_dataset.py
|
||||
evals/reviewer/config.toml
|
||||
evals/reviewer/golden_comments/cal_dot_com.json
|
||||
evals/reviewer/golden_comments/discourse.json
|
||||
evals/reviewer/golden_comments/grafana.json
|
||||
evals/reviewer/golden_comments/keycloak.json
|
||||
evals/reviewer/golden_comments/sentry.json
|
||||
evals/reviewer/judge.py
|
||||
evals/reviewer/run_eval.py
|
||||
evals/reviewer/store_reporter.py
|
||||
evals/reviewer/target.py
|
||||
langgraph.json
|
||||
package.json
|
||||
pyproject.toml
|
||||
scripts/__init__.py
|
||||
scripts/check_pr_merge_status.py
|
||||
scripts/create_sandbox_snapshot.py
|
||||
scripts/list_snapshots.py
|
||||
scripts/purge_wakeup_crons.py
|
||||
tests/agent/test_agent_assembly_context.py
|
||||
tests/agent/test_agent_instructions.py
|
||||
tests/agent/test_agent_schedules.py
|
||||
tests/agent/test_agent_thread_pr_state.py
|
||||
tests/agent/test_agent_usage.py
|
||||
tests/agent/test_agents_md.py
|
||||
tests/agent/test_api_standards_skill.py
|
||||
tests/agent/test_dispatch.py
|
||||
tests/agent/test_import_hygiene.py
|
||||
tests/agent/test_langsmith_trace_url.py
|
||||
tests/agent/test_multimodal.py
|
||||
tests/agent/test_plan_mode.py
|
||||
tests/agent/test_plan_review.py
|
||||
tests/agent/test_prompt_default_repo.py
|
||||
tests/agent/test_repo_prep.py
|
||||
tests/agent/test_task_retry.py
|
||||
tests/agent/test_timeout_wrapup.py
|
||||
tests/agent/test_workflow_push_guard.py
|
||||
tests/analyzer/test_analyzer_cron.py
|
||||
tests/analyzer/test_analyzer_skills.py
|
||||
tests/analyzer/test_eval_jobs.py
|
||||
tests/analyzer/test_eval_store_reporter.py
|
||||
tests/auth/test_auth_sources.py
|
||||
tests/auth/test_authorship.py
|
||||
tests/auth/test_encryption.py
|
||||
tests/auth/test_github_oauth_refresh.py
|
||||
tests/auth/test_github_token_ttl.py
|
||||
tests/auth/test_notion_oauth.py
|
||||
tests/auth/test_slack_oauth.py
|
||||
tests/auth/test_user_credentials.py
|
||||
tests/conftest.py
|
||||
tests/dashboard/test_account_link.py
|
||||
tests/dashboard/test_autofix_state.py
|
||||
tests/dashboard/test_dashboard_admin.py
|
||||
tests/dashboard/test_dashboard_csrf.py
|
||||
tests/dashboard/test_dashboard_links.py
|
||||
tests/dashboard/test_dashboard_oauth_redirect.py
|
||||
tests/dashboard/test_dashboard_org_login_gate.py
|
||||
tests/dashboard/test_dashboard_repo_optional.py
|
||||
tests/dashboard/test_dashboard_repos.py
|
||||
tests/dashboard/test_dashboard_reviews.py
|
||||
tests/dashboard/test_dashboard_run_email.py
|
||||
tests/dashboard/test_dashboard_thread_api.py
|
||||
tests/dashboard/test_dashboard_thread_api_activity.py
|
||||
tests/dashboard/test_dashboard_web_handoff.py
|
||||
tests/dashboard/test_public_repo_org_gate.py
|
||||
tests/dashboard/test_team_credentials.py
|
||||
tests/dashboard/test_team_settings_fable.py
|
||||
tests/dashboard/test_team_settings_grouping.py
|
||||
tests/dashboard/test_team_settings_org_guidelines.py
|
||||
tests/dashboard/test_user_mappings.py
|
||||
tests/dashboard/test_workflow_approval_api.py
|
||||
tests/e2e/.gitignore
|
||||
tests/e2e/README.md
|
||||
tests/e2e/agent_entrypoint.py
|
||||
tests/e2e/dev-mock.sh
|
||||
tests/e2e/e2e_env.py
|
||||
tests/e2e/fake_llm.py
|
||||
tests/e2e/fakes.py
|
||||
tests/e2e/global-setup.ts
|
||||
tests/e2e/harness.py
|
||||
tests/e2e/langgraph.e2e.json
|
||||
tests/e2e/package-lock.json
|
||||
tests/e2e/package.json
|
||||
tests/e2e/patches.py
|
||||
tests/e2e/playwright.config.ts
|
||||
tests/e2e/screenshots/queued-messages-dashboard.png
|
||||
tests/e2e/static/github.html
|
||||
tests/e2e/static/slack.html
|
||||
tests/e2e/tests/dashboard.spec.ts
|
||||
tests/e2e/tests/full_flow.spec.ts
|
||||
tests/e2e/tests/plan_review.spec.ts
|
||||
tests/e2e/tests/sandbox_id.spec.ts
|
||||
tests/e2e/tests/slack_debounce.spec.ts
|
||||
tests/e2e/tests/slack_untagged_reply.spec.ts
|
||||
tests/github/test_github_app.py
|
||||
tests/github/test_github_checks.py
|
||||
tests/github/test_github_ci.py
|
||||
tests/github/test_github_comment_prompts.py
|
||||
tests/github/test_github_feedback.py
|
||||
tests/github/test_github_http.py
|
||||
tests/github/test_github_issue_webhook.py
|
||||
tests/github/test_github_proxy_refresh.py
|
||||
tests/github/test_normalize_repo.py
|
||||
tests/github/test_open_pull_request.py
|
||||
tests/github/test_pr_creation_guard.py
|
||||
tests/github/test_repo_extraction.py
|
||||
tests/middleware/test_check_message_queue.py
|
||||
tests/middleware/test_ensure_no_empty_msg.py
|
||||
tests/middleware/test_model_fallback_middleware.py
|
||||
tests/middleware/test_notify_step_limit_middleware.py
|
||||
tests/middleware/test_prepare_run_middleware.py
|
||||
tests/middleware/test_repair_orphaned_tool_calls.py
|
||||
tests/middleware/test_sanitize_fireworks_messages.py
|
||||
tests/middleware/test_sanitize_thinking_blocks.py
|
||||
tests/middleware/test_sanitize_tool_inputs.py
|
||||
tests/middleware/test_subdir_agents_middleware.py
|
||||
tests/middleware/test_tool_artifact_middleware.py
|
||||
tests/models/test_agent_subagent_models.py
|
||||
tests/models/test_anthropic_effort.py
|
||||
tests/models/test_anthropic_model.py
|
||||
tests/models/test_deferred_model.py
|
||||
tests/models/test_fireworks_model.py
|
||||
tests/models/test_google_model.py
|
||||
tests/models/test_model_fallback_resolution.py
|
||||
tests/reviewer/test_factory_config_isolation.py
|
||||
tests/reviewer/test_fetch_review_diff_tool.py
|
||||
tests/reviewer/test_pr_ready_auto_review.py
|
||||
tests/reviewer/test_recent_comments.py
|
||||
tests/reviewer/test_reconcile_sweep.py
|
||||
tests/reviewer/test_review_api.py
|
||||
tests/reviewer/test_review_chat.py
|
||||
tests/reviewer/test_review_style_collector.py
|
||||
tests/reviewer/test_review_style_sync.py
|
||||
tests/reviewer/test_review_styles_store.py
|
||||
tests/reviewer/test_reviewer.py
|
||||
tests/reviewer/test_reviewer_diff.py
|
||||
tests/reviewer/test_reviewer_eval_judge.py
|
||||
tests/reviewer/test_reviewer_eval_run.py
|
||||
tests/reviewer/test_reviewer_eval_target.py
|
||||
tests/reviewer/test_reviewer_findings.py
|
||||
tests/reviewer/test_reviewer_groups.py
|
||||
tests/reviewer/test_reviewer_outcomes.py
|
||||
tests/reviewer/test_reviewer_publish.py
|
||||
tests/reviewer/test_reviewer_reconcile.py
|
||||
tests/reviewer/test_reviewer_tools.py
|
||||
tests/reviewer/test_reviewer_trace_context.py
|
||||
tests/reviewer/test_reviewer_watch.py
|
||||
tests/sandbox/test_daytona_integration.py
|
||||
tests/sandbox/test_e2b_integration.py
|
||||
tests/sandbox/test_gateway.py
|
||||
tests/sandbox/test_langsmith_sandbox_config.py
|
||||
tests/sandbox/test_langsmith_sandbox_timeout.py
|
||||
tests/sandbox/test_local_integration.py
|
||||
tests/sandbox/test_proxy_auth.py
|
||||
tests/sandbox/test_repo_snapshots.py
|
||||
tests/sandbox/test_sandbox_paths.py
|
||||
tests/sandbox/test_sandbox_recovery.py
|
||||
tests/sandbox/test_sandbox_state.py
|
||||
tests/sandbox/test_stale_sandbox_creating.py
|
||||
tests/slack/test_refresh_slack_status_middleware.py
|
||||
tests/slack/test_slack_add_reaction_tool.py
|
||||
tests/slack/test_slack_assistants_status.py
|
||||
tests/slack/test_slack_context.py
|
||||
tests/slack/test_slack_feedback.py
|
||||
tests/slack/test_slack_start_new_thread_tool.py
|
||||
tests/slack/test_slack_thread_reply_tool.py
|
||||
tests/slack/test_slack_webhook_errors.py
|
||||
tests/test_openai_responses_replay.py
|
||||
tests/test_tool_output_offloading.py
|
||||
tests/tools/test_corridor_mcp.py
|
||||
tests/tools/test_currents_tools.py
|
||||
tests/tools/test_http_security.py
|
||||
tests/tools/test_linear_search_issues.py
|
||||
tests/tools/test_observability_tools.py
|
||||
tests/tools/test_report_platform_issue_tool.py
|
||||
tests/tools/test_schedule_thread_wakeup.py
|
||||
tests/tools/test_stagehand_browser.py
|
||||
tests/webhooks/test_completion_webhook.py
|
||||
tests/webhooks/test_linear_webhook_author.py
|
||||
ui/.cta.json
|
||||
ui/.gitignore
|
||||
ui/.prettierignore
|
||||
ui/.prettierrc
|
||||
ui/AGENTS.md
|
||||
ui/README.md
|
||||
ui/assets/LangChain_Symbol_LightBlue.png
|
||||
ui/assets/ic_launcher_round.png
|
||||
ui/assets/playstore-icon.png
|
||||
ui/components.json
|
||||
ui/eslint.config.js
|
||||
ui/package.json
|
||||
ui/pnpm-lock.yaml
|
||||
ui/pnpm-workspace.yaml
|
||||
ui/public/apple-touch-icon.png
|
||||
ui/public/favicon.png
|
||||
ui/public/gh-open-in-open-swe-dark.svg
|
||||
ui/public/gh-open-in-open-swe-light.svg
|
||||
ui/public/logo-mark.png
|
||||
ui/public/logo512.png
|
||||
ui/public/robots.txt
|
||||
ui/src/client.tsx
|
||||
ui/src/components/AgentInstructionsPanel.tsx
|
||||
ui/src/components/AppShell.tsx
|
||||
ui/src/components/AppSidebar.tsx
|
||||
ui/src/components/InstructionsEditor.tsx
|
||||
ui/src/components/RepoSnapshotsPanel.tsx
|
||||
ui/src/components/ReviewStylesPanel.tsx
|
||||
ui/src/components/SidebarUserMenu.tsx
|
||||
ui/src/components/sidebar-layout.tsx
|
||||
ui/src/components/ui/avatar.tsx
|
||||
ui/src/components/ui/badge.tsx
|
||||
ui/src/components/ui/button.tsx
|
||||
ui/src/components/ui/card.tsx
|
||||
ui/src/components/ui/combobox.tsx
|
||||
ui/src/components/ui/input-group.tsx
|
||||
ui/src/components/ui/input.tsx
|
||||
ui/src/components/ui/label.tsx
|
||||
ui/src/components/ui/select.tsx
|
||||
ui/src/components/ui/separator.tsx
|
||||
ui/src/components/ui/skeleton.tsx
|
||||
ui/src/components/ui/switch.tsx
|
||||
ui/src/components/ui/textarea.tsx
|
||||
ui/src/features/agents/components/AgentGitPanel.tsx
|
||||
ui/src/features/agents/components/AgentPromptBar.tsx
|
||||
ui/src/features/agents/components/AgentRunCard.tsx
|
||||
ui/src/features/agents/components/AgentThreadView.tsx
|
||||
ui/src/features/agents/components/AgentsHome.tsx
|
||||
ui/src/features/agents/components/AgentsSidebar.tsx
|
||||
ui/src/features/agents/components/AgentsThreadsPage.tsx
|
||||
ui/src/features/agents/components/OnboardingDialog.tsx
|
||||
ui/src/features/agents/components/PlanReview.tsx
|
||||
ui/src/features/agents/components/SidebarFilterMenu.tsx
|
||||
ui/src/features/agents/components/WorkflowApprovalCard.tsx
|
||||
ui/src/features/agents/components/chat/CloudPromptBar.tsx
|
||||
ui/src/features/agents/components/chat/CodeBlock.tsx
|
||||
ui/src/features/agents/components/chat/DiffView.tsx
|
||||
ui/src/features/agents/components/chat/Logo.tsx
|
||||
ui/src/features/agents/components/chat/Markdown.tsx
|
||||
ui/src/features/agents/components/chat/ReplyCard.tsx
|
||||
ui/src/features/agents/components/chat/ShellCommand.tsx
|
||||
ui/src/features/agents/components/chat/ToolExecution.test.ts
|
||||
ui/src/features/agents/components/chat/ToolExecution.tsx
|
||||
ui/src/features/agents/components/chat/toolExecutionDisplay.ts
|
||||
ui/src/features/agents/components/messages/AgentMessage.tsx
|
||||
ui/src/features/agents/components/messages/ChunkRenderer.tsx
|
||||
ui/src/features/agents/components/messages/MessageTimestamp.tsx
|
||||
ui/src/features/agents/components/messages/Messages.tsx
|
||||
ui/src/features/agents/components/messages/ReasoningBlock.tsx
|
||||
ui/src/features/agents/components/messages/ThinkingSpinner.tsx
|
||||
ui/src/features/agents/components/messages/TurnChangedFilesCard.tsx
|
||||
ui/src/features/agents/components/messages/UserMessage.tsx
|
||||
ui/src/features/agents/components/messages/WorkSummary.tsx
|
||||
ui/src/features/agents/components/messages/index.ts
|
||||
ui/src/features/agents/components/messages/renderItems.ts
|
||||
ui/src/features/agents/components/messages/summarizeChangedFiles.ts
|
||||
ui/src/features/agents/components/messages/types.ts
|
||||
ui/src/features/agents/components/subagents/SubagentActivity.tsx
|
||||
ui/src/features/agents/components/subagents/SubagentCard.tsx
|
||||
ui/src/features/agents/components/subagents/SubagentGroup.tsx
|
||||
ui/src/features/agents/components/subagents/index.ts
|
||||
ui/src/features/agents/components/z-index.ts
|
||||
ui/src/features/agents/experiments/BranchSelector.tsx
|
||||
ui/src/features/agents/experiments/BubblePrefix.tsx
|
||||
ui/src/features/agents/experiments/ChatView.tsx
|
||||
ui/src/features/agents/experiments/CompactingIndicator.tsx
|
||||
ui/src/features/agents/experiments/ContextIndicator.tsx
|
||||
ui/src/features/agents/experiments/Footer.tsx
|
||||
ui/src/features/agents/experiments/HeaderBar.tsx
|
||||
ui/src/features/agents/experiments/MarkdownTable.tsx
|
||||
ui/src/features/agents/experiments/PanelResizeHandle.tsx
|
||||
ui/src/features/agents/experiments/PromptBar.tsx
|
||||
ui/src/features/agents/experiments/SourceControlPanel.tsx
|
||||
ui/src/features/agents/experiments/SourceControlTile.tsx
|
||||
ui/src/features/agents/experiments/ThreadPicker.tsx
|
||||
ui/src/features/agents/experiments/TodoList.tsx
|
||||
ui/src/features/agents/experiments/index.ts
|
||||
ui/src/features/agents/lib/AgentThreadStreamProvider.tsx
|
||||
ui/src/features/agents/lib/api.ts
|
||||
ui/src/features/agents/lib/gitPanelPreferences.test.ts
|
||||
ui/src/features/agents/lib/gitPanelPreferences.ts
|
||||
ui/src/features/agents/lib/messageTimestamps.ts
|
||||
ui/src/features/agents/lib/provider/useIsInAgentThreadStream.tsx
|
||||
ui/src/features/agents/lib/provider/useLiveMarkdownMessageId.ts
|
||||
ui/src/features/agents/lib/provider/useModelOptions.ts
|
||||
ui/src/features/agents/lib/provider/useSubmitAgentMessage.ts
|
||||
ui/src/features/agents/lib/queries.ts
|
||||
ui/src/features/agents/lib/sidebarFilter.test.ts
|
||||
ui/src/features/agents/lib/sidebarFilter.ts
|
||||
ui/src/features/agents/lib/sidebarPrefs.ts
|
||||
ui/src/features/agents/lib/streamMessagesToUi.ts
|
||||
ui/src/features/agents/lib/toolNames.ts
|
||||
ui/src/features/agents/lib/types.ts
|
||||
ui/src/features/agents/lib/useRunCompletionNotifier.ts
|
||||
ui/src/features/agents/utils/diffStats.ts
|
||||
ui/src/features/agents/utils/diffUtils.test.ts
|
||||
ui/src/features/agents/utils/diffUtils.ts
|
||||
ui/src/features/automations/components/AutomationEditor.tsx
|
||||
ui/src/features/automations/components/AutomationTemplates.tsx
|
||||
ui/src/features/automations/components/AutomationsList.tsx
|
||||
ui/src/features/automations/components/ScheduleTriggerPicker.tsx
|
||||
ui/src/features/automations/lib/automation-templates.ts
|
||||
ui/src/features/automations/lib/cron.ts
|
||||
ui/src/features/reviews/components/PrHeader.tsx
|
||||
ui/src/features/reviews/components/ReviewChat.tsx
|
||||
ui/src/features/reviews/components/ReviewCommentsMenu.tsx
|
||||
ui/src/features/reviews/components/ReviewMainBody.tsx
|
||||
ui/src/features/reviews/components/ReviewSidebar.tsx
|
||||
ui/src/features/reviews/components/ReviewTab.tsx
|
||||
ui/src/features/settings/components/RepoSelector.tsx
|
||||
ui/src/lib/api.ts
|
||||
ui/src/lib/auth-redirect-core.ts
|
||||
ui/src/lib/auth-redirect.test.ts
|
||||
ui/src/lib/auth-redirect.tsx
|
||||
ui/src/lib/hotkeys.ts
|
||||
ui/src/lib/notifications.ts
|
||||
ui/src/lib/plan.ts
|
||||
ui/src/lib/profile.ts
|
||||
ui/src/lib/query.ts
|
||||
ui/src/lib/repo.test.ts
|
||||
ui/src/lib/repo.ts
|
||||
ui/src/lib/reviewImage.test.ts
|
||||
ui/src/lib/session.ts
|
||||
ui/src/lib/theme.ts
|
||||
ui/src/lib/useIsMobile.ts
|
||||
ui/src/lib/utils.ts
|
||||
ui/src/logo.svg
|
||||
ui/src/routeTree.gen.ts
|
||||
ui/src/router.tsx
|
||||
ui/src/routes/$owner.$repo.pull.$number.tsx
|
||||
ui/src/routes/__root.tsx
|
||||
ui/src/routes/admin.tsx
|
||||
ui/src/routes/admin_.evals.tsx
|
||||
ui/src/routes/agents.tsx
|
||||
ui/src/routes/agents/$threadId.tsx
|
||||
ui/src/routes/agents/$threadId_.plan.tsx
|
||||
ui/src/routes/agents/automations/$scheduleId.tsx
|
||||
ui/src/routes/agents/automations/index.tsx
|
||||
ui/src/routes/agents/automations/new.tsx
|
||||
ui/src/routes/agents/index.tsx
|
||||
ui/src/routes/agents/reviews/$owner.$repo.$number.tsx
|
||||
ui/src/routes/agents/reviews/index.tsx
|
||||
ui/src/routes/agents/threads.tsx
|
||||
ui/src/routes/agents_.instructions.tsx
|
||||
ui/src/routes/agents_.snapshots.tsx
|
||||
ui/src/routes/cloud-agents.tsx
|
||||
ui/src/routes/index.tsx
|
||||
ui/src/routes/integrations.tsx
|
||||
ui/src/routes/login.tsx
|
||||
ui/src/routes/my-settings.tsx
|
||||
ui/src/routes/review.tsx
|
||||
ui/src/routes/review_.repositories.$owner.tsx
|
||||
ui/src/routes/review_.styles.tsx
|
||||
ui/src/routes/usage.tsx
|
||||
ui/src/styles.css
|
||||
ui/src/styles/agents.css
|
||||
ui/tsconfig.json
|
||||
ui/vercel.json
|
||||
ui/vite.config.ts
|
||||
uv.lock
|
||||
535
docs/upstream-sync/domain-reorg/upstream-pre-tree.txt
Normal file
535
docs/upstream-sync/domain-reorg/upstream-pre-tree.txt
Normal file
|
|
@ -0,0 +1,535 @@
|
|||
.codespellignore
|
||||
.dockerignore
|
||||
.github/dependabot.yml
|
||||
.github/workflows/ci.yml
|
||||
.github/workflows/pr_lint.yml
|
||||
.github/workflows/promote_main_to_prod.yml
|
||||
.github/workflows/reviewer_eval.yml
|
||||
.gitignore
|
||||
.vscode/settings.json
|
||||
AGENTS.md
|
||||
CLAUDE.md
|
||||
CUSTOMIZATION.md
|
||||
Dockerfile
|
||||
INSTALLATION.md
|
||||
LICENSE
|
||||
Makefile
|
||||
README.md
|
||||
SECURITY.md
|
||||
agent/analyzer.py
|
||||
agent/chat.py
|
||||
agent/completion.py
|
||||
agent/dashboard/__init__.py
|
||||
agent/dashboard/admin.py
|
||||
agent/dashboard/agent_instructions.py
|
||||
agent/dashboard/agent_overrides.py
|
||||
agent/dashboard/agent_usage.py
|
||||
agent/dashboard/analyzer_cron.py
|
||||
agent/dashboard/autofix_state.py
|
||||
agent/dashboard/enabled_repos.py
|
||||
agent/dashboard/eval_jobs.py
|
||||
agent/dashboard/notion_oauth.py
|
||||
agent/dashboard/oauth.py
|
||||
agent/dashboard/options.py
|
||||
agent/dashboard/plan_api.py
|
||||
agent/dashboard/plan_store.py
|
||||
agent/dashboard/pr_diff.py
|
||||
agent/dashboard/profiles.py
|
||||
agent/dashboard/repo_access.py
|
||||
agent/dashboard/repo_snapshots.py
|
||||
agent/dashboard/review_api.py
|
||||
agent/dashboard/review_chat_api.py
|
||||
agent/dashboard/review_style_jobs.py
|
||||
agent/dashboard/review_styles.py
|
||||
agent/dashboard/routes.py
|
||||
agent/dashboard/schedules.py
|
||||
agent/dashboard/slack_oauth.py
|
||||
agent/dashboard/team_credentials.py
|
||||
agent/dashboard/team_settings.py
|
||||
agent/dashboard/thread_api.py
|
||||
agent/dashboard/user_credentials.py
|
||||
agent/dashboard/user_mappings.py
|
||||
agent/dashboard/workflow_approval.py
|
||||
agent/dashboard/workflow_approval_api.py
|
||||
agent/dispatch.py
|
||||
agent/encryption.py
|
||||
agent/integrations/__init__.py
|
||||
agent/integrations/corridor_mcp.py
|
||||
agent/integrations/currents_tools.py
|
||||
agent/integrations/datadog_mcp.py
|
||||
agent/integrations/daytona.py
|
||||
agent/integrations/e2b.py
|
||||
agent/integrations/langsmith.py
|
||||
agent/integrations/langsmith_tools.py
|
||||
agent/integrations/local.py
|
||||
agent/integrations/modal.py
|
||||
agent/integrations/notion_mcp.py
|
||||
agent/integrations/runloop.py
|
||||
agent/integrations/stagehand_browser.py
|
||||
agent/middleware/__init__.py
|
||||
agent/middleware/check_message_queue.py
|
||||
agent/middleware/ensure_no_empty_msg.py
|
||||
agent/middleware/exclude_tools.py
|
||||
agent/middleware/model_fallback.py
|
||||
agent/middleware/notify_step_limit.py
|
||||
agent/middleware/plan_mode.py
|
||||
agent/middleware/pr_creation_guard.py
|
||||
agent/middleware/prepare_run.py
|
||||
agent/middleware/refresh_github_proxy.py
|
||||
agent/middleware/refresh_slack_status.py
|
||||
agent/middleware/repair_orphaned_tool_calls.py
|
||||
agent/middleware/sandbox_circuit_breaker.py
|
||||
agent/middleware/sanitize_fireworks_messages.py
|
||||
agent/middleware/sanitize_openai_responses.py
|
||||
agent/middleware/sanitize_thinking_blocks.py
|
||||
agent/middleware/sanitize_tool_inputs.py
|
||||
agent/middleware/settle_review_check.py
|
||||
agent/middleware/subdir_agents.py
|
||||
agent/middleware/task_retry.py
|
||||
agent/middleware/timeout_wrapup.py
|
||||
agent/middleware/tool_artifact.py
|
||||
agent/middleware/tool_error_handler.py
|
||||
agent/middleware/workflow_push_guard.py
|
||||
agent/prompt.py
|
||||
agent/reconcile.py
|
||||
agent/review_style_collector.py
|
||||
agent/review_style_guidance.py
|
||||
agent/reviewer.py
|
||||
agent/reviewer_diff.py
|
||||
agent/reviewer_eval_store.py
|
||||
agent/reviewer_findings.py
|
||||
agent/reviewer_groups.py
|
||||
agent/reviewer_publish.py
|
||||
agent/reviewer_reconcile.py
|
||||
agent/reviewer_trace_context.py
|
||||
agent/scheduler.py
|
||||
agent/server.py
|
||||
agent/skills/bootstrap-repo-analysis/SKILL.md
|
||||
agent/skills/continual-learning/SKILL.md
|
||||
agent/tools/__init__.py
|
||||
agent/tools/add_finding.py
|
||||
agent/tools/enter_plan_mode.py
|
||||
agent/tools/fetch_url.py
|
||||
agent/tools/http_request.py
|
||||
agent/tools/linear_comment.py
|
||||
agent/tools/linear_create_issue.py
|
||||
agent/tools/linear_delete_issue.py
|
||||
agent/tools/linear_get_issue.py
|
||||
agent/tools/linear_get_issue_comments.py
|
||||
agent/tools/linear_list_teams.py
|
||||
agent/tools/linear_update_issue.py
|
||||
agent/tools/list_findings.py
|
||||
agent/tools/list_review_findings.py
|
||||
agent/tools/open_pull_request.py
|
||||
agent/tools/publish_review.py
|
||||
agent/tools/read_finding_outcomes.py
|
||||
agent/tools/read_repo_file.py
|
||||
agent/tools/reply_to_finding_thread.py
|
||||
agent/tools/report_platform_issue.py
|
||||
agent/tools/request_pr_review.py
|
||||
agent/tools/resolve_finding_thread.py
|
||||
agent/tools/save_plan.py
|
||||
agent/tools/save_review_style.py
|
||||
agent/tools/schedule_thread_wakeup.py
|
||||
agent/tools/search_repo_code.py
|
||||
agent/tools/slack_add_reaction.py
|
||||
agent/tools/slack_read_thread_messages.py
|
||||
agent/tools/slack_start_new_thread.py
|
||||
agent/tools/slack_thread_reply.py
|
||||
agent/tools/update_finding.py
|
||||
agent/tools/web_search.py
|
||||
agent/utils/agents_md.py
|
||||
agent/utils/analyzer_skills.py
|
||||
agent/utils/api_standards_skill.py
|
||||
agent/utils/auth.py
|
||||
agent/utils/authorship.py
|
||||
agent/utils/comments.py
|
||||
agent/utils/dashboard_handoff.py
|
||||
agent/utils/dashboard_links.py
|
||||
agent/utils/deferred_model.py
|
||||
agent/utils/gateway.py
|
||||
agent/utils/github_app.py
|
||||
agent/utils/github_checks.py
|
||||
agent/utils/github_ci.py
|
||||
agent/utils/github_comments.py
|
||||
agent/utils/github_feedback.py
|
||||
agent/utils/github_http.py
|
||||
agent/utils/github_org_membership.py
|
||||
agent/utils/github_proxy.py
|
||||
agent/utils/github_token.py
|
||||
agent/utils/http.py
|
||||
agent/utils/langsmith.py
|
||||
agent/utils/linear.py
|
||||
agent/utils/linear_team_repo_map.py
|
||||
agent/utils/model.py
|
||||
agent/utils/multimodal.py
|
||||
agent/utils/repo.py
|
||||
agent/utils/repo_prep.py
|
||||
agent/utils/reviewer_outcomes.py
|
||||
agent/utils/sandbox.py
|
||||
agent/utils/sandbox_paths.py
|
||||
agent/utils/sandbox_state.py
|
||||
agent/utils/slack.py
|
||||
agent/utils/slack_feedback.py
|
||||
agent/utils/thread_ids.py
|
||||
agent/utils/thread_ops.py
|
||||
agent/utils/tracing.py
|
||||
agent/utils/ttl_cache.py
|
||||
agent/utils/url_safety.py
|
||||
agent/webapp.py
|
||||
agent/webhooks/__init__.py
|
||||
agent/webhooks/github.py
|
||||
agent/webhooks/linear.py
|
||||
agent/webhooks/slack.py
|
||||
default_prompt.md
|
||||
evals/reviewer/README.md
|
||||
evals/reviewer/build_dataset.py
|
||||
evals/reviewer/config.toml
|
||||
evals/reviewer/golden_comments/cal_dot_com.json
|
||||
evals/reviewer/golden_comments/discourse.json
|
||||
evals/reviewer/golden_comments/grafana.json
|
||||
evals/reviewer/golden_comments/keycloak.json
|
||||
evals/reviewer/golden_comments/sentry.json
|
||||
evals/reviewer/judge.py
|
||||
evals/reviewer/run_eval.py
|
||||
evals/reviewer/store_reporter.py
|
||||
evals/reviewer/target.py
|
||||
langgraph.json
|
||||
package.json
|
||||
pyproject.toml
|
||||
scripts/__init__.py
|
||||
scripts/check_pr_merge_status.py
|
||||
scripts/create_sandbox_snapshot.py
|
||||
scripts/list_snapshots.py
|
||||
scripts/purge_wakeup_crons.py
|
||||
static/dark.svg
|
||||
static/light.svg
|
||||
tests/conftest.py
|
||||
tests/e2e/.gitignore
|
||||
tests/e2e/README.md
|
||||
tests/e2e/agent_entrypoint.py
|
||||
tests/e2e/dev-mock.sh
|
||||
tests/e2e/e2e_env.py
|
||||
tests/e2e/fake_llm.py
|
||||
tests/e2e/fakes.py
|
||||
tests/e2e/global-setup.ts
|
||||
tests/e2e/harness.py
|
||||
tests/e2e/langgraph.e2e.json
|
||||
tests/e2e/package-lock.json
|
||||
tests/e2e/package.json
|
||||
tests/e2e/patches.py
|
||||
tests/e2e/playwright.config.ts
|
||||
tests/e2e/screenshots/queued-messages-dashboard.png
|
||||
tests/e2e/static/github.html
|
||||
tests/e2e/static/slack.html
|
||||
tests/e2e/tests/dashboard.spec.ts
|
||||
tests/e2e/tests/full_flow.spec.ts
|
||||
tests/e2e/tests/plan_review.spec.ts
|
||||
tests/e2e/tests/sandbox_id.spec.ts
|
||||
tests/middleware/test_sandbox_recovery.py
|
||||
tests/test_account_link.py
|
||||
tests/test_agent_assembly_context.py
|
||||
tests/test_agent_instructions.py
|
||||
tests/test_agent_schedules.py
|
||||
tests/test_agent_subagent_models.py
|
||||
tests/test_agent_thread_pr_state.py
|
||||
tests/test_agent_usage.py
|
||||
tests/test_agents_md.py
|
||||
tests/test_analyzer_cron.py
|
||||
tests/test_analyzer_skills.py
|
||||
tests/test_anthropic_effort.py
|
||||
tests/test_anthropic_model.py
|
||||
tests/test_api_standards_skill.py
|
||||
tests/test_auth_sources.py
|
||||
tests/test_authorship.py
|
||||
tests/test_autofix_state.py
|
||||
tests/test_check_message_queue.py
|
||||
tests/test_completion_webhook.py
|
||||
tests/test_corridor_mcp.py
|
||||
tests/test_currents_tools.py
|
||||
tests/test_dashboard_admin.py
|
||||
tests/test_dashboard_csrf.py
|
||||
tests/test_dashboard_links.py
|
||||
tests/test_dashboard_oauth_redirect.py
|
||||
tests/test_dashboard_org_login_gate.py
|
||||
tests/test_dashboard_repo_optional.py
|
||||
tests/test_dashboard_repos.py
|
||||
tests/test_dashboard_reviews.py
|
||||
tests/test_dashboard_run_email.py
|
||||
tests/test_dashboard_thread_api.py
|
||||
tests/test_dashboard_thread_api_activity.py
|
||||
tests/test_dashboard_web_handoff.py
|
||||
tests/test_daytona_integration.py
|
||||
tests/test_deferred_model.py
|
||||
tests/test_dispatch.py
|
||||
tests/test_e2b_integration.py
|
||||
tests/test_encryption.py
|
||||
tests/test_ensure_no_empty_msg.py
|
||||
tests/test_eval_jobs.py
|
||||
tests/test_eval_store_reporter.py
|
||||
tests/test_fireworks_model.py
|
||||
tests/test_gateway.py
|
||||
tests/test_github_app.py
|
||||
tests/test_github_checks.py
|
||||
tests/test_github_ci.py
|
||||
tests/test_github_comment_prompts.py
|
||||
tests/test_github_feedback.py
|
||||
tests/test_github_http.py
|
||||
tests/test_github_issue_webhook.py
|
||||
tests/test_github_oauth_refresh.py
|
||||
tests/test_github_proxy_refresh.py
|
||||
tests/test_github_token_ttl.py
|
||||
tests/test_google_model.py
|
||||
tests/test_http_security.py
|
||||
tests/test_import_hygiene.py
|
||||
tests/test_langsmith_sandbox_config.py
|
||||
tests/test_langsmith_sandbox_timeout.py
|
||||
tests/test_langsmith_trace_url.py
|
||||
tests/test_linear_webhook_author.py
|
||||
tests/test_local_integration.py
|
||||
tests/test_model_fallback_middleware.py
|
||||
tests/test_model_fallback_resolution.py
|
||||
tests/test_multimodal.py
|
||||
tests/test_normalize_repo.py
|
||||
tests/test_notify_step_limit_middleware.py
|
||||
tests/test_notion_oauth.py
|
||||
tests/test_observability_tools.py
|
||||
tests/test_open_pull_request.py
|
||||
tests/test_plan_mode.py
|
||||
tests/test_plan_review.py
|
||||
tests/test_pr_creation_guard.py
|
||||
tests/test_pr_ready_auto_review.py
|
||||
tests/test_prepare_run_middleware.py
|
||||
tests/test_prompt_default_repo.py
|
||||
tests/test_proxy_auth.py
|
||||
tests/test_public_repo_org_gate.py
|
||||
tests/test_recent_comments.py
|
||||
tests/test_reconcile_sweep.py
|
||||
tests/test_refresh_slack_status_middleware.py
|
||||
tests/test_repair_orphaned_tool_calls.py
|
||||
tests/test_repo_extraction.py
|
||||
tests/test_repo_prep.py
|
||||
tests/test_repo_snapshots.py
|
||||
tests/test_report_platform_issue_tool.py
|
||||
tests/test_review_api.py
|
||||
tests/test_review_chat.py
|
||||
tests/test_review_style_collector.py
|
||||
tests/test_review_style_sync.py
|
||||
tests/test_review_styles_store.py
|
||||
tests/test_reviewer.py
|
||||
tests/test_reviewer_diff.py
|
||||
tests/test_reviewer_eval_judge.py
|
||||
tests/test_reviewer_eval_run.py
|
||||
tests/test_reviewer_eval_target.py
|
||||
tests/test_reviewer_findings.py
|
||||
tests/test_reviewer_groups.py
|
||||
tests/test_reviewer_outcomes.py
|
||||
tests/test_reviewer_publish.py
|
||||
tests/test_reviewer_reconcile.py
|
||||
tests/test_reviewer_tools.py
|
||||
tests/test_reviewer_trace_context.py
|
||||
tests/test_reviewer_watch.py
|
||||
tests/test_sandbox_paths.py
|
||||
tests/test_sandbox_state.py
|
||||
tests/test_sanitize_fireworks_messages.py
|
||||
tests/test_sanitize_openai_responses.py
|
||||
tests/test_sanitize_thinking_blocks.py
|
||||
tests/test_sanitize_tool_inputs.py
|
||||
tests/test_schedule_thread_wakeup.py
|
||||
tests/test_slack_add_reaction_tool.py
|
||||
tests/test_slack_assistants_status.py
|
||||
tests/test_slack_context.py
|
||||
tests/test_slack_feedback.py
|
||||
tests/test_slack_oauth.py
|
||||
tests/test_slack_start_new_thread_tool.py
|
||||
tests/test_slack_thread_reply_tool.py
|
||||
tests/test_slack_webhook_errors.py
|
||||
tests/test_stagehand_browser.py
|
||||
tests/test_stale_sandbox_creating.py
|
||||
tests/test_subdir_agents_middleware.py
|
||||
tests/test_task_retry.py
|
||||
tests/test_team_credentials.py
|
||||
tests/test_team_settings_fable.py
|
||||
tests/test_team_settings_grouping.py
|
||||
tests/test_team_settings_org_guidelines.py
|
||||
tests/test_timeout_wrapup.py
|
||||
tests/test_tool_artifact_middleware.py
|
||||
tests/test_user_credentials.py
|
||||
tests/test_user_mappings.py
|
||||
tests/test_workflow_approval_api.py
|
||||
tests/test_workflow_push_guard.py
|
||||
ui/.cta.json
|
||||
ui/.gitignore
|
||||
ui/.prettierignore
|
||||
ui/.prettierrc
|
||||
ui/AGENTS.md
|
||||
ui/README.md
|
||||
ui/assets/LangChain_Symbol_LightBlue.png
|
||||
ui/assets/ic_launcher_round.png
|
||||
ui/assets/playstore-icon.png
|
||||
ui/components.json
|
||||
ui/eslint.config.js
|
||||
ui/package.json
|
||||
ui/pnpm-lock.yaml
|
||||
ui/pnpm-workspace.yaml
|
||||
ui/public/apple-touch-icon.png
|
||||
ui/public/favicon.png
|
||||
ui/public/gh-open-in-open-swe-dark.svg
|
||||
ui/public/gh-open-in-open-swe-light.svg
|
||||
ui/public/logo-mark.png
|
||||
ui/public/logo512.png
|
||||
ui/public/robots.txt
|
||||
ui/src/client.tsx
|
||||
ui/src/components/AgentInstructionsPanel.tsx
|
||||
ui/src/components/AppShell.tsx
|
||||
ui/src/components/AppSidebar.tsx
|
||||
ui/src/components/InstructionsEditor.tsx
|
||||
ui/src/components/RepoSnapshotsPanel.tsx
|
||||
ui/src/components/ReviewStylesPanel.tsx
|
||||
ui/src/components/SidebarUserMenu.tsx
|
||||
ui/src/components/agents/AgentGitPanel.tsx
|
||||
ui/src/components/agents/AgentPromptBar.tsx
|
||||
ui/src/components/agents/AgentRunCard.tsx
|
||||
ui/src/components/agents/AgentThreadView.tsx
|
||||
ui/src/components/agents/AgentsHome.tsx
|
||||
ui/src/components/agents/AgentsSidebar.tsx
|
||||
ui/src/components/agents/AgentsThreadsPage.tsx
|
||||
ui/src/components/agents/AutomationEditor.tsx
|
||||
ui/src/components/agents/AutomationTemplates.tsx
|
||||
ui/src/components/agents/AutomationsList.tsx
|
||||
ui/src/components/agents/OnboardingDialog.tsx
|
||||
ui/src/components/agents/PlanReview.tsx
|
||||
ui/src/components/agents/PrHeader.tsx
|
||||
ui/src/components/agents/RepoSelector.tsx
|
||||
ui/src/components/agents/ReviewChat.tsx
|
||||
ui/src/components/agents/ReviewCommentsMenu.tsx
|
||||
ui/src/components/agents/ReviewMainBody.tsx
|
||||
ui/src/components/agents/ReviewSidebar.tsx
|
||||
ui/src/components/agents/ReviewTab.tsx
|
||||
ui/src/components/agents/ScheduleTriggerPicker.tsx
|
||||
ui/src/components/agents/SidebarFilterMenu.tsx
|
||||
ui/src/components/agents/WorkflowApprovalCard.tsx
|
||||
ui/src/components/agents/messages/AgentMessage.tsx
|
||||
ui/src/components/agents/messages/ChunkRenderer.tsx
|
||||
ui/src/components/agents/messages/MessageTimestamp.tsx
|
||||
ui/src/components/agents/messages/Messages.tsx
|
||||
ui/src/components/agents/messages/ReasoningBlock.tsx
|
||||
ui/src/components/agents/messages/ThinkingSpinner.tsx
|
||||
ui/src/components/agents/messages/TurnChangedFilesCard.tsx
|
||||
ui/src/components/agents/messages/UserMessage.tsx
|
||||
ui/src/components/agents/messages/WorkSummary.tsx
|
||||
ui/src/components/agents/messages/index.ts
|
||||
ui/src/components/agents/messages/renderItems.ts
|
||||
ui/src/components/agents/messages/summarizeChangedFiles.ts
|
||||
ui/src/components/agents/messages/types.ts
|
||||
ui/src/components/agents/ported/BranchSelector.tsx
|
||||
ui/src/components/agents/ported/BubblePrefix.tsx
|
||||
ui/src/components/agents/ported/ChatView.tsx
|
||||
ui/src/components/agents/ported/CloudPromptBar.tsx
|
||||
ui/src/components/agents/ported/CodeBlock.tsx
|
||||
ui/src/components/agents/ported/CompactingIndicator.tsx
|
||||
ui/src/components/agents/ported/ContextIndicator.tsx
|
||||
ui/src/components/agents/ported/DiffView.tsx
|
||||
ui/src/components/agents/ported/Footer.tsx
|
||||
ui/src/components/agents/ported/HeaderBar.tsx
|
||||
ui/src/components/agents/ported/Logo.tsx
|
||||
ui/src/components/agents/ported/Markdown.tsx
|
||||
ui/src/components/agents/ported/MarkdownTable.tsx
|
||||
ui/src/components/agents/ported/PanelResizeHandle.tsx
|
||||
ui/src/components/agents/ported/PromptBar.tsx
|
||||
ui/src/components/agents/ported/ReplyCard.tsx
|
||||
ui/src/components/agents/ported/ShellCommand.tsx
|
||||
ui/src/components/agents/ported/SourceControlPanel.tsx
|
||||
ui/src/components/agents/ported/SourceControlTile.tsx
|
||||
ui/src/components/agents/ported/ThreadPicker.tsx
|
||||
ui/src/components/agents/ported/TodoList.tsx
|
||||
ui/src/components/agents/ported/ToolExecution.tsx
|
||||
ui/src/components/agents/ported/index.ts
|
||||
ui/src/components/agents/subagents/SubagentActivity.tsx
|
||||
ui/src/components/agents/subagents/SubagentCard.tsx
|
||||
ui/src/components/agents/subagents/SubagentGroup.tsx
|
||||
ui/src/components/agents/subagents/index.ts
|
||||
ui/src/components/agents/utils/diffStats.ts
|
||||
ui/src/components/agents/utils/diffUtils.test.ts
|
||||
ui/src/components/agents/utils/diffUtils.ts
|
||||
ui/src/components/agents/z-index.ts
|
||||
ui/src/components/sidebar-layout.tsx
|
||||
ui/src/components/ui/avatar.tsx
|
||||
ui/src/components/ui/badge.tsx
|
||||
ui/src/components/ui/button.tsx
|
||||
ui/src/components/ui/card.tsx
|
||||
ui/src/components/ui/combobox.tsx
|
||||
ui/src/components/ui/input-group.tsx
|
||||
ui/src/components/ui/input.tsx
|
||||
ui/src/components/ui/label.tsx
|
||||
ui/src/components/ui/select.tsx
|
||||
ui/src/components/ui/separator.tsx
|
||||
ui/src/components/ui/skeleton.tsx
|
||||
ui/src/components/ui/switch.tsx
|
||||
ui/src/components/ui/textarea.tsx
|
||||
ui/src/lib/agents/AgentThreadStreamProvider.tsx
|
||||
ui/src/lib/agents/api.ts
|
||||
ui/src/lib/agents/automation-templates.ts
|
||||
ui/src/lib/agents/cron.ts
|
||||
ui/src/lib/agents/messageTimestamps.ts
|
||||
ui/src/lib/agents/provider/useIsInAgentThreadStream.tsx
|
||||
ui/src/lib/agents/provider/useLiveMarkdownMessageId.ts
|
||||
ui/src/lib/agents/provider/useModelOptions.ts
|
||||
ui/src/lib/agents/provider/useSubmitAgentMessage.ts
|
||||
ui/src/lib/agents/queries.ts
|
||||
ui/src/lib/agents/sidebarFilter.test.ts
|
||||
ui/src/lib/agents/sidebarFilter.ts
|
||||
ui/src/lib/agents/sidebarPrefs.ts
|
||||
ui/src/lib/agents/streamMessagesToUi.ts
|
||||
ui/src/lib/agents/types.ts
|
||||
ui/src/lib/agents/useRunCompletionNotifier.ts
|
||||
ui/src/lib/api.ts
|
||||
ui/src/lib/auth-redirect-core.ts
|
||||
ui/src/lib/auth-redirect.test.ts
|
||||
ui/src/lib/auth-redirect.tsx
|
||||
ui/src/lib/hotkeys.ts
|
||||
ui/src/lib/notifications.ts
|
||||
ui/src/lib/plan.ts
|
||||
ui/src/lib/profile.ts
|
||||
ui/src/lib/query.ts
|
||||
ui/src/lib/repo.test.ts
|
||||
ui/src/lib/repo.ts
|
||||
ui/src/lib/reviewImage.test.ts
|
||||
ui/src/lib/session.ts
|
||||
ui/src/lib/theme.ts
|
||||
ui/src/lib/useIsMobile.ts
|
||||
ui/src/lib/utils.ts
|
||||
ui/src/logo.svg
|
||||
ui/src/routeTree.gen.ts
|
||||
ui/src/router.tsx
|
||||
ui/src/routes/$owner.$repo.pull.$number.tsx
|
||||
ui/src/routes/__root.tsx
|
||||
ui/src/routes/admin.tsx
|
||||
ui/src/routes/admin_.evals.tsx
|
||||
ui/src/routes/agents.tsx
|
||||
ui/src/routes/agents/$threadId.tsx
|
||||
ui/src/routes/agents/$threadId_.plan.tsx
|
||||
ui/src/routes/agents/automations/$scheduleId.tsx
|
||||
ui/src/routes/agents/automations/index.tsx
|
||||
ui/src/routes/agents/automations/new.tsx
|
||||
ui/src/routes/agents/index.tsx
|
||||
ui/src/routes/agents/reviews/$owner.$repo.$number.tsx
|
||||
ui/src/routes/agents/reviews/index.tsx
|
||||
ui/src/routes/agents/threads.tsx
|
||||
ui/src/routes/agents_.instructions.tsx
|
||||
ui/src/routes/agents_.snapshots.tsx
|
||||
ui/src/routes/cloud-agents.tsx
|
||||
ui/src/routes/index.tsx
|
||||
ui/src/routes/integrations.tsx
|
||||
ui/src/routes/login.tsx
|
||||
ui/src/routes/my-settings.tsx
|
||||
ui/src/routes/review.tsx
|
||||
ui/src/routes/review_.repositories.$owner.tsx
|
||||
ui/src/routes/review_.styles.tsx
|
||||
ui/src/routes/usage.tsx
|
||||
ui/src/styles.css
|
||||
ui/src/styles/agents.css
|
||||
ui/tsconfig.json
|
||||
ui/vercel.json
|
||||
ui/vite.config.ts
|
||||
uv.lock
|
||||
|
|
@ -90,7 +90,7 @@
|
|||
{"sha": "35659177", "pr": 1718, "subject": "fix: sanitize orphaned OpenAI tool results (#1718)", "disposition": "wont-merge", "reason": "N/A — fork has no OpenAI Responses traffic path; middleware present is #155's leaner rewrite lacking the orphan machinery #1718 patches; langchain-openai>=1.3.4 already satisfied; superseded upstream by #1731 (re-evaluate #155 rewrite when triaging #1731). Note: fd2541ce row's '#62 deleted sanitize_openai_responses.py' is inaccurate — the path was added fresh by #155", "branch": "", "local_sha": null, "updated": "2026-07-16T22:30:00Z"}
|
||||
{"sha": "092abafa", "pr": 1717, "subject": "fix: enforce terse Slack tool messages (#1717)", "disposition": "landed", "reason": "cherry-picked (-x) in #197; one test conflict resolved by adopting upstream's test (fork prompt now contains upstream text); follow-up to landed #1681, not superseded by it", "branch": "fix/port-1717-terse-slack-tool-msgs", "local_sha": null, "updated": "2026-07-16T22:30:00Z"}
|
||||
{"sha": "92d63170", "pr": 1720, "subject": "fix: separate review access from automatic reviews (#1720)", "disposition": "landed", "reason": "cherry-picked (-x) in #198 + fork-only auto-fix gates renamed to _is_repo_auto_review_enabled (kept opt-in-gated); opt-in list now gates only AUTOMATIC reviews — manual/re-review/watch/finding-replies open to any App-installed repo. Adam signed off 2026-07-16; /sh-security-review explicitly waived by Adam 2026-07-16", "branch": "fix/port-1720-review-access-split", "local_sha": null, "updated": "2026-07-16T22:30:00Z"}
|
||||
{"sha": "8356eb34", "pr": 1726, "subject": "refactor: organize repository by domain (#1726)", "disposition": "deferred", "reason": "FLAG-HUMAN: 298-file structural reorg (tests/<domain>/, ui/src/features/); chain head — every later upstream commit is written against this layout. Fork policy defers structural refactors (CLAUDE.md); adopting is a dedicated merge exercise. Until then, later picks need path remapping.", "branch": "domain-reorg", "local_sha": null, "updated": "2026-07-16T18:46:21Z"}
|
||||
{"sha": "8356eb34", "pr": 1726, "subject": "refactor: organize repository by domain (#1726)", "disposition": "landed", "reason": "Adopted as a file-move exercise (fork content, upstream layout) on branch refactor/domain-reorg-adoption — gate-approved plan in docs/upstream-sync/domain-reorg/. New layout: agent/{graphs,runtime,api,review,resources}, agent/webhooks/*_routes.py (webapp.py split into api/ + per-source route modules; webapp.py now a shim), tests/<domain>/, ui/src/features/. Kills the per-pick path-remap tax and unblocks 8 deferred rows (#1732/#1761/#1744/#1748/#1742 clean; #1736/#1758/#1760 near-clean).", "branch": "refactor/domain-reorg-adoption", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "83abea26", "pr": 1724, "subject": "fix: accept natural-language Slack plan approvals (#1724)", "disposition": "deferred", "reason": "natural-language Slack plan approvals; touches fork-diverged plan-mode + Slack webhook stack (#130); post-reorg test paths need remap", "branch": "plan-approval", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "129ddcf9", "pr": 1728, "subject": "chore: include ripgrep in sandbox image (#1728)", "disposition": "landed", "reason": "1-line Dockerfile add (ripgrep); dev image lacks it; trivial pick", "branch": "chore/upstream-easy-picks", "local_sha": null, "updated": "2026-07-16T19:15:42Z"}
|
||||
{"sha": "ddbe457b", "pr": 1727, "subject": "fix: restore GPT-5.5 as default model (#1727)", "disposition": "deferred", "reason": "restores GPT-5.5 default in options/team_settings; fork picker is Bedrock/Fireworks-only — rides the #1708 OpenAI-models product decision (27b0ddeb)", "branch": "model-picker", "local_sha": null, "updated": "2026-07-16T18:46:38Z"}
|
||||
|
|
@ -98,28 +98,28 @@
|
|||
{"sha": "5136079d", "pr": 1725, "subject": "chore: disable todos for GPT-5.6 Sol (#1725)", "disposition": "wont-merge", "reason": "superseded — #1733 (136d28e6) rewrites the same todo-exclusion block to a global default-off with env opt-in; per-model GPT-5.6 Sol list moot (fork picker has no OpenAI models)", "branch": "", "local_sha": null, "updated": "2026-07-16T18:46:21Z"}
|
||||
{"sha": "09eaf94c", "pr": 1730, "subject": "fix: let admins interrupt runaway agents (#1730)", "disposition": "landed", "reason": "admin interrupt for runaway agents (dashboard route + UI); useful ops control; UI half on post-reorg ui/src/features — remap to ui/src/components/agents", "branch": "feat/admin-thread-interrupt", "local_sha": null, "updated": "2026-07-16T19:36:07Z"}
|
||||
{"sha": "30832d29", "pr": 1731, "subject": "fix: preserve OpenAI Responses tool history (#1731)", "disposition": "deferred", "reason": "deletes SanitizeOpenAIResponsesMiddleware in favor of replay-history preservation in utils/model.py; supersedes deferred #1718 (35659177) — triage the pair together against fork-diverged middleware + model.py", "branch": "openai-sanitize", "local_sha": null, "updated": "2026-07-16T18:46:38Z"}
|
||||
{"sha": "1ea0e600", "pr": 1736, "subject": "fix: bind cached GitHub tokens to users (#1736)", "disposition": "deferred", "reason": "FLAG-HUMAN: security fix — binds per-thread cached GitHub tokens to a user principal (closes cross-user token-reuse leak). Fork has github_token.py but not webhooks/common.py — hand-map; auth surface: GPT-4.1 cross-review + /sh-security-review on landing. Priority pick.", "branch": "github-token-binding", "local_sha": null, "updated": "2026-07-16T18:46:37Z"}
|
||||
{"sha": "1ea0e600", "pr": 1736, "subject": "fix: bind cached GitHub tokens to users (#1736)", "disposition": "deferred", "reason": "FLAG-HUMAN: security fix — binds per-thread cached GitHub tokens to a user principal (closes cross-user token-reuse leak). Fork has github_token.py but not webhooks/common.py — hand-map; auth surface: GPT-4.1 cross-review + /sh-security-review on landing. Priority pick. Re-triage (post-reorg 8356eb34 landed): biggest beneficiary — agent/webhooks/common.py now exists, so the pick is near-clean against it; auth gates (GPT-4.1 cross-review + /sh-security-review) still apply.", "branch": "github-token-binding", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "3fcb27ce", "pr": 1737, "subject": "fix: bound reviewer diff fetching (#1737)", "disposition": "deferred", "reason": "bounds reviewer diff fetching + new fetch_review_diff tool; reviewer.py fork-diverged — reconcile like #1713 (71e3b818)", "branch": "reviewer-misc", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "d714586c", "pr": 1732, "subject": "fix: normalize dashboard label rendering (#1732)", "disposition": "deferred", "reason": "dashboard tool-label normalization; post-reorg ui/src/features paths — remap", "branch": "dashboard-ui", "local_sha": null, "updated": "2026-07-16T18:47:07Z"}
|
||||
{"sha": "d714586c", "pr": 1732, "subject": "fix: normalize dashboard label rendering (#1732)", "disposition": "deferred", "reason": "dashboard tool-label normalization; post-reorg ui/src/features paths — remap. Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick; ui/src/features/ now matches upstream.", "branch": "dashboard-ui", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "ef68c09b", "pr": 1734, "subject": "fix: handle Slack DMs as mentions (#1734)", "disposition": "deferred", "reason": "treat Slack DMs as mentions; touches fork-diverged Slack webhook + e2e harness; post-reorg test paths", "branch": "slack-tooling", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "bfa67a7a", "pr": 1711, "subject": "chore(deps): bump soupsieve from 2.8.3 to 2.8.4 (#1711)", "disposition": "wont-merge", "reason": "already in dev — uv.lock resolves soupsieve 2.8.4", "branch": "", "local_sha": null, "updated": "2026-07-16T18:46:21Z"}
|
||||
{"sha": "26828ff9", "pr": 1745, "subject": "chore: upgrade deepagents to 0.7.0a7 (#1745)", "disposition": "deferred", "reason": "deepagents 0.6.12 -> 0.7.0a7 alpha + [tool.uv] override-dependencies to bypass sandbox integrations <0.7.0 bound; fork is built on create_deep_agent — dedicated validation (unit + e2e) before adopting an alpha", "branch": "deps", "local_sha": null, "updated": "2026-07-16T18:46:38Z"}
|
||||
{"sha": "ef0ed5af", "pr": 1741, "subject": "fix: centralize SSRF-safe image fetches (#1741)", "disposition": "deferred", "reason": "security hardening — centralizes image fetches through url_safety.py (SSRF); fork has url_safety.py/multimodal.py (diverged) — hand-reconcile; untrusted-input surface: /sh-security-review on landing", "branch": "ssrf-hardening", "local_sha": null, "updated": "2026-07-16T18:46:37Z"}
|
||||
{"sha": "136d28e6", "pr": 1733, "subject": "fix: disable todos by default (#1733)", "disposition": "deferred", "reason": "global write_todos/TodoListMiddleware default-off with OPEN_SWE_ENABLE_TODOS opt-in; edits fork-customized prompt.py — small hand-merge; supersedes #1725", "branch": "prompt-tweaks", "local_sha": null, "updated": "2026-07-16T18:47:07Z"}
|
||||
{"sha": "3e8089c3", "pr": 1744, "subject": "fix: collapse git panel by default (#1744)", "disposition": "deferred", "reason": "collapse git panel by default (localStorage pref); post-reorg UI paths — remap to ui/src/components/agents", "branch": "dashboard-ui", "local_sha": null, "updated": "2026-07-16T18:47:08Z"}
|
||||
{"sha": "3e8089c3", "pr": 1744, "subject": "fix: collapse git panel by default (#1744)", "disposition": "deferred", "reason": "collapse git panel by default (localStorage pref); post-reorg UI paths — remap to ui/src/components/agents. Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick; ui/src/features/ now matches upstream.", "branch": "dashboard-ui", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "5077e2c7", "pr": 1735, "subject": "feat(open-swe): untagged two-party Slack replies + debounced interrupts (#1735)", "disposition": "deferred", "reason": "untagged two-party Slack replies + debounced interrupts (~620 LOC incl. e2e); rides fork-diverged Slack webhook stack; own branch + e2e validation", "branch": "slack-untagged-replies", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "f7d94ad3", "pr": 1721, "subject": "docs: add e2b to sandbox provider lists in AGENTS.md and CLAUDE.md (#1721)", "disposition": "wont-merge", "reason": "N/A — edits upstream AGENTS.md/CLAUDE.md, both fully fork-rewritten; E2B provider itself deferred (48217b68) — add a doc line if/when E2B lands", "branch": "", "local_sha": null, "updated": "2026-07-16T18:46:21Z"}
|
||||
{"sha": "8b26819f", "pr": 1719, "subject": "fix: offload web tool results to sandbox (#1719)", "disposition": "deferred", "reason": "offloads large web tool results to sandbox files; touches fork-relevant web_search/http tools; check interplay with fork sandbox lifecycle", "branch": "tool-offloading", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "c34e04f4", "pr": 1742, "subject": "fix: defensive copy in get_reviewer_agent and get_chat_agent [closes #1584] (#1742)", "disposition": "deferred", "reason": "defensive copy of config in get_reviewer_agent/get_chat_agent; small correctness fix; dev has chat.py + reviewer.py (diverged) — likely near-clean pick", "branch": "small-tools", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "c34e04f4", "pr": 1742, "subject": "fix: defensive copy in get_reviewer_agent and get_chat_agent [closes #1584] (#1742)", "disposition": "deferred", "reason": "defensive copy of config in get_reviewer_agent/get_chat_agent; small correctness fix; dev has chat.py + reviewer.py (diverged) — likely near-clean pick. Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick; reviewer.py/chat.py factories unmoved.", "branch": "small-tools", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "4773b336", "pr": 1746, "subject": "chore: point basedpyright at uv's .venv (#1746)", "disposition": "wont-merge", "reason": "tooling — fork does not use basedpyright (lint stack is ruff); nothing to point at .venv", "branch": "", "local_sha": null, "updated": "2026-07-16T18:46:21Z"}
|
||||
{"sha": "79df6b2f", "pr": 1748, "subject": "feat: add Linear issue search tool (#1748)", "disposition": "deferred", "reason": "additive linear_search_issues tool + utils/linear.py search helper; fork ships Linear tools — straightforward port; post-reorg test path remap", "branch": "small-tools", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "79df6b2f", "pr": 1748, "subject": "feat: add Linear issue search tool (#1748)", "disposition": "deferred", "reason": "additive linear_search_issues tool + utils/linear.py search helper; fork ships Linear tools — straightforward port; post-reorg test path remap. Re-triage (post-reorg 8356eb34 landed): test-path blocker removed — clean pick; tests/<domain>/ now matches upstream.", "branch": "small-tools", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "b7c5dbd6", "pr": 1747, "subject": "fix: simplify Slack run links (#1747)", "disposition": "deferred", "reason": "simplifies Slack run links; heavy churn on fork-diverged Slack context/prompt tests", "branch": "slack-tooling", "local_sha": null, "updated": "2026-07-16T18:46:52Z"}
|
||||
{"sha": "c69459ad", "pr": 1751, "subject": "fix: prefer LangSmith tools for trace links (#1751)", "disposition": "landed", "reason": "1-line prompt: prefer LangSmith tools for trace links; trivial but edits fork-customized prompt.py", "branch": "chore/upstream-easy-picks", "local_sha": null, "updated": "2026-07-16T19:15:42Z"}
|
||||
{"sha": "5cb2e2bb", "pr": 1750, "subject": "fix: add trace link to error banner (#1750)", "disposition": "landed", "reason": "adds trace link to error banner (13 lines); remap AgentThreadView.tsx path (fork: ui/src/components/agents/)", "branch": "chore/upstream-easy-picks", "local_sha": null, "updated": "2026-07-16T19:15:42Z"}
|
||||
{"sha": "697adaa7", "pr": 1752, "subject": "fix: update PyJWT to 2.13.0 (#1752)", "disposition": "wont-merge", "reason": "already in dev — uv.lock resolves PyJWT 2.13.0", "branch": "", "local_sha": null, "updated": "2026-07-16T18:46:21Z"}
|
||||
{"sha": "22383033", "pr": 1758, "subject": "feat: inject extra JSON fields into sandbox create via env var (#1758)", "disposition": "deferred", "reason": "additive: extra JSON fields into sandbox create via env var (integrations/langsmith.py); fork langsmith.py diverged (proxy config) — small reconcile", "branch": "sandbox-config", "local_sha": null, "updated": "2026-07-16T18:47:08Z"}
|
||||
{"sha": "22383033", "pr": 1758, "subject": "feat: inject extra JSON fields into sandbox create via env var (#1758)", "disposition": "deferred", "reason": "additive: extra JSON fields into sandbox create via env var (integrations/langsmith.py); fork langsmith.py diverged (proxy config) — small reconcile. Re-triage (post-reorg 8356eb34 landed): near-clean — path-remap tax gone; remaining work is the additive reconcile against fork's diverged langsmith.py (integrations/ unmoved by reorg).", "branch": "sandbox-config", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "714ea4a2", "pr": 1759, "subject": "fix: clear basedpyright standard-mode type errors (#1759)", "disposition": "wont-merge", "reason": "tooling — basedpyright type-error cleanup across 123 post-reorg files; fork uses ruff and the pre-reorg layout", "branch": "", "local_sha": null, "updated": "2026-07-16T18:46:21Z"}
|
||||
{"sha": "e826864d", "pr": 1760, "subject": "feat: optional separate LangSmith key/endpoint for sandboxes (#1760)", "disposition": "deferred", "reason": "optional separate LangSmith key/endpoint for sandboxes; additive to langsmith.py + proxy auth; useful for fork LangSmith sandbox usage", "branch": "sandbox-config", "local_sha": null, "updated": "2026-07-16T18:47:08Z"}
|
||||
{"sha": "dd5b7bec", "pr": 1761, "subject": "fix: capitalize dashboard tool labels (#1761)", "disposition": "deferred", "reason": "capitalize dashboard tool labels; post-reorg UI paths; stacks on #1732 (d714586c)", "branch": "dashboard-ui", "local_sha": null, "updated": "2026-07-16T18:47:08Z"}
|
||||
{"sha": "e826864d", "pr": 1760, "subject": "feat: optional separate LangSmith key/endpoint for sandboxes (#1760)", "disposition": "deferred", "reason": "optional separate LangSmith key/endpoint for sandboxes; additive to langsmith.py + proxy auth; useful for fork LangSmith sandbox usage. Re-triage (post-reorg 8356eb34 landed): near-clean — path-remap tax gone; remaining work is the additive reconcile against fork's diverged langsmith.py + proxy auth (integrations/ unmoved).", "branch": "sandbox-config", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "dd5b7bec", "pr": 1761, "subject": "fix: capitalize dashboard tool labels (#1761)", "disposition": "deferred", "reason": "capitalize dashboard tool labels; post-reorg UI paths; stacks on #1732 (d714586c). Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick after #1732.", "branch": "dashboard-ui", "local_sha": null, "updated": "2026-07-17T00:00:00Z"}
|
||||
{"sha": "dccf6437", "pr": 1769, "subject": "fix: tighten sandbox config test types (#1769)", "disposition": "wont-merge", "reason": "test-only change in post-reorg path tests/sandbox/ — fork doesn't have this file (domain reorg #1726 deferred)", "branch": "", "local_sha": null, "updated": "2026-07-17T12:42:37Z"}
|
||||
{"sha": "c9a193e2", "pr": 1766, "subject": "chore(deps): bump mcp from 1.27.2 to 1.28.1 (#1766)", "disposition": "wont-merge", "reason": "indirect dependency bump (mcp); fork's own Dependabot handles these", "branch": "", "local_sha": null, "updated": "2026-07-17T12:42:37Z"}
|
||||
|
|
|
|||
|
|
@ -71,6 +71,7 @@ Rows key on the **upstream SHA** (stable across local cherry-picks). Deferred ro
|
|||
| `71e3b818` | #1713 | fix: align reviewer eval with published findings (#1713) | Landed | cherry-picked (-x) in #201; reviewer.py + publish_review.py hand-reconciled into fork structure (kept sandbox/skills/middleware stack, kebab-case workflow, Bedrock eval default); publish_review cap param removed (tool-facing only) | fix/port-1713-reviewer-eval-alignment |
|
||||
| `092abafa` | #1717 | fix: enforce terse Slack tool messages (#1717) | Landed | cherry-picked (-x) in #197; one test conflict resolved by adopting upstream's test (fork prompt now contains upstream text); follow-up to landed #1681, not superseded by it | fix/port-1717-terse-slack-tool-msgs |
|
||||
| `92d63170` | #1720 | fix: separate review access from automatic reviews (#1720) | Landed | cherry-picked (-x) in #198 + fork-only auto-fix gates renamed to _is_repo_auto_review_enabled (kept opt-in-gated); opt-in list now gates only AUTOMATIC reviews — manual/re-review/watch/finding-replies open to any App-installed repo. Adam signed off 2026-07-16; /sh-security-review explicitly waived by Adam 2026-07-16 | fix/port-1720-review-access-split |
|
||||
| `8356eb34` | #1726 | refactor: organize repository by domain (#1726) | Landed | Adopted as a file-move exercise (fork content, upstream layout) on branch refactor/domain-reorg-adoption — gate-approved plan in docs/upstream-sync/domain-reorg/. New layout: agent/{graphs,runtime,api,review,resources}, agent/webhooks/*_routes.py (webapp.py split into api/ + per-source route modules; webapp.py now a shim), tests/<domain>/, ui/src/features/. Kills the per-pick path-remap tax and unblocks 8 deferred rows (#1732/#1761/#1744/#1748/#1742 clean; #1736/#1758/#1760 near-clean). | refactor/domain-reorg-adoption |
|
||||
| `129ddcf9` | #1728 | chore: include ripgrep in sandbox image (#1728) | Landed | 1-line Dockerfile add (ripgrep); dev image lacks it; trivial pick | chore/upstream-easy-picks |
|
||||
| `1ea03a43` | #1729 | feat: include Cargo in sandbox image (#1729) | Landed | 2-line Dockerfile add (Cargo); adopt with #1728 | chore/upstream-easy-picks |
|
||||
| `09eaf94c` | #1730 | fix: let admins interrupt runaway agents (#1730) | Landed | admin interrupt for runaway agents (dashboard route + UI); useful ops control; UI half on post-reorg ui/src/features — remap to ui/src/components/agents | feat/admin-thread-interrupt |
|
||||
|
|
@ -114,25 +115,24 @@ Rows key on the **upstream SHA** (stable across local cherry-picks). Deferred ro
|
|||
| `714ea4a2` | #1759 | fix: clear basedpyright standard-mode type errors (#1759) | Won't merge | tooling — basedpyright type-error cleanup across 123 post-reorg files; fork uses ruff and the pre-reorg layout | |
|
||||
| `dccf6437` | #1769 | fix: tighten sandbox config test types (#1769) | Won't merge | test-only change in post-reorg path tests/sandbox/ — fork doesn't have this file (domain reorg #1726 deferred) | |
|
||||
| `c9a193e2` | #1766 | chore(deps): bump mcp from 1.27.2 to 1.28.1 (#1766) | Won't merge | indirect dependency bump (mcp); fork's own Dependabot handles these | |
|
||||
| `8356eb34` | #1726 | refactor: organize repository by domain (#1726) | Deferred | FLAG-HUMAN: 298-file structural reorg (tests/<domain>/, ui/src/features/); chain head — every later upstream commit is written against this layout. Fork policy defers structural refactors (CLAUDE.md); adopting is a dedicated merge exercise. Until then, later picks need path remapping. | domain-reorg |
|
||||
| `83abea26` | #1724 | fix: accept natural-language Slack plan approvals (#1724) | Deferred | natural-language Slack plan approvals; touches fork-diverged plan-mode + Slack webhook stack (#130); post-reorg test paths need remap | plan-approval |
|
||||
| `ddbe457b` | #1727 | fix: restore GPT-5.5 as default model (#1727) | Deferred | restores GPT-5.5 default in options/team_settings; fork picker is Bedrock/Fireworks-only — rides the #1708 OpenAI-models product decision (27b0ddeb) | model-picker |
|
||||
| `30832d29` | #1731 | fix: preserve OpenAI Responses tool history (#1731) | Deferred | deletes SanitizeOpenAIResponsesMiddleware in favor of replay-history preservation in utils/model.py; supersedes deferred #1718 (35659177) — triage the pair together against fork-diverged middleware + model.py | openai-sanitize |
|
||||
| `1ea0e600` | #1736 | fix: bind cached GitHub tokens to users (#1736) | Deferred | FLAG-HUMAN: security fix — binds per-thread cached GitHub tokens to a user principal (closes cross-user token-reuse leak). Fork has github_token.py but not webhooks/common.py — hand-map; auth surface: GPT-4.1 cross-review + /sh-security-review on landing. Priority pick. | github-token-binding |
|
||||
| `1ea0e600` | #1736 | fix: bind cached GitHub tokens to users (#1736) | Deferred | FLAG-HUMAN: security fix — binds per-thread cached GitHub tokens to a user principal (closes cross-user token-reuse leak). Fork has github_token.py but not webhooks/common.py — hand-map; auth surface: GPT-4.1 cross-review + /sh-security-review on landing. Priority pick. Re-triage (post-reorg 8356eb34 landed): biggest beneficiary — agent/webhooks/common.py now exists, so the pick is near-clean against it; auth gates (GPT-4.1 cross-review + /sh-security-review) still apply. | github-token-binding |
|
||||
| `3fcb27ce` | #1737 | fix: bound reviewer diff fetching (#1737) | Deferred | bounds reviewer diff fetching + new fetch_review_diff tool; reviewer.py fork-diverged — reconcile like #1713 (71e3b818) | reviewer-misc |
|
||||
| `d714586c` | #1732 | fix: normalize dashboard label rendering (#1732) | Deferred | dashboard tool-label normalization; post-reorg ui/src/features paths — remap | dashboard-ui |
|
||||
| `d714586c` | #1732 | fix: normalize dashboard label rendering (#1732) | Deferred | dashboard tool-label normalization; post-reorg ui/src/features paths — remap. Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick; ui/src/features/ now matches upstream. | dashboard-ui |
|
||||
| `ef68c09b` | #1734 | fix: handle Slack DMs as mentions (#1734) | Deferred | treat Slack DMs as mentions; touches fork-diverged Slack webhook + e2e harness; post-reorg test paths | slack-tooling |
|
||||
| `26828ff9` | #1745 | chore: upgrade deepagents to 0.7.0a7 (#1745) | Deferred | deepagents 0.6.12 -> 0.7.0a7 alpha + [tool.uv] override-dependencies to bypass sandbox integrations <0.7.0 bound; fork is built on create_deep_agent — dedicated validation (unit + e2e) before adopting an alpha | deps |
|
||||
| `ef0ed5af` | #1741 | fix: centralize SSRF-safe image fetches (#1741) | Deferred | security hardening — centralizes image fetches through url_safety.py (SSRF); fork has url_safety.py/multimodal.py (diverged) — hand-reconcile; untrusted-input surface: /sh-security-review on landing | ssrf-hardening |
|
||||
| `136d28e6` | #1733 | fix: disable todos by default (#1733) | Deferred | global write_todos/TodoListMiddleware default-off with OPEN_SWE_ENABLE_TODOS opt-in; edits fork-customized prompt.py — small hand-merge; supersedes #1725 | prompt-tweaks |
|
||||
| `3e8089c3` | #1744 | fix: collapse git panel by default (#1744) | Deferred | collapse git panel by default (localStorage pref); post-reorg UI paths — remap to ui/src/components/agents | dashboard-ui |
|
||||
| `3e8089c3` | #1744 | fix: collapse git panel by default (#1744) | Deferred | collapse git panel by default (localStorage pref); post-reorg UI paths — remap to ui/src/components/agents. Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick; ui/src/features/ now matches upstream. | dashboard-ui |
|
||||
| `5077e2c7` | #1735 | feat(open-swe): untagged two-party Slack replies + debounced interrupts (#1735) | Deferred | untagged two-party Slack replies + debounced interrupts (~620 LOC incl. e2e); rides fork-diverged Slack webhook stack; own branch + e2e validation | slack-untagged-replies |
|
||||
| `8b26819f` | #1719 | fix: offload web tool results to sandbox (#1719) | Deferred | offloads large web tool results to sandbox files; touches fork-relevant web_search/http tools; check interplay with fork sandbox lifecycle | tool-offloading |
|
||||
| `c34e04f4` | #1742 | fix: defensive copy in get_reviewer_agent and get_chat_agent [closes #1584] (#1742) | Deferred | defensive copy of config in get_reviewer_agent/get_chat_agent; small correctness fix; dev has chat.py + reviewer.py (diverged) — likely near-clean pick | small-tools |
|
||||
| `79df6b2f` | #1748 | feat: add Linear issue search tool (#1748) | Deferred | additive linear_search_issues tool + utils/linear.py search helper; fork ships Linear tools — straightforward port; post-reorg test path remap | small-tools |
|
||||
| `c34e04f4` | #1742 | fix: defensive copy in get_reviewer_agent and get_chat_agent [closes #1584] (#1742) | Deferred | defensive copy of config in get_reviewer_agent/get_chat_agent; small correctness fix; dev has chat.py + reviewer.py (diverged) — likely near-clean pick. Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick; reviewer.py/chat.py factories unmoved. | small-tools |
|
||||
| `79df6b2f` | #1748 | feat: add Linear issue search tool (#1748) | Deferred | additive linear_search_issues tool + utils/linear.py search helper; fork ships Linear tools — straightforward port; post-reorg test path remap. Re-triage (post-reorg 8356eb34 landed): test-path blocker removed — clean pick; tests/<domain>/ now matches upstream. | small-tools |
|
||||
| `b7c5dbd6` | #1747 | fix: simplify Slack run links (#1747) | Deferred | simplifies Slack run links; heavy churn on fork-diverged Slack context/prompt tests | slack-tooling |
|
||||
| `22383033` | #1758 | feat: inject extra JSON fields into sandbox create via env var (#1758) | Deferred | additive: extra JSON fields into sandbox create via env var (integrations/langsmith.py); fork langsmith.py diverged (proxy config) — small reconcile | sandbox-config |
|
||||
| `e826864d` | #1760 | feat: optional separate LangSmith key/endpoint for sandboxes (#1760) | Deferred | optional separate LangSmith key/endpoint for sandboxes; additive to langsmith.py + proxy auth; useful for fork LangSmith sandbox usage | sandbox-config |
|
||||
| `dd5b7bec` | #1761 | fix: capitalize dashboard tool labels (#1761) | Deferred | capitalize dashboard tool labels; post-reorg UI paths; stacks on #1732 (d714586c) | dashboard-ui |
|
||||
| `22383033` | #1758 | feat: inject extra JSON fields into sandbox create via env var (#1758) | Deferred | additive: extra JSON fields into sandbox create via env var (integrations/langsmith.py); fork langsmith.py diverged (proxy config) — small reconcile. Re-triage (post-reorg 8356eb34 landed): near-clean — path-remap tax gone; remaining work is the additive reconcile against fork's diverged langsmith.py (integrations/ unmoved by reorg). | sandbox-config |
|
||||
| `e826864d` | #1760 | feat: optional separate LangSmith key/endpoint for sandboxes (#1760) | Deferred | optional separate LangSmith key/endpoint for sandboxes; additive to langsmith.py + proxy auth; useful for fork LangSmith sandbox usage. Re-triage (post-reorg 8356eb34 landed): near-clean — path-remap tax gone; remaining work is the additive reconcile against fork's diverged langsmith.py + proxy auth (integrations/ unmoved). | sandbox-config |
|
||||
| `dd5b7bec` | #1761 | fix: capitalize dashboard tool labels (#1761) | Deferred | capitalize dashboard tool labels; post-reorg UI paths; stacks on #1732 (d714586c). Re-triage (post-reorg 8356eb34 landed): path-remap blocker removed — clean pick after #1732. | dashboard-ui |
|
||||
|
||||
_Maintenance: after a `git sync`, add new `dev..upstream/main` SHAs as **Untriaged** (edit `triage.jsonl`) and bump "Last synced". A successful `git cherry-pick -x` auto-moves the row to **Landed** via the `post-commit` journal + `make triage-reconcile`._
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue