@bastani/atomic 0.9.21-alpha.1 → 0.9.21-alpha.2
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 +27 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +11 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +292 -60
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +11 -0
- package/dist/builtin/workflows/builtin/adversarial-verification.js +3 -3
- package/dist/builtin/workflows/builtin/{chunk-cw86srkf.js → chunk-632fxeb8.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-w18kbz63.js → chunk-94f8zfz1.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-kspvwc24.js → chunk-9cm2ckq2.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-jaj27rqc.js → chunk-a1ar035d.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-wh19f5ee.js → chunk-d3xhj946.js} +5 -4
- package/dist/builtin/workflows/builtin/{chunk-crw7q5g1.js → chunk-gyjck9z8.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-maqv731g.js → chunk-hj8mh07f.js} +10 -6
- package/dist/builtin/workflows/builtin/{chunk-0nrgfbag.js → chunk-kb7s3gx2.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-73c5tayt.js → chunk-kgn5wz1c.js} +19 -1
- package/dist/builtin/workflows/builtin/{chunk-2hak3b7g.js → chunk-nkj4qhj6.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-bzdvx2xr.js → chunk-r97ndfvt.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-vkmpdat4.js → chunk-wf876n16.js} +1 -1
- package/dist/builtin/workflows/builtin/classify-and-act.js +3 -3
- package/dist/builtin/workflows/builtin/fan-out-and-synthesize.js +3 -3
- package/dist/builtin/workflows/builtin/generate-and-filter.js +3 -3
- package/dist/builtin/workflows/builtin/goal.js +4 -4
- package/dist/builtin/workflows/builtin/index.js +12 -12
- package/dist/builtin/workflows/builtin/loop-until-done.js +3 -3
- package/dist/builtin/workflows/builtin/open-claude-design.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +4 -4
- package/dist/builtin/workflows/builtin/steering-context.js +1 -1
- package/dist/builtin/workflows/builtin/tournament.js +3 -3
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +40 -11
- package/dist/builtin/workflows/src/index.js +9 -3
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +6 -1
- package/dist/cli/auth-command.js +5 -0
- package/dist/cli/auth-command.js.map +1 -1
- package/dist/cli/credential-print.js +2 -0
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/cli/experimental/command.js +5 -2
- package/dist/cli/experimental/command.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +9 -4
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +4 -4
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts +4 -4
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +38 -15
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +14 -9
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +4 -1
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +140 -95
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage-backends.js +2 -3
- package/dist/core/auth-storage-backends.js.map +1 -1
- package/dist/core/auth-storage.js +4 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/builtin-resource-loader.js +9 -0
- package/dist/core/builtin-resource-loader.js.map +1 -1
- package/dist/core/cache-warmer.js +8 -1
- package/dist/core/cache-warmer.js.map +1 -1
- package/dist/core/compaction/range-planner.js +6 -0
- package/dist/core/compaction/range-planner.js.map +1 -1
- package/dist/core/execution-model-router.d.ts +13 -3
- package/dist/core/execution-model-router.d.ts.map +1 -1
- package/dist/core/execution-model-router.js +227 -131
- package/dist/core/execution-model-router.js.map +1 -1
- package/dist/core/export-html/template-js/entries-navigation.js +16 -6
- package/dist/core/export-html/template-js/initialization.js +34 -11
- package/dist/core/export-html/template.css +10 -0
- package/dist/core/export-html/template.js +50 -17
- package/dist/core/extensions/context-types.d.ts +2 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/host-input.js +8 -4
- package/dist/core/extensions/host-input.js.map +1 -1
- package/dist/core/extensions/reactive-widget.js +1 -0
- package/dist/core/extensions/reactive-widget.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +1 -0
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +4 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +1 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +48 -30
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +1 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/workflow-activity-hub.js +9 -7
- package/dist/core/extensions/workflow-activity-hub.js.map +1 -1
- package/dist/core/footer-data-provider.js +24 -23
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/keybindings.js +1 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/mandatory-resource-loader.js +4 -1
- package/dist/core/mandatory-resource-loader.js.map +1 -1
- package/dist/core/model-config.js +2 -0
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.js +1 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/{model-routing-task.d.ts → model-routing-bytes.d.ts} +1 -4
- package/dist/core/model-routing-bytes.d.ts.map +1 -0
- package/dist/core/model-routing-bytes.js +33 -0
- package/dist/core/model-routing-bytes.js.map +1 -0
- package/dist/core/model-routing-candidates.d.ts +42 -0
- package/dist/core/model-routing-candidates.d.ts.map +1 -0
- package/dist/core/model-routing-candidates.js +309 -0
- package/dist/core/model-routing-candidates.js.map +1 -0
- package/dist/core/model-routing-constraints.d.ts +4 -0
- package/dist/core/model-routing-constraints.d.ts.map +1 -1
- package/dist/core/model-routing-constraints.js +13 -1
- package/dist/core/model-routing-constraints.js.map +1 -1
- package/dist/core/model-routing-debug.d.ts +9 -0
- package/dist/core/model-routing-debug.d.ts.map +1 -0
- package/dist/core/model-routing-debug.js +14 -0
- package/dist/core/model-routing-debug.js.map +1 -0
- package/dist/core/model-routing-evals.d.ts +50 -0
- package/dist/core/model-routing-evals.d.ts.map +1 -0
- package/dist/core/model-routing-evals.js +190 -0
- package/dist/core/model-routing-evals.js.map +1 -0
- package/dist/core/model-routing-needs.d.ts +75 -0
- package/dist/core/model-routing-needs.d.ts.map +1 -0
- package/dist/core/model-routing-needs.js +176 -0
- package/dist/core/model-routing-needs.js.map +1 -0
- package/dist/core/model-runtime-streaming.js +3 -0
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/model-runtime.js +26 -14
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.js +2 -3
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/output-guard.js +1 -0
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager-paths.d.ts +2 -1
- package/dist/core/package-manager-paths.d.ts.map +1 -1
- package/dist/core/package-manager-paths.js +4 -3
- package/dist/core/package-manager-paths.js.map +1 -1
- package/dist/core/package-manager.js +1 -0
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader-assets.d.ts.map +1 -1
- package/dist/core/resource-loader-assets.js +9 -7
- package/dist/core/resource-loader-assets.js.map +1 -1
- package/dist/core/resource-loader-core.js +49 -0
- package/dist/core/resource-loader-core.js.map +1 -1
- package/dist/core/runtime-credentials.js +2 -1
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/session-cwd.js +1 -0
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-manager-archive.d.ts.map +1 -1
- package/dist/core/session-manager-archive.js +4 -2
- package/dist/core/session-manager-archive.js.map +1 -1
- package/dist/core/session-manager-core.js +11 -7
- package/dist/core/session-manager-core.js.map +1 -1
- package/dist/core/session-manager-storage.d.ts +10 -4
- package/dist/core/session-manager-storage.d.ts.map +1 -1
- package/dist/core/session-manager-storage.js +12 -6
- package/dist/core/session-manager-storage.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +2 -1
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +21 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-core.js +13 -7
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-storage.js +6 -0
- package/dist/core/settings-storage.js.map +1 -1
- package/dist/core/settings-types.d.ts +8 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/structured-output/index.d.ts.map +1 -1
- package/dist/core/structured-output/index.js +4 -1
- package/dist/core/structured-output/index.js.map +1 -1
- package/dist/core/structured-output/invalid-output.js +1 -0
- package/dist/core/structured-output/invalid-output.js.map +1 -1
- package/dist/core/tasks/agent-adapter.js +5 -3
- package/dist/core/tasks/agent-adapter.js.map +1 -1
- package/dist/core/tasks/child-command-owner.js +3 -7
- package/dist/core/tasks/child-command-owner.js.map +1 -1
- package/dist/core/tasks/completion.js +5 -1
- package/dist/core/tasks/completion.js.map +1 -1
- package/dist/core/tasks/owner-store.js +12 -8
- package/dist/core/tasks/owner-store.js.map +1 -1
- package/dist/core/tasks/supervisor.js +14 -35
- package/dist/core/tasks/supervisor.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/build-questionnaire.js +13 -4
- package/dist/core/tools/ask-user-question/state/build-questionnaire.js.map +1 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js +11 -1
- package/dist/core/tools/ask-user-question/state/questionnaire-session.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/chat-row-view.js +1 -0
- package/dist/core/tools/ask-user-question/view/components/chat-row-view.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js +1 -0
- package/dist/core/tools/ask-user-question/view/components/multi-select-view.js.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/preview/markdown-content-cache.js +5 -0
- package/dist/core/tools/ask-user-question/view/components/preview/markdown-content-cache.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js +2 -0
- package/dist/core/tools/ask-user-question/view/components/preview/preview-block-renderer.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js +13 -8
- package/dist/core/tools/ask-user-question/view/components/preview/preview-pane.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js +1 -0
- package/dist/core/tools/ask-user-question/view/components/submit-picker.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/tab-bar.js +1 -0
- package/dist/core/tools/ask-user-question/view/components/tab-bar.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js +30 -24
- package/dist/core/tools/ask-user-question/view/components/wrapping-select.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/dialog-builder.js +5 -0
- package/dist/core/tools/ask-user-question/view/dialog-builder.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/props-adapter.js +8 -0
- package/dist/core/tools/ask-user-question/view/props-adapter.js.map +1 -1
- package/dist/core/tools/ask-user-question/view/tab-content-strategy.js +4 -4
- package/dist/core/tools/ask-user-question/view/tab-content-strategy.js.map +1 -1
- package/dist/core/tools/bash.js +5 -8
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-batch.js +4 -0
- package/dist/core/tools/edit-batch.js.map +1 -1
- package/dist/core/tools/edit.js +2 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-coordinator.js +9 -0
- package/dist/core/tools/file-mutation-coordinator.js.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/hashline-engine/fs.js +1 -1
- package/dist/core/tools/hashline-engine/fs.js.map +1 -1
- package/dist/core/tools/hashline-engine/input.js +4 -0
- package/dist/core/tools/hashline-engine/input.js.map +1 -1
- package/dist/core/tools/hashline-engine/mismatch.js +6 -0
- package/dist/core/tools/hashline-engine/mismatch.js.map +1 -1
- package/dist/core/tools/hashline-engine/patcher.js +13 -0
- package/dist/core/tools/hashline-engine/patcher.js.map +1 -1
- package/dist/core/tools/hashline-engine/recovery.js +1 -0
- package/dist/core/tools/hashline-engine/recovery.js.map +1 -1
- package/dist/core/tools/output-accumulator.js +20 -13
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/persisted-output-file.js +9 -3
- package/dist/core/tools/persisted-output-file.js.map +1 -1
- package/dist/core/tools/resource-selectors.js +1 -0
- package/dist/core/tools/resource-selectors.js.map +1 -1
- package/dist/core/tools/write.js +1 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.js +1 -0
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/workflow-stage-admission.js +17 -10
- package/dist/core/workflow-stage-admission.js.map +1 -1
- package/dist/extensions/llama/client.js +2 -0
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/huggingface-ui.js +17 -9
- package/dist/extensions/llama/huggingface-ui.js.map +1 -1
- package/dist/extensions/llama/huggingface.js +2 -0
- package/dist/extensions/llama/huggingface.js.map +1 -1
- package/dist/extensions/llama/ui.js +11 -3
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/armin.js +10 -6
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +10 -2
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/atomic-working-status.js +10 -2
- package/dist/modes/interactive/components/atomic-working-status.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +9 -4
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +3 -0
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +4 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +2 -1
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +63 -31
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +8 -1
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/chat-transcript.js +24 -14
- package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.js +2 -1
- package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-list.js +15 -6
- package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +7 -1
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +2 -0
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +21 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +4 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +9 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +8 -6
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +1 -0
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +7 -1
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +8 -2
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +9 -1
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +4 -2
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +5 -2
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/host-input-form.js +13 -2
- package/dist/modes/interactive/components/host-input-form.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +9 -3
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +24 -12
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +12 -3
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/reserved-bottom-overlay.js +11 -2
- package/dist/modes/interactive/components/reserved-bottom-overlay.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +13 -8
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/scroll-widget.js +4 -0
- package/dist/modes/interactive/components/scroll-widget.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-header.js +11 -7
- package/dist/modes/interactive/components/session-selector-header.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-list.js +25 -12
- package/dist/modes/interactive/components/session-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +23 -15
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js +19 -1
- package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +1 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +1 -0
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +4 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/startup-identity.js +8 -3
- package/dist/modes/interactive/components/startup-identity.js.map +1 -1
- package/dist/modes/interactive/components/task-completion-message.js +2 -0
- package/dist/modes/interactive/components/task-completion-message.js.map +1 -1
- package/dist/modes/interactive/components/task-detail.js +2 -0
- package/dist/modes/interactive/components/task-detail.js.map +1 -1
- package/dist/modes/interactive/components/task-inspector.js +22 -12
- package/dist/modes/interactive/components/task-inspector.js.map +1 -1
- package/dist/modes/interactive/components/task-list.js +2 -0
- package/dist/modes/interactive/components/task-list.js.map +1 -1
- package/dist/modes/interactive/components/task-live-transcript.js +8 -3
- package/dist/modes/interactive/components/task-live-transcript.js.map +1 -1
- package/dist/modes/interactive/components/task-navigation.js +5 -2
- package/dist/modes/interactive/components/task-navigation.js.map +1 -1
- package/dist/modes/interactive/components/task-row.js +2 -0
- package/dist/modes/interactive/components/task-row.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +2 -0
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +7 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +25 -10
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/transcript-follow-indicator.js +1 -0
- package/dist/modes/interactive/components/transcript-follow-indicator.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-component.js +7 -3
- package/dist/modes/interactive/components/tree-selector-component.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-help.js +1 -0
- package/dist/modes/interactive/components/tree-selector-help.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-label-input.js +6 -2
- package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector-list.js +4 -0
- package/dist/modes/interactive/components/tree-selector-list.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +6 -0
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +6 -3
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.js +5 -0
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/working-status.js +1 -0
- package/dist/modes/interactive/components/working-status.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +2 -0
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +1 -0
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +162 -120
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-helpers.js +3 -0
- package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +0 -6
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-disclosure.js +0 -4
- package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
- package/dist/modes/interactive/interactive-resource-rendering.js +0 -12
- package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
- package/dist/modes/interactive/interactive-startup-chat-container.js +1 -4
- package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -1
- package/dist/modes/interactive/model-catalog-refresh.js +1 -3
- package/dist/modes/interactive/model-catalog-refresh.js.map +1 -1
- package/dist/modes/interactive/theme/color-utils.d.ts +5 -0
- package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -1
- package/dist/modes/interactive/theme/color-utils.js +11 -0
- package/dist/modes/interactive/theme/color-utils.js.map +1 -1
- package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/global-theme.js +4 -3
- package/dist/modes/interactive/theme/global-theme.js.map +1 -1
- package/dist/modes/interactive/theme/theme-class.js +7 -0
- package/dist/modes/interactive/theme/theme-class.js.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +9 -2
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive-engine/activity-watchdog.js +8 -3
- package/dist/modes/interactive-engine/activity-watchdog.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +12 -8
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-dialog-host.js +7 -3
- package/dist/modes/interactive-engine/engine-dialog-host.js.map +1 -1
- package/dist/modes/interactive-engine/engine-health.js +23 -13
- package/dist/modes/interactive-engine/engine-health.js.map +1 -1
- package/dist/modes/interactive-engine/engine-input-form.js +3 -2
- package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
- package/dist/modes/interactive-engine/engine-monitor.js +13 -1
- package/dist/modes/interactive-engine/engine-monitor.js.map +1 -1
- package/dist/modes/interactive-engine/engine-project-trust.js +2 -1
- package/dist/modes/interactive-engine/engine-project-trust.js.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js +7 -4
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/engine-session-picker.js +3 -2
- package/dist/modes/interactive-engine/engine-session-picker.js.map +1 -1
- package/dist/modes/interactive-engine/input-form-host.js +5 -1
- package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +37 -23
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-command-catalog.js +4 -3
- package/dist/modes/interactive-engine/remote-command-catalog.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +24 -12
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/interactive-engine/remote-frame-clamp.js +3 -3
- package/dist/modes/interactive-engine/remote-frame-clamp.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js +5 -4
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/interactive-engine/remote-queue-pause.js +3 -1
- package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js +24 -13
- package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
- package/dist/modes/interactive-engine/resource-readiness-error.js +1 -0
- package/dist/modes/interactive-engine/resource-readiness-error.js.map +1 -1
- package/dist/modes/interactive-engine/session-picker-host.js +5 -1
- package/dist/modes/interactive-engine/session-picker-host.js.map +1 -1
- package/dist/modes/interactive-engine/terminal-mode-controller.js +2 -1
- package/dist/modes/interactive-engine/terminal-mode-controller.js.map +1 -1
- package/dist/modes/rpc/queued-writer.js +13 -4
- package/dist/modes/rpc/queued-writer.js.map +1 -1
- package/dist/modes/rpc/rpc-bash-request-owners.js +2 -1
- package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +8 -4
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js +10 -3
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +35 -22
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +6 -6
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-event-buffer.js +3 -1
- package/dist/modes/rpc/rpc-event-buffer.js.map +1 -1
- package/dist/modes/rpc/rpc-generation-buffer.js +1 -3
- package/dist/modes/rpc/rpc-generation-buffer.js.map +1 -1
- package/dist/modes/rpc/rpc-keybindings-reload.js +4 -1
- package/dist/modes/rpc/rpc-keybindings-reload.js.map +1 -1
- package/dist/modes/rpc/rpc-output-buffer.js +3 -4
- package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
- package/dist/modes/rpc/rpc-pending-requests.js +1 -3
- package/dist/modes/rpc/rpc-pending-requests.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js +3 -1
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-resource-readiness.js +4 -5
- package/dist/modes/rpc/rpc-resource-readiness.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +15 -0
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-terminal-drain.js +3 -0
- package/dist/modes/rpc/rpc-terminal-drain.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +10 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/docs/models/evals.md +883 -39
- package/docs/models/model-selection.md +7 -8
- package/docs/rpc/examples.md +1 -1
- package/docs/rpc/protocol.md +9 -3
- package/docs/sdk/structured-decisions.md +1 -1
- package/docs/sdk.md +3 -3
- package/docs/settings.md +24 -3
- package/docs/subagents/reference.md +22 -4
- package/docs/subagents.md +2 -0
- package/docs/usage.md +3 -3
- package/docs/workflows/api-reference.md +1 -1
- package/docs/workflows/authoring.md +1 -7
- package/docs/workflows/builtins.md +1 -1
- package/docs/workflows/reliable-design.md +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +5 -5
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/rpc-client.ts +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/npm-shrinkwrap.json +70 -33
- package/package.json +6 -7
- package/dist/core/model-routing-task.d.ts.map +0 -1
- package/dist/core/model-routing-task.js +0 -120
- package/dist/core/model-routing-task.js.map +0 -1
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.9.21-alpha.
|
|
3
|
+
"version": "0.9.21-alpha.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@bastani/atomic",
|
|
9
|
-
"version": "0.9.21-alpha.
|
|
9
|
+
"version": "0.9.21-alpha.2",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@bastani/atomic-natives": "0.9.21-alpha.
|
|
13
|
-
"@bastani/pi-ai": "0.9.21-alpha.
|
|
12
|
+
"@bastani/atomic-natives": "0.9.21-alpha.2",
|
|
13
|
+
"@bastani/pi-ai": "0.9.21-alpha.2",
|
|
14
14
|
"@dbos-inc/dbos-sdk": "4.25.14",
|
|
15
15
|
"@earendil-works/pi-agent-core": "0.87.1",
|
|
16
16
|
"@earendil-works/pi-client": "0.87.1",
|
|
@@ -429,18 +429,18 @@
|
|
|
429
429
|
}
|
|
430
430
|
},
|
|
431
431
|
"node_modules/@bastani/atomic-natives": {
|
|
432
|
-
"version": "0.9.21-alpha.
|
|
433
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.21-alpha.
|
|
432
|
+
"version": "0.9.21-alpha.2",
|
|
433
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.21-alpha.2.tgz",
|
|
434
434
|
"license": "MIT",
|
|
435
435
|
"optionalDependencies": {
|
|
436
|
-
"@bastani/atomic-natives-darwin-arm64": "0.9.21-alpha.
|
|
437
|
-
"@bastani/atomic-natives-darwin-x64": "0.9.21-alpha.
|
|
438
|
-
"@bastani/atomic-natives-linux-arm64-gnu": "0.9.21-alpha.
|
|
439
|
-
"@bastani/atomic-natives-linux-arm64-musl": "0.9.21-alpha.
|
|
440
|
-
"@bastani/atomic-natives-linux-x64-gnu": "0.9.21-alpha.
|
|
441
|
-
"@bastani/atomic-natives-linux-x64-musl": "0.9.21-alpha.
|
|
442
|
-
"@bastani/atomic-natives-win32-arm64-msvc": "0.9.21-alpha.
|
|
443
|
-
"@bastani/atomic-natives-win32-x64-msvc": "0.9.21-alpha.
|
|
436
|
+
"@bastani/atomic-natives-darwin-arm64": "0.9.21-alpha.2",
|
|
437
|
+
"@bastani/atomic-natives-darwin-x64": "0.9.21-alpha.2",
|
|
438
|
+
"@bastani/atomic-natives-linux-arm64-gnu": "0.9.21-alpha.2",
|
|
439
|
+
"@bastani/atomic-natives-linux-arm64-musl": "0.9.21-alpha.2",
|
|
440
|
+
"@bastani/atomic-natives-linux-x64-gnu": "0.9.21-alpha.2",
|
|
441
|
+
"@bastani/atomic-natives-linux-x64-musl": "0.9.21-alpha.2",
|
|
442
|
+
"@bastani/atomic-natives-win32-arm64-msvc": "0.9.21-alpha.2",
|
|
443
|
+
"@bastani/atomic-natives-win32-x64-msvc": "0.9.21-alpha.2"
|
|
444
444
|
},
|
|
445
445
|
"engines": {
|
|
446
446
|
"bun": ">=1.4.2",
|
|
@@ -448,8 +448,8 @@
|
|
|
448
448
|
}
|
|
449
449
|
},
|
|
450
450
|
"node_modules/@bastani/atomic-natives-darwin-arm64": {
|
|
451
|
-
"version": "0.9.21-alpha.
|
|
452
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.21-alpha.
|
|
451
|
+
"version": "0.9.21-alpha.2",
|
|
452
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.21-alpha.2.tgz",
|
|
453
453
|
"license": "MIT",
|
|
454
454
|
"os": [
|
|
455
455
|
"darwin"
|
|
@@ -460,8 +460,8 @@
|
|
|
460
460
|
"optional": true
|
|
461
461
|
},
|
|
462
462
|
"node_modules/@bastani/atomic-natives-darwin-x64": {
|
|
463
|
-
"version": "0.9.21-alpha.
|
|
464
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.21-alpha.
|
|
463
|
+
"version": "0.9.21-alpha.2",
|
|
464
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.21-alpha.2.tgz",
|
|
465
465
|
"license": "MIT",
|
|
466
466
|
"os": [
|
|
467
467
|
"darwin"
|
|
@@ -472,8 +472,8 @@
|
|
|
472
472
|
"optional": true
|
|
473
473
|
},
|
|
474
474
|
"node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
|
|
475
|
-
"version": "0.9.21-alpha.
|
|
476
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.21-alpha.
|
|
475
|
+
"version": "0.9.21-alpha.2",
|
|
476
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.21-alpha.2.tgz",
|
|
477
477
|
"license": "MIT",
|
|
478
478
|
"os": [
|
|
479
479
|
"linux"
|
|
@@ -487,8 +487,8 @@
|
|
|
487
487
|
"optional": true
|
|
488
488
|
},
|
|
489
489
|
"node_modules/@bastani/atomic-natives-linux-arm64-musl": {
|
|
490
|
-
"version": "0.9.21-alpha.
|
|
491
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.21-alpha.
|
|
490
|
+
"version": "0.9.21-alpha.2",
|
|
491
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.21-alpha.2.tgz",
|
|
492
492
|
"license": "MIT",
|
|
493
493
|
"os": [
|
|
494
494
|
"linux"
|
|
@@ -502,8 +502,8 @@
|
|
|
502
502
|
"optional": true
|
|
503
503
|
},
|
|
504
504
|
"node_modules/@bastani/atomic-natives-linux-x64-gnu": {
|
|
505
|
-
"version": "0.9.21-alpha.
|
|
506
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.21-alpha.
|
|
505
|
+
"version": "0.9.21-alpha.2",
|
|
506
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.21-alpha.2.tgz",
|
|
507
507
|
"license": "MIT",
|
|
508
508
|
"os": [
|
|
509
509
|
"linux"
|
|
@@ -517,8 +517,8 @@
|
|
|
517
517
|
"optional": true
|
|
518
518
|
},
|
|
519
519
|
"node_modules/@bastani/atomic-natives-linux-x64-musl": {
|
|
520
|
-
"version": "0.9.21-alpha.
|
|
521
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.21-alpha.
|
|
520
|
+
"version": "0.9.21-alpha.2",
|
|
521
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.21-alpha.2.tgz",
|
|
522
522
|
"license": "MIT",
|
|
523
523
|
"os": [
|
|
524
524
|
"linux"
|
|
@@ -532,8 +532,8 @@
|
|
|
532
532
|
"optional": true
|
|
533
533
|
},
|
|
534
534
|
"node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
|
|
535
|
-
"version": "0.9.21-alpha.
|
|
536
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.21-alpha.
|
|
535
|
+
"version": "0.9.21-alpha.2",
|
|
536
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.21-alpha.2.tgz",
|
|
537
537
|
"license": "MIT",
|
|
538
538
|
"os": [
|
|
539
539
|
"win32"
|
|
@@ -544,8 +544,8 @@
|
|
|
544
544
|
"optional": true
|
|
545
545
|
},
|
|
546
546
|
"node_modules/@bastani/atomic-natives-win32-x64-msvc": {
|
|
547
|
-
"version": "0.9.21-alpha.
|
|
548
|
-
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.21-alpha.
|
|
547
|
+
"version": "0.9.21-alpha.2",
|
|
548
|
+
"resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.21-alpha.2.tgz",
|
|
549
549
|
"license": "MIT",
|
|
550
550
|
"os": [
|
|
551
551
|
"win32"
|
|
@@ -556,8 +556,8 @@
|
|
|
556
556
|
"optional": true
|
|
557
557
|
},
|
|
558
558
|
"node_modules/@bastani/pi-ai": {
|
|
559
|
-
"version": "0.9.21-alpha.
|
|
560
|
-
"resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.21-alpha.
|
|
559
|
+
"version": "0.9.21-alpha.2",
|
|
560
|
+
"resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.21-alpha.2.tgz",
|
|
561
561
|
"license": "MIT",
|
|
562
562
|
"dependencies": {
|
|
563
563
|
"@anthropic-ai/sdk": "0.124.0",
|
|
@@ -567,7 +567,7 @@
|
|
|
567
567
|
"@smithy/node-http-handler": "4.12.1",
|
|
568
568
|
"http-proxy-agent": "9.1.0",
|
|
569
569
|
"https-proxy-agent": "9.1.0",
|
|
570
|
-
"openai": "
|
|
570
|
+
"openai": "7.19.0",
|
|
571
571
|
"partial-json": "0.1.7",
|
|
572
572
|
"typebox": "1.3.27"
|
|
573
573
|
},
|
|
@@ -601,6 +601,43 @@
|
|
|
601
601
|
"node": ">= 20"
|
|
602
602
|
}
|
|
603
603
|
},
|
|
604
|
+
"node_modules/@bastani/pi-ai/node_modules/openai": {
|
|
605
|
+
"version": "7.19.0",
|
|
606
|
+
"resolved": "https://registry.npmjs.org/openai/-/openai-7.19.0.tgz",
|
|
607
|
+
"integrity": "sha512-MX2s3u2L5racTO0CC/SWpCOasJQBCJrqLKXK+l82cAhdeF8mPMBEe/gxMm0ZFa2xpKpOFLRjxv5afYEZbBXmbQ==",
|
|
608
|
+
"license": "Apache-2.0",
|
|
609
|
+
"peerDependencies": {
|
|
610
|
+
"@aws-sdk/credential-provider-node": ">=3.972.0 <4",
|
|
611
|
+
"@smithy/hash-node": ">=4.3.0 <5",
|
|
612
|
+
"@smithy/signature-v4": ">=5.4.0 <6",
|
|
613
|
+
"undici": ">=5 <9",
|
|
614
|
+
"ws": "^8.21.0",
|
|
615
|
+
"zod": "^3.25 || ^4.0"
|
|
616
|
+
},
|
|
617
|
+
"peerDependenciesMeta": {
|
|
618
|
+
"@aws-sdk/credential-provider-node": {
|
|
619
|
+
"optional": true
|
|
620
|
+
},
|
|
621
|
+
"@smithy/hash-node": {
|
|
622
|
+
"optional": true
|
|
623
|
+
},
|
|
624
|
+
"@smithy/signature-v4": {
|
|
625
|
+
"optional": true
|
|
626
|
+
},
|
|
627
|
+
"undici": {
|
|
628
|
+
"optional": true
|
|
629
|
+
},
|
|
630
|
+
"ws": {
|
|
631
|
+
"optional": true
|
|
632
|
+
},
|
|
633
|
+
"zod": {
|
|
634
|
+
"optional": true
|
|
635
|
+
}
|
|
636
|
+
},
|
|
637
|
+
"engines": {
|
|
638
|
+
"node": ">=22.0.0"
|
|
639
|
+
}
|
|
640
|
+
},
|
|
604
641
|
"node_modules/@borewit/text-codec": {
|
|
605
642
|
"version": "0.2.2",
|
|
606
643
|
"resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bastani/atomic",
|
|
3
|
-
"version": "0.9.21-alpha.
|
|
3
|
+
"version": "0.9.21-alpha.2",
|
|
4
4
|
"description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"atomicConfig": {
|
|
@@ -62,9 +62,9 @@
|
|
|
62
62
|
],
|
|
63
63
|
"scripts": {
|
|
64
64
|
"clean": "shx rm -rf dist",
|
|
65
|
-
"dev": "
|
|
66
|
-
"typecheck": "
|
|
67
|
-
"build": "
|
|
65
|
+
"dev": "tsc -p tsconfig.build.json --watch --preserveWatchOutput",
|
|
66
|
+
"typecheck": "tsc -p tsconfig.build.json --noEmit && tsc -p tsconfig.typetests.json",
|
|
67
|
+
"build": "tsc -p tsconfig.build.json && shx chmod +x dist/cli.js dist/rpc-entry.js && bun run copy-assets",
|
|
68
68
|
"bundle:dev": "bun build src/bun/cli.ts --target=bun --minify --external mupdf --define process.env.ATOMIC_BUNDLED_BUILD=\"'1'\" --outfile dist-dev/cli.js",
|
|
69
69
|
"start:fast": "bun run bundle:dev && bun dist-dev/cli.js",
|
|
70
70
|
"build:binary": "bun run clean && bun run build && bun build --target=bun --format=cjs --minify-syntax --external mupdf --external=*native-modifiers.js ./dist/bun/cli.js --outfile dist/app.js && bun build --target=bun --format=cjs --external mupdf ./src/utils/image-resize-worker.ts --outfile dist/image-resize-worker.js && bun build --compile --bytecode --format=cjs --external mupdf --no-compile-autoload-dotenv --no-compile-autoload-bunfig ./dist/bun/split-loader.js --outfile dist/atomic && bun run copy-binary-assets && bun run assert-binary-assets",
|
|
@@ -79,8 +79,8 @@
|
|
|
79
79
|
"prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
|
|
80
80
|
},
|
|
81
81
|
"dependencies": {
|
|
82
|
-
"@bastani/atomic-natives": "0.9.21-alpha.
|
|
83
|
-
"@bastani/pi-ai": "0.9.21-alpha.
|
|
82
|
+
"@bastani/atomic-natives": "0.9.21-alpha.2",
|
|
83
|
+
"@bastani/pi-ai": "0.9.21-alpha.2",
|
|
84
84
|
"@dbos-inc/dbos-sdk": "4.25.14",
|
|
85
85
|
"@earendil-works/pi-agent-core": "0.87.1",
|
|
86
86
|
"@earendil-works/pi-client": "0.87.1",
|
|
@@ -133,7 +133,6 @@
|
|
|
133
133
|
"@types/node": "24.12.4",
|
|
134
134
|
"@types/proper-lockfile": "4.1.4",
|
|
135
135
|
"@types/semver": "7.7.1",
|
|
136
|
-
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
137
136
|
"ajv": "8.20.0",
|
|
138
137
|
"shx": "0.4.0",
|
|
139
138
|
"typescript": "7.0.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-routing-task.d.ts","sourceRoot":"","sources":["../../src/core/model-routing-task.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAG5C,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,gBAAgB,4BAA4B,CAAC;AAI1D,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAyBD,oGAAoG;AACpG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWtE;AAkBD,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAA2B,GAAG,MAAM,CAuC1F"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
// Jev is the smallest routing classifier: 32k tokens for state plus the longest
|
|
2
|
-
// question. Measured against Jev 1.13, dense markdown runs about 1.9 JSON bytes per
|
|
3
|
-
// token and escaped candidate JSON about 2.4, so 60_000 JSON bytes stays under the
|
|
4
|
-
// limit for every input. Larger classifiers and chat fallbacks accept the same copy.
|
|
5
|
-
export const ROUTING_REQUEST_BYTES = 60_000;
|
|
6
|
-
// The task excerpt's share of the request when everything else leaves room for it.
|
|
7
|
-
// Count JSON-encoded UTF-8 bytes, including escapes, not JS characters.
|
|
8
|
-
export const MODEL_ROUTING_TASK_BYTES = 9_000;
|
|
9
|
-
export const TRUNCATED_MARKER = "\n[... truncated ...]\n";
|
|
10
|
-
const notice = "[Model-routing excerpt. Truncated text remains in the execution task.]\n";
|
|
11
|
-
export function jsonBytes(value) {
|
|
12
|
-
return Buffer.byteLength(JSON.stringify(value), "utf8");
|
|
13
|
-
}
|
|
14
|
-
function protectedRanges(task) {
|
|
15
|
-
const ranges = [];
|
|
16
|
-
let depth = 0;
|
|
17
|
-
let start = 0;
|
|
18
|
-
for (const match of task.matchAll(/<\/?keepContext>/gi)) {
|
|
19
|
-
if (match[0][1] !== "/") {
|
|
20
|
-
if (depth++ === 0)
|
|
21
|
-
start = match.index;
|
|
22
|
-
}
|
|
23
|
-
else if (depth > 0 && --depth === 0) {
|
|
24
|
-
ranges.push({ start, end: match.index + match[0].length });
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// An unclosed protected span protects through the end rather than losing it.
|
|
28
|
-
if (depth > 0)
|
|
29
|
-
ranges.push({ start, end: task.length });
|
|
30
|
-
return ranges;
|
|
31
|
-
}
|
|
32
|
-
// Never split a UTF-16 surrogate pair at an excerpt boundary.
|
|
33
|
-
function boundary(task, index, direction) {
|
|
34
|
-
const before = task.charCodeAt(index - 1);
|
|
35
|
-
const after = task.charCodeAt(index);
|
|
36
|
-
return before >= 0xd800 && before <= 0xdbff && after >= 0xdc00 && after <= 0xdfff ? index + direction : index;
|
|
37
|
-
}
|
|
38
|
-
/** Keep the longest prefix that fits, marking the cut. Returns "" when not even the marker fits. */
|
|
39
|
-
export function truncateToBytes(text, maxBytes) {
|
|
40
|
-
if (jsonBytes(text) <= maxBytes)
|
|
41
|
-
return text;
|
|
42
|
-
if (jsonBytes(TRUNCATED_MARKER) > maxBytes)
|
|
43
|
-
return "";
|
|
44
|
-
let low = 0;
|
|
45
|
-
let high = text.length;
|
|
46
|
-
while (low < high) {
|
|
47
|
-
const middle = Math.ceil((low + high) / 2);
|
|
48
|
-
if (jsonBytes(`${text.slice(0, boundary(text, middle, -1))}${TRUNCATED_MARKER}`) <= maxBytes)
|
|
49
|
-
low = middle;
|
|
50
|
-
else
|
|
51
|
-
high = middle - 1;
|
|
52
|
-
}
|
|
53
|
-
return `${text.slice(0, boundary(text, low, -1))}${TRUNCATED_MARKER}`;
|
|
54
|
-
}
|
|
55
|
-
/** Keep equal-length head and tail that fit, marking the cut between them. */
|
|
56
|
-
function truncateMiddleToBytes(text, maxBytes) {
|
|
57
|
-
if (jsonBytes(text) <= maxBytes)
|
|
58
|
-
return text;
|
|
59
|
-
if (jsonBytes(TRUNCATED_MARKER) > maxBytes)
|
|
60
|
-
return "";
|
|
61
|
-
const cut = (edge) => `${text.slice(0, boundary(text, edge, -1))}${TRUNCATED_MARKER}${text.slice(boundary(text, text.length - edge, 1))}`;
|
|
62
|
-
let low = 0;
|
|
63
|
-
let high = Math.floor(text.length / 2);
|
|
64
|
-
while (low < high) {
|
|
65
|
-
const middle = Math.ceil((low + high) / 2);
|
|
66
|
-
if (jsonBytes(cut(middle)) <= maxBytes)
|
|
67
|
-
low = middle;
|
|
68
|
-
else
|
|
69
|
-
high = middle - 1;
|
|
70
|
-
}
|
|
71
|
-
return cut(low);
|
|
72
|
-
}
|
|
73
|
-
/** Bound only the model selector's copy. Execution and hard constraints stay intact. */
|
|
74
|
-
export function modelRoutingTask(task, maxBytes = MODEL_ROUTING_TASK_BYTES) {
|
|
75
|
-
const fits = (text) => jsonBytes(text) <= maxBytes;
|
|
76
|
-
if (fits(task))
|
|
77
|
-
return task;
|
|
78
|
-
const protectedSpans = protectedRanges(task);
|
|
79
|
-
const excerpt = (edgeChars) => {
|
|
80
|
-
const ranges = [
|
|
81
|
-
{ start: 0, end: boundary(task, edgeChars, -1) },
|
|
82
|
-
...protectedSpans,
|
|
83
|
-
{ start: boundary(task, task.length - edgeChars, 1), end: task.length },
|
|
84
|
-
];
|
|
85
|
-
const parts = [notice];
|
|
86
|
-
let end = 0;
|
|
87
|
-
for (const range of ranges) {
|
|
88
|
-
if (range.end <= end)
|
|
89
|
-
continue;
|
|
90
|
-
if (range.start > end)
|
|
91
|
-
parts.push(TRUNCATED_MARKER);
|
|
92
|
-
parts.push(task.slice(Math.max(end, range.start), range.end));
|
|
93
|
-
end = range.end;
|
|
94
|
-
}
|
|
95
|
-
if (end < task.length)
|
|
96
|
-
parts.push(TRUNCATED_MARKER);
|
|
97
|
-
return parts.join("");
|
|
98
|
-
};
|
|
99
|
-
let result = excerpt(0);
|
|
100
|
-
// Protected spans that alone exceed the budget are cut too, from the middle of
|
|
101
|
-
// the task so its opening and closing objective both reach the router. The
|
|
102
|
-
// execution task keeps every span.
|
|
103
|
-
if (!fits(result))
|
|
104
|
-
return `${notice}${truncateMiddleToBytes(task, maxBytes - (jsonBytes(notice) - 2))}`;
|
|
105
|
-
let low = 0;
|
|
106
|
-
let high = Math.min(Math.floor(task.length / 2), maxBytes);
|
|
107
|
-
while (low < high) {
|
|
108
|
-
const middle = Math.ceil((low + high) / 2);
|
|
109
|
-
const candidate = excerpt(middle);
|
|
110
|
-
if (fits(candidate)) {
|
|
111
|
-
result = candidate;
|
|
112
|
-
low = middle;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
high = middle - 1;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return result;
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=model-routing-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-routing-task.js","sourceRoot":"","sources":["../../src/core/model-routing-task.ts"],"names":[],"mappings":"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","sourcesContent":["// Jev is the smallest routing classifier: 32k tokens for state plus the longest\n// question. Measured against Jev 1.13, dense markdown runs about 1.9 JSON bytes per\n// token and escaped candidate JSON about 2.4, so 60_000 JSON bytes stays under the\n// limit for every input. Larger classifiers and chat fallbacks accept the same copy.\nexport const ROUTING_REQUEST_BYTES = 60_000;\n// The task excerpt's share of the request when everything else leaves room for it.\n// Count JSON-encoded UTF-8 bytes, including escapes, not JS characters.\nexport const MODEL_ROUTING_TASK_BYTES = 9_000;\nexport const TRUNCATED_MARKER = \"\\n[... truncated ...]\\n\";\nconst notice = \"[Model-routing excerpt. Truncated text remains in the execution task.]\\n\";\ntype Range = { start: number; end: number };\n\nexport function jsonBytes(value: string): number {\n\treturn Buffer.byteLength(JSON.stringify(value), \"utf8\");\n}\n\nfunction protectedRanges(task: string): Range[] {\n\tconst ranges: Range[] = [];\n\tlet depth = 0;\n\tlet start = 0;\n\tfor (const match of task.matchAll(/<\\/?keepContext>/gi)) {\n\t\tif (match[0][1] !== \"/\") {\n\t\t\tif (depth++ === 0) start = match.index;\n\t\t} else if (depth > 0 && --depth === 0) {\n\t\t\tranges.push({ start, end: match.index + match[0].length });\n\t\t}\n\t}\n\t// An unclosed protected span protects through the end rather than losing it.\n\tif (depth > 0) ranges.push({ start, end: task.length });\n\treturn ranges;\n}\n\n// Never split a UTF-16 surrogate pair at an excerpt boundary.\nfunction boundary(task: string, index: number, direction: -1 | 1): number {\n\tconst before = task.charCodeAt(index - 1);\n\tconst after = task.charCodeAt(index);\n\treturn before >= 0xd800 && before <= 0xdbff && after >= 0xdc00 && after <= 0xdfff ? index + direction : index;\n}\n\n/** Keep the longest prefix that fits, marking the cut. Returns \"\" when not even the marker fits. */\nexport function truncateToBytes(text: string, maxBytes: number): string {\n\tif (jsonBytes(text) <= maxBytes) return text;\n\tif (jsonBytes(TRUNCATED_MARKER) > maxBytes) return \"\";\n\tlet low = 0;\n\tlet high = text.length;\n\twhile (low < high) {\n\t\tconst middle = Math.ceil((low + high) / 2);\n\t\tif (jsonBytes(`${text.slice(0, boundary(text, middle, -1))}${TRUNCATED_MARKER}`) <= maxBytes) low = middle;\n\t\telse high = middle - 1;\n\t}\n\treturn `${text.slice(0, boundary(text, low, -1))}${TRUNCATED_MARKER}`;\n}\n\n/** Keep equal-length head and tail that fit, marking the cut between them. */\nfunction truncateMiddleToBytes(text: string, maxBytes: number): string {\n\tif (jsonBytes(text) <= maxBytes) return text;\n\tif (jsonBytes(TRUNCATED_MARKER) > maxBytes) return \"\";\n\tconst cut = (edge: number) =>\n\t\t`${text.slice(0, boundary(text, edge, -1))}${TRUNCATED_MARKER}${text.slice(boundary(text, text.length - edge, 1))}`;\n\tlet low = 0;\n\tlet high = Math.floor(text.length / 2);\n\twhile (low < high) {\n\t\tconst middle = Math.ceil((low + high) / 2);\n\t\tif (jsonBytes(cut(middle)) <= maxBytes) low = middle;\n\t\telse high = middle - 1;\n\t}\n\treturn cut(low);\n}\n\n/** Bound only the model selector's copy. Execution and hard constraints stay intact. */\nexport function modelRoutingTask(task: string, maxBytes = MODEL_ROUTING_TASK_BYTES): string {\n\tconst fits = (text: string) => jsonBytes(text) <= maxBytes;\n\tif (fits(task)) return task;\n\tconst protectedSpans = protectedRanges(task);\n\tconst excerpt = (edgeChars: number): string => {\n\t\tconst ranges = [\n\t\t\t{ start: 0, end: boundary(task, edgeChars, -1) },\n\t\t\t...protectedSpans,\n\t\t\t{ start: boundary(task, task.length - edgeChars, 1), end: task.length },\n\t\t];\n\t\tconst parts = [notice];\n\t\tlet end = 0;\n\t\tfor (const range of ranges) {\n\t\t\tif (range.end <= end) continue;\n\t\t\tif (range.start > end) parts.push(TRUNCATED_MARKER);\n\t\t\tparts.push(task.slice(Math.max(end, range.start), range.end));\n\t\t\tend = range.end;\n\t\t}\n\t\tif (end < task.length) parts.push(TRUNCATED_MARKER);\n\t\treturn parts.join(\"\");\n\t};\n\tlet result = excerpt(0);\n\t// Protected spans that alone exceed the budget are cut too, from the middle of\n\t// the task so its opening and closing objective both reach the router. The\n\t// execution task keeps every span.\n\tif (!fits(result)) return `${notice}${truncateMiddleToBytes(task, maxBytes - (jsonBytes(notice) - 2))}`;\n\tlet low = 0;\n\tlet high = Math.min(Math.floor(task.length / 2), maxBytes);\n\twhile (low < high) {\n\t\tconst middle = Math.ceil((low + high) / 2);\n\t\tconst candidate = excerpt(middle);\n\t\tif (fits(candidate)) {\n\t\t\tresult = candidate;\n\t\t\tlow = middle;\n\t\t} else {\n\t\t\thigh = middle - 1;\n\t\t}\n\t}\n\treturn result;\n}\n"]}
|