@bastani/atomic 0.8.25 → 0.8.26-alpha.10
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 +84 -0
- package/README.md +5 -5
- package/dist/builtin/intercom/CHANGELOG.md +60 -0
- package/dist/builtin/intercom/index-heavy.ts +1754 -0
- package/dist/builtin/intercom/index.ts +374 -1746
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/intercom/result-renderers.ts +77 -0
- package/dist/builtin/mcp/CHANGELOG.md +64 -0
- package/dist/builtin/mcp/index.ts +151 -57
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +61 -0
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +9 -9
- package/dist/builtin/subagents/agents/debugger.md +6 -6
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/subagents/prompts/parallel-handoff-plan.md +1 -1
- package/dist/builtin/subagents/skills/browser/EXAMPLES.md +151 -0
- package/dist/builtin/subagents/skills/browser/LICENSE.txt +21 -0
- package/dist/builtin/subagents/skills/browser/REFERENCE.md +451 -0
- package/dist/builtin/subagents/skills/browser/SKILL.md +170 -0
- package/dist/builtin/subagents/skills/subagent/SKILL.md +4 -4
- package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +55 -12
- package/dist/builtin/subagents/src/runs/foreground/execution.ts +71 -12
- package/dist/builtin/subagents/src/runs/shared/acceptance.ts +2 -1
- package/dist/builtin/subagents/src/runs/shared/final-drain.ts +34 -0
- package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +416 -7
- package/dist/builtin/subagents/src/runs/shared/worktree.ts +2 -2
- package/dist/builtin/web-access/CHANGELOG.md +60 -0
- package/dist/builtin/web-access/index-heavy.ts +2060 -0
- package/dist/builtin/web-access/index.ts +182 -2274
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/web-access/result-renderers.ts +364 -0
- package/dist/builtin/workflows/CHANGELOG.md +75 -0
- package/dist/builtin/workflows/README.md +10 -8
- package/dist/builtin/workflows/builtin/deep-research-codebase.ts +11 -8
- package/dist/builtin/workflows/builtin/goal.ts +137 -109
- package/dist/builtin/workflows/builtin/index.d.ts +2 -0
- package/dist/builtin/workflows/builtin/open-claude-design.ts +228 -151
- package/dist/builtin/workflows/builtin/ralph.d.ts +2 -0
- package/dist/builtin/workflows/builtin/ralph.ts +452 -279
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/create-spec/SKILL.md +14 -0
- package/dist/builtin/workflows/skills/research-codebase/SKILL.md +29 -10
- package/dist/builtin/workflows/src/extension/index.ts +23 -5
- package/dist/builtin/workflows/src/extension/runtime.ts +35 -3
- package/dist/builtin/workflows/src/extension/wiring.ts +13 -1
- package/dist/builtin/workflows/src/runs/background/status.ts +52 -6
- package/dist/builtin/workflows/src/runs/foreground/executor.ts +453 -21
- package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +130 -13
- package/dist/builtin/workflows/src/runs/shared/model-fallback.ts +402 -8
- package/dist/builtin/workflows/src/runs/shared/worktree.ts +2 -2
- package/dist/builtin/workflows/src/shared/authoring-contract.d.ts +2 -2
- package/dist/builtin/workflows/src/shared/persistence-restore.ts +182 -6
- package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +76 -6
- package/dist/builtin/workflows/src/shared/stage-prompt.ts +33 -2
- package/dist/builtin/workflows/src/shared/store-types.ts +31 -0
- package/dist/builtin/workflows/src/shared/store.ts +160 -18
- package/dist/builtin/workflows/src/shared/types.ts +3 -3
- package/dist/builtin/workflows/src/shared/workflow-failures.ts +758 -132
- package/dist/builtin/workflows/src/tui/inline-form-overlay.ts +12 -3
- package/dist/builtin/workflows/src/tui/inline-form-store.ts +17 -6
- package/dist/builtin/workflows/src/tui/stage-chat-view.ts +39 -3
- package/dist/builtin/workflows/src/tui/store-widget-installer.ts +74 -74
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +13 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +33 -6
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +157 -182
- 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 +11 -9
- package/dist/core/atomic-guide-command.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +6 -3
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +23 -10
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/context-compaction.d.ts +175 -0
- package/dist/core/compaction/context-compaction.d.ts.map +1 -0
- package/dist/core/compaction/context-compaction.js +1636 -0
- package/dist/core/compaction/context-compaction.js.map +1 -0
- package/dist/core/compaction/index.d.ts +1 -0
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +1 -0
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +7 -0
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +16 -3
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +3 -0
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +14 -7
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +17 -0
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/session-manager.d.ts +41 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +146 -7
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/timings.d.ts +9 -0
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +28 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/ask-user-question/tool/format-answer.d.ts +5 -5
- package/dist/core/tools/ask-user-question/tool/format-answer.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/tool/format-answer.js +5 -5
- package/dist/core/tools/ask-user-question/tool/format-answer.js.map +1 -1
- package/dist/core/tools/ask-user-question/tool/response-envelope.d.ts +16 -3
- package/dist/core/tools/ask-user-question/tool/response-envelope.d.ts.map +1 -1
- package/dist/core/tools/ask-user-question/tool/response-envelope.js +21 -3
- package/dist/core/tools/ask-user-question/tool/response-envelope.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +4 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/index.d.ts +1 -1
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +17 -0
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/context-compaction-summary-message.d.ts +17 -0
- package/dist/modes/interactive/components/context-compaction-summary-message.d.ts.map +1 -0
- package/dist/modes/interactive/components/context-compaction-summary-message.js +83 -0
- package/dist/modes/interactive/components/context-compaction-summary-message.js.map +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts +1 -0
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +36 -4
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +4 -1
- 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/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +94 -17
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +13 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +8 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +4 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +14 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/git-env.d.ts +10 -0
- package/dist/utils/git-env.d.ts.map +1 -0
- package/dist/utils/git-env.js +33 -0
- package/dist/utils/git-env.js.map +1 -0
- package/docs/compaction.md +185 -50
- package/docs/custom-provider.md +11 -9
- package/docs/extensions.md +46 -42
- package/docs/index.md +13 -6
- package/docs/json.md +15 -12
- package/docs/packages.md +2 -0
- package/docs/providers.md +4 -1
- package/docs/quickstart.md +18 -11
- package/docs/rpc.md +38 -23
- package/docs/sdk.md +17 -8
- package/docs/session-format.md +26 -13
- package/docs/sessions.md +3 -3
- package/docs/settings.md +2 -2
- package/docs/skills.md +1 -15
- package/docs/termux.md +9 -10
- package/docs/themes.md +2 -2
- package/docs/tmux.md +3 -3
- package/docs/tui.md +19 -32
- package/docs/usage.md +2 -2
- package/docs/workflows.md +60 -16
- package/package.json +6 -12
- package/dist/builtin/subagents/skills/browser-use/SKILL.md +0 -234
- package/dist/builtin/subagents/skills/browser-use/references/cdp-python.md +0 -76
- package/dist/builtin/subagents/skills/browser-use/references/multi-session.md +0 -92
- package/node_modules/@earendil-works/pi-tui/README.md +0 -779
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts +0 -54
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js +0 -632
- package/node_modules/@earendil-works/pi-tui/dist/autocomplete.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts +0 -22
- package/node_modules/@earendil-works/pi-tui/dist/components/box.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/box.js +0 -104
- package/node_modules/@earendil-works/pi-tui/dist/components/box.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts +0 -22
- package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js +0 -35
- package/node_modules/@earendil-works/pi-tui/dist/components/cancellable-loader.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts +0 -249
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js +0 -1857
- package/node_modules/@earendil-works/pi-tui/dist/components/editor.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts +0 -28
- package/node_modules/@earendil-works/pi-tui/dist/components/image.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/image.js +0 -89
- package/node_modules/@earendil-works/pi-tui/dist/components/image.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts +0 -37
- package/node_modules/@earendil-works/pi-tui/dist/components/input.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js +0 -378
- package/node_modules/@earendil-works/pi-tui/dist/components/input.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts +0 -31
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.js +0 -69
- package/node_modules/@earendil-works/pi-tui/dist/components/loader.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts +0 -96
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js +0 -644
- package/node_modules/@earendil-works/pi-tui/dist/components/markdown.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts +0 -50
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js +0 -159
- package/node_modules/@earendil-works/pi-tui/dist/components/select-list.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts +0 -50
- package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js +0 -185
- package/node_modules/@earendil-works/pi-tui/dist/components/settings-list.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts +0 -12
- package/node_modules/@earendil-works/pi-tui/dist/components/spacer.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js +0 -23
- package/node_modules/@earendil-works/pi-tui/dist/components/spacer.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts +0 -19
- package/node_modules/@earendil-works/pi-tui/dist/components/text.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/text.js +0 -89
- package/node_modules/@earendil-works/pi-tui/dist/components/text.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts +0 -13
- package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js +0 -51
- package/node_modules/@earendil-works/pi-tui/dist/components/truncated-text.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/editor-component.d.ts +0 -39
- package/node_modules/@earendil-works/pi-tui/dist/editor-component.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/editor-component.js +0 -2
- package/node_modules/@earendil-works/pi-tui/dist/editor-component.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts +0 -16
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js +0 -110
- package/node_modules/@earendil-works/pi-tui/dist/fuzzy.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts +0 -23
- package/node_modules/@earendil-works/pi-tui/dist/index.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/index.js +0 -32
- package/node_modules/@earendil-works/pi-tui/dist/index.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts +0 -193
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.js +0 -174
- package/node_modules/@earendil-works/pi-tui/dist/keybindings.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts +0 -184
- package/node_modules/@earendil-works/pi-tui/dist/keys.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/keys.js +0 -1173
- package/node_modules/@earendil-works/pi-tui/dist/keys.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts +0 -28
- package/node_modules/@earendil-works/pi-tui/dist/kill-ring.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js +0 -44
- package/node_modules/@earendil-works/pi-tui/dist/kill-ring.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts +0 -3
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js +0 -53
- package/node_modules/@earendil-works/pi-tui/dist/native-modifiers.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts +0 -50
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js +0 -361
- package/node_modules/@earendil-works/pi-tui/dist/stdin-buffer.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts +0 -90
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js +0 -366
- package/node_modules/@earendil-works/pi-tui/dist/terminal-image.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts +0 -113
- package/node_modules/@earendil-works/pi-tui/dist/terminal.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js +0 -472
- package/node_modules/@earendil-works/pi-tui/dist/terminal.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts +0 -227
- package/node_modules/@earendil-works/pi-tui/dist/tui.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/tui.js +0 -1106
- package/node_modules/@earendil-works/pi-tui/dist/tui.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts +0 -17
- package/node_modules/@earendil-works/pi-tui/dist/undo-stack.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js +0 -25
- package/node_modules/@earendil-works/pi-tui/dist/undo-stack.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts +0 -84
- package/node_modules/@earendil-works/pi-tui/dist/utils.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/utils.js +0 -1029
- package/node_modules/@earendil-works/pi-tui/dist/utils.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts +0 -25
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.d.ts.map +0 -1
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js +0 -96
- package/node_modules/@earendil-works/pi-tui/dist/word-navigation.js.map +0 -1
- package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/node_modules/@earendil-works/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/node_modules/@earendil-works/pi-tui/package.json +0 -47
- package/node_modules/get-east-asian-width/index.d.ts +0 -60
- package/node_modules/get-east-asian-width/index.js +0 -30
- package/node_modules/get-east-asian-width/license +0 -9
- package/node_modules/get-east-asian-width/lookup-data.js +0 -21
- package/node_modules/get-east-asian-width/lookup.js +0 -138
- package/node_modules/get-east-asian-width/package.json +0 -71
- package/node_modules/get-east-asian-width/readme.md +0 -65
- package/node_modules/get-east-asian-width/utilities.js +0 -24
- package/node_modules/marked/LICENSE.md +0 -44
- package/node_modules/marked/README.md +0 -106
- package/node_modules/marked/bin/main.js +0 -282
- package/node_modules/marked/bin/marked.js +0 -15
- package/node_modules/marked/lib/marked.cjs +0 -2211
- package/node_modules/marked/lib/marked.cjs.map +0 -7
- package/node_modules/marked/lib/marked.d.cts +0 -728
- package/node_modules/marked/lib/marked.d.ts +0 -728
- package/node_modules/marked/lib/marked.esm.js +0 -2189
- package/node_modules/marked/lib/marked.esm.js.map +0 -7
- package/node_modules/marked/lib/marked.umd.js +0 -2213
- package/node_modules/marked/lib/marked.umd.js.map +0 -7
- package/node_modules/marked/man/marked.1 +0 -111
- package/node_modules/marked/man/marked.1.md +0 -92
- package/node_modules/marked/marked.min.js +0 -69
- package/node_modules/marked/package.json +0 -111
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/web-access",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.26-alpha.10",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction. Fork of: https://github.com/nicobailon/pi-web-access",
|
|
6
6
|
"contributors": [
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"@bastani/atomic": "*",
|
|
33
|
-
"@earendil-works/pi-tui": "
|
|
33
|
+
"@earendil-works/pi-tui": "^0.78.1"
|
|
34
34
|
},
|
|
35
35
|
"peerDependenciesMeta": {
|
|
36
36
|
"@bastani/atomic": {
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import type { ToolDefinition } from "@bastani/atomic";
|
|
2
|
+
import { Box, Text } from "@mariozechner/pi-tui";
|
|
3
|
+
import { formatSeconds } from "./utils.js";
|
|
4
|
+
|
|
5
|
+
type ToolResultRenderer = NonNullable<ToolDefinition["renderResult"]>;
|
|
6
|
+
type ToolRenderResultArgs = Parameters<ToolResultRenderer>;
|
|
7
|
+
type ToolRenderResult = ReturnType<ToolResultRenderer>;
|
|
8
|
+
type RenderedResult = ToolRenderResultArgs[0];
|
|
9
|
+
type TextContentBlock = Extract<RenderedResult["content"][number], { type: "text" }>;
|
|
10
|
+
|
|
11
|
+
type QueryDetail = {
|
|
12
|
+
query: string;
|
|
13
|
+
provider: string | null;
|
|
14
|
+
answer: string | null;
|
|
15
|
+
sources: Array<{ title: string; url: string }>;
|
|
16
|
+
error: string | null;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type WebSearchResultDetails = {
|
|
20
|
+
queryCount?: number;
|
|
21
|
+
successfulQueries?: number;
|
|
22
|
+
totalResults?: number;
|
|
23
|
+
error?: string;
|
|
24
|
+
fetchId?: string;
|
|
25
|
+
fetchUrls?: string[];
|
|
26
|
+
phase?: string;
|
|
27
|
+
progress?: number;
|
|
28
|
+
currentQuery?: string;
|
|
29
|
+
curated?: boolean;
|
|
30
|
+
curatedFrom?: number;
|
|
31
|
+
curatedQueries?: QueryDetail[];
|
|
32
|
+
cancelled?: boolean;
|
|
33
|
+
cancelReason?: string;
|
|
34
|
+
summary?: {
|
|
35
|
+
text: string;
|
|
36
|
+
workflow: "summary-review";
|
|
37
|
+
model: string | null;
|
|
38
|
+
durationMs: number;
|
|
39
|
+
tokenEstimate: number;
|
|
40
|
+
fallbackUsed: boolean;
|
|
41
|
+
fallbackReason?: string;
|
|
42
|
+
edited?: boolean;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
type CodeSearchResultDetails = {
|
|
47
|
+
query?: string;
|
|
48
|
+
maxTokens?: number;
|
|
49
|
+
error?: string;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
type FetchContentResultDetails = {
|
|
53
|
+
urlCount?: number;
|
|
54
|
+
successful?: number;
|
|
55
|
+
totalChars?: number;
|
|
56
|
+
error?: string;
|
|
57
|
+
title?: string;
|
|
58
|
+
truncated?: boolean;
|
|
59
|
+
responseId?: string;
|
|
60
|
+
phase?: string;
|
|
61
|
+
progress?: number;
|
|
62
|
+
hasImage?: boolean;
|
|
63
|
+
imageCount?: number;
|
|
64
|
+
prompt?: string;
|
|
65
|
+
timestamp?: string;
|
|
66
|
+
frames?: number;
|
|
67
|
+
duration?: number;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
type GetSearchContentResultDetails = {
|
|
71
|
+
error?: string;
|
|
72
|
+
query?: string;
|
|
73
|
+
url?: string;
|
|
74
|
+
title?: string;
|
|
75
|
+
resultCount?: number;
|
|
76
|
+
contentLength?: number;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
function isTextContentBlock(block: RenderedResult["content"][number]): block is TextContentBlock {
|
|
80
|
+
return block.type === "text";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function firstTextContent(result: RenderedResult): string {
|
|
84
|
+
return result.content.find(isTextContentBlock)?.text ?? "";
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function progressBar(progress: number): string {
|
|
88
|
+
const filled = Math.floor(progress * 10);
|
|
89
|
+
return "\u2588".repeat(filled) + "\u2591".repeat(10 - filled);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export const renderWebSearchResult: ToolResultRenderer = (result, { expanded, isPartial }, theme) => {
|
|
93
|
+
const details = result.details as WebSearchResultDetails | undefined;
|
|
94
|
+
|
|
95
|
+
if (isPartial) {
|
|
96
|
+
if (details?.phase === "curating") {
|
|
97
|
+
return new Text(theme.fg("accent", "waiting for summary approval..."), 0, 0);
|
|
98
|
+
}
|
|
99
|
+
if (details?.phase === "searching") {
|
|
100
|
+
const progress = details?.progress ?? 0;
|
|
101
|
+
const bar = progressBar(progress);
|
|
102
|
+
const query = details?.currentQuery || "";
|
|
103
|
+
const display = query.length > 40 ? query.slice(0, 37) + "..." : query;
|
|
104
|
+
return new Text(theme.fg("accent", `[${bar}] ${display}`), 0, 0);
|
|
105
|
+
}
|
|
106
|
+
const progress = details?.progress ?? 0;
|
|
107
|
+
const bar = progressBar(progress);
|
|
108
|
+
return new Text(theme.fg("accent", `[${bar}] ${details?.phase || "searching"}`), 0, 0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (details?.error) {
|
|
112
|
+
return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
let statusLine: string;
|
|
116
|
+
const queryInfo = details?.queryCount === 1 ? "" : `${details?.successfulQueries}/${details?.queryCount} queries, `;
|
|
117
|
+
statusLine = theme.fg("success", `${queryInfo}${details?.totalResults ?? 0} sources`);
|
|
118
|
+
if (details?.curated && details?.curatedFrom) {
|
|
119
|
+
statusLine += theme.fg("muted", ` (${details.queryCount}/${details.curatedFrom} queries curated)`);
|
|
120
|
+
}
|
|
121
|
+
if (details?.fetchId && details?.fetchUrls) {
|
|
122
|
+
statusLine += theme.fg("muted", ` (fetching ${details.fetchUrls.length} URLs)`);
|
|
123
|
+
} else if (details?.fetchId) {
|
|
124
|
+
statusLine += theme.fg("muted", " (content ready)");
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Build expanded lines first so collapsed view can reference total count
|
|
128
|
+
const lines = [statusLine];
|
|
129
|
+
if (details?.summary?.text) {
|
|
130
|
+
lines.push("");
|
|
131
|
+
lines.push(theme.fg("accent", `── Summary (${details.summary.workflow}) ` + "─".repeat(32)));
|
|
132
|
+
lines.push("");
|
|
133
|
+
for (const line of details.summary.text.split("\n")) {
|
|
134
|
+
lines.push(` ${line}`);
|
|
135
|
+
}
|
|
136
|
+
lines.push("");
|
|
137
|
+
const metaParts = [
|
|
138
|
+
details.summary.model ? `model=${details.summary.model}` : "model=deterministic",
|
|
139
|
+
`duration=${details.summary.durationMs}ms`,
|
|
140
|
+
`tokens~${details.summary.tokenEstimate}`,
|
|
141
|
+
details.summary.fallbackUsed ? "fallback=true" : "fallback=false",
|
|
142
|
+
details.summary.edited ? "edited=true" : "edited=false",
|
|
143
|
+
];
|
|
144
|
+
if (details.summary.fallbackReason) {
|
|
145
|
+
metaParts.push(`reason=${details.summary.fallbackReason}`);
|
|
146
|
+
}
|
|
147
|
+
lines.push(theme.fg("dim", " " + metaParts.join(" · ")));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const queryDetails = details?.curatedQueries;
|
|
151
|
+
if (queryDetails?.length) {
|
|
152
|
+
const kept = queryDetails.length;
|
|
153
|
+
const from = details?.curatedFrom ?? kept;
|
|
154
|
+
lines.push("");
|
|
155
|
+
lines.push(theme.fg("accent", `\u2500\u2500 Curated Results (${kept} of ${from} queries kept) ` + "\u2500".repeat(24)));
|
|
156
|
+
|
|
157
|
+
for (const cq of queryDetails) {
|
|
158
|
+
lines.push("");
|
|
159
|
+
const dq = cq.query.length > 65 ? cq.query.slice(0, 62) + "..." : cq.query;
|
|
160
|
+
const providerLabel = cq.provider ? ` (${cq.provider})` : "";
|
|
161
|
+
lines.push(theme.fg("accent", ` "${dq}"${providerLabel}`));
|
|
162
|
+
|
|
163
|
+
if (cq.error) {
|
|
164
|
+
lines.push(theme.fg("error", ` ${cq.error}`));
|
|
165
|
+
} else if (cq.answer) {
|
|
166
|
+
lines.push("");
|
|
167
|
+
for (const line of cq.answer.split("\n")) {
|
|
168
|
+
lines.push(` ${line}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (cq.sources.length > 0) {
|
|
173
|
+
lines.push("");
|
|
174
|
+
for (const s of cq.sources) {
|
|
175
|
+
const domain = s.url.replace(/^https?:\/\//, "").replace(/\/.*$/, "");
|
|
176
|
+
const title = s.title.length > 50 ? s.title.slice(0, 47) + "..." : s.title;
|
|
177
|
+
lines.push(theme.fg("muted", ` \u25b8 ${title}`) + theme.fg("dim", ` \u00b7 ${domain}`));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
lines.push("");
|
|
182
|
+
} else {
|
|
183
|
+
const textContent = firstTextContent(result);
|
|
184
|
+
const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
|
|
185
|
+
for (const line of preview.split("\n")) {
|
|
186
|
+
lines.push(theme.fg("dim", line));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (details?.fetchUrls && details.fetchUrls.length > 0) {
|
|
191
|
+
if (details.curated) {
|
|
192
|
+
lines.push(theme.fg("muted", `Fetching ${details.fetchUrls.length} URLs in background`));
|
|
193
|
+
} else {
|
|
194
|
+
lines.push(theme.fg("muted", "Fetching:"));
|
|
195
|
+
for (const u of details.fetchUrls.slice(0, 5)) {
|
|
196
|
+
const display = u.length > 60 ? u.slice(0, 57) + "..." : u;
|
|
197
|
+
lines.push(theme.fg("dim", " " + display));
|
|
198
|
+
}
|
|
199
|
+
if (details.fetchUrls.length > 5) {
|
|
200
|
+
lines.push(theme.fg("dim", ` ... and ${details.fetchUrls.length - 5} more`));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const totalLines = lines.length;
|
|
206
|
+
|
|
207
|
+
if (!expanded) {
|
|
208
|
+
const box = new Box(1, 0, (t) => theme.bg("toolSuccessBg", t));
|
|
209
|
+
box.addChild(new Text(statusLine, 0, 0));
|
|
210
|
+
|
|
211
|
+
let collapsedLines = 1; // statusLine
|
|
212
|
+
const summaryPreview = details?.summary?.text?.trim() || "";
|
|
213
|
+
if (summaryPreview) {
|
|
214
|
+
const preview = summaryPreview.length > 120 ? summaryPreview.slice(0, 117) + "..." : summaryPreview;
|
|
215
|
+
box.addChild(new Text(theme.fg("dim", preview), 0, 0));
|
|
216
|
+
collapsedLines++;
|
|
217
|
+
} else if (details?.curatedQueries?.length) {
|
|
218
|
+
for (const cq of details.curatedQueries.slice(0, 3)) {
|
|
219
|
+
const dq = cq.query.length > 55 ? cq.query.slice(0, 52) + "..." : cq.query;
|
|
220
|
+
const srcCount = cq.sources?.length ?? 0;
|
|
221
|
+
const suffix = cq.error ? theme.fg("error", " (error)") : theme.fg("dim", ` · ${srcCount} sources`);
|
|
222
|
+
box.addChild(new Text(theme.fg("accent", ` "${dq}"`) + suffix, 0, 0));
|
|
223
|
+
collapsedLines++;
|
|
224
|
+
}
|
|
225
|
+
if (details.curatedQueries.length > 3) {
|
|
226
|
+
box.addChild(new Text(theme.fg("dim", ` ... and ${details.curatedQueries.length - 3} more`), 0, 0));
|
|
227
|
+
collapsedLines++;
|
|
228
|
+
}
|
|
229
|
+
} else {
|
|
230
|
+
const textContent = firstTextContent(result);
|
|
231
|
+
const firstContentLine = textContent.split("\n").find(l => {
|
|
232
|
+
const t = l.trim();
|
|
233
|
+
return t && !t.startsWith("[") && !t.startsWith("#") && !t.startsWith("---");
|
|
234
|
+
});
|
|
235
|
+
const fallbackLine = (firstContentLine?.trim() || "").replace(/\*\*/g, "");
|
|
236
|
+
if (fallbackLine) {
|
|
237
|
+
const preview = fallbackLine.length > 120 ? fallbackLine.slice(0, 117) + "..." : fallbackLine;
|
|
238
|
+
box.addChild(new Text(theme.fg("dim", preview), 0, 0));
|
|
239
|
+
collapsedLines++;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const moreLines = Math.max(0, totalLines - collapsedLines);
|
|
243
|
+
if (moreLines > 0) {
|
|
244
|
+
box.addChild(new Text(theme.fg("muted", `\n... (${moreLines} more lines, ${totalLines} total, CTRL+O Expand)`), 0, 0));
|
|
245
|
+
}
|
|
246
|
+
return box;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return new Text(lines.join("\n"), 0, 0);
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
export const renderCodeSearchResult: ToolResultRenderer = (result, { expanded }, theme) => {
|
|
253
|
+
const details = result.details as CodeSearchResultDetails | undefined;
|
|
254
|
+
if (details?.error) {
|
|
255
|
+
return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const summary = theme.fg("success", "code context returned") +
|
|
259
|
+
theme.fg("muted", ` (${details?.maxTokens ?? 5000} tokens max)`);
|
|
260
|
+
if (!expanded) return new Text(summary, 0, 0);
|
|
261
|
+
|
|
262
|
+
const textContent = firstTextContent(result);
|
|
263
|
+
const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
|
|
264
|
+
return new Text(summary + "\n" + theme.fg("dim", preview), 0, 0);
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
export const renderFetchContentResult: ToolResultRenderer = (result, { expanded, isPartial }, theme) => {
|
|
268
|
+
const details = result.details as FetchContentResultDetails | undefined;
|
|
269
|
+
|
|
270
|
+
if (isPartial) {
|
|
271
|
+
const progress = details?.progress ?? 0;
|
|
272
|
+
const bar = progressBar(progress);
|
|
273
|
+
return new Text(theme.fg("accent", `[${bar}] ${details?.phase || "fetching"}`), 0, 0);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (details?.error) {
|
|
277
|
+
return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (details?.urlCount === 1) {
|
|
281
|
+
const title = details?.title || "Untitled";
|
|
282
|
+
const imgCount = details?.imageCount ?? (details?.hasImage ? 1 : 0);
|
|
283
|
+
const imageBadge = imgCount > 1
|
|
284
|
+
? theme.fg("accent", ` [${imgCount} images]`)
|
|
285
|
+
: imgCount === 1
|
|
286
|
+
? theme.fg("accent", " [image]")
|
|
287
|
+
: "";
|
|
288
|
+
let statusLine = theme.fg("success", title) + theme.fg("muted", ` (${details?.totalChars ?? 0} chars)`) + imageBadge;
|
|
289
|
+
if (details?.truncated) {
|
|
290
|
+
statusLine += theme.fg("warning", " [truncated]");
|
|
291
|
+
}
|
|
292
|
+
if (typeof details?.duration === "number") {
|
|
293
|
+
statusLine += theme.fg("muted", ` | ${formatSeconds(Math.floor(details.duration))} total`);
|
|
294
|
+
}
|
|
295
|
+
const textContent = firstTextContent(result);
|
|
296
|
+
if (!expanded) {
|
|
297
|
+
const brief = textContent.length > 200 ? textContent.slice(0, 200) + "..." : textContent;
|
|
298
|
+
return new Text(statusLine + "\n" + theme.fg("dim", brief), 0, 0);
|
|
299
|
+
}
|
|
300
|
+
const lines = [statusLine];
|
|
301
|
+
if (details?.prompt) {
|
|
302
|
+
const display = details.prompt.length > 250 ? details.prompt.slice(0, 247) + "..." : details.prompt;
|
|
303
|
+
lines.push(theme.fg("dim", ` prompt: "${display}"`));
|
|
304
|
+
}
|
|
305
|
+
if (details?.timestamp) {
|
|
306
|
+
lines.push(theme.fg("dim", ` timestamp: ${details.timestamp}`));
|
|
307
|
+
}
|
|
308
|
+
if (typeof details?.frames === "number") {
|
|
309
|
+
lines.push(theme.fg("dim", ` frames: ${details.frames}`));
|
|
310
|
+
}
|
|
311
|
+
const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
|
|
312
|
+
lines.push(theme.fg("dim", preview));
|
|
313
|
+
return new Text(lines.join("\n"), 0, 0);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
const countColor = (details?.successful ?? 0) > 0 ? "success" : "error";
|
|
317
|
+
const statusLine = theme.fg(countColor, `${details?.successful}/${details?.urlCount} URLs`) + theme.fg("muted", " (content stored)");
|
|
318
|
+
if (!expanded) {
|
|
319
|
+
return new Text(statusLine, 0, 0);
|
|
320
|
+
}
|
|
321
|
+
const textContent = firstTextContent(result);
|
|
322
|
+
const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
|
|
323
|
+
return new Text(statusLine + "\n" + theme.fg("dim", preview), 0, 0);
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
export const renderGetSearchContentResult: ToolResultRenderer = (result, { expanded }, theme) => {
|
|
327
|
+
const details = result.details as GetSearchContentResultDetails | undefined;
|
|
328
|
+
|
|
329
|
+
if (details?.error) {
|
|
330
|
+
return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
let statusLine: string;
|
|
334
|
+
if (details?.query) {
|
|
335
|
+
statusLine = theme.fg("success", `"${details.query}"`) + theme.fg("muted", ` (${details.resultCount} results)`);
|
|
336
|
+
} else {
|
|
337
|
+
statusLine = theme.fg("success", details?.title || "Content") + theme.fg("muted", ` (${details?.contentLength ?? 0} chars)`);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
if (!expanded) {
|
|
341
|
+
return new Text(statusLine, 0, 0);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const textContent = firstTextContent(result);
|
|
345
|
+
const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
|
|
346
|
+
return new Text(statusLine + "\n" + theme.fg("dim", preview), 0, 0);
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
export function renderWebAccessToolResult(name: string, args: ToolRenderResultArgs): ToolRenderResult {
|
|
350
|
+
switch (name) {
|
|
351
|
+
case "web_search":
|
|
352
|
+
return renderWebSearchResult(...args);
|
|
353
|
+
case "code_search":
|
|
354
|
+
return renderCodeSearchResult(...args);
|
|
355
|
+
case "fetch_content":
|
|
356
|
+
return renderFetchContentResult(...args);
|
|
357
|
+
case "get_search_content":
|
|
358
|
+
return renderGetSearchContentResult(...args);
|
|
359
|
+
default: {
|
|
360
|
+
const theme = args[2];
|
|
361
|
+
return new Text(theme.fg("error", `Result renderer not found: ${name}`), 0, 0);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
@@ -6,6 +6,81 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.8.26-alpha.10] - 2026-06-08
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Bumped package version for the Atomic 0.8.26-alpha.10 prerelease.
|
|
14
|
+
|
|
15
|
+
## [0.8.26-alpha.9] - 2026-06-07
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Bumped package version for the Atomic 0.8.26-alpha.9 prerelease.
|
|
20
|
+
|
|
21
|
+
## [0.8.26-alpha.8] - 2026-06-07
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Updated workflow-stage chat so `/compact` is the no-argument compaction command and `/context-compact` is no longer handled locally.
|
|
26
|
+
|
|
27
|
+
## [0.8.26-alpha.7] - 2026-06-07
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
- Refined bundled workflow prompts to keep natural instructions inside meaningful XML sections while removing redundant wrapper noise.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- Fixed the builtin `goal` and `ralph` workflows to fork looped worker/orchestrator-stage sessions from their matching prior iteration, preserving accumulated context while keeping reviewer stages independent ([#1275](https://github.com/bastani-inc/atomic/issues/1275)).
|
|
36
|
+
- Fixed workflow completion gates to rely on structured decision fields instead of manual text/regex heuristics in `goal` and `open-claude-design`.
|
|
37
|
+
|
|
38
|
+
## [0.8.26-alpha.6] - 2026-06-06
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Bumped package version for the Atomic 0.8.26-alpha.6 prerelease.
|
|
43
|
+
|
|
44
|
+
## [0.8.26-alpha.5] - 2026-06-06
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- Fixed the workflow global tool-event hook ignoring unscoped parent-session prompts instead of attributing them to running stages, preventing false `awaiting_input` / "needs attention" states from unrelated `ask_user_question` calls ([#1261](https://github.com/bastani-inc/atomic/issues/1261)).
|
|
49
|
+
|
|
50
|
+
## [0.8.26-alpha.4] - 2026-06-05
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
|
|
54
|
+
- Upgraded builtin workflow fallback model tiers so degraded runs land on stronger models: bumped `github-copilot/claude-opus-4.8` fallbacks from `:medium` to `:xhigh` in `deep-research-codebase` and `ralph`, replaced `claude-sonnet-4-8`/`4.8` fallbacks with `claude-opus-4-8`/`4.8` in the `goal` and `ralph` runner configs, and raised `claude-sonnet-4-6`/`4.6` fallbacks from `:medium` to `:high` in `open-claude-design` ([#1259](https://github.com/bastani-inc/atomic/issues/1259)).
|
|
55
|
+
|
|
56
|
+
## [0.8.26-alpha.3] - 2026-06-05
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- Changed the builtin `ralph` workflow to include the workflow current working directory in every stage prompt so planner, implementation, simplification, review, and PR handoff stages keep repository work anchored to the workflow checkout.
|
|
61
|
+
- Changed the builtin `ralph` workflow to skip pull-request creation by default unless `create_pr=true`, omit `pr_report` when disabled, and keep provider-aware PR/MR/review creation instructions in the final stage ([#1255](https://github.com/bastani-inc/atomic/issues/1255)).
|
|
62
|
+
|
|
63
|
+
## [0.8.26-alpha.2] - 2026-06-05
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
- Updated the `research-codebase` skill to capture a `breaking_changes_allowed` compatibility posture before research fanout, carry it through sub-agent prompts, and record it in research documents so downstream specs and workflows do not preserve legacy APIs by default when breaking changes are allowed ([#1225](https://github.com/bastani-inc/atomic/issues/1225)).
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
|
|
71
|
+
- Fixed stage-local workflow HIL `input` and `editor` prompts losing draft text across Ctrl+D detach/reattach; drafts are kept live-only in memory and cleared when the prompt or run/stage exits ([#1179](https://github.com/bastani-inc/atomic/issues/1179)).
|
|
72
|
+
- Fixed workflow worktree Git commands to strip ambient repository-local Git environment variables before inspecting or creating targeted worktrees.
|
|
73
|
+
- Suppressed intermediate model fallback failure warnings from successful workflow stages while preserving final failures and raw per-attempt diagnostics ([#1226](https://github.com/bastani-inc/atomic/issues/1226)).
|
|
74
|
+
|
|
75
|
+
## [0.8.26-alpha.1] - 2026-06-05
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
|
|
79
|
+
- Fixed the inline-form "snapshot lost" renderer and the `workflow.run.start`/`workflow.run.end` banner renderers returning bare strings, which crashed the host TUI with `child.render is not a function` when resuming a session containing persisted workflow custom messages. These renderers now return proper render components ([#1236](https://github.com/bastani-inc/atomic/issues/1236)).
|
|
80
|
+
- Fixed the workflow input form (the `/workflow <name>` argument selector) leaking into model context: spawning the picker and exiting without running the workflow no longer sends the form to the LLM. The input-form card is now emitted with `excludeFromContext` since it is transient UI, not conversation.
|
|
81
|
+
- Fixed the workflow input widget re-rendering in chat after `/resume`. Inline-form state is now cleared on `session_start`, and a rehydrated `workflows:input-form` card whose backing state is gone now renders nothing (returns `null`) instead of a stale form or "snapshot lost" placeholder.
|
|
82
|
+
- Stage sessions now emit `session_shutdown` before `dispose()` (mirroring the host `AgentSessionRuntime` teardown) so bound extensions receive a graceful shutdown signal instead of being silently invalidated. This stops disposed stage sessions from leaking child MCP servers and from triggering spurious stale-context "MCP initialization failed" errors when an extension's deferred `session_start` work races with stage disposal.
|
|
83
|
+
|
|
9
84
|
## [0.8.25] - 2026-06-04
|
|
10
85
|
|
|
11
86
|
### Changed
|
|
@@ -587,20 +587,22 @@ Child workflow outputs: `result`, `status`, `approved`, `goal_id`, `objective`,
|
|
|
587
587
|
|
|
588
588
|
### `ralph`
|
|
589
589
|
|
|
590
|
-
Plan → orchestrate → simplify → review
|
|
590
|
+
Plan → orchestrate → simplify → review workflow with optional final-stage PR handoff: write an RFC-style technical design document under `specs/`, delegate implementation through sub-agents, simplify recent changes, run parallel reviewers, and iterate until approval or the loop limit. Ralph skips PR creation by default; prompt text alone does not opt in. Pass `create_pr=true` to authorize only the final `pull-request` stage to inspect provider credentials and attempt provider-appropriate PR/MR/review creation (for example GitHub `gh`, Azure Repos `az repos pr create`, or Sapling/Phabricator tooling). Ralph's own PR-creation instructions live in that final stage. Reviewers inspect repository infrastructure directly as needed; Ralph no longer runs separate `infra-*` discovery stages.
|
|
591
591
|
|
|
592
592
|
```text
|
|
593
593
|
/workflow ralph prompt="Plan and migrate the database layer to Drizzle ORM" max_loops=3 base_branch=develop
|
|
594
|
+
/workflow ralph prompt="Plan and migrate the database layer to Drizzle ORM" max_loops=3 base_branch=develop create_pr=true
|
|
594
595
|
```
|
|
595
596
|
|
|
596
|
-
| Input
|
|
597
|
-
|
|
|
598
|
-
| `prompt`
|
|
599
|
-
| `max_loops` | `number`
|
|
600
|
-
| `base_branch` | `string`
|
|
601
|
-
| `git_worktree_dir` | `string`
|
|
597
|
+
| Input | Type | Required | Default | Description |
|
|
598
|
+
| ------------------ | --------- | -------- | ------------- | ------------------------------------------------------------- |
|
|
599
|
+
| `prompt` | `text` | ✓ | — | Task, feature request, issue summary, or spec path to plan, execute, refine, and review. |
|
|
600
|
+
| `max_loops` | `number` | — | `10` | Maximum plan/orchestrate/review iterations before completion or optional final handoff. |
|
|
601
|
+
| `base_branch` | `string` | — | `origin/main` | Branch reviewers and the optional final stage compare the current delta with; also used to create a missing worktree. |
|
|
602
|
+
| `git_worktree_dir` | `string` | — | `""` | Optional reusable Git worktree root. Empty runs in the invoking checkout; non-empty values run Ralph stages in the created/reused worktree. |
|
|
603
|
+
| `create_pr` | `boolean` | — | `false` | Safe-by-default PR creation flag. Omitted or `false` skips the final `pull-request` stage and omits `pr_report`; prompt text alone does not opt in, and only strict `true` authorizes the final `pull-request` stage to attempt provider-appropriate PR/MR/review creation. |
|
|
602
604
|
|
|
603
|
-
Child workflow outputs: `result`, `plan`, `plan_path`, `implementation_notes_path`, `
|
|
605
|
+
Child workflow outputs: `result`, `plan`, `plan_path`, `implementation_notes_path`, `approved`, `iterations_completed`, `review_report`, and `review_report_path`. `pr_report` is included only when `create_pr=true` and the final `pull-request` stage runs.
|
|
604
606
|
|
|
605
607
|
### `open-claude-design`
|
|
606
608
|
|
|
@@ -67,7 +67,10 @@ function codebaseSkillGuidance(
|
|
|
67
67
|
|
|
68
68
|
function taggedPrompt(sections: readonly PromptSection[]): string {
|
|
69
69
|
return sections
|
|
70
|
-
.map(([tag, content]) =>
|
|
70
|
+
.map(([tag, content]) => {
|
|
71
|
+
const trimmed = content.trim();
|
|
72
|
+
return `<${tag}>\n${trimmed}\n</${tag}>`;
|
|
73
|
+
})
|
|
71
74
|
.join("\n\n");
|
|
72
75
|
}
|
|
73
76
|
|
|
@@ -412,23 +415,23 @@ export default defineWorkflow("deep-research-codebase")
|
|
|
412
415
|
);
|
|
413
416
|
|
|
414
417
|
const plannerModelConfig = {
|
|
415
|
-
model: "openai/gpt-5.5:xhigh",
|
|
418
|
+
model: "openai-codex/gpt-5.5:xhigh",
|
|
416
419
|
fallbackModels: [
|
|
417
|
-
"openai-codex/gpt-5.5:xhigh",
|
|
418
420
|
"github-copilot/gpt-5.5:xhigh",
|
|
419
|
-
"
|
|
420
|
-
"github-copilot/claude-opus-4.8:
|
|
421
|
+
"openai/gpt-5.5:xhigh",
|
|
422
|
+
"github-copilot/claude-opus-4.8:xhigh",
|
|
423
|
+
"anthropic/claude-opus-4-8:xhigh"
|
|
421
424
|
],
|
|
422
425
|
excludedTools: ["ask_user_question"],
|
|
423
426
|
};
|
|
424
427
|
|
|
425
428
|
const explorerModelConfig = {
|
|
426
|
-
model: "openai/gpt-5.4-mini:low",
|
|
429
|
+
model: "openai-codex/gpt-5.4-mini:low",
|
|
427
430
|
fallbackModels: [
|
|
428
|
-
"openai-codex/gpt-5.4-mini:low",
|
|
429
431
|
"github-copilot/gpt-5.4-mini:low",
|
|
430
|
-
"
|
|
432
|
+
"openai/gpt-5.4-mini:low",
|
|
431
433
|
"github-copilot/claude-haiku-4.5:low",
|
|
434
|
+
"anthropic/claude-haiku-4-5:low",
|
|
432
435
|
],
|
|
433
436
|
excludedTools: ["ask_user_question"],
|
|
434
437
|
};
|