@vitos-pizza/vitos-pizza 0.1.0 → 0.2.0
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/AGENTS.md +158 -158
- package/CHANGELOG.md +42 -24
- package/LICENSE +21 -21
- package/README.md +237 -234
- package/assets/logo.svg +28 -28
- package/node_modules/@vitos-pizza/agent-mode/extensions/index.ts +138 -117
- package/node_modules/@vitos-pizza/agent-mode/package.json +3 -3
- package/node_modules/@vitos-pizza/agent-mode/src/apply-mode.ts +60 -60
- package/node_modules/@vitos-pizza/agent-mode/src/mode-events.ts +102 -102
- package/node_modules/@vitos-pizza/agent-mode/src/modes.ts +43 -43
- package/node_modules/@vitos-pizza/agent-mode/src/plan-instructions.ts +85 -44
- package/node_modules/@vitos-pizza/agent-mode/tests/apply-mode.test.ts +36 -36
- package/node_modules/@vitos-pizza/agent-mode/tests/mode-events.test.ts +22 -22
- package/node_modules/@vitos-pizza/agent-mode/tests/modes.test.ts +38 -38
- package/node_modules/@vitos-pizza/agent-mode/tests/plan-instructions.test.ts +68 -45
- package/node_modules/@vitos-pizza/agent-mode/tsconfig.json +13 -13
- package/node_modules/@vitos-pizza/agent-mode/vitest.config.ts +8 -8
- package/node_modules/@vitos-pizza/keybindings/extensions/index.ts +104 -104
- package/node_modules/@vitos-pizza/keybindings/package.json +1 -1
- package/node_modules/@vitos-pizza/keybindings/presets/shortcuts.json +3 -3
- package/node_modules/@vitos-pizza/keybindings/src/bind.ts +57 -57
- package/node_modules/@vitos-pizza/keybindings/src/config.ts +84 -84
- package/node_modules/@vitos-pizza/keybindings/src/registry.ts +43 -43
- package/node_modules/@vitos-pizza/keybindings/src/types.ts +54 -54
- package/node_modules/@vitos-pizza/keybindings/tests/config.test.ts +83 -83
- package/node_modules/@vitos-pizza/keybindings/tests/registry.test.ts +142 -142
- package/node_modules/@vitos-pizza/keybindings/tsconfig.json +13 -13
- package/node_modules/@vitos-pizza/keybindings/vitest.config.ts +8 -8
- package/node_modules/@vitos-pizza/permission-system/extensions/index.ts +162 -162
- package/node_modules/@vitos-pizza/permission-system/package.json +2 -2
- package/node_modules/@vitos-pizza/permission-system/src/bash/matcher.ts +54 -51
- package/node_modules/@vitos-pizza/permission-system/src/bash/parser.ts +40 -40
- package/node_modules/@vitos-pizza/permission-system/src/config-paths.ts +23 -23
- package/node_modules/@vitos-pizza/permission-system/src/detect-preset-mode.ts +61 -61
- package/node_modules/@vitos-pizza/permission-system/src/expand-home.ts +12 -12
- package/node_modules/@vitos-pizza/permission-system/src/forwarding/forwarder.ts +224 -224
- package/node_modules/@vitos-pizza/permission-system/src/forwarding/subagent-registry.ts +61 -61
- package/node_modules/@vitos-pizza/permission-system/src/gates/path-utils.ts +66 -66
- package/node_modules/@vitos-pizza/permission-system/src/gates/pipeline.ts +151 -155
- package/node_modules/@vitos-pizza/permission-system/src/handlers/before-agent-start.ts +86 -65
- package/node_modules/@vitos-pizza/permission-system/src/handlers/skill-input.ts +1 -1
- package/node_modules/@vitos-pizza/permission-system/src/handlers/tool-call-gate.ts +204 -199
- package/node_modules/@vitos-pizza/permission-system/src/mode-api.ts +44 -44
- package/node_modules/@vitos-pizza/permission-system/src/permission-evaluator.ts +233 -216
- package/node_modules/@vitos-pizza/permission-system/src/permission-session.ts +62 -62
- package/node_modules/@vitos-pizza/permission-system/src/policy-loader.ts +211 -211
- package/node_modules/@vitos-pizza/permission-system/src/sanitizers/skill-prompt.ts +99 -99
- package/node_modules/@vitos-pizza/permission-system/src/sanitizers/system-prompt.ts +221 -221
- package/node_modules/@vitos-pizza/permission-system/src/service.ts +66 -66
- package/node_modules/@vitos-pizza/permission-system/src/session-approvals.ts +4 -1
- package/node_modules/@vitos-pizza/permission-system/src/types.ts +80 -80
- package/node_modules/@vitos-pizza/permission-system/src/ui/approval-summary.ts +43 -43
- package/node_modules/@vitos-pizza/permission-system/src/ui/config-modal.ts +36 -36
- package/node_modules/@vitos-pizza/permission-system/src/ui/permission-dialog.ts +52 -52
- package/node_modules/@vitos-pizza/permission-system/src/wildcard-matcher.ts +81 -81
- package/node_modules/@vitos-pizza/permission-system/src/yaml-frontmatter.ts +84 -84
- package/node_modules/@vitos-pizza/permission-system/src/yolo/runtime-api.ts +49 -49
- package/node_modules/@vitos-pizza/permission-system/tests/bash-parser.test.ts +32 -32
- package/node_modules/@vitos-pizza/permission-system/tests/before-agent-start.test.ts +61 -0
- package/node_modules/@vitos-pizza/permission-system/tests/detect-preset-mode.test.ts +68 -68
- package/node_modules/@vitos-pizza/permission-system/tests/forwarder.test.ts +55 -55
- package/node_modules/@vitos-pizza/permission-system/tests/gates.test.ts +170 -61
- package/node_modules/@vitos-pizza/permission-system/tests/path-utils.test.ts +68 -68
- package/node_modules/@vitos-pizza/permission-system/tests/permission-evaluator.test.ts +82 -55
- package/node_modules/@vitos-pizza/permission-system/tests/policy-loader.test.ts +25 -25
- package/node_modules/@vitos-pizza/permission-system/tests/system-prompt-sanitizer.test.ts +22 -22
- package/node_modules/@vitos-pizza/permission-system/tests/wildcard-matcher.test.ts +27 -27
- package/node_modules/@vitos-pizza/permission-system/tsconfig.json +13 -13
- package/node_modules/@vitos-pizza/permission-system/vitest.config.ts +8 -8
- package/node_modules/@vitos-pizza/question/package.json +1 -1
- package/node_modules/@vitos-pizza/question/src/question-ui.ts +5 -1
- package/node_modules/@vitos-pizza/question/src/register-tool.ts +1 -4
- package/node_modules/@vitos-pizza/question/tests/question-ui-width-cache.test.ts +45 -0
- package/node_modules/@vitos-pizza/question/tests/register-tool-render.test.ts +48 -45
- package/node_modules/@vitos-pizza/session-title/extensions/index.ts +137 -137
- package/node_modules/@vitos-pizza/session-title/package.json +3 -3
- package/node_modules/@vitos-pizza/session-title/src/build-title-prompt.ts +16 -16
- package/node_modules/@vitos-pizza/session-title/src/extract-title-context.ts +55 -55
- package/node_modules/@vitos-pizza/session-title/src/fast-rules.ts +48 -48
- package/node_modules/@vitos-pizza/session-title/src/load-settings.ts +70 -70
- package/node_modules/@vitos-pizza/session-title/src/normalize-title.ts +20 -20
- package/node_modules/@vitos-pizza/session-title/src/parse-title-response.ts +6 -6
- package/node_modules/@vitos-pizza/session-title/src/resolve-title-model.ts +33 -33
- package/node_modules/@vitos-pizza/session-title/src/schedule-title-job.ts +53 -53
- package/node_modules/@vitos-pizza/session-title/src/should-schedule.ts +30 -30
- package/node_modules/@vitos-pizza/session-title/src/title-agent.ts +60 -60
- package/node_modules/@vitos-pizza/session-title/src/truncate-input.ts +10 -10
- package/node_modules/@vitos-pizza/session-title/src/types.ts +29 -29
- package/node_modules/@vitos-pizza/session-title/tests/build-title-prompt.test.ts +34 -34
- package/node_modules/@vitos-pizza/session-title/tests/extension.test.ts +198 -198
- package/node_modules/@vitos-pizza/session-title/tests/extract-title-context.test.ts +48 -48
- package/node_modules/@vitos-pizza/session-title/tests/fast-rules.test.ts +43 -43
- package/node_modules/@vitos-pizza/session-title/tests/parse-title-response.test.ts +34 -34
- package/node_modules/@vitos-pizza/session-title/tests/should-schedule.test.ts +30 -30
- package/node_modules/@vitos-pizza/session-title/tests/title-agent.test.ts +154 -154
- package/node_modules/@vitos-pizza/session-title/tests/truncate-input.test.ts +15 -15
- package/node_modules/@vitos-pizza/session-title/tsconfig.json +13 -13
- package/node_modules/@vitos-pizza/session-title/vitest.config.ts +8 -8
- package/node_modules/@vitos-pizza/subagents/agents/planner.md +46 -43
- package/node_modules/@vitos-pizza/subagents/agents/scout.md +40 -40
- package/node_modules/@vitos-pizza/subagents/agents/title.md +13 -13
- package/node_modules/@vitos-pizza/subagents/agents/worker.md +36 -36
- package/node_modules/@vitos-pizza/subagents/extensions/index.ts +164 -164
- package/node_modules/@vitos-pizza/subagents/package.json +1 -1
- package/node_modules/@vitos-pizza/subagents/skills/subagents/SKILL.md +86 -80
- package/node_modules/@vitos-pizza/subagents/src/agents.ts +166 -166
- package/node_modules/@vitos-pizza/subagents/src/async/job-tracker.ts +71 -71
- package/node_modules/@vitos-pizza/subagents/src/async/spawn-async.ts +220 -220
- package/node_modules/@vitos-pizza/subagents/src/async/storage.ts +57 -57
- package/node_modules/@vitos-pizza/subagents/src/env.ts +4 -4
- package/node_modules/@vitos-pizza/subagents/src/execute-subagent.ts +285 -285
- package/node_modules/@vitos-pizza/subagents/src/progress.ts +187 -187
- package/node_modules/@vitos-pizza/subagents/src/render-animation.ts +40 -40
- package/node_modules/@vitos-pizza/subagents/src/render.ts +428 -428
- package/node_modules/@vitos-pizza/subagents/src/rpc/channels.ts +21 -21
- package/node_modules/@vitos-pizza/subagents/src/rpc/client.ts +144 -144
- package/node_modules/@vitos-pizza/subagents/src/rpc/server.ts +11 -11
- package/node_modules/@vitos-pizza/subagents/src/run-agent.ts +313 -313
- package/node_modules/@vitos-pizza/subagents/src/runtime.ts +102 -102
- package/node_modules/@vitos-pizza/subagents/src/schema.ts +62 -62
- package/node_modules/@vitos-pizza/subagents/src/spawn.ts +104 -104
- package/node_modules/@vitos-pizza/subagents/src/types.ts +92 -92
- package/node_modules/@vitos-pizza/subagents/src/utils.ts +100 -100
- package/node_modules/@vitos-pizza/subagents/src/wait.ts +159 -159
- package/node_modules/@vitos-pizza/subagents/tests/agents.test.ts +19 -19
- package/node_modules/@vitos-pizza/subagents/tests/execute-subagent.test.ts +96 -96
- package/node_modules/@vitos-pizza/subagents/tests/extension.test.ts +42 -42
- package/node_modules/@vitos-pizza/subagents/tests/progress.test.ts +206 -206
- package/node_modules/@vitos-pizza/subagents/tests/rpc.test.ts +74 -74
- package/node_modules/@vitos-pizza/subagents/tsconfig.json +13 -13
- package/node_modules/@vitos-pizza/subagents/vitest.config.ts +8 -8
- package/node_modules/@vitos-pizza/ui-enhancements/package.json +1 -1
- package/node_modules/@vitos-pizza/ui-enhancements/src/chrome/agent-mode-badge.ts +60 -60
- package/node_modules/@vitos-pizza/ui-enhancements/src/chrome/border-status.ts +14 -1
- package/node_modules/@vitos-pizza/ui-enhancements/src/chrome/resize-recovery.ts +63 -0
- package/node_modules/@vitos-pizza/ui-enhancements/tests/agent-mode-badge.test.ts +35 -35
- package/node_modules/@vitos-pizza/ui-enhancements/tests/resize-recovery.test.ts +135 -0
- package/node_modules/@vitos-pizza/websearch/package.json +1 -1
- package/node_modules/node-addon-api/tools/conversion.js +0 -0
- package/node_modules/node-gyp-build/bin.js +0 -0
- package/node_modules/node-gyp-build/build-test.js +0 -0
- package/node_modules/node-gyp-build/optional.js +0 -0
- package/package.json +11 -9
- package/packages/agent-mode/extensions/index.ts +138 -117
- package/packages/agent-mode/package.json +3 -3
- package/packages/agent-mode/src/apply-mode.ts +60 -60
- package/packages/agent-mode/src/mode-events.ts +102 -102
- package/packages/agent-mode/src/modes.ts +43 -43
- package/packages/agent-mode/src/plan-instructions.ts +85 -44
- package/packages/agent-mode/tsconfig.json +13 -13
- package/packages/agent-mode/vitest.config.ts +8 -8
- package/packages/keybindings/extensions/index.ts +104 -104
- package/packages/keybindings/package.json +1 -1
- package/packages/keybindings/presets/shortcuts.json +3 -3
- package/packages/keybindings/src/bind.ts +57 -57
- package/packages/keybindings/src/config.ts +84 -84
- package/packages/keybindings/src/registry.ts +43 -43
- package/packages/keybindings/src/types.ts +54 -54
- package/packages/keybindings/tsconfig.json +13 -13
- package/packages/keybindings/vitest.config.ts +8 -8
- package/packages/permission-system/extensions/index.ts +162 -162
- package/packages/permission-system/node_modules/web-tree-sitter/debug/tree-sitter.wasm +0 -0
- package/packages/permission-system/node_modules/web-tree-sitter/tree-sitter.wasm +0 -0
- package/packages/permission-system/package.json +2 -2
- package/packages/permission-system/src/bash/matcher.ts +54 -51
- package/packages/permission-system/src/bash/parser.ts +40 -40
- package/packages/permission-system/src/config-paths.ts +23 -23
- package/packages/permission-system/src/detect-preset-mode.ts +61 -61
- package/packages/permission-system/src/expand-home.ts +12 -12
- package/packages/permission-system/src/forwarding/forwarder.ts +224 -224
- package/packages/permission-system/src/forwarding/subagent-registry.ts +61 -61
- package/packages/permission-system/src/gates/path-utils.ts +66 -66
- package/packages/permission-system/src/gates/pipeline.ts +151 -155
- package/packages/permission-system/src/handlers/before-agent-start.ts +86 -65
- package/packages/permission-system/src/handlers/skill-input.ts +1 -1
- package/packages/permission-system/src/handlers/tool-call-gate.ts +204 -199
- package/packages/permission-system/src/mode-api.ts +44 -44
- package/packages/permission-system/src/permission-evaluator.ts +233 -216
- package/packages/permission-system/src/permission-session.ts +62 -62
- package/packages/permission-system/src/policy-loader.ts +211 -211
- package/packages/permission-system/src/sanitizers/skill-prompt.ts +99 -99
- package/packages/permission-system/src/sanitizers/system-prompt.ts +221 -221
- package/packages/permission-system/src/service.ts +66 -66
- package/packages/permission-system/src/session-approvals.ts +4 -1
- package/packages/permission-system/src/types.ts +80 -80
- package/packages/permission-system/src/ui/approval-summary.ts +43 -43
- package/packages/permission-system/src/ui/config-modal.ts +36 -36
- package/packages/permission-system/src/ui/permission-dialog.ts +52 -52
- package/packages/permission-system/src/wildcard-matcher.ts +81 -81
- package/packages/permission-system/src/yaml-frontmatter.ts +84 -84
- package/packages/permission-system/src/yolo/runtime-api.ts +49 -49
- package/packages/permission-system/tsconfig.json +13 -13
- package/packages/permission-system/vitest.config.ts +8 -8
- package/packages/question/package.json +1 -1
- package/packages/question/src/question-ui.ts +5 -1
- package/packages/question/src/register-tool.ts +1 -4
- package/packages/session-title/extensions/index.ts +137 -137
- package/packages/session-title/package.json +3 -3
- package/packages/session-title/src/build-title-prompt.ts +16 -16
- package/packages/session-title/src/extract-title-context.ts +55 -55
- package/packages/session-title/src/fast-rules.ts +48 -48
- package/packages/session-title/src/load-settings.ts +70 -70
- package/packages/session-title/src/normalize-title.ts +20 -20
- package/packages/session-title/src/parse-title-response.ts +6 -6
- package/packages/session-title/src/resolve-title-model.ts +33 -33
- package/packages/session-title/src/schedule-title-job.ts +53 -53
- package/packages/session-title/src/should-schedule.ts +30 -30
- package/packages/session-title/src/title-agent.ts +60 -60
- package/packages/session-title/src/truncate-input.ts +10 -10
- package/packages/session-title/src/types.ts +29 -29
- package/packages/session-title/tsconfig.json +13 -13
- package/packages/session-title/vitest.config.ts +8 -8
- package/packages/subagents/agents/planner.md +46 -43
- package/packages/subagents/agents/scout.md +40 -40
- package/packages/subagents/agents/title.md +13 -13
- package/packages/subagents/agents/worker.md +36 -36
- package/packages/subagents/extensions/index.ts +164 -164
- package/packages/subagents/package.json +1 -1
- package/packages/subagents/skills/subagents/SKILL.md +86 -80
- package/packages/subagents/src/agents.ts +166 -166
- package/packages/subagents/src/async/job-tracker.ts +71 -71
- package/packages/subagents/src/async/spawn-async.ts +220 -220
- package/packages/subagents/src/async/storage.ts +57 -57
- package/packages/subagents/src/env.ts +4 -4
- package/packages/subagents/src/execute-subagent.ts +285 -285
- package/packages/subagents/src/progress.ts +187 -187
- package/packages/subagents/src/render-animation.ts +40 -40
- package/packages/subagents/src/render.ts +428 -428
- package/packages/subagents/src/rpc/channels.ts +21 -21
- package/packages/subagents/src/rpc/client.ts +144 -144
- package/packages/subagents/src/rpc/server.ts +11 -11
- package/packages/subagents/src/run-agent.ts +313 -313
- package/packages/subagents/src/runtime.ts +102 -102
- package/packages/subagents/src/schema.ts +62 -62
- package/packages/subagents/src/spawn.ts +104 -104
- package/packages/subagents/src/types.ts +92 -92
- package/packages/subagents/src/utils.ts +100 -100
- package/packages/subagents/src/wait.ts +159 -159
- package/packages/subagents/tsconfig.json +13 -13
- package/packages/subagents/vitest.config.ts +8 -8
- package/packages/todoist/extensions/index.ts +163 -0
- package/packages/todoist/package.json +34 -0
- package/packages/todoist/src/events.ts +7 -0
- package/packages/todoist/src/silent-render.ts +8 -0
- package/packages/todoist/src/state.ts +147 -0
- package/packages/todoist/src/tools.ts +175 -0
- package/packages/todoist/src/types.ts +34 -0
- package/packages/todoist/src/widget.ts +109 -0
- package/packages/todoist/tsconfig.json +13 -0
- package/packages/todoist/vitest.config.ts +8 -0
- package/packages/ui-enhancements/package.json +1 -1
- package/packages/ui-enhancements/src/chrome/agent-mode-badge.ts +60 -60
- package/packages/ui-enhancements/src/chrome/border-status.ts +14 -1
- package/packages/ui-enhancements/src/chrome/resize-recovery.ts +63 -0
- package/packages/websearch/package.json +1 -1
- package/scripts/sync-pi-manifest.mjs +1 -1
- package/packages/permission-system/node_modules/web-tree-sitter/lib/tree-sitter.cjs +0 -2988
- package/packages/permission-system/node_modules/web-tree-sitter/lib/tree-sitter.wasm +0 -0
- package/packages/permission-system/node_modules/web-tree-sitter/lib/tree-sitter.wasm.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"allowImportingTsExtensions": true
|
|
5
|
-
},
|
|
6
|
-
"include": [
|
|
7
|
-
"extensions/**/*.ts",
|
|
8
|
-
"src/**/*.ts",
|
|
9
|
-
"tests/**/*.ts",
|
|
10
|
-
"vitest.config.ts"
|
|
11
|
-
],
|
|
12
|
-
"exclude": ["node_modules"]
|
|
13
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"allowImportingTsExtensions": true
|
|
5
|
+
},
|
|
6
|
+
"include": [
|
|
7
|
+
"extensions/**/*.ts",
|
|
8
|
+
"src/**/*.ts",
|
|
9
|
+
"tests/**/*.ts",
|
|
10
|
+
"vitest.config.ts"
|
|
11
|
+
],
|
|
12
|
+
"exclude": ["node_modules"]
|
|
13
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { defineConfig } from "vitest/config";
|
|
2
|
-
|
|
3
|
-
export default defineConfig({
|
|
4
|
-
test: {
|
|
5
|
-
environment: "node",
|
|
6
|
-
include: ["tests/**/*.test.ts"],
|
|
7
|
-
},
|
|
8
|
-
});
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
environment: "node",
|
|
6
|
+
include: ["tests/**/*.test.ts"],
|
|
7
|
+
},
|
|
8
|
+
});
|
|
@@ -1,43 +1,46 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: planner
|
|
3
|
-
description: Creates implementation plans from context and requirements
|
|
4
|
-
tools: read, grep, find, ls, write, question, web_search, web_read
|
|
5
|
-
thinking: high
|
|
6
|
-
systemPromptMode: replace
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are a planning subagent.
|
|
10
|
-
|
|
11
|
-
Your job is to turn requirements and code context into a concrete implementation plan. Do not make code changes. Read, analyze, and write the plan only.
|
|
12
|
-
|
|
13
|
-
Working rules:
|
|
14
|
-
- Read the provided context before planning.
|
|
15
|
-
- Read any additional code you need in order to make the plan concrete.
|
|
16
|
-
- Name exact files whenever you can.
|
|
17
|
-
- Prefer small, ordered, actionable tasks over vague phases.
|
|
18
|
-
- Call out risks, dependencies, and anything that needs explicit validation.
|
|
19
|
-
- If the task is underspecified, use the `question` tool to ask the user for clarification before guessing.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
1
|
+
---
|
|
2
|
+
name: planner
|
|
3
|
+
description: Creates implementation plans from context and requirements
|
|
4
|
+
tools: read, grep, find, ls, write, question, web_search, web_read
|
|
5
|
+
thinking: high
|
|
6
|
+
systemPromptMode: replace
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are a planning subagent.
|
|
10
|
+
|
|
11
|
+
Your job is to turn requirements and code context into a concrete implementation plan. Do not make code changes. Read, analyze, and write the plan only.
|
|
12
|
+
|
|
13
|
+
Working rules:
|
|
14
|
+
- Read the provided context before planning.
|
|
15
|
+
- Read any additional code you need in order to make the plan concrete.
|
|
16
|
+
- Name exact files whenever you can.
|
|
17
|
+
- Prefer small, ordered, actionable tasks over vague phases.
|
|
18
|
+
- Call out risks, dependencies, and anything that needs explicit validation.
|
|
19
|
+
- If the task is underspecified, use the `question` tool to ask the user for clarification before guessing.
|
|
20
|
+
- Mutually exclusive design choices (2–5 options) → always use `question`; never ask "which do you prefer?" in free text.
|
|
21
|
+
|
|
22
|
+
Output format:
|
|
23
|
+
|
|
24
|
+
# Implementation Plan
|
|
25
|
+
|
|
26
|
+
## Goal
|
|
27
|
+
One sentence summary of the outcome.
|
|
28
|
+
|
|
29
|
+
## Tasks
|
|
30
|
+
Numbered steps, each small and actionable.
|
|
31
|
+
|
|
32
|
+
## Files to Modify
|
|
33
|
+
- `path/to/file.ts` - what changes there
|
|
34
|
+
|
|
35
|
+
## New Files
|
|
36
|
+
- `path/to/new.ts` - purpose
|
|
37
|
+
|
|
38
|
+
## Dependencies
|
|
39
|
+
Which tasks depend on others.
|
|
40
|
+
|
|
41
|
+
## Risks
|
|
42
|
+
Anything likely to go wrong, need clarification, or need careful verification.
|
|
43
|
+
|
|
44
|
+
Do **not** add a long "next steps" essay — the parent plan-mode agent may add a short **Next** footer when helpful.
|
|
45
|
+
|
|
46
|
+
Keep the plan concrete. Another agent should be able to execute it without guessing what you meant.
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: scout
|
|
3
|
-
description: Fast codebase recon that returns compressed context for handoff
|
|
4
|
-
tools: read, grep, find, ls, bash, write, question, web_search, web_read
|
|
5
|
-
thinking: low
|
|
6
|
-
systemPromptMode: replace
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are a scouting subagent running inside pi.
|
|
10
|
-
|
|
11
|
-
Use the provided tools directly. Move fast, but do not guess. Prefer targeted search and selective reading over reading whole files unless the task clearly needs broader coverage.
|
|
12
|
-
|
|
13
|
-
Focus on the minimum context another agent needs in order to act:
|
|
14
|
-
- relevant entry points
|
|
15
|
-
- key types, interfaces, and functions
|
|
16
|
-
- data flow and dependencies
|
|
17
|
-
- files that are likely to need changes
|
|
18
|
-
- constraints, risks, and open questions
|
|
19
|
-
|
|
20
|
-
Working rules:
|
|
21
|
-
- Use `grep`, `find`, `ls`, and `read` to map the area before diving deeper.
|
|
22
|
-
- Use `bash` only for non-interactive inspection commands.
|
|
23
|
-
- When you cite code, use exact file paths and line ranges.
|
|
24
|
-
- When running solo, summarize what you found in the final response.
|
|
25
|
-
|
|
26
|
-
Output format:
|
|
27
|
-
|
|
28
|
-
# Code Context
|
|
29
|
-
|
|
30
|
-
## Files Retrieved
|
|
31
|
-
List exact files and line ranges.
|
|
32
|
-
|
|
33
|
-
## Key Code
|
|
34
|
-
Include the critical types, interfaces, functions, and small code snippets that matter.
|
|
35
|
-
|
|
36
|
-
## Architecture
|
|
37
|
-
Explain how the pieces connect.
|
|
38
|
-
|
|
39
|
-
## Start Here
|
|
40
|
-
Name the first file another agent should open and why.
|
|
1
|
+
---
|
|
2
|
+
name: scout
|
|
3
|
+
description: Fast codebase recon that returns compressed context for handoff
|
|
4
|
+
tools: read, grep, find, ls, bash, write, question, web_search, web_read
|
|
5
|
+
thinking: low
|
|
6
|
+
systemPromptMode: replace
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are a scouting subagent running inside pi.
|
|
10
|
+
|
|
11
|
+
Use the provided tools directly. Move fast, but do not guess. Prefer targeted search and selective reading over reading whole files unless the task clearly needs broader coverage.
|
|
12
|
+
|
|
13
|
+
Focus on the minimum context another agent needs in order to act:
|
|
14
|
+
- relevant entry points
|
|
15
|
+
- key types, interfaces, and functions
|
|
16
|
+
- data flow and dependencies
|
|
17
|
+
- files that are likely to need changes
|
|
18
|
+
- constraints, risks, and open questions
|
|
19
|
+
|
|
20
|
+
Working rules:
|
|
21
|
+
- Use `grep`, `find`, `ls`, and `read` to map the area before diving deeper.
|
|
22
|
+
- Use `bash` only for non-interactive inspection commands.
|
|
23
|
+
- When you cite code, use exact file paths and line ranges.
|
|
24
|
+
- When running solo, summarize what you found in the final response.
|
|
25
|
+
|
|
26
|
+
Output format:
|
|
27
|
+
|
|
28
|
+
# Code Context
|
|
29
|
+
|
|
30
|
+
## Files Retrieved
|
|
31
|
+
List exact files and line ranges.
|
|
32
|
+
|
|
33
|
+
## Key Code
|
|
34
|
+
Include the critical types, interfaces, functions, and small code snippets that matter.
|
|
35
|
+
|
|
36
|
+
## Architecture
|
|
37
|
+
Explain how the pieces connect.
|
|
38
|
+
|
|
39
|
+
## Start Here
|
|
40
|
+
Name the first file another agent should open and why.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: title
|
|
3
|
-
description: Generates a short session title from user intent and assistant reply
|
|
4
|
-
thinking: minimal
|
|
5
|
-
systemPromptMode: replace
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
You analyze the user's intent together with the assistant's last reply and produce a short session title.
|
|
9
|
-
|
|
10
|
-
Rules:
|
|
11
|
-
- Output only the title text — no quotes, no explanation, no markdown.
|
|
12
|
-
- If there is no clear task intent, output exactly `SKIP`.
|
|
13
|
-
- Respect the maximum title length given in the task.
|
|
1
|
+
---
|
|
2
|
+
name: title
|
|
3
|
+
description: Generates a short session title from user intent and assistant reply
|
|
4
|
+
thinking: minimal
|
|
5
|
+
systemPromptMode: replace
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You analyze the user's intent together with the assistant's last reply and produce a short session title.
|
|
9
|
+
|
|
10
|
+
Rules:
|
|
11
|
+
- Output only the title text — no quotes, no explanation, no markdown.
|
|
12
|
+
- If there is no clear task intent, output exactly `SKIP`.
|
|
13
|
+
- Respect the maximum title length given in the task.
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: worker
|
|
3
|
-
description: Implementation agent for approved plans and focused tasks
|
|
4
|
-
tools: read, grep, find, ls, bash, edit, write
|
|
5
|
-
thinking: high
|
|
6
|
-
systemPromptMode: replace
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
You are `worker`: the implementation subagent.
|
|
10
|
-
|
|
11
|
-
You are the single writer thread. Your job is to execute the assigned task or approved direction with narrow, coherent edits. The main agent and user remain the decision authority.
|
|
12
|
-
|
|
13
|
-
Use the provided tools directly. First understand the inherited context, supplied files, plan, and explicit task. Then implement carefully and minimally.
|
|
14
|
-
|
|
15
|
-
Default responsibilities:
|
|
16
|
-
- validate the task or approved direction against the actual code
|
|
17
|
-
- implement the smallest correct change
|
|
18
|
-
- follow existing patterns in the codebase
|
|
19
|
-
- verify the result with appropriate checks when possible
|
|
20
|
-
- report back clearly with changes, validation, risks, and next steps
|
|
21
|
-
|
|
22
|
-
Working rules:
|
|
23
|
-
- Prefer narrow, correct changes over broad rewrites.
|
|
24
|
-
- Do not add speculative scaffolding or future-proofing unless explicitly required.
|
|
25
|
-
- Do not leave placeholder code, TODOs, or silent scope changes.
|
|
26
|
-
- Use `bash` for inspection, validation, and relevant tests.
|
|
27
|
-
- If there is supplied context or a plan, read it first.
|
|
28
|
-
- If your delegated task expects code or file edits and you have not made those edits, do not return a success summary.
|
|
29
|
-
|
|
30
|
-
Your final response should follow this shape:
|
|
31
|
-
|
|
32
|
-
Implemented X.
|
|
33
|
-
Changed files: Y.
|
|
34
|
-
Validation: Z.
|
|
35
|
-
Open risks/questions: R.
|
|
36
|
-
Recommended next step: N.
|
|
1
|
+
---
|
|
2
|
+
name: worker
|
|
3
|
+
description: Implementation agent for approved plans and focused tasks
|
|
4
|
+
tools: read, grep, find, ls, bash, edit, write
|
|
5
|
+
thinking: high
|
|
6
|
+
systemPromptMode: replace
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are `worker`: the implementation subagent.
|
|
10
|
+
|
|
11
|
+
You are the single writer thread. Your job is to execute the assigned task or approved direction with narrow, coherent edits. The main agent and user remain the decision authority.
|
|
12
|
+
|
|
13
|
+
Use the provided tools directly. First understand the inherited context, supplied files, plan, and explicit task. Then implement carefully and minimally.
|
|
14
|
+
|
|
15
|
+
Default responsibilities:
|
|
16
|
+
- validate the task or approved direction against the actual code
|
|
17
|
+
- implement the smallest correct change
|
|
18
|
+
- follow existing patterns in the codebase
|
|
19
|
+
- verify the result with appropriate checks when possible
|
|
20
|
+
- report back clearly with changes, validation, risks, and next steps
|
|
21
|
+
|
|
22
|
+
Working rules:
|
|
23
|
+
- Prefer narrow, correct changes over broad rewrites.
|
|
24
|
+
- Do not add speculative scaffolding or future-proofing unless explicitly required.
|
|
25
|
+
- Do not leave placeholder code, TODOs, or silent scope changes.
|
|
26
|
+
- Use `bash` for inspection, validation, and relevant tests.
|
|
27
|
+
- If there is supplied context or a plan, read it first.
|
|
28
|
+
- If your delegated task expects code or file edits and you have not made those edits, do not return a success summary.
|
|
29
|
+
|
|
30
|
+
Your final response should follow this shape:
|
|
31
|
+
|
|
32
|
+
Implemented X.
|
|
33
|
+
Changed files: Y.
|
|
34
|
+
Validation: Z.
|
|
35
|
+
Open risks/questions: R.
|
|
36
|
+
Recommended next step: N.
|
|
@@ -1,164 +1,164 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @vitos-pizza/subagents — subprocess subagent delegation for Vito's Pizzeria.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type {
|
|
6
|
-
ExtensionAPI,
|
|
7
|
-
ExtensionContext,
|
|
8
|
-
} from "@earendil-works/pi-coding-agent";
|
|
9
|
-
import { SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV } from "../src/env.ts";
|
|
10
|
-
import { createSubagentRuntime } from "../src/runtime.ts";
|
|
11
|
-
import type { SubagentRuntime } from "../src/runtime.ts";
|
|
12
|
-
import { SUBAGENTS_READY } from "../src/rpc/channels.ts";
|
|
13
|
-
import { startSubagentRpcServer } from "../src/rpc/client.ts";
|
|
14
|
-
import {
|
|
15
|
-
clearSubagentResultAnimation,
|
|
16
|
-
ensureSubagentResultAnimation,
|
|
17
|
-
} from "../src/render-animation.ts";
|
|
18
|
-
import {
|
|
19
|
-
renderSubagentCall,
|
|
20
|
-
renderSubagentResult,
|
|
21
|
-
subagentResultIsRunning,
|
|
22
|
-
renderWaitCall,
|
|
23
|
-
renderWaitResult,
|
|
24
|
-
} from "../src/render.ts";
|
|
25
|
-
import { SubagentParams, WaitParams } from "../src/schema.ts";
|
|
26
|
-
import type { ExecuteSubagentInput, WaitInput } from "../src/types.ts";
|
|
27
|
-
|
|
28
|
-
export interface SubagentsTestHarness {
|
|
29
|
-
handlers: {
|
|
30
|
-
session_start?: (event: unknown, ctx: ExtensionContext) => void;
|
|
31
|
-
session_shutdown?: (event: unknown, ctx: ExtensionContext) => void;
|
|
32
|
-
};
|
|
33
|
-
runtime?: SubagentRuntime;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function registerSubagents(
|
|
37
|
-
pi: ExtensionAPI,
|
|
38
|
-
): SubagentsTestHarness {
|
|
39
|
-
const handlers: SubagentsTestHarness["handlers"] = {};
|
|
40
|
-
let currentCtx: ExtensionContext | null = null;
|
|
41
|
-
let rpcDispose: (() => void) | null = null;
|
|
42
|
-
|
|
43
|
-
const runtime = createSubagentRuntime({
|
|
44
|
-
getContext: () => currentCtx,
|
|
45
|
-
events: pi.events,
|
|
46
|
-
}) as SubagentRuntime & { _restore(sessionFile: string | null): void };
|
|
47
|
-
|
|
48
|
-
pi.registerTool({
|
|
49
|
-
name: "subagent",
|
|
50
|
-
label: "Subagent",
|
|
51
|
-
description:
|
|
52
|
-
"Delegate tasks to specialized subagents. Modes: single (agent+task), parallel (tasks[]), chain (chain[] with {previous}). Use async:true for background runs.",
|
|
53
|
-
parameters: SubagentParams,
|
|
54
|
-
async execute(_toolCallId, params, signal, onUpdate, ctx) {
|
|
55
|
-
currentCtx = ctx;
|
|
56
|
-
return runtime.execute(params as ExecuteSubagentInput, {
|
|
57
|
-
signal,
|
|
58
|
-
onUpdate: onUpdate
|
|
59
|
-
? (partial) => onUpdate(partial)
|
|
60
|
-
: undefined,
|
|
61
|
-
});
|
|
62
|
-
},
|
|
63
|
-
renderCall(args, theme) {
|
|
64
|
-
return renderSubagentCall(args as Record<string, unknown>, theme);
|
|
65
|
-
},
|
|
66
|
-
renderResult(result, options, theme, context) {
|
|
67
|
-
if (subagentResultIsRunning(
|
|
68
|
-
result as {
|
|
69
|
-
content: Array<{ type: string; text?: string }>;
|
|
70
|
-
details?: import("../src/types.ts").SubagentDetails;
|
|
71
|
-
},
|
|
72
|
-
options,
|
|
73
|
-
)) {
|
|
74
|
-
ensureSubagentResultAnimation(context);
|
|
75
|
-
} else {
|
|
76
|
-
clearSubagentResultAnimation(context);
|
|
77
|
-
}
|
|
78
|
-
return renderSubagentResult(
|
|
79
|
-
result as {
|
|
80
|
-
content: Array<{ type: string; text?: string }>;
|
|
81
|
-
details?: import("../src/types.ts").SubagentDetails;
|
|
82
|
-
},
|
|
83
|
-
options,
|
|
84
|
-
theme,
|
|
85
|
-
context,
|
|
86
|
-
);
|
|
87
|
-
},
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
pi.registerTool({
|
|
91
|
-
name: "wait",
|
|
92
|
-
label: "Wait",
|
|
93
|
-
description:
|
|
94
|
-
"Block until background subagent runs finish. Default returns when the first run completes; use all:true to wait for every active run.",
|
|
95
|
-
parameters: WaitParams,
|
|
96
|
-
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
97
|
-
currentCtx = ctx;
|
|
98
|
-
const outcome = await runtime.wait(params as WaitInput);
|
|
99
|
-
const summaries = outcome.completed.map((run) => {
|
|
100
|
-
const status = run.state;
|
|
101
|
-
const output = run.finalOutput ?? "(no output)";
|
|
102
|
-
return `- ${run.id} [${run.agents.join(", ")}] ${status}: ${output}`;
|
|
103
|
-
});
|
|
104
|
-
const header = outcome.timedOut
|
|
105
|
-
? `Wait timed out (${outcome.activeRemaining} still active).`
|
|
106
|
-
: `Wait complete (${outcome.completed.length} run(s)).`;
|
|
107
|
-
return {
|
|
108
|
-
content: [
|
|
109
|
-
{
|
|
110
|
-
type: "text",
|
|
111
|
-
text: `${header}\n${summaries.join("\n") || "(none)"}`,
|
|
112
|
-
},
|
|
113
|
-
],
|
|
114
|
-
details: outcome,
|
|
115
|
-
};
|
|
116
|
-
},
|
|
117
|
-
renderCall(args, theme) {
|
|
118
|
-
return renderWaitCall(args as Record<string, unknown>, theme);
|
|
119
|
-
},
|
|
120
|
-
renderResult(result, _options, theme) {
|
|
121
|
-
return renderWaitResult(
|
|
122
|
-
result as { content: Array<{ type: string; text?: string }> },
|
|
123
|
-
theme,
|
|
124
|
-
);
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
handlers.session_start = (_event, ctx) => {
|
|
129
|
-
currentCtx = ctx;
|
|
130
|
-
if (!process.env[SUBAGENT_CHILD_ENV]) {
|
|
131
|
-
const sessionId = ctx.sessionManager.getSessionId?.();
|
|
132
|
-
if (sessionId) {
|
|
133
|
-
process.env[SUBAGENT_PARENT_SESSION_ENV] = sessionId;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
const sessionFile = ctx.sessionManager.getSessionFile?.() ?? null;
|
|
137
|
-
(runtime as SubagentRuntime & { _restore(sessionFile: string | null): void })._restore(
|
|
138
|
-
sessionFile,
|
|
139
|
-
);
|
|
140
|
-
rpcDispose?.();
|
|
141
|
-
rpcDispose = startSubagentRpcServer(pi.events, runtime);
|
|
142
|
-
pi.events.emit(SUBAGENTS_READY, { version: 1 });
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
pi.on("session_start", handlers.session_start);
|
|
146
|
-
|
|
147
|
-
handlers.session_shutdown = () => {
|
|
148
|
-
delete process.env[SUBAGENT_PARENT_SESSION_ENV];
|
|
149
|
-
rpcDispose?.();
|
|
150
|
-
rpcDispose = null;
|
|
151
|
-
currentCtx = null;
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
pi.on("session_shutdown", handlers.session_shutdown);
|
|
155
|
-
|
|
156
|
-
return { handlers, runtime };
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export default function subagentsExtension(pi: ExtensionAPI) {
|
|
160
|
-
if (process.env[SUBAGENT_CHILD_ENV] === "1") {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
registerSubagents(pi);
|
|
164
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @vitos-pizza/subagents — subprocess subagent delegation for Vito's Pizzeria.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
ExtensionAPI,
|
|
7
|
+
ExtensionContext,
|
|
8
|
+
} from "@earendil-works/pi-coding-agent";
|
|
9
|
+
import { SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV } from "../src/env.ts";
|
|
10
|
+
import { createSubagentRuntime } from "../src/runtime.ts";
|
|
11
|
+
import type { SubagentRuntime } from "../src/runtime.ts";
|
|
12
|
+
import { SUBAGENTS_READY } from "../src/rpc/channels.ts";
|
|
13
|
+
import { startSubagentRpcServer } from "../src/rpc/client.ts";
|
|
14
|
+
import {
|
|
15
|
+
clearSubagentResultAnimation,
|
|
16
|
+
ensureSubagentResultAnimation,
|
|
17
|
+
} from "../src/render-animation.ts";
|
|
18
|
+
import {
|
|
19
|
+
renderSubagentCall,
|
|
20
|
+
renderSubagentResult,
|
|
21
|
+
subagentResultIsRunning,
|
|
22
|
+
renderWaitCall,
|
|
23
|
+
renderWaitResult,
|
|
24
|
+
} from "../src/render.ts";
|
|
25
|
+
import { SubagentParams, WaitParams } from "../src/schema.ts";
|
|
26
|
+
import type { ExecuteSubagentInput, WaitInput } from "../src/types.ts";
|
|
27
|
+
|
|
28
|
+
export interface SubagentsTestHarness {
|
|
29
|
+
handlers: {
|
|
30
|
+
session_start?: (event: unknown, ctx: ExtensionContext) => void;
|
|
31
|
+
session_shutdown?: (event: unknown, ctx: ExtensionContext) => void;
|
|
32
|
+
};
|
|
33
|
+
runtime?: SubagentRuntime;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function registerSubagents(
|
|
37
|
+
pi: ExtensionAPI,
|
|
38
|
+
): SubagentsTestHarness {
|
|
39
|
+
const handlers: SubagentsTestHarness["handlers"] = {};
|
|
40
|
+
let currentCtx: ExtensionContext | null = null;
|
|
41
|
+
let rpcDispose: (() => void) | null = null;
|
|
42
|
+
|
|
43
|
+
const runtime = createSubagentRuntime({
|
|
44
|
+
getContext: () => currentCtx,
|
|
45
|
+
events: pi.events,
|
|
46
|
+
}) as SubagentRuntime & { _restore(sessionFile: string | null): void };
|
|
47
|
+
|
|
48
|
+
pi.registerTool({
|
|
49
|
+
name: "subagent",
|
|
50
|
+
label: "Subagent",
|
|
51
|
+
description:
|
|
52
|
+
"Delegate tasks to specialized subagents. Modes: single (agent+task), parallel (tasks[]), chain (chain[] with {previous}). Use async:true for background runs.",
|
|
53
|
+
parameters: SubagentParams,
|
|
54
|
+
async execute(_toolCallId, params, signal, onUpdate, ctx) {
|
|
55
|
+
currentCtx = ctx;
|
|
56
|
+
return runtime.execute(params as ExecuteSubagentInput, {
|
|
57
|
+
signal,
|
|
58
|
+
onUpdate: onUpdate
|
|
59
|
+
? (partial) => onUpdate(partial)
|
|
60
|
+
: undefined,
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
renderCall(args, theme) {
|
|
64
|
+
return renderSubagentCall(args as Record<string, unknown>, theme);
|
|
65
|
+
},
|
|
66
|
+
renderResult(result, options, theme, context) {
|
|
67
|
+
if (subagentResultIsRunning(
|
|
68
|
+
result as {
|
|
69
|
+
content: Array<{ type: string; text?: string }>;
|
|
70
|
+
details?: import("../src/types.ts").SubagentDetails;
|
|
71
|
+
},
|
|
72
|
+
options,
|
|
73
|
+
)) {
|
|
74
|
+
ensureSubagentResultAnimation(context);
|
|
75
|
+
} else {
|
|
76
|
+
clearSubagentResultAnimation(context);
|
|
77
|
+
}
|
|
78
|
+
return renderSubagentResult(
|
|
79
|
+
result as {
|
|
80
|
+
content: Array<{ type: string; text?: string }>;
|
|
81
|
+
details?: import("../src/types.ts").SubagentDetails;
|
|
82
|
+
},
|
|
83
|
+
options,
|
|
84
|
+
theme,
|
|
85
|
+
context,
|
|
86
|
+
);
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
pi.registerTool({
|
|
91
|
+
name: "wait",
|
|
92
|
+
label: "Wait",
|
|
93
|
+
description:
|
|
94
|
+
"Block until background subagent runs finish. Default returns when the first run completes; use all:true to wait for every active run.",
|
|
95
|
+
parameters: WaitParams,
|
|
96
|
+
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
97
|
+
currentCtx = ctx;
|
|
98
|
+
const outcome = await runtime.wait(params as WaitInput);
|
|
99
|
+
const summaries = outcome.completed.map((run) => {
|
|
100
|
+
const status = run.state;
|
|
101
|
+
const output = run.finalOutput ?? "(no output)";
|
|
102
|
+
return `- ${run.id} [${run.agents.join(", ")}] ${status}: ${output}`;
|
|
103
|
+
});
|
|
104
|
+
const header = outcome.timedOut
|
|
105
|
+
? `Wait timed out (${outcome.activeRemaining} still active).`
|
|
106
|
+
: `Wait complete (${outcome.completed.length} run(s)).`;
|
|
107
|
+
return {
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: "text",
|
|
111
|
+
text: `${header}\n${summaries.join("\n") || "(none)"}`,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
details: outcome,
|
|
115
|
+
};
|
|
116
|
+
},
|
|
117
|
+
renderCall(args, theme) {
|
|
118
|
+
return renderWaitCall(args as Record<string, unknown>, theme);
|
|
119
|
+
},
|
|
120
|
+
renderResult(result, _options, theme) {
|
|
121
|
+
return renderWaitResult(
|
|
122
|
+
result as { content: Array<{ type: string; text?: string }> },
|
|
123
|
+
theme,
|
|
124
|
+
);
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
handlers.session_start = (_event, ctx) => {
|
|
129
|
+
currentCtx = ctx;
|
|
130
|
+
if (!process.env[SUBAGENT_CHILD_ENV]) {
|
|
131
|
+
const sessionId = ctx.sessionManager.getSessionId?.();
|
|
132
|
+
if (sessionId) {
|
|
133
|
+
process.env[SUBAGENT_PARENT_SESSION_ENV] = sessionId;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const sessionFile = ctx.sessionManager.getSessionFile?.() ?? null;
|
|
137
|
+
(runtime as SubagentRuntime & { _restore(sessionFile: string | null): void })._restore(
|
|
138
|
+
sessionFile,
|
|
139
|
+
);
|
|
140
|
+
rpcDispose?.();
|
|
141
|
+
rpcDispose = startSubagentRpcServer(pi.events, runtime);
|
|
142
|
+
pi.events.emit(SUBAGENTS_READY, { version: 1 });
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
pi.on("session_start", handlers.session_start);
|
|
146
|
+
|
|
147
|
+
handlers.session_shutdown = () => {
|
|
148
|
+
delete process.env[SUBAGENT_PARENT_SESSION_ENV];
|
|
149
|
+
rpcDispose?.();
|
|
150
|
+
rpcDispose = null;
|
|
151
|
+
currentCtx = null;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
pi.on("session_shutdown", handlers.session_shutdown);
|
|
155
|
+
|
|
156
|
+
return { handlers, runtime };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export default function subagentsExtension(pi: ExtensionAPI) {
|
|
160
|
+
if (process.env[SUBAGENT_CHILD_ENV] === "1") {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
registerSubagents(pi);
|
|
164
|
+
}
|