Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
479bb48
Review tab parallel review organization
arul28 May 20, 2026
7a66e30
Fix ADE review findings
arul28 May 20, 2026
bb51a29
Fix second ADE review findings
arul28 May 20, 2026
bfa4629
Fix latest ADE review findings
arul28 May 20, 2026
5145d45
Fix latest ADE review findings
arul28 May 20, 2026
02dc096
Tighten review prompts and PR cache refresh
arul28 May 20, 2026
c701ba3
Fix latest ADE review findings
arul28 May 20, 2026
423bb9c
Fix latest ADE review findings
arul28 May 20, 2026
29cf998
Merge remote-tracking branch 'origin/main' into ade/review-tab-v1-par…
arul28 May 20, 2026
96e0f9a
Allow partial review completion
arul28 May 20, 2026
9a36730
Fix ADE review findings
arul28 May 20, 2026
97f5d52
Fix follow-up ADE review findings
arul28 May 20, 2026
bbc7ee0
Surface partial review coverage
arul28 May 20, 2026
bc85580
Fix latest ADE review findings
arul28 May 20, 2026
87a3520
Keep PR AI summaries local only
arul28 May 20, 2026
708f819
Fix review follow-up edge cases
arul28 May 20, 2026
597126c
Fix ADE review self-findings
arul28 May 20, 2026
7284248
Fix final ADE review findings
arul28 May 20, 2026
6d54014
Add review finding copy actions
arul28 May 20, 2026
e1aef36
ship: address review feedback and Windows package size
arul28 May 20, 2026
125b3ff
ship: tighten Windows runtime package pruning
arul28 May 20, 2026
0ed973c
ship: avoid readonly CRR metadata deletes
arul28 May 20, 2026
2e0f1fd
ship: keep stash pop success after drop warning
arul28 May 20, 2026
fd67d76
ship: bound review manifest prompts
arul28 May 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .ade/ade.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
version: 1
processes:
- id: xsi8oj88
name: dogfood onboardinign fixes
- id: gq3sy4rj
name: npm run dev:desktop
command:
- ./scripts/dogfood.sh
- onboarding-fixes
cwd: apps/desktop
- npm
- run
- dev:desktop
cwd: .
gracefulShutdownMs: 7000
readiness:
type: none
Expand Down
175 changes: 0 additions & 175 deletions .claude/skills/plan/SKILL.md

This file was deleted.

78 changes: 77 additions & 1 deletion apps/ade-cli/src/adeRpcServer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ function createRuntime() {
listBranches: vi.fn(async () => [{ name: "main", current: true, ahead: 0, behind: 0, hasUpstream: true, upstream: "origin/main" }]),
checkoutBranch: vi.fn(async () => ({ success: true })),
stashPush: vi.fn(async () => ({ success: true })),
listStashes: vi.fn(async () => [{ ref: "stash@{0}", createdAt: "2026-04-06T00:00:00.000Z", subject: "test stash" }]),
listStashes: vi.fn(async () => [{ oid: "oid-0", ref: "stash@{0}", createdAt: "2026-04-06T00:00:00.000Z", subject: "test stash" }]),
stashApply: vi.fn(async () => ({ success: true })),
stashPop: vi.fn(async () => ({ success: true })),
stashDrop: vi.fn(async () => ({ success: true })),
Expand Down Expand Up @@ -4515,6 +4515,51 @@ describe("adeRpcServer", () => {

});

it("invokes review.startRun through ADE actions without dropping unlimited budgets", async () => {
const fixture = createRuntime();
const startArgs = {
target: { mode: "lane_diff", laneId: "lane-1" },
config: {
compareAgainst: { kind: "default_branch" },
selectionMode: "full_diff",
dirtyOnly: false,
modelId: "openai/gpt-5.4",
reasoningEffort: "medium",
budgets: {
unlimited: true,
maxFiles: Number.MAX_SAFE_INTEGER,
maxDiffChars: Number.MAX_SAFE_INTEGER,
maxPromptChars: Number.MAX_SAFE_INTEGER,
maxFindings: Number.MAX_SAFE_INTEGER,
maxFindingsPerPass: Number.MAX_SAFE_INTEGER,
maxPublishedFindings: Number.MAX_SAFE_INTEGER,
},
publishBehavior: "local_only",
},
};
const startRun = vi.fn(async (args: typeof startArgs) => ({
id: "review-run-1",
laneId: args.target.laneId,
config: args.config,
status: "queued",
}));
(fixture.runtime as any).reviewService = { startRun };
const handler = createAdeRpcRequestHandler({ runtime: fixture.runtime, serverVersion: "test" });
await initialize(handler, { callerId: "agent-1", role: "agent" });

const response = await callTool(handler, "run_ade_action", {
domain: "review",
action: "startRun",
args: startArgs,
});

expect(response?.isError).toBeUndefined();
expect(startRun).toHaveBeenCalledWith(startArgs);
expect(startRun.mock.calls[0][0].config.budgets).toEqual(startArgs.config.budgets);
expect(response.structuredContent.result.config.budgets).toEqual(startArgs.config.budgets);
expect(response.structuredContent.result.config.budgets.unlimited).toBe(true);
});

it("binds service method context when invoking dynamic ADE actions", async () => {
const fixture = createRuntime();
const missionService = fixture.runtime.missionService as any;
Expand Down Expand Up @@ -4689,6 +4734,37 @@ describe("adeRpcServer", () => {
expect(response.structuredContent.count).toBe(1);
});

it("passes stash oid through destructive stash tools", async () => {
const fixture = createRuntime();
const handler = createAdeRpcRequestHandler({ runtime: fixture.runtime, serverVersion: "test" });

await initialize(handler, { callerId: "agent-1", role: "agent" });

const pop = await callTool(handler, "stash_pop", {
laneId: "lane-1",
stashRef: "stash@{0}",
stashOid: "oid-0",
});
const drop = await callTool(handler, "stash_drop", {
laneId: "lane-1",
stashRef: "stash@{0}",
stashOid: "oid-0",
});

expect(pop?.isError).toBeUndefined();
expect(drop?.isError).toBeUndefined();
expect(fixture.runtime.gitService.stashPop).toHaveBeenCalledWith({
laneId: "lane-1",
stashRef: "stash@{0}",
stashOid: "oid-0",
});
expect(fixture.runtime.gitService.stashDrop).toHaveBeenCalledWith({
laneId: "lane-1",
stashRef: "stash@{0}",
stashOid: "oid-0",
});
});

it("returns resources for lane status/conflicts", async () => {
const fixture = createRuntime();
const handler = createAdeRpcRequestHandler({ runtime: fixture.runtime, serverVersion: "test" });
Expand Down
22 changes: 14 additions & 8 deletions apps/ade-cli/src/adeRpcServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1046,7 +1046,8 @@ const TOOL_SPECS: ToolSpec[] = [
additionalProperties: false,
properties: {
laneId: { type: "string", minLength: 1 },
stashRef: { type: "string", minLength: 1 }
stashRef: { type: "string", minLength: 1 },
stashOid: { type: "string", minLength: 1 }
}
}
},
Expand All @@ -1055,11 +1056,12 @@ const TOOL_SPECS: ToolSpec[] = [
description: "Pop a stash onto a lane and remove it from the stash list. Defaults to the current chat lane when laneId is omitted.",
inputSchema: {
type: "object",
required: ["stashRef"],
required: ["stashRef", "stashOid"],
additionalProperties: false,
properties: {
laneId: { type: "string", minLength: 1 },
stashRef: { type: "string", minLength: 1 }
stashRef: { type: "string", minLength: 1 },
stashOid: { type: "string", minLength: 1 }
}
}
},
Expand All @@ -1068,11 +1070,12 @@ const TOOL_SPECS: ToolSpec[] = [
description: "Drop a stash from a lane. Defaults to the current chat lane when laneId is omitted.",
inputSchema: {
type: "object",
required: ["stashRef"],
required: ["stashRef", "stashOid"],
additionalProperties: false,
properties: {
laneId: { type: "string", minLength: 1 },
stashRef: { type: "string", minLength: 1 }
stashRef: { type: "string", minLength: 1 },
stashOid: { type: "string", minLength: 1 }
}
}
},
Expand Down Expand Up @@ -6526,21 +6529,24 @@ async function runTool(args: {
if (name === "stash_apply") {
const laneId = requireLaneIdForTool(runtime, session, toolArgs, "stash_apply");
const stashRef = assertNonEmptyString(toolArgs.stashRef, "stashRef");
const action = await runtime.gitService.stashApply({ laneId, stashRef });
const stashOid = asOptionalTrimmedString(toolArgs.stashOid);
const action = await runtime.gitService.stashApply({ laneId, stashRef, ...(stashOid ? { stashOid } : {}) });
return { action };
}

if (name === "stash_pop") {
const laneId = requireLaneIdForTool(runtime, session, toolArgs, "stash_pop");
const stashRef = assertNonEmptyString(toolArgs.stashRef, "stashRef");
const action = await runtime.gitService.stashPop({ laneId, stashRef });
const stashOid = assertNonEmptyString(toolArgs.stashOid, "stashOid");
const action = await runtime.gitService.stashPop({ laneId, stashRef, stashOid });
return { action };
}

if (name === "stash_drop") {
const laneId = requireLaneIdForTool(runtime, session, toolArgs, "stash_drop");
const stashRef = assertNonEmptyString(toolArgs.stashRef, "stashRef");
const action = await runtime.gitService.stashDrop({ laneId, stashRef });
const stashOid = assertNonEmptyString(toolArgs.stashOid, "stashOid");
const action = await runtime.gitService.stashDrop({ laneId, stashRef, stashOid });
return { action };
}

Expand Down
Loading
Loading