@bastani/atomic 0.8.13-0 → 0.8.14-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/CHANGELOG.md +24 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/host-html-template.ts +1 -1
- package/dist/builtin/mcp/init.ts +15 -2
- package/dist/builtin/mcp/mcp-callback-server.ts +10 -9
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/ui-session.ts +9 -6
- package/dist/builtin/subagents/CHANGELOG.md +8 -1
- package/dist/builtin/subagents/README.md +39 -32
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/subagent/SKILL.md +11 -11
- package/dist/builtin/subagents/src/agents/agent-management.ts +6 -1
- package/dist/builtin/subagents/src/agents/agent-serializer.ts +2 -0
- package/dist/builtin/subagents/src/agents/agents.ts +44 -19
- package/dist/builtin/subagents/src/extension/config.ts +16 -0
- package/dist/builtin/subagents/src/extension/fanout-child.ts +246 -0
- package/dist/builtin/subagents/src/extension/index.ts +466 -603
- package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +6 -4
- package/dist/builtin/subagents/src/intercom/result-intercom.ts +109 -1
- package/dist/builtin/subagents/src/runs/background/async-execution.ts +124 -19
- package/dist/builtin/subagents/src/runs/background/async-job-tracker.ts +41 -6
- package/dist/builtin/subagents/src/runs/background/async-resume.ts +28 -15
- package/dist/builtin/subagents/src/runs/background/async-status.ts +60 -30
- package/dist/builtin/subagents/src/runs/background/result-watcher.ts +111 -54
- package/dist/builtin/subagents/src/runs/background/run-id-resolver.ts +83 -0
- package/dist/builtin/subagents/src/runs/background/run-status.ts +79 -3
- package/dist/builtin/subagents/src/runs/background/stale-run-reconciler.ts +46 -1
- package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +66 -14
- package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +10 -3
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +14 -2
- package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +320 -23
- package/dist/builtin/subagents/src/runs/shared/completion-guard.ts +23 -1
- package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +369 -0
- package/dist/builtin/subagents/src/runs/shared/nested-events.ts +935 -0
- package/dist/builtin/subagents/src/runs/shared/nested-path.ts +52 -0
- package/dist/builtin/subagents/src/runs/shared/nested-render.ts +115 -0
- package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -0
- package/dist/builtin/subagents/src/runs/shared/pi-args.ts +82 -9
- package/dist/builtin/subagents/src/runs/shared/pi-spawn.ts +1 -1
- package/dist/builtin/subagents/src/runs/shared/single-output.ts +12 -2
- package/dist/builtin/subagents/src/runs/shared/subagent-prompt-runtime.ts +32 -10
- package/dist/builtin/subagents/src/runs/shared/worktree.ts +3 -2
- package/dist/builtin/subagents/src/shared/artifacts.ts +0 -1
- package/dist/builtin/subagents/src/shared/types.ts +96 -1
- package/dist/builtin/subagents/src/shared/utils.ts +10 -2
- package/dist/builtin/subagents/src/slash/slash-commands.ts +468 -625
- package/dist/builtin/subagents/src/tui/render.ts +1227 -2093
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +24 -0
- package/dist/builtin/workflows/README.md +28 -11
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +323 -40
- package/dist/builtin/workflows/builtin/ralph.ts +362 -176
- package/dist/builtin/workflows/package.json +2 -5
- package/dist/builtin/workflows/skills/research-codebase/SKILL.md +1 -1
- package/dist/builtin/workflows/skills/skill-creator/LICENSE.txt +202 -0
- package/dist/builtin/workflows/skills/skill-creator/SKILL.md +489 -0
- package/dist/builtin/workflows/skills/skill-creator/agents/analyzer.md +274 -0
- package/dist/builtin/workflows/skills/skill-creator/agents/comparator.md +202 -0
- package/dist/builtin/workflows/skills/skill-creator/agents/grader.md +223 -0
- package/dist/builtin/workflows/skills/skill-creator/assets/eval_review.html +146 -0
- package/dist/builtin/workflows/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/dist/builtin/workflows/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/dist/builtin/workflows/skills/skill-creator/references/schemas.md +430 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/__init__.py +0 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/generate_report.py +326 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/improve_description.py +247 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/package_skill.py +136 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/run_eval.py +310 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/run_loop.py +328 -0
- package/dist/builtin/workflows/skills/skill-creator/scripts/utils.py +47 -0
- package/dist/builtin/workflows/src/extension/index.ts +869 -93
- package/dist/builtin/workflows/src/extension/render-call.ts +34 -1
- package/dist/builtin/workflows/src/extension/render-result.ts +126 -21
- package/dist/builtin/workflows/src/extension/runtime.ts +91 -3
- package/dist/builtin/workflows/src/extension/wiring.ts +38 -12
- package/dist/builtin/workflows/src/extension/workflow-schema.ts +62 -5
- package/dist/builtin/workflows/src/runs/background/runner.ts +3 -3
- package/dist/builtin/workflows/src/runs/background/status.ts +42 -8
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +410 -95
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +5 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +8 -0
- package/dist/builtin/workflows/src/runs/shared/model-fallback.ts +6 -4
- package/dist/builtin/workflows/src/runs/shared/worktree.ts +3 -2
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +138 -5
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +30 -0
- package/dist/builtin/workflows/src/shared/render-inputs-schema.ts +78 -120
- package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +193 -0
- package/dist/builtin/workflows/src/shared/store-types.ts +26 -1
- package/dist/builtin/workflows/src/shared/store.ts +145 -17
- package/dist/builtin/workflows/src/shared/timing.ts +6 -2
- package/dist/builtin/workflows/src/shared/workflow-failures.ts +375 -0
- package/dist/builtin/workflows/src/tui/chat-surface.ts +68 -17
- package/dist/builtin/workflows/src/tui/connectors.ts +2 -2
- package/dist/builtin/workflows/src/tui/dispatch-confirm.ts +24 -26
- package/dist/builtin/workflows/src/tui/graph-canvas.ts +4 -8
- package/dist/builtin/workflows/src/tui/graph-view.ts +17 -14
- package/dist/builtin/workflows/src/tui/header.ts +38 -0
- package/dist/builtin/workflows/src/tui/inline-form-card.ts +161 -238
- package/dist/builtin/workflows/src/tui/inline-form-editor.ts +68 -73
- package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +2 -3
- package/dist/builtin/workflows/src/tui/inline-form-store.ts +2 -1
- package/dist/builtin/workflows/src/tui/inputs-overlay.ts +1 -3
- package/dist/builtin/workflows/src/tui/inputs-picker.ts +286 -399
- package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +11 -0
- package/dist/builtin/workflows/src/tui/node-card.ts +2 -1
- package/dist/builtin/workflows/src/tui/overlay-adapter.ts +9 -1
- package/dist/builtin/workflows/src/tui/prompt-card.ts +46 -19
- package/dist/builtin/workflows/src/tui/run-detail.ts +63 -80
- package/dist/builtin/workflows/src/tui/session-confirm.ts +9 -3
- package/dist/builtin/workflows/src/tui/session-picker.ts +19 -16
- package/dist/builtin/workflows/src/tui/stage-chat-layout.ts +88 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +368 -879
- package/dist/builtin/workflows/src/tui/status-helpers.ts +4 -0
- package/dist/builtin/workflows/src/tui/status-list.ts +67 -75
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +50 -12
- package/dist/builtin/workflows/src/tui/submit-pane.ts +164 -0
- package/dist/builtin/workflows/src/tui/switcher.ts +27 -4
- package/dist/builtin/workflows/src/tui/text-helpers.ts +98 -4
- package/dist/builtin/workflows/src/tui/widget.ts +90 -68
- package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +23 -2
- package/dist/builtin/workflows/src/tui/workflow-list.ts +44 -68
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -3
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -10
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +2 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +3 -2
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +6 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +16 -2
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/atomic-guide-command.d.ts.map +1 -1
- package/dist/core/atomic-guide-command.js +8 -9
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -2
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +2 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +8 -6
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/template.js +6 -3
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +12 -29
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +5 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/package-manager.d.ts +8 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +145 -58
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +6 -20
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +38 -31
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +9 -4
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +32 -24
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +8 -15
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +8 -22
- package/dist/core/skills.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts +5 -4
- package/dist/core/tools/ask-user-question/state/questionnaire-session.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js +34 -11
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts +1 -0
- package/dist/core/tools/ask-user-question/state/selectors/contract.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/selectors/contract.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/selectors/projections.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/selectors/projections.js +1 -0
- package/dist/core/tools/ask-user-question/state/selectors/projections.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/state-reducer.d.ts +1 -2
- package/dist/core/tools/ask-user-question/state/state-reducer.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/state-reducer.js +26 -9
- package/dist/core/tools/ask-user-question/state/state-reducer.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/state.d.ts +4 -0
- package/dist/core/tools/ask-user-question/state/state.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/state/state.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/option-list-view.d.ts +1 -0
- package/dist/core/tools/ask-user-question/view/components/option-list-view.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/option-list-view.js +1 -0
- package/dist/core/tools/ask-user-question/view/components/option-list-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts +9 -6
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +28 -7
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/props-adapter.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/view/props-adapter.js +4 -1
- package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +56 -53
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +3 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +8 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +3 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +44 -81
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +27 -12
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +2 -3
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +3 -3
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +5 -5
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +2 -0
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +11 -4
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts +2 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js +39 -21
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +9 -8
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js +12 -2
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +20 -35
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +5 -6
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/chat-input-actions.d.ts +24 -0
- package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -0
- package/dist/modes/interactive/chat-input-actions.js +179 -0
- package/dist/modes/interactive/chat-input-actions.js.map +1 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +14 -3
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +157 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -0
- package/dist/modes/interactive/components/chat-session-host.js +1007 -0
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +1 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +14 -5
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +1 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +1 -0
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +9 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +29 -4
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +18 -67
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/child-process.d.ts +1 -0
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js +8 -0
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts +3 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js +14 -8
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts +30 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -0
- package/dist/utils/image-resize-core.js +124 -0
- package/dist/utils/image-resize-core.js.map +1 -0
- package/dist/utils/image-resize-worker.d.ts +2 -0
- package/dist/utils/image-resize-worker.d.ts.map +1 -0
- package/dist/utils/image-resize-worker.js +31 -0
- package/dist/utils/image-resize-worker.js.map +1 -0
- package/dist/utils/image-resize.d.ts +7 -27
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +75 -115
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/paths.d.ts +16 -1
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +49 -7
- package/dist/utils/paths.js.map +1 -1
- package/docs/changelog.mdx +29 -0
- package/docs/compaction.md +1 -1
- package/docs/custom-provider.md +2 -2
- package/docs/development.md +1 -1
- package/docs/docs.json +98 -143
- package/docs/extensions.md +29 -16
- package/docs/favicon.svg +29 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/images/workflow-command.png +0 -0
- package/docs/images/workflow-graph.png +0 -0
- package/docs/images/workflow-input-picker.png +0 -0
- package/docs/images/workflow-list.png +0 -0
- package/docs/index.md +10 -1
- package/docs/logo.svg +59 -0
- package/docs/packages.md +3 -3
- package/docs/providers.md +1 -1
- package/docs/quickstart.md +98 -2
- package/docs/rpc.md +8 -8
- package/docs/sdk.md +23 -12
- package/docs/sessions.md +1 -1
- package/docs/skills.md +15 -1
- package/docs/termux.md +11 -1
- package/docs/themes.md +6 -6
- package/docs/tui.md +18 -18
- package/docs/usage.md +1 -1
- package/docs/workflows.md +172 -2
- package/examples/extensions/subagent/index.ts +2 -1
- package/package.json +6 -6
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/SKILL.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/element-attributes.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/playwright-tests.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/request-mocking.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/running-code.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/session-management.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/spec-driven-testing.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/storage-state.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/test-generation.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/tracing.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/playwright-cli/references/video-recording.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/tdd/SKILL.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/tdd/deep-modules.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/tdd/interface-design.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/tdd/mocking.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/tdd/refactoring.md +0 -0
- /package/dist/builtin/{workflows → subagents}/skills/tdd/tests.md +0 -0
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
type AsyncParallelGroupStatus,
|
|
15
15
|
type AsyncStatus,
|
|
16
16
|
type ModelAttempt,
|
|
17
|
+
type NestedRouteInfo,
|
|
17
18
|
type ResolvedControlConfig,
|
|
18
19
|
type SubagentRunMode,
|
|
19
20
|
type Usage,
|
|
@@ -40,8 +41,8 @@ import {
|
|
|
40
41
|
MAX_PARALLEL_CONCURRENCY,
|
|
41
42
|
} from "../shared/parallel-utils.ts";
|
|
42
43
|
import { buildPiArgs, cleanupTempDir } from "../shared/pi-args.ts";
|
|
44
|
+
import { nestedSummaryFromAsyncStatus, writeNestedEvent } from "../shared/nested-events.ts";
|
|
43
45
|
import { formatModelAttemptNote, isRetryableModelFailure } from "../shared/model-fallback.ts";
|
|
44
|
-
import { formatDuration } from "../../shared/formatters.ts";
|
|
45
46
|
import { attachPostExitStdioGuard, trySignalChild } from "../../shared/post-exit-stdio-guard.ts";
|
|
46
47
|
import { detectSubagentError, extractTextFromContent, extractToolArgsPreview, getFinalOutput } from "../../shared/utils.ts";
|
|
47
48
|
import { evaluateCompletionMutationGuard } from "../shared/completion-guard.ts";
|
|
@@ -93,6 +94,8 @@ interface SubagentRunConfig {
|
|
|
93
94
|
controlIntercomTarget?: string;
|
|
94
95
|
childIntercomTargets?: Array<string | undefined>;
|
|
95
96
|
resultMode?: SubagentRunMode;
|
|
97
|
+
nestedRoute?: NestedRouteInfo;
|
|
98
|
+
nestedSelf?: { parentRunId: string; parentStepIndex?: number; depth: number; path?: Array<{ runId: string; stepIndex?: number; agent?: string }> };
|
|
96
99
|
}
|
|
97
100
|
|
|
98
101
|
interface StepResult {
|
|
@@ -223,7 +226,12 @@ function runPiStreaming(
|
|
|
223
226
|
...(piPackageRoot ? { piPackageRoot } : {}),
|
|
224
227
|
...(piArgv1 ? { argv1: piArgv1 } : {}),
|
|
225
228
|
});
|
|
226
|
-
const child = spawn(spawnSpec.command, spawnSpec.args, {
|
|
229
|
+
const child = spawn(spawnSpec.command, spawnSpec.args, {
|
|
230
|
+
cwd,
|
|
231
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
232
|
+
env: spawnEnv,
|
|
233
|
+
windowsHide: true,
|
|
234
|
+
});
|
|
227
235
|
let stderr = "";
|
|
228
236
|
let stdoutBuf = "";
|
|
229
237
|
let stderrBuf = "";
|
|
@@ -472,6 +480,14 @@ function createShareLink(htmlPath: string): { shareUrl: string; gistUrl: string
|
|
|
472
480
|
}
|
|
473
481
|
}
|
|
474
482
|
|
|
483
|
+
function formatDuration(ms: number): string {
|
|
484
|
+
if (ms < 1000) return `${ms}ms`;
|
|
485
|
+
if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;
|
|
486
|
+
const minutes = Math.floor(ms / 60000);
|
|
487
|
+
const seconds = Math.floor((ms % 60000) / 1000);
|
|
488
|
+
return `${minutes}m${seconds}s`;
|
|
489
|
+
}
|
|
490
|
+
|
|
475
491
|
function writeRunLog(
|
|
476
492
|
logPath: string,
|
|
477
493
|
input: {
|
|
@@ -542,6 +558,7 @@ interface SingleStepContext {
|
|
|
542
558
|
registerInterrupt?: (interrupt: (() => void) | undefined) => void;
|
|
543
559
|
childIntercomTarget?: string;
|
|
544
560
|
orchestratorIntercomTarget?: string;
|
|
561
|
+
nestedRoute?: NestedRouteInfo;
|
|
545
562
|
onAttemptStart?: (attempt: { model?: string; thinking?: string }) => void;
|
|
546
563
|
onChildEvent?: (event: ChildEvent) => void;
|
|
547
564
|
}
|
|
@@ -610,12 +627,17 @@ async function runSingleStep(
|
|
|
610
627
|
systemPrompt: step.systemPrompt,
|
|
611
628
|
systemPromptMode: step.systemPromptMode,
|
|
612
629
|
mcpDirectTools: step.mcpDirectTools,
|
|
630
|
+
cwd: step.cwd ?? ctx.cwd,
|
|
613
631
|
promptFileStem: step.agent,
|
|
614
632
|
intercomSessionName: ctx.childIntercomTarget,
|
|
615
633
|
orchestratorIntercomTarget: ctx.orchestratorIntercomTarget,
|
|
616
634
|
runId: ctx.id,
|
|
617
635
|
childAgentName: step.agent,
|
|
618
636
|
childIndex: ctx.flatIndex,
|
|
637
|
+
parentEventSink: ctx.nestedRoute?.eventSink,
|
|
638
|
+
parentControlInbox: ctx.nestedRoute?.controlInbox,
|
|
639
|
+
parentRootRunId: ctx.nestedRoute?.rootRunId,
|
|
640
|
+
parentCapabilityToken: ctx.nestedRoute?.capabilityToken,
|
|
619
641
|
});
|
|
620
642
|
const run = await runPiStreaming(
|
|
621
643
|
args,
|
|
@@ -632,11 +654,13 @@ async function runSingleStep(
|
|
|
632
654
|
cleanupTempDir(tempDir);
|
|
633
655
|
|
|
634
656
|
const hiddenError = run.exitCode === 0 && !run.error ? detectSubagentError(run.messages) : null;
|
|
635
|
-
const completionGuard = run.exitCode === 0 && !run.error && !hiddenError?.hasError
|
|
657
|
+
const completionGuard = run.exitCode === 0 && !run.error && !hiddenError?.hasError && step.completionGuard !== false
|
|
636
658
|
? evaluateCompletionMutationGuard({
|
|
637
659
|
agent: step.agent,
|
|
638
660
|
task,
|
|
639
661
|
messages: run.messages,
|
|
662
|
+
tools: step.tools,
|
|
663
|
+
mcpDirectTools: step.mcpDirectTools,
|
|
640
664
|
})
|
|
641
665
|
: undefined;
|
|
642
666
|
const completionGuardTriggered = completionGuard?.triggered === true && !run.observedMutationAttempt;
|
|
@@ -923,6 +947,32 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
923
947
|
|
|
924
948
|
fs.mkdirSync(asyncDir, { recursive: true });
|
|
925
949
|
writeAtomicJson(statusPath, statusPayload);
|
|
950
|
+
const emitNestedSelfEvent = (type: "subagent.nested.updated" | "subagent.nested.completed"): void => {
|
|
951
|
+
if (!config.nestedRoute || !config.nestedSelf) return;
|
|
952
|
+
try {
|
|
953
|
+
writeNestedEvent(config.nestedRoute, {
|
|
954
|
+
type,
|
|
955
|
+
ts: Date.now(),
|
|
956
|
+
parentRunId: config.nestedSelf.parentRunId,
|
|
957
|
+
parentStepIndex: config.nestedSelf.parentStepIndex,
|
|
958
|
+
child: nestedSummaryFromAsyncStatus(statusPayload, asyncDir, {
|
|
959
|
+
id,
|
|
960
|
+
parentRunId: config.nestedSelf.parentRunId,
|
|
961
|
+
parentStepIndex: config.nestedSelf.parentStepIndex,
|
|
962
|
+
depth: config.nestedSelf.depth,
|
|
963
|
+
path: config.nestedSelf.path,
|
|
964
|
+
mode: statusPayload.mode,
|
|
965
|
+
ts: Date.now(),
|
|
966
|
+
}),
|
|
967
|
+
});
|
|
968
|
+
} catch (error) {
|
|
969
|
+
console.error("Failed to emit nested async status event:", error);
|
|
970
|
+
}
|
|
971
|
+
};
|
|
972
|
+
const writeStatusPayload = (): void => {
|
|
973
|
+
writeAtomicJson(statusPath, statusPayload);
|
|
974
|
+
emitNestedSelfEvent(statusPayload.state === "running" || statusPayload.state === "queued" ? "subagent.nested.updated" : "subagent.nested.completed");
|
|
975
|
+
};
|
|
926
976
|
|
|
927
977
|
const stepOutputActivityAt = (index: number): number => {
|
|
928
978
|
const step = statusPayload.steps[index];
|
|
@@ -1013,7 +1063,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1013
1063
|
step.model = model;
|
|
1014
1064
|
step.thinking = thinking;
|
|
1015
1065
|
statusPayload.lastUpdate = now;
|
|
1016
|
-
|
|
1066
|
+
writeStatusPayload();
|
|
1017
1067
|
};
|
|
1018
1068
|
const updateStepFromChildEvent = (flatIndex: number, event: ChildEvent): void => {
|
|
1019
1069
|
const step = statusPayload.steps[flatIndex];
|
|
@@ -1101,7 +1151,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1101
1151
|
statusPayload.lastActivityAt = now;
|
|
1102
1152
|
statusPayload.lastUpdate = now;
|
|
1103
1153
|
maybeEmitActiveLongRunning(flatIndex, now);
|
|
1104
|
-
|
|
1154
|
+
writeStatusPayload();
|
|
1105
1155
|
};
|
|
1106
1156
|
const updateRunnerActivityState = (now: number): boolean => {
|
|
1107
1157
|
if (!controlConfig.enabled) return false;
|
|
@@ -1156,7 +1206,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1156
1206
|
changed = true;
|
|
1157
1207
|
}
|
|
1158
1208
|
statusPayload.lastUpdate = now;
|
|
1159
|
-
if (changed)
|
|
1209
|
+
if (changed) writeStatusPayload();
|
|
1160
1210
|
return changed;
|
|
1161
1211
|
};
|
|
1162
1212
|
if (controlConfig.enabled) {
|
|
@@ -1185,7 +1235,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1185
1235
|
step.lastActivityAt = now;
|
|
1186
1236
|
}
|
|
1187
1237
|
}
|
|
1188
|
-
|
|
1238
|
+
writeStatusPayload();
|
|
1189
1239
|
appendJsonl(eventsPath, JSON.stringify({
|
|
1190
1240
|
type: "subagent.run.paused",
|
|
1191
1241
|
ts: now,
|
|
@@ -1296,7 +1346,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1296
1346
|
statusPayload.steps[fi].exitCode = -1;
|
|
1297
1347
|
statusPayload.steps[fi].activityState = undefined;
|
|
1298
1348
|
statusPayload.lastUpdate = skippedAt;
|
|
1299
|
-
|
|
1349
|
+
writeStatusPayload();
|
|
1300
1350
|
appendJsonl(eventsPath, JSON.stringify({
|
|
1301
1351
|
type: "subagent.step.failed", ts: skippedAt, runId: id, stepIndex: fi, agent: task.agent, exitCode: -1, durationMs: 0,
|
|
1302
1352
|
}));
|
|
@@ -1316,7 +1366,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1316
1366
|
statusPayload.outputFile = path.join(asyncDir, `output-${fi}.log`);
|
|
1317
1367
|
statusPayload.lastActivityAt = taskStartTime;
|
|
1318
1368
|
statusPayload.lastUpdate = taskStartTime;
|
|
1319
|
-
|
|
1369
|
+
writeStatusPayload();
|
|
1320
1370
|
|
|
1321
1371
|
appendJsonl(eventsPath, JSON.stringify({
|
|
1322
1372
|
type: "subagent.step.started", ts: taskStartTime, runId: id, stepIndex: fi, agent: task.agent,
|
|
@@ -1337,6 +1387,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1337
1387
|
piArgv1: config.piArgv1,
|
|
1338
1388
|
childIntercomTarget: config.childIntercomTargets?.[fi],
|
|
1339
1389
|
orchestratorIntercomTarget: config.controlIntercomTarget,
|
|
1390
|
+
nestedRoute: config.nestedRoute,
|
|
1340
1391
|
registerInterrupt: (interrupt) => {
|
|
1341
1392
|
activeChildInterrupt = interrupt;
|
|
1342
1393
|
},
|
|
@@ -1360,7 +1411,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1360
1411
|
statusPayload.steps[fi].modelAttempts = singleResult.modelAttempts;
|
|
1361
1412
|
statusPayload.steps[fi].error = singleResult.error;
|
|
1362
1413
|
statusPayload.lastUpdate = taskEndTime;
|
|
1363
|
-
|
|
1414
|
+
writeStatusPayload();
|
|
1364
1415
|
|
|
1365
1416
|
appendJsonl(eventsPath, JSON.stringify({
|
|
1366
1417
|
type: singleResult.exitCode === 0 ? "subagent.step.completed" : "subagent.step.failed",
|
|
@@ -1404,7 +1455,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1404
1455
|
}
|
|
1405
1456
|
statusPayload.totalTokens = { ...previousCumulativeTokens };
|
|
1406
1457
|
statusPayload.lastUpdate = Date.now();
|
|
1407
|
-
|
|
1458
|
+
writeStatusPayload();
|
|
1408
1459
|
|
|
1409
1460
|
for (const pr of parallelResults) {
|
|
1410
1461
|
results.push({
|
|
@@ -1462,7 +1513,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1462
1513
|
statusPayload.lastActivityAt = stepStartTime;
|
|
1463
1514
|
statusPayload.lastUpdate = stepStartTime;
|
|
1464
1515
|
statusPayload.outputFile = path.join(asyncDir, `output-${flatIndex}.log`);
|
|
1465
|
-
|
|
1516
|
+
writeStatusPayload();
|
|
1466
1517
|
|
|
1467
1518
|
appendJsonl(eventsPath, JSON.stringify({
|
|
1468
1519
|
type: "subagent.step.started",
|
|
@@ -1482,6 +1533,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1482
1533
|
piArgv1: config.piArgv1,
|
|
1483
1534
|
childIntercomTarget: config.childIntercomTargets?.[flatIndex],
|
|
1484
1535
|
orchestratorIntercomTarget: config.controlIntercomTarget,
|
|
1536
|
+
nestedRoute: config.nestedRoute,
|
|
1485
1537
|
registerInterrupt: (interrupt) => {
|
|
1486
1538
|
activeChildInterrupt = interrupt;
|
|
1487
1539
|
},
|
|
@@ -1542,7 +1594,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1542
1594
|
statusPayload.totalTokens = { ...previousCumulativeTokens };
|
|
1543
1595
|
}
|
|
1544
1596
|
statusPayload.lastUpdate = stepEndTime;
|
|
1545
|
-
|
|
1597
|
+
writeStatusPayload();
|
|
1546
1598
|
|
|
1547
1599
|
appendJsonl(eventsPath, JSON.stringify({
|
|
1548
1600
|
type: singleResult.exitCode === 0 ? "subagent.step.completed" : "subagent.step.failed",
|
|
@@ -1644,7 +1696,7 @@ async function runSubagent(config: SubagentRunConfig): Promise<void> {
|
|
|
1644
1696
|
statusPayload.error = `Step failed: ${failedStep.agent}`;
|
|
1645
1697
|
}
|
|
1646
1698
|
}
|
|
1647
|
-
|
|
1699
|
+
writeStatusPayload();
|
|
1648
1700
|
appendJsonl(
|
|
1649
1701
|
eventsPath,
|
|
1650
1702
|
JSON.stringify({
|
|
@@ -34,6 +34,7 @@ import { runSync } from "./execution.ts";
|
|
|
34
34
|
import { buildChainSummary } from "../../shared/formatters.ts";
|
|
35
35
|
import { compactForegroundDetails, getSingleResultOutput, mapConcurrent, resolveChildCwd } from "../../shared/utils.ts";
|
|
36
36
|
import { recordRun } from "../shared/run-history.ts";
|
|
37
|
+
import { currentModelFullId } from "../shared/model-fallback.ts";
|
|
37
38
|
import {
|
|
38
39
|
cleanupWorktrees,
|
|
39
40
|
createWorktrees,
|
|
@@ -51,12 +52,13 @@ import {
|
|
|
51
52
|
type ControlEvent,
|
|
52
53
|
type Details,
|
|
53
54
|
type IntercomEventBus,
|
|
55
|
+
type NestedRouteInfo,
|
|
54
56
|
type ResolvedControlConfig,
|
|
55
57
|
type SingleResult,
|
|
56
58
|
MAX_CONCURRENCY,
|
|
57
59
|
resolveChildMaxSubagentDepth,
|
|
58
60
|
} from "../../shared/types.ts";
|
|
59
|
-
import {
|
|
61
|
+
import { resolveModelCandidate } from "../shared/model-fallback.ts";
|
|
60
62
|
import { validateFileOnlyOutputMode } from "../shared/single-output.ts";
|
|
61
63
|
|
|
62
64
|
interface ChainExecutionDetailsInput {
|
|
@@ -112,6 +114,7 @@ interface ParallelChainRunInput {
|
|
|
112
114
|
totalSteps: number;
|
|
113
115
|
worktreeSetup?: WorktreeSetup;
|
|
114
116
|
maxSubagentDepth: number;
|
|
117
|
+
nestedRoute?: NestedRouteInfo;
|
|
115
118
|
}
|
|
116
119
|
|
|
117
120
|
function buildChainExecutionDetails(input: ChainExecutionDetailsInput): Details {
|
|
@@ -244,10 +247,11 @@ async function runParallelChainTasks(input: ParallelChainRunInput): Promise<Sing
|
|
|
244
247
|
onControlEvent: input.onControlEvent,
|
|
245
248
|
intercomSessionName: input.childIntercomTarget?.(task.agent, input.globalTaskIndex + taskIndex),
|
|
246
249
|
orchestratorIntercomTarget: input.orchestratorIntercomTarget,
|
|
250
|
+
nestedRoute: input.nestedRoute,
|
|
247
251
|
modelOverride: effectiveModel,
|
|
248
252
|
availableModels: input.availableModels,
|
|
249
|
-
preferredModelProvider: input.ctx.model?.provider,
|
|
250
253
|
currentModel: currentModelFullId(input.ctx.model),
|
|
254
|
+
preferredModelProvider: input.ctx.model?.provider,
|
|
251
255
|
skills: behavior.skills === false ? [] : behavior.skills,
|
|
252
256
|
onUpdate: input.onUpdate
|
|
253
257
|
? (progressUpdate) => {
|
|
@@ -332,6 +336,7 @@ interface ChainExecutionParams {
|
|
|
332
336
|
chainSkills?: string[];
|
|
333
337
|
chainDir?: string;
|
|
334
338
|
maxSubagentDepth: number;
|
|
339
|
+
nestedRoute?: NestedRouteInfo;
|
|
335
340
|
worktreeSetupHook?: string;
|
|
336
341
|
worktreeSetupHookTimeoutMs?: number;
|
|
337
342
|
}
|
|
@@ -592,6 +597,7 @@ export async function executeChain(params: ChainExecutionParams): Promise<ChainE
|
|
|
592
597
|
childIntercomTarget,
|
|
593
598
|
orchestratorIntercomTarget,
|
|
594
599
|
foregroundControl,
|
|
600
|
+
nestedRoute: params.nestedRoute,
|
|
595
601
|
worktreeSetup,
|
|
596
602
|
maxSubagentDepth: params.maxSubagentDepth,
|
|
597
603
|
});
|
|
@@ -794,10 +800,11 @@ export async function executeChain(params: ChainExecutionParams): Promise<ChainE
|
|
|
794
800
|
onControlEvent,
|
|
795
801
|
intercomSessionName: childIntercomTarget?.(seqStep.agent, globalTaskIndex),
|
|
796
802
|
orchestratorIntercomTarget,
|
|
803
|
+
nestedRoute: params.nestedRoute,
|
|
797
804
|
modelOverride: effectiveModel,
|
|
798
805
|
availableModels,
|
|
799
|
-
preferredModelProvider: ctx.model?.provider,
|
|
800
806
|
currentModel: currentModelFullId(ctx.model),
|
|
807
|
+
preferredModelProvider: ctx.model?.provider,
|
|
801
808
|
skills: behavior.skills === false ? [] : behavior.skills,
|
|
802
809
|
onUpdate: onUpdate
|
|
803
810
|
? (p) => {
|
|
@@ -151,12 +151,17 @@ async function runSingleAttempt(
|
|
|
151
151
|
extensions: agent.extensions,
|
|
152
152
|
systemPrompt: shared.systemPrompt,
|
|
153
153
|
mcpDirectTools: agent.mcpDirectTools,
|
|
154
|
+
cwd: options.cwd ?? runtimeCwd,
|
|
154
155
|
promptFileStem: agent.name,
|
|
155
156
|
intercomSessionName: options.intercomSessionName,
|
|
156
157
|
orchestratorIntercomTarget: options.orchestratorIntercomTarget,
|
|
157
158
|
runId: options.runId,
|
|
158
159
|
childAgentName: agent.name,
|
|
159
160
|
childIndex: options.index ?? 0,
|
|
161
|
+
parentEventSink: options.nestedRoute?.eventSink,
|
|
162
|
+
parentControlInbox: options.nestedRoute?.controlInbox,
|
|
163
|
+
parentRootRunId: options.nestedRoute?.rootRunId,
|
|
164
|
+
parentCapabilityToken: options.nestedRoute?.capabilityToken,
|
|
160
165
|
});
|
|
161
166
|
|
|
162
167
|
const result: SingleResult = {
|
|
@@ -207,6 +212,7 @@ async function runSingleAttempt(
|
|
|
207
212
|
cwd: options.cwd ?? runtimeCwd,
|
|
208
213
|
env: spawnEnv,
|
|
209
214
|
stdio: ["ignore", "pipe", "pipe"],
|
|
215
|
+
windowsHide: true,
|
|
210
216
|
});
|
|
211
217
|
const jsonlWriter = createJsonlWriter(shared.jsonlPath, proc.stdout);
|
|
212
218
|
let buf = "";
|
|
@@ -666,8 +672,14 @@ async function runSingleAttempt(
|
|
|
666
672
|
};
|
|
667
673
|
|
|
668
674
|
let fullOutput = getFinalOutput(result.messages);
|
|
669
|
-
const completionGuard = result.exitCode === 0 && !result.error
|
|
670
|
-
? evaluateCompletionMutationGuard({
|
|
675
|
+
const completionGuard = result.exitCode === 0 && !result.error && agent.completionGuard !== false
|
|
676
|
+
? evaluateCompletionMutationGuard({
|
|
677
|
+
agent: agent.name,
|
|
678
|
+
task,
|
|
679
|
+
messages: result.messages,
|
|
680
|
+
tools: agent.tools,
|
|
681
|
+
mcpDirectTools: agent.mcpDirectTools,
|
|
682
|
+
})
|
|
671
683
|
: undefined;
|
|
672
684
|
if (completionGuard?.triggered && !observedMutationAttempt) {
|
|
673
685
|
result.exitCode = 1;
|