@selesai/code 0.13.12 → 0.13.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/extensions/pi-subagents/CHANGELOG.md +77 -1
- package/dist/extensions/pi-subagents/VISION.md +12 -1
- package/dist/extensions/pi-subagents/docs/agents.md +13 -6
- package/dist/extensions/pi-subagents/docs/configuration.md +35 -9
- package/dist/extensions/pi-subagents/docs/extension-api.md +1 -1
- package/dist/extensions/pi-subagents/docs/missions.md +1 -1
- package/dist/extensions/pi-subagents/docs/models.md +6 -6
- package/dist/extensions/pi-subagents/docs/observability.md +6 -3
- package/dist/extensions/pi-subagents/docs/tool-reference.md +3 -3
- package/dist/extensions/pi-subagents/docs/watchdog.md +92 -114
- package/dist/extensions/pi-subagents/docs/workflows.md +1 -1
- package/dist/extensions/pi-subagents/install.mjs +1 -2
- package/dist/extensions/pi-subagents/package.json +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +6 -6
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +1 -1
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +4 -4
- package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +1 -1
- package/dist/extensions/pi-subagents/src/agents/agent-management.ts +41 -4
- package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +3 -0
- package/dist/extensions/pi-subagents/src/agents/agents.ts +120 -124
- package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +5 -1
- package/dist/extensions/pi-subagents/src/api/preflight.ts +4 -0
- package/dist/extensions/pi-subagents/src/api/shared-types.ts +3 -0
- package/dist/extensions/pi-subagents/src/extension/config.ts +20 -0
- package/dist/extensions/pi-subagents/src/extension/public-execution.ts +1 -0
- package/dist/extensions/pi-subagents/src/extension/schemas.ts +6 -2
- package/dist/extensions/pi-subagents/src/extension/tool-description.ts +1 -1
- package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +19 -13
- package/dist/extensions/pi-subagents/src/runs/background/active-async-capacity.ts +26 -8
- package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +103 -23
- package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +6 -2
- package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -2
- package/dist/extensions/pi-subagents/src/runs/background/notify.ts +54 -3
- package/dist/extensions/pi-subagents/src/runs/background/process-terminal.ts +16 -0
- package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +22 -2
- package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +63 -6
- package/dist/extensions/pi-subagents/src/runs/background/steering.ts +4 -1
- package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +69 -12
- package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +13 -0
- package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +3 -1
- package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +21 -8
- package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +59 -6
- package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +95 -18
- package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +11 -43
- package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +1 -0
- package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/lane-metadata.ts +24 -3
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +4 -0
- package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +2 -6
- package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +1 -0
- package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +33 -18
- package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +73 -37
- package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +33 -6
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +4 -2
- package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +20 -3
- package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +21 -7
- package/dist/extensions/pi-subagents/src/runs/shared/tool-timeout.ts +1 -1
- package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +467 -63
- package/dist/extensions/pi-subagents/src/shared/atomic-json.ts +3 -1
- package/dist/extensions/pi-subagents/src/shared/fork-context.ts +0 -12
- package/dist/extensions/pi-subagents/src/shared/fork-session-cwd.ts +27 -0
- package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +3 -0
- package/dist/extensions/pi-subagents/src/shared/types.ts +42 -4
- package/dist/extensions/pi-subagents/src/shared/utils.ts +18 -7
- package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +1 -1
- package/dist/extensions/pi-subagents/src/slash/subagents-admin.ts +26 -12
- package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +61 -2
- package/dist/extensions/pi-subagents/src/tui/fleet.ts +12 -7
- package/dist/extensions/pi-subagents/src/tui/render.ts +227 -14
- package/dist/extensions/pi-subagents/src/watchdog/child-status.ts +56 -34
- package/dist/extensions/pi-subagents/src/watchdog/diff-tool.ts +77 -0
- package/dist/extensions/pi-subagents/src/watchdog/emission-guard.ts +5 -3
- package/dist/extensions/pi-subagents/src/watchdog/guidance.ts +20 -0
- package/dist/extensions/pi-subagents/src/watchdog/register-child.ts +16 -13
- package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +10 -9
- package/dist/extensions/pi-subagents/src/watchdog/render.ts +4 -5
- package/dist/extensions/pi-subagents/src/watchdog/review.ts +15 -4
- package/dist/extensions/pi-subagents/src/watchdog/rules.ts +70 -0
- package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +75 -92
- package/dist/extensions/pi-subagents/src/watchdog/scope.ts +2 -1
- package/dist/extensions/pi-subagents/src/watchdog/settings.ts +48 -104
- package/dist/extensions/pi-subagents/src/watchdog/types.ts +18 -32
- package/dist/extensions/pi-subagents/src/watchdog/warning-format.ts +0 -1
- package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +3 -2
- package/dist/extensions/pi-subagents/src/workflows/workflow-checklist.ts +439 -0
- package/dist/extensions/pi-subagents/src/workflows/workflow-preflight.ts +28 -1
- package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +335 -21
- package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +4 -1
- package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +22 -18
- package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +0 -1
- package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +21 -18
- package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +307 -22
- package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/support/helpers.ts +25 -0
- package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +15 -4
- package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +17 -2
- package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +96 -15
- package/dist/extensions/pi-subagents/test/unit/active-async-capacity.test.ts +53 -5
- package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +20 -0
- package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +221 -8
- package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +45 -24
- package/dist/extensions/pi-subagents/test/unit/agent-scan-dirs.test.ts +133 -0
- package/dist/extensions/pi-subagents/test/unit/async-execution.test.ts +28 -2
- package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +2 -0
- package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +4 -1
- package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +18 -4
- package/dist/extensions/pi-subagents/test/unit/atomic-json.test.ts +16 -0
- package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +38 -0
- package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +21 -0
- package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +19 -6
- package/dist/extensions/pi-subagents/test/unit/get-final-output.test.ts +26 -0
- package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +22 -1
- package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +2 -6
- package/dist/extensions/pi-subagents/test/unit/notify.test.ts +66 -1
- package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +116 -10
- package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +136 -18
- package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +20 -0
- package/dist/extensions/pi-subagents/test/unit/process-terminal.test.ts +22 -0
- package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +1 -0
- package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +8 -0
- package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +127 -48
- package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +68 -0
- package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +17 -0
- package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +88 -0
- package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +4 -2
- package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +9 -9
- package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/steering.test.ts +9 -3
- package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +22 -9
- package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +91 -8
- package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +27 -0
- package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +50 -0
- package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +0 -1
- package/dist/extensions/pi-subagents/test/unit/tool-timeout.test.ts +2 -2
- package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +34 -0
- package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +1 -2
- package/dist/extensions/pi-subagents/test/unit/watchdog-child-status.test.ts +73 -13
- package/dist/extensions/pi-subagents/test/unit/watchdog-diff-tool.test.ts +79 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +2 -4
- package/dist/extensions/pi-subagents/test/unit/watchdog-render.test.ts +7 -8
- package/dist/extensions/pi-subagents/test/unit/watchdog-review.test.ts +48 -3
- package/dist/extensions/pi-subagents/test/unit/watchdog-rules.test.ts +37 -0
- package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +36 -118
- package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +1 -1
- package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +37 -14
- package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +45 -26
- package/dist/extensions/pi-subagents/test/unit/workflow-checklist.test.ts +223 -0
- package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +50 -1
- package/dist/extensions/pi-subagents/test/unit/workflow-preflight.test.ts +22 -0
- package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +136 -4
- package/dist/extensions/pi-zentui/README.md +19 -5
- package/dist/extensions/pi-zentui/docs/configuration.md +37 -9
- package/dist/extensions/pi-zentui/extensions/zentui/config.ts +29 -0
- package/dist/extensions/pi-zentui/extensions/zentui/index.ts +31 -2
- package/dist/extensions/pi-zentui/extensions/zentui/prototype-patch-registry.ts +55 -11
- package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +115 -3
- package/dist/extensions/pi-zentui/extensions/zentui/settings-previews.ts +119 -2
- package/dist/extensions/pi-zentui/extensions/zentui/thinking-experimental.ts +1768 -0
- package/dist/extensions/pi-zentui/extensions/zentui/thinking-status.ts +69 -0
- package/dist/extensions/pi-zentui/extensions/zentui/thinking-steps.ts +155 -0
- package/dist/extensions/pi-zentui/extensions/zentui/ui.ts +2 -1
- package/dist/extensions/pi-zentui/extensions/zentui/user-message-osc.ts +16 -2
- package/dist/extensions/pi-zentui/extensions/zentui/user-message-styles.ts +1 -1
- package/dist/extensions/pi-zentui/test/config-load-lifecycle.test.ts +124 -0
- package/dist/extensions/pi-zentui/test/config.test.ts +82 -2
- package/dist/extensions/pi-zentui/test/editor-viewport-indicators.test.ts +19 -4
- package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +58 -9
- package/dist/extensions/pi-zentui/test/package-contents.mjs +33 -0
- package/dist/extensions/pi-zentui/test/prototype-patch-registry.test.ts +131 -0
- package/dist/extensions/pi-zentui/test/responsive-dependencies.test.ts +4 -4
- package/dist/extensions/pi-zentui/test/settings-command.test.ts +289 -7
- package/dist/extensions/pi-zentui/test/settings-previews.test.ts +106 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-docs.test.ts +51 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-loader-diagnostics.mjs +54 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-missing-export.test.ts +44 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-rows.test.ts +297 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental-tui.mjs +2329 -0
- package/dist/extensions/pi-zentui/test/thinking-experimental.test.ts +1668 -0
- package/dist/extensions/pi-zentui/test/thinking-status.test.ts +85 -0
- package/dist/extensions/pi-zentui/test/thinking-steps.test.ts +122 -0
- package/dist/extensions/pi-zentui/test/user-message-osc.test.ts +58 -0
- package/dist/skills/brandkit/SKILL.md +0 -2
- package/dist/skills/{industrial-brutalist-ui → brutalist}/SKILL.md +1 -3
- package/dist/skills/gpt-taste/SKILL.md +0 -2
- package/dist/skills/image-to-code/SKILL.md +0 -2
- package/dist/skills/imagegen-frontend-mobile/SKILL.md +0 -2
- package/dist/skills/imagegen-frontend-web/SKILL.md +0 -2
- package/dist/skills/{minimalist-ui → minimalist}/SKILL.md +1 -3
- package/dist/skills/{full-output-enforcement → output}/SKILL.md +1 -3
- package/dist/skills/{redesign-existing-projects → redesign}/SKILL.md +1 -3
- package/dist/skills/{high-end-visual-design → soft}/SKILL.md +1 -3
- package/dist/skills/stitch/DESIGN.md +121 -0
- package/dist/skills/{stitch-design-taste → stitch}/SKILL.md +1 -3
- package/dist/skills/{design-taste-frontend → taste}/SKILL.md +1 -3
- package/dist/skills/{design-taste-frontend-v1 → taste-v1}/SKILL.md +2 -4
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import assert from "node:assert/strict";
|
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import type { MockPi } from "../support/helpers.ts";
|
|
6
|
-
import { createEventBus, createMockPi, createTempDir, events, removeTempDir, tryImport } from "../support/helpers.ts";
|
|
6
|
+
import { createEventBus, createMockPi, createTempDir, events, removeTempDir, resolveMockPiCallArgs, tryImport } from "../support/helpers.ts";
|
|
7
7
|
import { discoverAgents } from "../../src/agents/agents.ts";
|
|
8
8
|
import { ACTIVE_ASYNC_CAPACITY_DIR, acquireActiveAsyncCapacity, activeAsyncCapacitySessionKey } from "../../src/runs/background/active-async-capacity.ts";
|
|
9
9
|
import { clearExclusions } from "../../src/runs/shared/model-exclusions.ts";
|
|
@@ -161,23 +161,23 @@ describe("fork context execution wiring", { skip: !available ? "subagent executo
|
|
|
161
161
|
.sort()
|
|
162
162
|
.at(-1);
|
|
163
163
|
assert.ok(callFile, "expected a recorded mock pi call");
|
|
164
|
-
return readRecordedArgs(callFile);
|
|
164
|
+
return readRecordedArgs(callFile, true);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
function readAllCallArgs(): string[][] {
|
|
168
168
|
return fs.readdirSync(mockPi.dir)
|
|
169
169
|
.filter((name) => name.startsWith("call-") && name.endsWith(".json"))
|
|
170
170
|
.sort()
|
|
171
|
-
.map(readRecordedArgs);
|
|
171
|
+
.map((name) => readRecordedArgs(name));
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
function readRecordedArgs(callFile: string): string[] {
|
|
175
|
-
const payload = JSON.parse(fs.readFileSync(path.join(mockPi.dir, callFile), "utf-8"));
|
|
174
|
+
function readRecordedArgs(callFile: string, effective = false): string[] {
|
|
175
|
+
const payload = JSON.parse(fs.readFileSync(path.join(mockPi.dir, callFile), "utf-8")) as { args?: string[]; effectiveArgs?: string[] };
|
|
176
176
|
assert.equal(typeof payload, "object", "expected recorded args payload");
|
|
177
177
|
assert.notEqual(payload, null, "expected recorded args payload");
|
|
178
178
|
assert.ok("args" in payload, "expected recorded args payload");
|
|
179
179
|
assert.ok(Array.isArray(payload.args), "expected recorded args");
|
|
180
|
-
return payload.args;
|
|
180
|
+
return effective ? resolveMockPiCallArgs(payload) : payload.args;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
function readSessionArgsFromCalls(): string[] {
|
|
@@ -192,14 +192,8 @@ describe("fork context execution wiring", { skip: !available ? "subagent executo
|
|
|
192
192
|
.filter((sessionFile): sessionFile is string => Boolean(sessionFile));
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
function
|
|
196
|
-
|
|
197
|
-
const prompt = callArgs.at(-1) ?? "";
|
|
198
|
-
return prompt.startsWith(`Task: ${taskText}\n`)
|
|
199
|
-
|| prompt.includes(`\n\nTask:\n${taskText}\n`);
|
|
200
|
-
});
|
|
201
|
-
assert.ok(args, `expected a recorded mock pi call for task '${taskText}'`);
|
|
202
|
-
return args;
|
|
195
|
+
function isTaskFileArg(arg: string): boolean {
|
|
196
|
+
return arg.startsWith("@") && arg.endsWith("task.md");
|
|
203
197
|
}
|
|
204
198
|
|
|
205
199
|
function readSessionArg(args: string[]): string {
|
|
@@ -313,8 +307,13 @@ describe("fork context execution wiring", { skip: !available ? "subagent executo
|
|
|
313
307
|
);
|
|
314
308
|
|
|
315
309
|
assert.equal(result.isError, undefined);
|
|
316
|
-
const args =
|
|
317
|
-
|
|
310
|
+
const args = readAllCallArgs()[0] ?? [];
|
|
311
|
+
const taskArg = args.at(-1) ?? "";
|
|
312
|
+
if (process.platform === "darwin") {
|
|
313
|
+
assert.ok(isTaskFileArg(taskArg));
|
|
314
|
+
} else {
|
|
315
|
+
assert.ok(taskArg.startsWith("Task: \n\n## Acceptance Contract"));
|
|
316
|
+
}
|
|
318
317
|
});
|
|
319
318
|
|
|
320
319
|
it("fails pruned fork model auth before child spawn", async () => {
|
|
@@ -1314,8 +1313,13 @@ describe("fork context execution wiring", { skip: !available ? "subagent executo
|
|
|
1314
1313
|
);
|
|
1315
1314
|
|
|
1316
1315
|
assert.equal(result.isError, undefined);
|
|
1317
|
-
const args = readAllCallArgs()
|
|
1318
|
-
|
|
1316
|
+
const args = readAllCallArgs()[0] ?? [];
|
|
1317
|
+
const taskArg = args.at(-1) ?? "";
|
|
1318
|
+
if (process.platform === "darwin") {
|
|
1319
|
+
assert.ok(isTaskFileArg(taskArg));
|
|
1320
|
+
} else {
|
|
1321
|
+
assert.ok(taskArg.startsWith(`Task: ${task}\n\n## Acceptance Contract`));
|
|
1322
|
+
}
|
|
1319
1323
|
const modelIndex = args.indexOf("--model");
|
|
1320
1324
|
assert.notEqual(modelIndex, -1);
|
|
1321
1325
|
assert.equal(args[modelIndex + 1], "anthropic/claude-haiku-4-5");
|
|
@@ -986,7 +986,6 @@ describe("intercom result delivery cutover", { skip: !available ? "executor not
|
|
|
986
986
|
assert.match(result.content[0]?.text ?? "", /Revived async subagent from/);
|
|
987
987
|
assert.match(result.content[0]?.text ?? "", /Do not run sleep timers or polling loops/);
|
|
988
988
|
assert.match(result.content[0]?.text ?? "", /Use bg_wait only/);
|
|
989
|
-
assert.doesNotMatch(result.content[0]?.text ?? "", /subagent_wait/);
|
|
990
989
|
assert.match(result.content[0]?.text ?? "", /Status if needed: subagent\(\{ action: "status"/);
|
|
991
990
|
assert.doesNotMatch(result.content[0]?.text ?? "", /Follow:/);
|
|
992
991
|
const revivedId = result.details?.asyncId;
|
|
@@ -307,9 +307,13 @@ describe("subagent async widget rendering", () => {
|
|
|
307
307
|
};
|
|
308
308
|
|
|
309
309
|
const text = buildWidgetLines([job], theme, 180).join("\n");
|
|
310
|
-
assert.match(text, /
|
|
311
|
-
assert.match(text, /
|
|
310
|
+
assert.match(text, /CI checks 1 active/);
|
|
311
|
+
assert.match(text, /Review gate 1 blocked/);
|
|
312
312
|
assert.doesNotMatch(text, /async subagent .*CI checks/);
|
|
313
|
+
|
|
314
|
+
const expanded = buildWidgetLines([job], theme, 180, true).join("\n");
|
|
315
|
+
assert.match(expanded, /ci: CI checks · running · provider:local-tests · PR #1614/);
|
|
316
|
+
assert.match(expanded, /gate: Review gate · inconclusive · provider:opaque-provider · reason:stale-head · stale · out:gate.json/);
|
|
313
317
|
});
|
|
314
318
|
|
|
315
319
|
it("keeps simple one-off async rows on the existing fallback projection", () => {
|
|
@@ -928,14 +932,14 @@ describe("subagent async widget rendering", () => {
|
|
|
928
932
|
|
|
929
933
|
it("keeps the active runs.lanes stage in focus before collapsed history", () => {
|
|
930
934
|
resetWidgetLayout();
|
|
931
|
-
withStdoutSize(
|
|
935
|
+
withStdoutSize(30, 120, () => {
|
|
932
936
|
const stageKeys = ["scope-scout", "red-tests", "label-helpers", "summary-title", "detail-row", "tiers-noise", "validation", "minimality-challenge", "fresh-review"];
|
|
933
937
|
const nodeIds = stageKeys.map((key) => `issue-1695.${key}`);
|
|
934
|
-
const statuses = stageKeys.map((_, index) => index <
|
|
938
|
+
const statuses = stageKeys.map((_, index) => index < 7 ? "completed" : index === 7 ? "running" : "pending");
|
|
935
939
|
const workflowGraph = {
|
|
936
940
|
runId: "workflow-1695",
|
|
937
941
|
mode: "workflow",
|
|
938
|
-
phases:
|
|
942
|
+
phases: stageKeys.map((title, index) => ({ title, nodeIds: [nodeIds[index]!] })),
|
|
939
943
|
nodes: stageKeys.map((key, index) => ({
|
|
940
944
|
id: nodeIds[index],
|
|
941
945
|
kind: "step",
|
|
@@ -945,7 +949,7 @@ describe("subagent async widget rendering", () => {
|
|
|
945
949
|
flatIndex: index,
|
|
946
950
|
stepIndex: index,
|
|
947
951
|
})),
|
|
948
|
-
currentNodeId: nodeIds[
|
|
952
|
+
currentNodeId: nodeIds[7],
|
|
949
953
|
};
|
|
950
954
|
const job = {
|
|
951
955
|
asyncId: "workflow-1695",
|
|
@@ -953,11 +957,11 @@ describe("subagent async widget rendering", () => {
|
|
|
953
957
|
status: "running",
|
|
954
958
|
mode: "workflow",
|
|
955
959
|
agents: ["scout", "worker"],
|
|
956
|
-
currentStep:
|
|
957
|
-
stepsTotal:
|
|
960
|
+
currentStep: 7,
|
|
961
|
+
stepsTotal: stageKeys.length,
|
|
958
962
|
updatedAt: 200,
|
|
959
963
|
workflowGraph,
|
|
960
|
-
steps: stageKeys.slice(0,
|
|
964
|
+
steps: stageKeys.slice(0, 8).map((key, index) => ({
|
|
961
965
|
index,
|
|
962
966
|
agent: index === 0 ? "scout" : "worker",
|
|
963
967
|
status: statuses[index],
|
|
@@ -973,14 +977,13 @@ describe("subagent async widget rendering", () => {
|
|
|
973
977
|
renderWidget(ui.ctx as never, [job]);
|
|
974
978
|
const lines = renderWidgetLines(ui.widgets.at(-1));
|
|
975
979
|
const text = lines.join("\n");
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
assert.
|
|
979
|
-
assert.
|
|
980
|
-
assert.
|
|
981
|
-
assert.
|
|
982
|
-
assert.
|
|
983
|
-
assert.match(lines[activeIndex]!, /worker/);
|
|
980
|
+
assert.match(text, /7\/9 done · 1 active · 1 queued/);
|
|
981
|
+
assert.match(text, /minimality-challenge 1 active/);
|
|
982
|
+
assert.match(text, /fresh-review 1 queued/);
|
|
983
|
+
assert.match(text, /bottleneck · minimality-challenge/);
|
|
984
|
+
assert.match(text, /Press configured-expand-key for live detail/);
|
|
985
|
+
assert.doesNotMatch(text, /label-helpers/);
|
|
986
|
+
assert.doesNotMatch(text, /Step \d+\/9|task:|workspace:|out(?:put)?:/i);
|
|
984
987
|
});
|
|
985
988
|
resetWidgetLayout();
|
|
986
989
|
});
|
|
@@ -1018,7 +1021,7 @@ describe("subagent async widget rendering", () => {
|
|
|
1018
1021
|
stepsTotal: stages.length,
|
|
1019
1022
|
workflowGraph,
|
|
1020
1023
|
steps: stages,
|
|
1021
|
-
}], theme, 220,
|
|
1024
|
+
}], theme, 220, true).join("\n");
|
|
1022
1025
|
const rowIndex = (label: string): number => text.split("\n").findIndex((line) => line.includes(label));
|
|
1023
1026
|
const completed = rowIndex("completed-history");
|
|
1024
1027
|
const failed = rowIndex("failed-stage");
|