@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
|
@@ -30,16 +30,12 @@ function dirsForGlyph(ch: string): Set<Dir> {
|
|
|
30
30
|
case "─":
|
|
31
31
|
return new Set(["l", "r"]);
|
|
32
32
|
case "╭":
|
|
33
|
-
case "┌":
|
|
34
33
|
return new Set(["d", "r"]);
|
|
35
34
|
case "╮":
|
|
36
|
-
case "┐":
|
|
37
35
|
return new Set(["d", "l"]);
|
|
38
36
|
case "╰":
|
|
39
|
-
case "└":
|
|
40
37
|
return new Set(["u", "r"]);
|
|
41
38
|
case "╯":
|
|
42
|
-
case "┘":
|
|
43
39
|
return new Set(["u", "l"]);
|
|
44
40
|
case "├":
|
|
45
41
|
return new Set(["u", "d", "r"]);
|
|
@@ -65,10 +61,10 @@ function glyphForDirs(dirs: Set<Dir>): string {
|
|
|
65
61
|
if (has("u", "l", "r")) return "┴";
|
|
66
62
|
if (has("u", "d")) return "│";
|
|
67
63
|
if (has("l", "r")) return "─";
|
|
68
|
-
if (has("d", "r")) return "
|
|
69
|
-
if (has("d", "l")) return "
|
|
70
|
-
if (has("u", "r")) return "
|
|
71
|
-
if (has("u", "l")) return "
|
|
64
|
+
if (has("d", "r")) return "╭";
|
|
65
|
+
if (has("d", "l")) return "╮";
|
|
66
|
+
if (has("u", "r")) return "╰";
|
|
67
|
+
if (has("u", "l")) return "╯";
|
|
72
68
|
if (has("u") || has("d")) return "│";
|
|
73
69
|
if (has("l") || has("r")) return "─";
|
|
74
70
|
return " ";
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* popup chrome; this renderer leaves one unpainted row above and below
|
|
7
7
|
* the panel, then paints content on the canvas (`bg`) with full-width
|
|
8
8
|
* chrome rows for the header (top) and hints (bottom).
|
|
9
|
-
* - Section labels use the
|
|
9
|
+
* - Section labels use the ` LABEL` pattern: mauve glyph + `textMuted`
|
|
10
10
|
* bold caps.
|
|
11
11
|
* - Hints follow `<key> <label>` separated by ` · ` in `dim`, active key
|
|
12
12
|
* letters in `text`, labels in `textMuted`.
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import type { Component } from "@earendil-works/pi-tui";
|
|
20
20
|
import {
|
|
21
|
+
Key,
|
|
21
22
|
matchesKey,
|
|
22
23
|
sliceColumns,
|
|
23
24
|
truncateToWidth,
|
|
@@ -988,6 +989,7 @@ export class GraphView implements Component {
|
|
|
988
989
|
blocked: number;
|
|
989
990
|
completed: number;
|
|
990
991
|
failed: number;
|
|
992
|
+
skipped: number;
|
|
991
993
|
} {
|
|
992
994
|
const c = {
|
|
993
995
|
pending: 0,
|
|
@@ -997,6 +999,7 @@ export class GraphView implements Component {
|
|
|
997
999
|
blocked: 0,
|
|
998
1000
|
completed: 0,
|
|
999
1001
|
failed: 0,
|
|
1002
|
+
skipped: 0,
|
|
1000
1003
|
};
|
|
1001
1004
|
for (const s of run.stages) c[s.status]++;
|
|
1002
1005
|
return c;
|
|
@@ -1061,13 +1064,13 @@ export class GraphView implements Component {
|
|
|
1061
1064
|
// Vertical-graph navigation: up/down step between depth levels
|
|
1062
1065
|
// (col), left/right step between siblings at the same depth (row).
|
|
1063
1066
|
// j/k preserved as a flat-order fallback for muscle memory.
|
|
1064
|
-
if (matchesKey(data,
|
|
1067
|
+
if (matchesKey(data, Key.down))
|
|
1065
1068
|
return this._moveByDepth(+1);
|
|
1066
|
-
if (matchesKey(data,
|
|
1069
|
+
if (matchesKey(data, Key.up))
|
|
1067
1070
|
return this._moveByDepth(-1);
|
|
1068
|
-
if (matchesKey(data,
|
|
1071
|
+
if (matchesKey(data, Key.right))
|
|
1069
1072
|
return this._moveBySibling(+1);
|
|
1070
|
-
if (matchesKey(data,
|
|
1073
|
+
if (matchesKey(data, Key.left))
|
|
1071
1074
|
return this._moveBySibling(-1);
|
|
1072
1075
|
if (matchesKey(data, "j")) {
|
|
1073
1076
|
this._setFocusedIndex(Math.min(this.focusedIndex + 1, stageCount - 1));
|
|
@@ -1087,12 +1090,12 @@ export class GraphView implements Component {
|
|
|
1087
1090
|
}
|
|
1088
1091
|
return true;
|
|
1089
1092
|
}
|
|
1090
|
-
if (data
|
|
1093
|
+
if (matchesKey(data, "/")) {
|
|
1091
1094
|
this.switcherOpen = true;
|
|
1092
1095
|
this.switcherState = { query: "", selectedIndex: 0 };
|
|
1093
1096
|
return true;
|
|
1094
1097
|
}
|
|
1095
|
-
if (matchesKey(data,
|
|
1098
|
+
if (matchesKey(data, Key.enter)) {
|
|
1096
1099
|
// Enter attaches the popup interior to the focused stage. The
|
|
1097
1100
|
// attach shell swaps in the stage-chat view without remounting
|
|
1098
1101
|
// the overlay; without a callback, fall back to the legacy
|
|
@@ -1103,7 +1106,7 @@ export class GraphView implements Component {
|
|
|
1103
1106
|
}
|
|
1104
1107
|
// `ctrl+d` detaches the whole popup (host hides the overlay). This
|
|
1105
1108
|
// is the graph-mode counterpart of the in-chat back affordance.
|
|
1106
|
-
if (matchesKey(data, "
|
|
1109
|
+
if (matchesKey(data, Key.ctrl("d"))) {
|
|
1107
1110
|
if (this.onDetach) {
|
|
1108
1111
|
this.onDetach();
|
|
1109
1112
|
} else if (this.onHide) {
|
|
@@ -1125,7 +1128,7 @@ export class GraphView implements Component {
|
|
|
1125
1128
|
this.onHide();
|
|
1126
1129
|
return true;
|
|
1127
1130
|
}
|
|
1128
|
-
if (matchesKey(data,
|
|
1131
|
+
if (matchesKey(data, Key.escape) || matchesKey(data, Key.ctrl("c"))) {
|
|
1129
1132
|
this.onClose?.();
|
|
1130
1133
|
return true;
|
|
1131
1134
|
}
|
|
@@ -1136,11 +1139,11 @@ export class GraphView implements Component {
|
|
|
1136
1139
|
const run = this._getCurrentRun();
|
|
1137
1140
|
const stages = run?.stages ?? [];
|
|
1138
1141
|
|
|
1139
|
-
if (matchesKey(data,
|
|
1142
|
+
if (matchesKey(data, Key.escape)) {
|
|
1140
1143
|
this.switcherOpen = false;
|
|
1141
1144
|
return true;
|
|
1142
1145
|
}
|
|
1143
|
-
if (matchesKey(data,
|
|
1146
|
+
if (matchesKey(data, Key.enter)) {
|
|
1144
1147
|
const filtered = filterStages(stages, this.switcherState.query);
|
|
1145
1148
|
const selected = filtered[this.switcherState.selectedIndex];
|
|
1146
1149
|
if (selected) {
|
|
@@ -1159,7 +1162,7 @@ export class GraphView implements Component {
|
|
|
1159
1162
|
this.switcherOpen = false;
|
|
1160
1163
|
return true;
|
|
1161
1164
|
}
|
|
1162
|
-
if (matchesKey(data,
|
|
1165
|
+
if (matchesKey(data, Key.down)) {
|
|
1163
1166
|
const filtered = filterStages(stages, this.switcherState.query);
|
|
1164
1167
|
this.switcherState = {
|
|
1165
1168
|
...this.switcherState,
|
|
@@ -1170,14 +1173,14 @@ export class GraphView implements Component {
|
|
|
1170
1173
|
};
|
|
1171
1174
|
return true;
|
|
1172
1175
|
}
|
|
1173
|
-
if (matchesKey(data,
|
|
1176
|
+
if (matchesKey(data, Key.up)) {
|
|
1174
1177
|
this.switcherState = {
|
|
1175
1178
|
...this.switcherState,
|
|
1176
1179
|
selectedIndex: Math.max(this.switcherState.selectedIndex - 1, 0),
|
|
1177
1180
|
};
|
|
1178
1181
|
return true;
|
|
1179
1182
|
}
|
|
1180
|
-
if (matchesKey(data,
|
|
1183
|
+
if (matchesKey(data, Key.backspace)) {
|
|
1181
1184
|
this.switcherState = {
|
|
1182
1185
|
query: this.switcherState.query.slice(0, -1),
|
|
1183
1186
|
selectedIndex: 0,
|
|
@@ -49,6 +49,8 @@ export interface BandHeaderOpts {
|
|
|
49
49
|
theme: GraphTheme;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
export interface CompactBandHeaderOpts extends BandHeaderOpts {}
|
|
53
|
+
|
|
52
54
|
interface PillStyle {
|
|
53
55
|
border: string;
|
|
54
56
|
label: string;
|
|
@@ -88,6 +90,40 @@ export function renderOutlinePill(
|
|
|
88
90
|
* Always returns exactly 3 lines. When `badges` is empty the right
|
|
89
91
|
* column is whitespace only.
|
|
90
92
|
*/
|
|
93
|
+
export function renderCompactBandHeader(opts: CompactBandHeaderOpts): string[] {
|
|
94
|
+
const { label, subtitle = "", badges = [], width, theme } = opts;
|
|
95
|
+
const accentHex = opts.accent ?? theme.accent;
|
|
96
|
+
const chromeBg = hexBg(theme.backgroundPanel);
|
|
97
|
+
const accent = hexToAnsi(accentHex);
|
|
98
|
+
const muted = hexToAnsi(theme.textMuted);
|
|
99
|
+
|
|
100
|
+
const rightVisible = badges.map((b) => b.text).join(" ");
|
|
101
|
+
const rightW = visibleWidth(rightVisible);
|
|
102
|
+
const rightStyled = badges
|
|
103
|
+
.map((b) => `${hexToAnsi(b.fg)}${b.text}${RESET}${chromeBg}`)
|
|
104
|
+
.join(`${chromeBg} `);
|
|
105
|
+
|
|
106
|
+
const labelVisible = ` ${label} `;
|
|
107
|
+
const labelW = visibleWidth(labelVisible);
|
|
108
|
+
const rightEdgePad = 2;
|
|
109
|
+
const subtitleBudget = Math.max(0, width - labelW - rightW - rightEdgePad - 2);
|
|
110
|
+
const subtitleText = subtitle.length > 0 && subtitleBudget > 0
|
|
111
|
+
? truncateToWidth(subtitle, subtitleBudget, "…")
|
|
112
|
+
: "";
|
|
113
|
+
const subtitleVisible = subtitleText.length > 0 ? ` ${subtitleText}` : "";
|
|
114
|
+
const subtitleW = visibleWidth(subtitleVisible);
|
|
115
|
+
const filler = Math.max(0, width - labelW - subtitleW - rightW - rightEdgePad);
|
|
116
|
+
|
|
117
|
+
const labelStyled = `${chromeBg}${accent}${BOLD}${labelVisible}${RESET}${chromeBg}`;
|
|
118
|
+
const subtitleStyled = subtitleText.length > 0
|
|
119
|
+
? `${chromeBg} ${muted}${subtitleText}${RESET}${chromeBg}`
|
|
120
|
+
: `${chromeBg}`;
|
|
121
|
+
const line = `${labelStyled}${subtitleStyled}${" ".repeat(filler)}${rightStyled}${chromeBg}${" ".repeat(rightEdgePad)}${RESET}`;
|
|
122
|
+
const fitted = truncateToWidth(line, width, "", true);
|
|
123
|
+
const pad = Math.max(0, width - visibleWidth(fitted));
|
|
124
|
+
return [`${fitted}${chromeBg}${" ".repeat(pad)}${RESET}`];
|
|
125
|
+
}
|
|
126
|
+
|
|
91
127
|
export function renderBandHeader(opts: BandHeaderOpts): string[] {
|
|
92
128
|
const { label, subtitle = "", badges = [], width, theme } = opts;
|
|
93
129
|
const accentHex = opts.accent ?? theme.accent;
|
|
@@ -166,6 +202,7 @@ export function renderHeader(run: RunSnapshot, opts: HeaderOpts): string[] {
|
|
|
166
202
|
blocked: 0,
|
|
167
203
|
completed: 0,
|
|
168
204
|
failed: 0,
|
|
205
|
+
skipped: 0,
|
|
169
206
|
};
|
|
170
207
|
for (const s of run.stages) counts[s.status]++;
|
|
171
208
|
|
|
@@ -175,6 +212,7 @@ export function renderHeader(run: RunSnapshot, opts: HeaderOpts): string[] {
|
|
|
175
212
|
if (counts.awaiting_input > 0) badges.push({ text: `↵ ${counts.awaiting_input}`, fg: theme.info });
|
|
176
213
|
if (counts.paused > 0) badges.push({ text: `❚❚ ${counts.paused}`, fg: theme.warning });
|
|
177
214
|
if (counts.pending > 0) badges.push({ text: `○ ${counts.pending}`, fg: theme.dim });
|
|
215
|
+
if (counts.skipped > 0) badges.push({ text: `⊘ ${counts.skipped}`, fg: theme.dim });
|
|
178
216
|
if (counts.failed > 0) badges.push({ text: `✗ ${counts.failed}`, fg: theme.error });
|
|
179
217
|
|
|
180
218
|
return renderBandHeader({
|