@bubblebrain-ai/bubble 0.0.63 → 0.0.64
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/README.md +437 -11
- package/dist/agent/abort-errors.d.ts +18 -0
- package/dist/agent/abort-errors.js +51 -0
- package/dist/agent/budget-ledger.d.ts +20 -0
- package/dist/agent/budget-ledger.js +45 -0
- package/dist/agent/categories.d.ts +100 -0
- package/dist/agent/categories.js +203 -0
- package/dist/agent/change-tracker.d.ts +40 -0
- package/dist/agent/change-tracker.js +89 -0
- package/dist/agent/child-runner.d.ts +64 -0
- package/dist/agent/child-runner.js +405 -0
- package/dist/agent/input-controller.d.ts +14 -0
- package/dist/agent/input-controller.js +43 -0
- package/dist/agent/internal-reminder-sanitizer.d.ts +25 -0
- package/dist/agent/internal-reminder-sanitizer.js +297 -0
- package/dist/agent/profiles.d.ts +76 -0
- package/dist/agent/profiles.js +526 -0
- package/dist/agent/provider-fingerprint.d.ts +6 -0
- package/dist/agent/provider-fingerprint.js +89 -0
- package/dist/agent/resident-history.d.ts +7 -0
- package/dist/agent/resident-history.js +61 -0
- package/dist/agent/result-integrator.d.ts +22 -0
- package/dist/agent/result-integrator.js +50 -0
- package/dist/agent/routing-catalog.d.ts +131 -0
- package/dist/agent/routing-catalog.js +260 -0
- package/dist/agent/structured-output.d.ts +37 -0
- package/dist/agent/structured-output.js +193 -0
- package/dist/agent/subagent/router.d.ts +65 -0
- package/dist/agent/subagent/router.js +203 -0
- package/dist/agent/subagent/runtime.d.ts +235 -0
- package/dist/agent/subagent/runtime.js +835 -0
- package/dist/agent/subagent-control.d.ts +100 -0
- package/dist/agent/subagent-control.js +70 -0
- package/dist/agent/subagent-lifecycle-reminder.d.ts +3 -0
- package/dist/agent/subagent-lifecycle-reminder.js +112 -0
- package/dist/agent/subagent-route-format.d.ts +8 -0
- package/dist/agent/subagent-route-format.js +18 -0
- package/dist/agent/subagent-scheduler.d.ts +105 -0
- package/dist/agent/subagent-scheduler.js +287 -0
- package/dist/agent/subagent-store.d.ts +57 -0
- package/dist/agent/subagent-store.js +180 -0
- package/dist/agent/subagent-summary.d.ts +30 -0
- package/dist/agent/subagent-summary.js +74 -0
- package/dist/agent/subagent-wait-guidance.d.ts +2 -0
- package/dist/agent/subagent-wait-guidance.js +8 -0
- package/dist/agent/subtask-policy.d.ts +13 -0
- package/dist/agent/subtask-policy.js +56 -0
- package/dist/agent/task-lifecycle-reminder.d.ts +26 -0
- package/dist/agent/task-lifecycle-reminder.js +59 -0
- package/dist/agent/tool-intent.d.ts +45 -0
- package/dist/agent/tool-intent.js +318 -0
- package/dist/agent/tool-visibility.d.ts +10 -0
- package/dist/agent/tool-visibility.js +6 -0
- package/dist/agent/transcript-helpers.d.ts +20 -0
- package/dist/agent/transcript-helpers.js +63 -0
- package/dist/agent/update-queue.d.ts +13 -0
- package/dist/agent/update-queue.js +69 -0
- package/dist/agent/workflow/control.d.ts +60 -0
- package/dist/agent/workflow/control.js +62 -0
- package/dist/agent/workflow/errors.d.ts +16 -0
- package/dist/agent/workflow/errors.js +24 -0
- package/dist/agent/workflow/runs.d.ts +73 -0
- package/dist/agent/workflow/runs.js +160 -0
- package/dist/agent/workflow/runtime.d.ts +88 -0
- package/dist/agent/workflow/runtime.js +319 -0
- package/dist/agent/worktree.d.ts +29 -0
- package/dist/agent/worktree.js +73 -0
- package/dist/agent.d.ts +460 -0
- package/dist/agent.js +2210 -0
- package/dist/anthropic-thinking.d.ts +4 -0
- package/dist/anthropic-thinking.js +11 -0
- package/dist/approval/controller.d.ts +71 -0
- package/dist/approval/controller.js +286 -0
- package/dist/approval/danger.d.ts +13 -0
- package/dist/approval/danger.js +55 -0
- package/dist/approval/diff-hunks.d.ts +12 -0
- package/dist/approval/diff-hunks.js +32 -0
- package/dist/approval/protected-paths.d.ts +1 -0
- package/dist/approval/protected-paths.js +35 -0
- package/dist/approval/session-cache.d.ts +21 -0
- package/dist/approval/session-cache.js +38 -0
- package/dist/approval/tool-helper.d.ts +14 -0
- package/dist/approval/tool-helper.js +47 -0
- package/dist/approval/types.d.ts +146 -0
- package/dist/approval/types.js +8 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +3 -0
- package/dist/bubble-home.d.ts +8 -0
- package/dist/bubble-home.js +19 -0
- package/dist/checkpoints.d.ts +57 -0
- package/dist/checkpoints.js +0 -0
- package/dist/cli.d.ts +37 -0
- package/dist/cli.js +175 -0
- package/dist/clipboard.d.ts +14 -0
- package/dist/clipboard.js +132 -0
- package/dist/config.d.ts +96 -0
- package/dist/config.js +287 -0
- package/dist/context/budget.d.ts +28 -0
- package/dist/context/budget.js +130 -0
- package/dist/context/checkpoint.d.ts +18 -0
- package/dist/context/checkpoint.js +117 -0
- package/dist/context/compact-llm.d.ts +25 -0
- package/dist/context/compact-llm.js +175 -0
- package/dist/context/compact.d.ts +124 -0
- package/dist/context/compact.js +635 -0
- package/dist/context/compaction-files.d.ts +44 -0
- package/dist/context/compaction-files.js +148 -0
- package/dist/context/llm-compactor.d.ts +53 -0
- package/dist/context/llm-compactor.js +424 -0
- package/dist/context/overflow.d.ts +9 -0
- package/dist/context/overflow.js +50 -0
- package/dist/context/projector.d.ts +34 -0
- package/dist/context/projector.js +251 -0
- package/dist/context/prune.d.ts +26 -0
- package/dist/context/prune.js +171 -0
- package/dist/context/session-write-lock.d.ts +20 -0
- package/dist/context/session-write-lock.js +162 -0
- package/dist/context/token-estimator.d.ts +14 -0
- package/dist/context/token-estimator.js +106 -0
- package/dist/context/tool-images.d.ts +3 -0
- package/dist/context/tool-images.js +35 -0
- package/dist/context/tool-output-truncate.d.ts +24 -0
- package/dist/context/tool-output-truncate.js +181 -0
- package/dist/context/usage.d.ts +34 -0
- package/dist/context/usage.js +230 -0
- package/dist/debug-trace.d.ts +27 -0
- package/dist/debug-trace.js +401 -0
- package/dist/diff-stats.d.ts +5 -0
- package/dist/diff-stats.js +21 -0
- package/dist/external-runtime/grok-acp.d.ts +56 -0
- package/dist/external-runtime/grok-acp.js +386 -0
- package/dist/external-runtime/grok-binary.d.ts +25 -0
- package/dist/external-runtime/grok-binary.js +108 -0
- package/dist/external-runtime/grok-errors.d.ts +7 -0
- package/dist/external-runtime/grok-errors.js +15 -0
- package/dist/external-runtime/grok-input-policy.d.ts +58 -0
- package/dist/external-runtime/grok-input-policy.js +52 -0
- package/dist/external-runtime/grok-ndjson.d.ts +14 -0
- package/dist/external-runtime/grok-ndjson.js +193 -0
- package/dist/external-runtime/grok-network.d.ts +15 -0
- package/dist/external-runtime/grok-network.js +81 -0
- package/dist/external-runtime/grok-preflight.d.ts +28 -0
- package/dist/external-runtime/grok-preflight.js +194 -0
- package/dist/external-runtime/grok-process.d.ts +26 -0
- package/dist/external-runtime/grok-process.js +184 -0
- package/dist/external-runtime/grok-profile.d.ts +32 -0
- package/dist/external-runtime/grok-profile.js +419 -0
- package/dist/external-runtime/grok-provider.d.ts +31 -0
- package/dist/external-runtime/grok-provider.js +41 -0
- package/dist/external-runtime/grok-runtime.d.ts +91 -0
- package/dist/external-runtime/grok-runtime.js +882 -0
- package/dist/external-runtime/index.d.ts +13 -0
- package/dist/external-runtime/index.js +13 -0
- package/dist/external-runtime/session-policy.d.ts +11 -0
- package/dist/external-runtime/session-policy.js +30 -0
- package/dist/external-runtime/types.d.ts +65 -0
- package/dist/external-runtime/types.js +1 -0
- package/dist/feedback/collect.d.ts +7 -0
- package/dist/feedback/collect.js +119 -0
- package/dist/feedback/config.d.ts +14 -0
- package/dist/feedback/config.js +16 -0
- package/dist/feedback/redact.d.ts +1 -0
- package/dist/feedback/redact.js +25 -0
- package/dist/feedback/submit.d.ts +6 -0
- package/dist/feedback/submit.js +43 -0
- package/dist/feedback/types.d.ts +22 -0
- package/dist/feedback/types.js +1 -0
- package/dist/feishu/agent-host/approval-card.d.ts +11 -0
- package/dist/feishu/agent-host/approval-card.js +85 -0
- package/dist/feishu/agent-host/approval-ui.d.ts +59 -0
- package/dist/feishu/agent-host/approval-ui.js +214 -0
- package/dist/feishu/agent-host/run-driver.d.ts +51 -0
- package/dist/feishu/agent-host/run-driver.js +397 -0
- package/dist/feishu/agent-host/runtime-deps.d.ts +33 -0
- package/dist/feishu/agent-host/runtime-deps.js +8 -0
- package/dist/feishu/card/budget.d.ts +40 -0
- package/dist/feishu/card/budget.js +134 -0
- package/dist/feishu/card/renderer.d.ts +29 -0
- package/dist/feishu/card/renderer.js +245 -0
- package/dist/feishu/card/run-state-types.d.ts +49 -0
- package/dist/feishu/card/run-state-types.js +15 -0
- package/dist/feishu/card/run-state.d.ts +21 -0
- package/dist/feishu/card/run-state.js +223 -0
- package/dist/feishu/channel/channel.d.ts +52 -0
- package/dist/feishu/channel/channel.js +74 -0
- package/dist/feishu/config.d.ts +24 -0
- package/dist/feishu/config.js +97 -0
- package/dist/feishu/format.d.ts +6 -0
- package/dist/feishu/format.js +14 -0
- package/dist/feishu/index.d.ts +4 -0
- package/dist/feishu/index.js +4 -0
- package/dist/feishu/logger.d.ts +31 -0
- package/dist/feishu/logger.js +62 -0
- package/dist/feishu/paths.d.ts +12 -0
- package/dist/feishu/paths.js +38 -0
- package/dist/feishu/process-registry.d.ts +29 -0
- package/dist/feishu/process-registry.js +90 -0
- package/dist/feishu/router/commands.d.ts +38 -0
- package/dist/feishu/router/commands.js +286 -0
- package/dist/feishu/router/event-router.d.ts +40 -0
- package/dist/feishu/router/event-router.js +208 -0
- package/dist/feishu/router/whitelist.d.ts +23 -0
- package/dist/feishu/router/whitelist.js +20 -0
- package/dist/feishu/runtime/active-runs.d.ts +32 -0
- package/dist/feishu/runtime/active-runs.js +84 -0
- package/dist/feishu/runtime/pending-queue.d.ts +36 -0
- package/dist/feishu/runtime/pending-queue.js +98 -0
- package/dist/feishu/runtime/process-pool.d.ts +29 -0
- package/dist/feishu/runtime/process-pool.js +49 -0
- package/dist/feishu/schema.d.ts +17 -0
- package/dist/feishu/schema.js +252 -0
- package/dist/feishu/scope/scope-registry.d.ts +39 -0
- package/dist/feishu/scope/scope-registry.js +148 -0
- package/dist/feishu/scope/session-binder.d.ts +44 -0
- package/dist/feishu/scope/session-binder.js +100 -0
- package/dist/feishu/scope/session-store.d.ts +24 -0
- package/dist/feishu/scope/session-store.js +73 -0
- package/dist/feishu/secrets.d.ts +37 -0
- package/dist/feishu/secrets.js +129 -0
- package/dist/feishu/serve.d.ts +12 -0
- package/dist/feishu/serve.js +302 -0
- package/dist/feishu/types.d.ts +75 -0
- package/dist/feishu/types.js +23 -0
- package/dist/feishu/wizard.d.ts +24 -0
- package/dist/feishu/wizard.js +121 -0
- package/dist/goal/command.d.ts +20 -0
- package/dist/goal/command.js +76 -0
- package/dist/goal/engine.d.ts +33 -0
- package/dist/goal/engine.js +65 -0
- package/dist/goal/format.d.ts +18 -0
- package/dist/goal/format.js +112 -0
- package/dist/goal/prompts.d.ts +13 -0
- package/dist/goal/prompts.js +84 -0
- package/dist/goal/store.d.ts +64 -0
- package/dist/goal/store.js +174 -0
- package/dist/goal/tools.d.ts +13 -0
- package/dist/goal/tools.js +67 -0
- package/dist/goal/usage.d.ts +2 -0
- package/dist/goal/usage.js +3 -0
- package/dist/hooks/config.d.ts +9 -0
- package/dist/hooks/config.js +278 -0
- package/dist/hooks/controller.d.ts +24 -0
- package/dist/hooks/controller.js +254 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/log.d.ts +14 -0
- package/dist/hooks/log.js +54 -0
- package/dist/hooks/runner.d.ts +5 -0
- package/dist/hooks/runner.js +225 -0
- package/dist/hooks/trust.d.ts +37 -0
- package/dist/hooks/trust.js +143 -0
- package/dist/hooks/types.d.ts +173 -0
- package/dist/hooks/types.js +46 -0
- package/dist/loop/engine.d.ts +29 -0
- package/dist/loop/engine.js +63 -0
- package/dist/lsp/config.d.ts +18 -0
- package/dist/lsp/config.js +58 -0
- package/dist/lsp/diagnostics.d.ts +24 -0
- package/dist/lsp/diagnostics.js +103 -0
- package/dist/lsp/index.d.ts +3 -0
- package/dist/lsp/index.js +3 -0
- package/dist/lsp/service.d.ts +97 -0
- package/dist/lsp/service.js +815 -0
- package/dist/main.d.ts +5 -0
- package/dist/main.js +984 -0
- package/dist/mcp/client.d.ts +68 -0
- package/dist/mcp/client.js +177 -0
- package/dist/mcp/config.d.ts +30 -0
- package/dist/mcp/config.js +144 -0
- package/dist/mcp/manager.d.ts +67 -0
- package/dist/mcp/manager.js +328 -0
- package/dist/mcp/name.d.ts +26 -0
- package/dist/mcp/name.js +40 -0
- package/dist/mcp/transports.d.ts +54 -0
- package/dist/mcp/transports.js +267 -0
- package/dist/mcp/types.d.ts +111 -0
- package/dist/mcp/types.js +14 -0
- package/dist/memory/db.d.ts +65 -0
- package/dist/memory/db.js +332 -0
- package/dist/memory/index.d.ts +10 -0
- package/dist/memory/index.js +10 -0
- package/dist/memory/paths.d.ts +18 -0
- package/dist/memory/paths.js +38 -0
- package/dist/memory/phase1.d.ts +23 -0
- package/dist/memory/phase1.js +292 -0
- package/dist/memory/phase2.d.ts +19 -0
- package/dist/memory/phase2.js +119 -0
- package/dist/memory/prompts.d.ts +19 -0
- package/dist/memory/prompts.js +104 -0
- package/dist/memory/reset.d.ts +1 -0
- package/dist/memory/reset.js +13 -0
- package/dist/memory/session-policy.d.ts +25 -0
- package/dist/memory/session-policy.js +55 -0
- package/dist/memory/start.d.ts +24 -0
- package/dist/memory/start.js +50 -0
- package/dist/memory/storage.d.ts +11 -0
- package/dist/memory/storage.js +95 -0
- package/dist/memory/store.d.ts +43 -0
- package/dist/memory/store.js +193 -0
- package/dist/memory/usage.d.ts +1 -0
- package/dist/memory/usage.js +38 -0
- package/dist/model-catalog.d.ts +65 -0
- package/dist/model-catalog.js +387 -0
- package/dist/model-config.d.ts +40 -0
- package/dist/model-config.js +74 -0
- package/dist/model-data.generated.d.ts +16 -0
- package/dist/model-data.generated.js +275 -0
- package/dist/model-pricing.d.ts +54 -0
- package/dist/model-pricing.js +244 -0
- package/dist/model-selection.d.ts +7 -0
- package/dist/model-selection.js +18 -0
- package/dist/network/chatgpt-transport.d.ts +16 -0
- package/dist/network/chatgpt-transport.js +232 -0
- package/dist/network/errors.d.ts +47 -0
- package/dist/network/errors.js +48 -0
- package/dist/network/provider-transport-log.d.ts +12 -0
- package/dist/network/provider-transport-log.js +32 -0
- package/dist/network/provider-transport.d.ts +37 -0
- package/dist/network/provider-transport.js +256 -0
- package/dist/network/retry.d.ts +34 -0
- package/dist/network/retry.js +97 -0
- package/dist/network/system-proxy.d.ts +18 -0
- package/dist/network/system-proxy.js +175 -0
- package/dist/oauth/grok.d.ts +26 -0
- package/dist/oauth/grok.js +251 -0
- package/dist/oauth/index.d.ts +4 -0
- package/dist/oauth/index.js +3 -0
- package/dist/oauth/openai-codex.d.ts +15 -0
- package/dist/oauth/openai-codex.js +193 -0
- package/dist/oauth/refresh-control.d.ts +12 -0
- package/dist/oauth/refresh-control.js +42 -0
- package/dist/oauth/storage.d.ts +88 -0
- package/dist/oauth/storage.js +357 -0
- package/dist/oauth/types.d.ts +15 -0
- package/dist/oauth/types.js +1 -0
- package/dist/orchestrator/default-hooks.d.ts +22 -0
- package/dist/orchestrator/default-hooks.js +127 -0
- package/dist/orchestrator/hooks.d.ts +69 -0
- package/dist/orchestrator/hooks.js +52 -0
- package/dist/permission/mode.d.ts +19 -0
- package/dist/permission/mode.js +16 -0
- package/dist/permissions/rule.d.ts +42 -0
- package/dist/permissions/rule.js +293 -0
- package/dist/permissions/settings.d.ts +97 -0
- package/dist/permissions/settings.js +289 -0
- package/dist/permissions/shell-command.d.ts +36 -0
- package/dist/permissions/shell-command.js +226 -0
- package/dist/permissions/trust-prompt.d.ts +10 -0
- package/dist/permissions/trust-prompt.js +34 -0
- package/dist/permissions/trust.d.ts +26 -0
- package/dist/permissions/trust.js +113 -0
- package/dist/permissions/types.d.ts +61 -0
- package/dist/permissions/types.js +14 -0
- package/dist/print-output.d.ts +98 -0
- package/dist/print-output.js +117 -0
- package/dist/prompt/compose.d.ts +19 -0
- package/dist/prompt/compose.js +110 -0
- package/dist/prompt/delegation.d.ts +14 -0
- package/dist/prompt/delegation.js +100 -0
- package/dist/prompt/environment.d.ts +12 -0
- package/dist/prompt/environment.js +55 -0
- package/dist/prompt/provider-prompts/anthropic.d.ts +1 -0
- package/dist/prompt/provider-prompts/anthropic.js +5 -0
- package/dist/prompt/provider-prompts/codex.d.ts +1 -0
- package/dist/prompt/provider-prompts/codex.js +5 -0
- package/dist/prompt/provider-prompts/deepseek.d.ts +1 -0
- package/dist/prompt/provider-prompts/deepseek.js +7 -0
- package/dist/prompt/provider-prompts/default.d.ts +1 -0
- package/dist/prompt/provider-prompts/default.js +6 -0
- package/dist/prompt/provider-prompts/gemini.d.ts +1 -0
- package/dist/prompt/provider-prompts/gemini.js +5 -0
- package/dist/prompt/provider-prompts/glm.d.ts +1 -0
- package/dist/prompt/provider-prompts/glm.js +7 -0
- package/dist/prompt/provider-prompts/gpt.d.ts +1 -0
- package/dist/prompt/provider-prompts/gpt.js +5 -0
- package/dist/prompt/provider-prompts/kimi.d.ts +1 -0
- package/dist/prompt/provider-prompts/kimi.js +8 -0
- package/dist/prompt/reminders.d.ts +33 -0
- package/dist/prompt/reminders.js +135 -0
- package/dist/prompt/routing.d.ts +14 -0
- package/dist/prompt/routing.js +71 -0
- package/dist/prompt/runtime.d.ts +12 -0
- package/dist/prompt/runtime.js +40 -0
- package/dist/prompt/task-reminders.d.ts +12 -0
- package/dist/prompt/task-reminders.js +64 -0
- package/dist/provider-ai-sdk.d.ts +59 -0
- package/dist/provider-ai-sdk.js +541 -0
- package/dist/provider-anthropic.d.ts +126 -0
- package/dist/provider-anthropic.js +940 -0
- package/dist/provider-ark-responses.d.ts +29 -0
- package/dist/provider-ark-responses.js +518 -0
- package/dist/provider-artifacts.d.ts +7 -0
- package/dist/provider-artifacts.js +60 -0
- package/dist/provider-error-record.d.ts +43 -0
- package/dist/provider-error-record.js +213 -0
- package/dist/provider-grok.d.ts +50 -0
- package/dist/provider-grok.js +110 -0
- package/dist/provider-model-policy.d.ts +16 -0
- package/dist/provider-model-policy.js +33 -0
- package/dist/provider-openai-codex.d.ts +66 -0
- package/dist/provider-openai-codex.js +781 -0
- package/dist/provider-registry.d.ts +197 -0
- package/dist/provider-registry.js +1194 -0
- package/dist/provider-transform.d.ts +12 -0
- package/dist/provider-transform.js +293 -0
- package/dist/provider-zen-errors.d.ts +9 -0
- package/dist/provider-zen-errors.js +36 -0
- package/dist/provider.d.ts +85 -0
- package/dist/provider.js +925 -0
- package/dist/question/controller.d.ts +22 -0
- package/dist/question/controller.js +98 -0
- package/dist/question/index.d.ts +2 -0
- package/dist/question/index.js +2 -0
- package/dist/question/normalize.d.ts +6 -0
- package/dist/question/normalize.js +11 -0
- package/dist/question/types.d.ts +42 -0
- package/dist/question/types.js +6 -0
- package/dist/reasoning-debug.d.ts +7 -0
- package/dist/reasoning-debug.js +33 -0
- package/dist/rewind.d.ts +20 -0
- package/dist/rewind.js +29 -0
- package/dist/sdk/index.d.ts +319 -0
- package/dist/sdk/index.js +1068 -0
- package/dist/sdk/replay-event-log.d.ts +26 -0
- package/dist/sdk/replay-event-log.js +122 -0
- package/dist/sdk/session-turn-coordinator.d.ts +45 -0
- package/dist/sdk/session-turn-coordinator.js +227 -0
- package/dist/session-context-fence.d.ts +16 -0
- package/dist/session-context-fence.js +26 -0
- package/dist/session-log.d.ts +25 -0
- package/dist/session-log.js +444 -0
- package/dist/session-title.d.ts +16 -0
- package/dist/session-title.js +131 -0
- package/dist/session-types.d.ts +86 -0
- package/dist/session-types.js +1 -0
- package/dist/session.d.ts +135 -0
- package/dist/session.js +664 -0
- package/dist/skills/discovery.d.ts +12 -0
- package/dist/skills/discovery.js +166 -0
- package/dist/skills/format.d.ts +32 -0
- package/dist/skills/format.js +68 -0
- package/dist/skills/frontmatter.d.ts +5 -0
- package/dist/skills/frontmatter.js +60 -0
- package/dist/skills/invocation.d.ts +8 -0
- package/dist/skills/invocation.js +33 -0
- package/dist/skills/registry.d.ts +28 -0
- package/dist/skills/registry.js +79 -0
- package/dist/skills/types.d.ts +34 -0
- package/dist/skills/types.js +1 -0
- package/dist/slash-commands/commands.d.ts +10 -0
- package/dist/slash-commands/commands.js +1251 -0
- package/dist/slash-commands/feishu.d.ts +17 -0
- package/dist/slash-commands/feishu.js +400 -0
- package/dist/slash-commands/index.d.ts +4 -0
- package/dist/slash-commands/index.js +8 -0
- package/dist/slash-commands/registry.d.ts +32 -0
- package/dist/slash-commands/registry.js +73 -0
- package/dist/slash-commands/types.d.ts +109 -0
- package/dist/slash-commands/types.js +1 -0
- package/dist/slash-commands/unified.d.ts +38 -0
- package/dist/slash-commands/unified.js +38 -0
- package/dist/stats/usage.d.ts +59 -0
- package/dist/stats/usage.js +485 -0
- package/dist/stream-json.d.ts +13 -0
- package/dist/stream-json.js +74 -0
- package/dist/system-prompt.d.ts +40 -0
- package/dist/system-prompt.js +7 -0
- package/dist/tasks/manager.d.ts +145 -0
- package/dist/tasks/manager.js +634 -0
- package/dist/tasks/process-utils.d.ts +10 -0
- package/dist/tasks/process-utils.js +49 -0
- package/dist/tasks/promotion.d.ts +17 -0
- package/dist/tasks/promotion.js +30 -0
- package/dist/tasks/wake.d.ts +53 -0
- package/dist/tasks/wake.js +125 -0
- package/dist/text-display.d.ts +3 -0
- package/dist/text-display.js +25 -0
- package/dist/tools/agent-lifecycle.d.ts +30 -0
- package/dist/tools/agent-lifecycle.js +790 -0
- package/dist/tools/bash.d.ts +23 -0
- package/dist/tools/bash.js +443 -0
- package/dist/tools/child-tools.d.ts +41 -0
- package/dist/tools/child-tools.js +122 -0
- package/dist/tools/edit-apply.d.ts +25 -0
- package/dist/tools/edit-apply.js +274 -0
- package/dist/tools/edit.d.ts +18 -0
- package/dist/tools/edit.js +200 -0
- package/dist/tools/exa-mcp.d.ts +3 -0
- package/dist/tools/exa-mcp.js +74 -0
- package/dist/tools/exit-plan-mode.d.ts +22 -0
- package/dist/tools/exit-plan-mode.js +79 -0
- package/dist/tools/file-mutation-queue.d.ts +2 -0
- package/dist/tools/file-mutation-queue.js +43 -0
- package/dist/tools/file-state.d.ts +48 -0
- package/dist/tools/file-state.js +76 -0
- package/dist/tools/grep.d.ts +9 -0
- package/dist/tools/grep.js +387 -0
- package/dist/tools/index.d.ts +63 -0
- package/dist/tools/index.js +76 -0
- package/dist/tools/ls.d.ts +3 -0
- package/dist/tools/ls.js +85 -0
- package/dist/tools/lsp.d.ts +4 -0
- package/dist/tools/lsp.js +95 -0
- package/dist/tools/memory.d.ts +8 -0
- package/dist/tools/memory.js +77 -0
- package/dist/tools/path-utils.d.ts +8 -0
- package/dist/tools/path-utils.js +53 -0
- package/dist/tools/prompt-metadata.d.ts +3 -0
- package/dist/tools/prompt-metadata.js +17 -0
- package/dist/tools/question.d.ts +3 -0
- package/dist/tools/question.js +177 -0
- package/dist/tools/read.d.ts +8 -0
- package/dist/tools/read.js +309 -0
- package/dist/tools/sensitive-paths.d.ts +11 -0
- package/dist/tools/sensitive-paths.js +106 -0
- package/dist/tools/server-manager.d.ts +6 -0
- package/dist/tools/server-manager.js +6 -0
- package/dist/tools/server.d.ts +6 -0
- package/dist/tools/server.js +249 -0
- package/dist/tools/skill-search.d.ts +10 -0
- package/dist/tools/skill-search.js +134 -0
- package/dist/tools/skill.d.ts +7 -0
- package/dist/tools/skill.js +81 -0
- package/dist/tools/task-tools.d.ts +10 -0
- package/dist/tools/task-tools.js +133 -0
- package/dist/tools/tool-search.d.ts +23 -0
- package/dist/tools/tool-search.js +145 -0
- package/dist/tools/web-fetch.d.ts +6 -0
- package/dist/tools/web-fetch.js +76 -0
- package/dist/tools/web-search.d.ts +5 -0
- package/dist/tools/web-search.js +50 -0
- package/dist/tools/write.d.ts +10 -0
- package/dist/tools/write.js +155 -0
- package/dist/tui/animation-clock.d.ts +14 -0
- package/dist/tui/animation-clock.js +34 -0
- package/dist/tui/app.d.ts +176 -0
- package/dist/tui/app.js +1659 -0
- package/dist/tui/components/approval-dialog.d.ts +43 -0
- package/dist/tui/components/approval-dialog.js +212 -0
- package/dist/tui/components/bottom-sheet.d.ts +9 -0
- package/dist/tui/components/bottom-sheet.js +32 -0
- package/dist/tui/components/context-info.d.ts +54 -0
- package/dist/tui/components/context-info.js +388 -0
- package/dist/tui/components/feedback-dialog.d.ts +56 -0
- package/dist/tui/components/feedback-dialog.js +262 -0
- package/dist/tui/components/feishu-setup-dialog.d.ts +65 -0
- package/dist/tui/components/feishu-setup-dialog.js +332 -0
- package/dist/tui/components/image-preview.d.ts +32 -0
- package/dist/tui/components/image-preview.js +130 -0
- package/dist/tui/components/plan-dialog.d.ts +34 -0
- package/dist/tui/components/plan-dialog.js +196 -0
- package/dist/tui/components/provider-key-input.d.ts +18 -0
- package/dist/tui/components/provider-key-input.js +49 -0
- package/dist/tui/components/question-dialog.d.ts +25 -0
- package/dist/tui/components/question-dialog.js +263 -0
- package/dist/tui/components/responsive-transcript.d.ts +31 -0
- package/dist/tui/components/responsive-transcript.js +77 -0
- package/dist/tui/components/rewind-picker.d.ts +62 -0
- package/dist/tui/components/rewind-picker.js +317 -0
- package/dist/tui/components/session-picker.d.ts +49 -0
- package/dist/tui/components/session-picker.js +303 -0
- package/dist/tui/components/skills-panel.d.ts +63 -0
- package/dist/tui/components/skills-panel.js +582 -0
- package/dist/tui/components/stats-panel.d.ts +40 -0
- package/dist/tui/components/stats-panel.js +301 -0
- package/dist/tui/components/streaming-message.d.ts +69 -0
- package/dist/tui/components/streaming-message.js +398 -0
- package/dist/tui/components/subagent-inspector.d.ts +28 -0
- package/dist/tui/components/subagent-inspector.js +127 -0
- package/dist/tui/components/task-inspector.d.ts +26 -0
- package/dist/tui/components/task-inspector.js +70 -0
- package/dist/tui/components/tasks-pane.d.ts +126 -0
- package/dist/tui/components/tasks-pane.js +566 -0
- package/dist/tui/components/transcript.d.ts +103 -0
- package/dist/tui/components/transcript.js +858 -0
- package/dist/tui/components/welcome.d.ts +20 -0
- package/dist/tui/components/welcome.js +133 -0
- package/dist/tui/components/workflow-inspector.d.ts +30 -0
- package/dist/tui/components/workflow-inspector.js +136 -0
- package/dist/tui/composer-autocomplete.d.ts +76 -0
- package/dist/tui/composer-autocomplete.js +465 -0
- package/dist/tui/composer-style.d.ts +7 -0
- package/dist/tui/composer-style.js +29 -0
- package/dist/tui/controller/agent-event-reducer.d.ts +75 -0
- package/dist/tui/controller/agent-event-reducer.js +239 -0
- package/dist/tui/controller/composer-controller.d.ts +95 -0
- package/dist/tui/controller/composer-controller.js +502 -0
- package/dist/tui/controller/controller.d.ts +199 -0
- package/dist/tui/controller/controller.js +1034 -0
- package/dist/tui/controller/effects.d.ts +71 -0
- package/dist/tui/controller/effects.js +1 -0
- package/dist/tui/controller/goal-runtime-controller.d.ts +47 -0
- package/dist/tui/controller/goal-runtime-controller.js +202 -0
- package/dist/tui/controller/input-queue-machine.d.ts +71 -0
- package/dist/tui/controller/input-queue-machine.js +121 -0
- package/dist/tui/controller/intents.d.ts +56 -0
- package/dist/tui/controller/intents.js +6 -0
- package/dist/tui/controller/overlay-controller.d.ts +64 -0
- package/dist/tui/controller/overlay-controller.js +129 -0
- package/dist/tui/controller/ports.d.ts +57 -0
- package/dist/tui/controller/ports.js +9 -0
- package/dist/tui/controller/session-transition.d.ts +54 -0
- package/dist/tui/controller/session-transition.js +68 -0
- package/dist/tui/controller/state.d.ts +14 -0
- package/dist/tui/controller/state.js +36 -0
- package/dist/tui/controller/task-runtime-controller.d.ts +66 -0
- package/dist/tui/controller/task-runtime-controller.js +158 -0
- package/dist/tui/detect-theme.d.ts +4 -0
- package/dist/tui/detect-theme.js +116 -0
- package/dist/tui/display-history.d.ts +64 -0
- package/dist/tui/display-history.js +283 -0
- package/dist/tui/display-sanitizer.d.ts +3 -0
- package/dist/tui/display-sanitizer.js +38 -0
- package/dist/tui/edit-diff.d.ts +11 -0
- package/dist/tui/edit-diff.js +57 -0
- package/dist/tui/file-mentions.d.ts +29 -0
- package/dist/tui/file-mentions.js +174 -0
- package/dist/tui/footer.d.ts +37 -0
- package/dist/tui/footer.js +80 -0
- package/dist/tui/formatting/edit-diff.d.ts +11 -0
- package/dist/tui/formatting/edit-diff.js +52 -0
- package/dist/tui/formatting/summary.d.ts +43 -0
- package/dist/tui/formatting/summary.js +150 -0
- package/dist/tui/fullscreen.d.ts +48 -0
- package/dist/tui/fullscreen.js +256 -0
- package/dist/tui/image-display.d.ts +23 -0
- package/dist/tui/image-display.js +92 -0
- package/dist/tui/image-paste.d.ts +113 -0
- package/dist/tui/image-paste.js +565 -0
- package/dist/tui/input-history.d.ts +47 -0
- package/dist/tui/input-history.js +250 -0
- package/dist/tui/markdown-style.d.ts +5 -0
- package/dist/tui/markdown-style.js +23 -0
- package/dist/tui/model/composer-buffer.d.ts +55 -0
- package/dist/tui/model/composer-buffer.js +317 -0
- package/dist/tui/model/composer-types.d.ts +17 -0
- package/dist/tui/model/composer-types.js +1 -0
- package/dist/tui/model/display-history.d.ts +78 -0
- package/dist/tui/model/display-history.js +124 -0
- package/dist/tui/model/display-reconstruct.d.ts +3 -0
- package/dist/tui/model/display-reconstruct.js +130 -0
- package/dist/tui/model/file-mentions.d.ts +31 -0
- package/dist/tui/model/file-mentions.js +178 -0
- package/dist/tui/model/image-attachment.d.ts +15 -0
- package/dist/tui/model/image-attachment.js +1 -0
- package/dist/tui/model/image-paste.d.ts +119 -0
- package/dist/tui/model/image-paste.js +610 -0
- package/dist/tui/model/input-history.d.ts +1 -0
- package/dist/tui/model/input-history.js +1 -0
- package/dist/tui/model/input-queue.d.ts +12 -0
- package/dist/tui/model/input-queue.js +17 -0
- package/dist/tui/model/key-events.d.ts +9 -0
- package/dist/tui/model/key-events.js +8 -0
- package/dist/tui/model/paste-operation-tracker.d.ts +13 -0
- package/dist/tui/model/paste-operation-tracker.js +25 -0
- package/dist/tui/model/recent-activity.d.ts +8 -0
- package/dist/tui/model/recent-activity.js +71 -0
- package/dist/tui/model/subagent-view.d.ts +87 -0
- package/dist/tui/model/subagent-view.js +336 -0
- package/dist/tui/model/submit-dedupe.d.ts +5 -0
- package/dist/tui/model/submit-dedupe.js +25 -0
- package/dist/tui/model/sync-output.d.ts +17 -0
- package/dist/tui/model/sync-output.js +35 -0
- package/dist/tui/model/task-lifecycle.d.ts +57 -0
- package/dist/tui/model/task-lifecycle.js +124 -0
- package/dist/tui/model/terminal-env.d.ts +15 -0
- package/dist/tui/model/terminal-env.js +22 -0
- package/dist/tui/model/terminal-mouse.d.ts +28 -0
- package/dist/tui/model/terminal-mouse.js +82 -0
- package/dist/tui/model/theme-style.d.ts +10 -0
- package/dist/tui/model/theme-style.js +79 -0
- package/dist/tui/model/theme.d.ts +72 -0
- package/dist/tui/model/theme.js +121 -0
- package/dist/tui/model/trace-groups.d.ts +45 -0
- package/dist/tui/model/trace-groups.js +558 -0
- package/dist/tui/model/trace-interaction.d.ts +63 -0
- package/dist/tui/model/trace-interaction.js +87 -0
- package/dist/tui/model/width.d.ts +18 -0
- package/dist/tui/model/width.js +130 -0
- package/dist/tui/model-picker-data.d.ts +9 -0
- package/dist/tui/model-picker-data.js +39 -0
- package/dist/tui/model-switch.d.ts +49 -0
- package/dist/tui/model-switch.js +67 -0
- package/dist/tui/paste-placeholder.d.ts +11 -0
- package/dist/tui/paste-placeholder.js +52 -0
- package/dist/tui/recent-activity.d.ts +8 -0
- package/dist/tui/recent-activity.js +71 -0
- package/dist/tui/run-session-picker.d.ts +9 -0
- package/dist/tui/run-session-picker.js +64 -0
- package/dist/tui/run.d.ts +72 -0
- package/dist/tui/run.js +139 -0
- package/dist/tui/session-display.d.ts +6 -0
- package/dist/tui/session-display.js +12 -0
- package/dist/tui/session-picker-data.d.ts +18 -0
- package/dist/tui/session-picker-data.js +21 -0
- package/dist/tui/terminal/multiplexer.d.ts +5 -0
- package/dist/tui/terminal/multiplexer.js +14 -0
- package/dist/tui/testing/fake-agent.d.ts +24 -0
- package/dist/tui/testing/fake-agent.js +22 -0
- package/dist/tui/testing/spy-host.d.ts +21 -0
- package/dist/tui/testing/spy-host.js +55 -0
- package/dist/tui/trace-groups.d.ts +43 -0
- package/dist/tui/trace-groups.js +554 -0
- package/dist/tui/wordmark.d.ts +18 -0
- package/dist/tui/wordmark.js +208 -0
- package/dist/types.d.ts +503 -0
- package/dist/types.js +4 -0
- package/dist/update/index.d.ts +61 -0
- package/dist/update/index.js +267 -0
- package/dist/variant/thinking-level.d.ts +5 -0
- package/dist/variant/thinking-level.js +26 -0
- package/dist/variant/variant-resolver.d.ts +28 -0
- package/dist/variant/variant-resolver.js +62 -0
- package/node_modules/@bubblebrain-ai/pi-tui/LICENSE +21 -0
- package/node_modules/@bubblebrain-ai/pi-tui/README.md +854 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.d.ts +26 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.js +121 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/alt-screen-search.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.d.ts +86 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.js +649 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/autocomplete.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.d.ts +13 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.js +36 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/alt-screen-flash.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.d.ts +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.js +99 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/box.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.d.ts +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.js +36 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/cancellable-loader.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.d.ts +330 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.js +2344 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/editor.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.d.ts +7 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.js +43 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/h-stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.d.ts +28 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.js +82 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/image.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.d.ts +48 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.js +390 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/input.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.d.ts +31 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.js +67 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/loader.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.d.ts +103 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.js +797 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/markdown.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.d.ts +56 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.js +179 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/scroll-view.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.d.ts +53 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.js +175 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/select-list.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.d.ts +50 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.js +174 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/settings-list.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.d.ts +12 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.js +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/spacer.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.d.ts +32 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.js +109 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.d.ts +19 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.js +81 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/text.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.d.ts +13 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.js +48 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/truncated-text.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.d.ts +8 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.js +26 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/components/v-stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.d.ts +39 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.js +2 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/editor-component.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.d.ts +16 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.js +110 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/fuzzy.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.d.ts +31 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.js +42 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/index.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.d.ts +273 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.js +231 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keybindings.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.d.ts +184 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.js +1174 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/keys.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.d.ts +28 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.js +46 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/kill-ring.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.d.ts +10 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.js +1268 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/latex.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.d.ts +40 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.js +6 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout-node.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.d.ts +42 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.js +335 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/layout.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.d.ts +3 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.js +60 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/native-modifiers.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.d.ts +56 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.js +363 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/stdin-buffer.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.d.ts +10 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.js +59 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-colors.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.d.ts +116 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.js +518 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal-image.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.d.ts +142 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.js +544 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/terminal.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.d.ts +11 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.js +11 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/testing.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.d.ts +141 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.js +1340 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-alt-screen.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.d.ts +39 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.js +536 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui-main-screen.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.d.ts +340 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.js +1020 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/tui.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.d.ts +17 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.js +27 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/undo-stack.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.d.ts +96 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.js +1193 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/utils.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.d.ts +25 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.js +96 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/src/word-navigation.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.d.ts +73 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.d.ts.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.js +188 -0
- package/node_modules/@bubblebrain-ai/pi-tui/dist/test/virtual-terminal.js.map +1 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/README.md +20 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/build.sh +62 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/prebuilds/darwin-arm64/darwin-modifiers.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/prebuilds/darwin-x64/darwin-modifiers.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/darwin/src/darwin-modifiers.c +70 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/README.md +22 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/build.mjs +229 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
- package/node_modules/@bubblebrain-ai/pi-tui/native/win32/src/win32-console-mode.c +119 -0
- package/node_modules/@bubblebrain-ai/pi-tui/package.json +66 -0
- package/node_modules/get-east-asian-width/index.d.ts +60 -0
- package/node_modules/get-east-asian-width/index.js +30 -0
- package/node_modules/get-east-asian-width/license +9 -0
- package/node_modules/get-east-asian-width/lookup-data.js +21 -0
- package/node_modules/get-east-asian-width/lookup.js +138 -0
- package/node_modules/get-east-asian-width/package.json +71 -0
- package/node_modules/get-east-asian-width/readme.md +65 -0
- package/node_modules/get-east-asian-width/utilities.js +24 -0
- package/node_modules/marked/LICENSE +44 -0
- package/node_modules/marked/README.md +115 -0
- package/node_modules/marked/bin/main.js +284 -0
- package/node_modules/marked/bin/marked.js +16 -0
- package/node_modules/marked/lib/marked.d.ts +760 -0
- package/node_modules/marked/lib/marked.esm.js +77 -0
- package/node_modules/marked/lib/marked.esm.js.map +7 -0
- package/node_modules/marked/lib/marked.umd.js +79 -0
- package/node_modules/marked/lib/marked.umd.js.map +7 -0
- package/node_modules/marked/man/marked.1 +113 -0
- package/node_modules/marked/man/marked.1.md +93 -0
- package/node_modules/marked/package.json +103 -0
- package/package.json +96 -17
- package/bin/bubble.js +0 -39
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
|
+
import { getBubbleHome } from "../bubble-home.js";
|
|
5
|
+
export function getPermissionTrustPath(options = {}) {
|
|
6
|
+
return join(options.bubbleHome ?? getBubbleHome(), "permissions-trust.json");
|
|
7
|
+
}
|
|
8
|
+
export function repoCapabilities(raw) {
|
|
9
|
+
const settings = isRecord(raw) ? raw : {};
|
|
10
|
+
const permissions = isRecord(settings.permissions) ? settings.permissions : {};
|
|
11
|
+
const allow = Array.isArray(permissions.allow)
|
|
12
|
+
? permissions.allow.filter((rule) => typeof rule === "string")
|
|
13
|
+
: [];
|
|
14
|
+
const mcpServers = isRecord(settings.mcpServers) ? Object.keys(settings.mcpServers) : [];
|
|
15
|
+
const lspServers = isRecord(settings.lsp)
|
|
16
|
+
? Object.entries(settings.lsp)
|
|
17
|
+
.filter(([, server]) => isRecord(server) && Object.keys(server).some((key) => key !== "disabled"))
|
|
18
|
+
.map(([id]) => id)
|
|
19
|
+
: [];
|
|
20
|
+
return { allow, mcpServers, lspServers };
|
|
21
|
+
}
|
|
22
|
+
/** Everything the given repository settings would enable, both scopes merged. */
|
|
23
|
+
export function mergedRepoCapabilities(raw) {
|
|
24
|
+
const project = repoCapabilities(raw.project);
|
|
25
|
+
const local = repoCapabilities(raw.local);
|
|
26
|
+
return {
|
|
27
|
+
allow: [...project.allow, ...local.allow],
|
|
28
|
+
mcpServers: [...new Set([...project.mcpServers, ...local.mcpServers])],
|
|
29
|
+
lspServers: [...new Set([...project.lspServers, ...local.lspServers])],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function describeRepoCapabilities(caps) {
|
|
33
|
+
return [
|
|
34
|
+
...caps.allow.map((rule) => `allow rule ${rule}`),
|
|
35
|
+
...caps.mcpServers.map((name) => `MCP server ${name} (Bubble starts it)`),
|
|
36
|
+
...caps.lspServers.map((id) => `LSP server ${id} (custom command, env or options)`),
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
export function hasRepoCapabilities(raw) {
|
|
40
|
+
return [raw.project, raw.local].some((scope) => {
|
|
41
|
+
const caps = repoCapabilities(scope);
|
|
42
|
+
return caps.allow.length + caps.mcpServers.length + caps.lspServers.length > 0;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
export function repoConfigFingerprint(cwd, raw) {
|
|
46
|
+
const pick = (scope) => {
|
|
47
|
+
const settings = isRecord(scope) ? scope : {};
|
|
48
|
+
const permissions = isRecord(settings.permissions) ? settings.permissions : {};
|
|
49
|
+
return { allow: permissions.allow ?? null, mcpServers: settings.mcpServers ?? null, lsp: settings.lsp ?? null };
|
|
50
|
+
};
|
|
51
|
+
return createHash("sha256")
|
|
52
|
+
.update(JSON.stringify({ cwd: safeRealpath(cwd), project: pick(raw.project), local: pick(raw.local) }))
|
|
53
|
+
.digest("hex");
|
|
54
|
+
}
|
|
55
|
+
/** True when the repository grants nothing, or the user trusted exactly this content. */
|
|
56
|
+
export function isRepoConfigTrusted(cwd, raw, options = {}) {
|
|
57
|
+
if (!hasRepoCapabilities(raw))
|
|
58
|
+
return true;
|
|
59
|
+
return readStore(options).projects[safeRealpath(cwd)]?.fingerprint === repoConfigFingerprint(cwd, raw);
|
|
60
|
+
}
|
|
61
|
+
export function trustRepoConfig(cwd, raw, options = {}) {
|
|
62
|
+
const store = readStore(options);
|
|
63
|
+
store.projects[safeRealpath(cwd)] = {
|
|
64
|
+
fingerprint: repoConfigFingerprint(cwd, raw),
|
|
65
|
+
trustedAt: new Date().toISOString(),
|
|
66
|
+
};
|
|
67
|
+
const path = getPermissionTrustPath(options);
|
|
68
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
69
|
+
writeFileSync(path, JSON.stringify(store, null, 2) + "\n", "utf-8");
|
|
70
|
+
}
|
|
71
|
+
/** Reads both repository settings files; unparsable files count as absent. */
|
|
72
|
+
export function readRepoSettings(cwd) {
|
|
73
|
+
const read = (path) => {
|
|
74
|
+
if (!existsSync(path))
|
|
75
|
+
return null;
|
|
76
|
+
try {
|
|
77
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
project: read(join(cwd, ".bubble", "settings.json")),
|
|
85
|
+
local: read(join(cwd, ".bubble", "settings.local.json")),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function readStore(options) {
|
|
89
|
+
const path = getPermissionTrustPath(options);
|
|
90
|
+
if (!existsSync(path))
|
|
91
|
+
return { version: 1, projects: {} };
|
|
92
|
+
try {
|
|
93
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
94
|
+
if (parsed && typeof parsed.projects === "object" && parsed.projects !== null) {
|
|
95
|
+
return { version: 1, projects: parsed.projects };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// A corrupt store trusts nothing.
|
|
100
|
+
}
|
|
101
|
+
return { version: 1, projects: {} };
|
|
102
|
+
}
|
|
103
|
+
function isRecord(value) {
|
|
104
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
105
|
+
}
|
|
106
|
+
function safeRealpath(path) {
|
|
107
|
+
try {
|
|
108
|
+
return realpathSync(path);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return resolve(path);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission rule system — types.
|
|
3
|
+
*
|
|
4
|
+
* A rule is one entry from the `allow` / `deny` arrays of a settings file:
|
|
5
|
+
*
|
|
6
|
+
* "Bash" → any bash command
|
|
7
|
+
* "Bash(git status)" → exact command
|
|
8
|
+
* "Bash(npm run:*)" → prefix (anything starting with `npm run`)
|
|
9
|
+
* "Read(./src/**)" → glob on resolved path
|
|
10
|
+
* "Read(~/.ssh/**)" → tilde expanded
|
|
11
|
+
* "WebFetch(domain:github.com)" → URL host match (suffix)
|
|
12
|
+
* "*" → any tool
|
|
13
|
+
*/
|
|
14
|
+
export type ToolName = "Bash" | "Read" | "Write" | "Edit" | "Lsp" | "WebFetch" | "WebSearch" | string;
|
|
15
|
+
export interface PermissionRule {
|
|
16
|
+
/** Tool this rule applies to, or "*" for all tools. */
|
|
17
|
+
tool: ToolName | "*";
|
|
18
|
+
/** Tool-specific pattern. Absent means "match any use of this tool". */
|
|
19
|
+
pattern?: string;
|
|
20
|
+
/** Original rule text as written in config, for display and diagnostics. */
|
|
21
|
+
source: string;
|
|
22
|
+
}
|
|
23
|
+
export interface PermissionRuleSet {
|
|
24
|
+
allow: PermissionRule[];
|
|
25
|
+
deny: PermissionRule[];
|
|
26
|
+
}
|
|
27
|
+
export type PermissionDecision = "allow" | "deny" | "ask";
|
|
28
|
+
/**
|
|
29
|
+
* Discriminated input to the matcher. Tools only provide the fields they have.
|
|
30
|
+
*/
|
|
31
|
+
export type PermissionQuery = {
|
|
32
|
+
tool: "Bash";
|
|
33
|
+
command: string;
|
|
34
|
+
} | {
|
|
35
|
+
tool: "Read" | "Write" | "Edit" | "Lsp";
|
|
36
|
+
path: string;
|
|
37
|
+
cwd: string;
|
|
38
|
+
} | {
|
|
39
|
+
tool: "WebFetch";
|
|
40
|
+
url: string;
|
|
41
|
+
} | {
|
|
42
|
+
tool: "WebSearch";
|
|
43
|
+
} | {
|
|
44
|
+
tool: string;
|
|
45
|
+
};
|
|
46
|
+
export interface PermissionCheckResult {
|
|
47
|
+
decision: PermissionDecision;
|
|
48
|
+
/** Rule that produced the decision, if any. */
|
|
49
|
+
rule?: PermissionRule;
|
|
50
|
+
}
|
|
51
|
+
export interface RuleParseError {
|
|
52
|
+
source: string;
|
|
53
|
+
message: string;
|
|
54
|
+
}
|
|
55
|
+
export type ParsedRule = {
|
|
56
|
+
ok: true;
|
|
57
|
+
rule: PermissionRule;
|
|
58
|
+
} | {
|
|
59
|
+
ok: false;
|
|
60
|
+
error: RuleParseError;
|
|
61
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission rule system — types.
|
|
3
|
+
*
|
|
4
|
+
* A rule is one entry from the `allow` / `deny` arrays of a settings file:
|
|
5
|
+
*
|
|
6
|
+
* "Bash" → any bash command
|
|
7
|
+
* "Bash(git status)" → exact command
|
|
8
|
+
* "Bash(npm run:*)" → prefix (anything starting with `npm run`)
|
|
9
|
+
* "Read(./src/**)" → glob on resolved path
|
|
10
|
+
* "Read(~/.ssh/**)" → tilde expanded
|
|
11
|
+
* "WebFetch(domain:github.com)" → URL host match (suffix)
|
|
12
|
+
* "*" → any tool
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured output for print mode (`-p --output-format json`).
|
|
3
|
+
*
|
|
4
|
+
* Built for benchmark/CI adapters (Pier, terminal-bench): stdout carries
|
|
5
|
+
* exactly one JSON object; all human-facing noise goes to stderr. Field
|
|
6
|
+
* names follow the grok-build/Claude Code convention (text, stopReason,
|
|
7
|
+
* sessionId, usage.{input_tokens,...}, num_turns) so existing harness
|
|
8
|
+
* adapters port with minimal changes.
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentEvent } from "./types.js";
|
|
11
|
+
export type PrintOutputFormat = "plain" | "json";
|
|
12
|
+
export declare function parseOutputFormat(raw: string | undefined): PrintOutputFormat | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Anthropic's usage decomposition, which the field names already claimed to
|
|
15
|
+
* follow: the four token buckets are DISJOINT and sum to `total_tokens`.
|
|
16
|
+
*
|
|
17
|
+
* input_tokens + cache_read_input_tokens + cache_creation_input_tokens
|
|
18
|
+
* + output_tokens === total_tokens
|
|
19
|
+
*
|
|
20
|
+
* `input_tokens` is therefore the uncached remainder only — it does NOT include
|
|
21
|
+
* cache reads. It used to carry the whole prompt total, which was harmless while
|
|
22
|
+
* cache reads were a flat few thousand tokens per turn, but message-level prompt
|
|
23
|
+
* caching makes reads 70-90% of the prompt, and a harness that priced
|
|
24
|
+
* `input_tokens` at the full input rate would then overstate cost ~2x.
|
|
25
|
+
*/
|
|
26
|
+
export interface PrintUsageSummary {
|
|
27
|
+
input_tokens: number;
|
|
28
|
+
cache_read_input_tokens: number;
|
|
29
|
+
cache_creation_input_tokens: number;
|
|
30
|
+
output_tokens: number;
|
|
31
|
+
reasoning_tokens: number;
|
|
32
|
+
total_tokens: number;
|
|
33
|
+
}
|
|
34
|
+
export interface PrintRunSummary {
|
|
35
|
+
/** Final answer: the last turn's streamed text. */
|
|
36
|
+
text: string;
|
|
37
|
+
num_turns: number;
|
|
38
|
+
num_tool_calls: number;
|
|
39
|
+
usage: PrintUsageSummary;
|
|
40
|
+
/**
|
|
41
|
+
* False when no turn carried provider usage (some endpoints — notably the
|
|
42
|
+
* Grok subscription proxy — omit it): zeros then mean "not reported",
|
|
43
|
+
* not "free". Mirrors the goal engine's markTokenUsageUnavailable and
|
|
44
|
+
* grok-build's usage_is_incomplete convention.
|
|
45
|
+
*/
|
|
46
|
+
usage_reported: boolean;
|
|
47
|
+
}
|
|
48
|
+
export declare class PrintRunCollector {
|
|
49
|
+
private turnText;
|
|
50
|
+
private lastTurnText;
|
|
51
|
+
private turns;
|
|
52
|
+
private toolCalls;
|
|
53
|
+
private usageReported;
|
|
54
|
+
private readonly usage;
|
|
55
|
+
onEvent(event: AgentEvent): void;
|
|
56
|
+
private addUsage;
|
|
57
|
+
summary(): PrintRunSummary;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Harness-observed change footprint of the run (git ground truth). Printed
|
|
61
|
+
* by the harness, not the model — a run cannot omit or misstate what it
|
|
62
|
+
* touched ("no breaking changes" next to deleted test assertions).
|
|
63
|
+
*/
|
|
64
|
+
export interface PrintChangeSummary {
|
|
65
|
+
changed_files: number;
|
|
66
|
+
modified_existing_tests: Array<{
|
|
67
|
+
path: string;
|
|
68
|
+
deleted_lines: number;
|
|
69
|
+
}>;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Per-path counts of context compactions during the run. Lets benchmark
|
|
73
|
+
* harnesses correlate outcomes with "did the model ever lose sight of the
|
|
74
|
+
* full history" without access to the in-container session files.
|
|
75
|
+
*/
|
|
76
|
+
export interface PrintCompactionStats {
|
|
77
|
+
resident: number;
|
|
78
|
+
subturn: number;
|
|
79
|
+
llm: number;
|
|
80
|
+
overflow: number;
|
|
81
|
+
/** Successful compaction computations incl. rejected rewrites (churn signal). */
|
|
82
|
+
fired: number;
|
|
83
|
+
droppedMessages: number;
|
|
84
|
+
}
|
|
85
|
+
export declare function formatPrintJson(input: {
|
|
86
|
+
summary: PrintRunSummary;
|
|
87
|
+
sessionId?: string;
|
|
88
|
+
stopReason?: "end_turn" | "error" | "cancelled";
|
|
89
|
+
compaction?: PrintCompactionStats;
|
|
90
|
+
changes?: PrintChangeSummary;
|
|
91
|
+
}): string;
|
|
92
|
+
export declare function formatPrintJsonError(input: {
|
|
93
|
+
message: string;
|
|
94
|
+
summary?: PrintRunSummary;
|
|
95
|
+
sessionId?: string;
|
|
96
|
+
compaction?: PrintCompactionStats;
|
|
97
|
+
changes?: PrintChangeSummary;
|
|
98
|
+
}): string;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured output for print mode (`-p --output-format json`).
|
|
3
|
+
*
|
|
4
|
+
* Built for benchmark/CI adapters (Pier, terminal-bench): stdout carries
|
|
5
|
+
* exactly one JSON object; all human-facing noise goes to stderr. Field
|
|
6
|
+
* names follow the grok-build/Claude Code convention (text, stopReason,
|
|
7
|
+
* sessionId, usage.{input_tokens,...}, num_turns) so existing harness
|
|
8
|
+
* adapters port with minimal changes.
|
|
9
|
+
*/
|
|
10
|
+
export function parseOutputFormat(raw) {
|
|
11
|
+
if (raw === undefined)
|
|
12
|
+
return undefined;
|
|
13
|
+
if (raw === "plain" || raw === "json")
|
|
14
|
+
return raw;
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
export class PrintRunCollector {
|
|
18
|
+
turnText = "";
|
|
19
|
+
lastTurnText = "";
|
|
20
|
+
turns = 0;
|
|
21
|
+
toolCalls = 0;
|
|
22
|
+
usageReported = false;
|
|
23
|
+
usage = {
|
|
24
|
+
input_tokens: 0,
|
|
25
|
+
cache_read_input_tokens: 0,
|
|
26
|
+
cache_creation_input_tokens: 0,
|
|
27
|
+
output_tokens: 0,
|
|
28
|
+
reasoning_tokens: 0,
|
|
29
|
+
total_tokens: 0,
|
|
30
|
+
};
|
|
31
|
+
onEvent(event) {
|
|
32
|
+
switch (event.type) {
|
|
33
|
+
case "turn_start":
|
|
34
|
+
this.turns += 1;
|
|
35
|
+
this.turnText = "";
|
|
36
|
+
break;
|
|
37
|
+
case "text_delta":
|
|
38
|
+
this.turnText += event.content;
|
|
39
|
+
break;
|
|
40
|
+
case "provider_retry":
|
|
41
|
+
// The retried response supersedes the partial text.
|
|
42
|
+
this.turnText = "";
|
|
43
|
+
break;
|
|
44
|
+
case "tool_start":
|
|
45
|
+
this.toolCalls += 1;
|
|
46
|
+
break;
|
|
47
|
+
case "turn_end":
|
|
48
|
+
// Usage reaches AgentEvent only on turn_end (the stream-level
|
|
49
|
+
// "usage" chunk is aggregated into it by the agent loop).
|
|
50
|
+
if (this.turnText.trim())
|
|
51
|
+
this.lastTurnText = this.turnText;
|
|
52
|
+
if (event.usage)
|
|
53
|
+
this.addUsage(event.usage);
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
addUsage(usage) {
|
|
60
|
+
this.usageReported = true;
|
|
61
|
+
const prompt = usage.promptTokens ?? 0;
|
|
62
|
+
const cacheRead = usage.promptCacheHitTokens ?? 0;
|
|
63
|
+
// promptCacheMissTokens already includes creation, so creation has to be
|
|
64
|
+
// netted out of the uncached remainder rather than added alongside it.
|
|
65
|
+
const cacheCreation = usage.cacheCreationTokens ?? 0;
|
|
66
|
+
const uncached = usage.promptCacheMissTokens !== undefined
|
|
67
|
+
? Math.max(0, usage.promptCacheMissTokens - cacheCreation)
|
|
68
|
+
: Math.max(0, prompt - cacheRead - cacheCreation);
|
|
69
|
+
this.usage.input_tokens += uncached;
|
|
70
|
+
this.usage.cache_read_input_tokens += cacheRead;
|
|
71
|
+
this.usage.cache_creation_input_tokens += cacheCreation;
|
|
72
|
+
this.usage.output_tokens += usage.completionTokens ?? 0;
|
|
73
|
+
this.usage.reasoning_tokens += usage.reasoningTokens ?? 0;
|
|
74
|
+
this.usage.total_tokens += usage.totalTokens
|
|
75
|
+
?? ((usage.promptTokens ?? 0) + (usage.completionTokens ?? 0));
|
|
76
|
+
}
|
|
77
|
+
summary() {
|
|
78
|
+
return {
|
|
79
|
+
text: (this.lastTurnText || this.turnText).trim(),
|
|
80
|
+
num_turns: this.turns,
|
|
81
|
+
num_tool_calls: this.toolCalls,
|
|
82
|
+
usage: { ...this.usage },
|
|
83
|
+
usage_reported: this.usageReported,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function formatPrintJson(input) {
|
|
88
|
+
return JSON.stringify({
|
|
89
|
+
text: input.summary.text,
|
|
90
|
+
stopReason: input.stopReason ?? "end_turn",
|
|
91
|
+
...(input.sessionId ? { sessionId: input.sessionId } : {}),
|
|
92
|
+
num_turns: input.summary.num_turns,
|
|
93
|
+
num_tool_calls: input.summary.num_tool_calls,
|
|
94
|
+
usage: input.summary.usage,
|
|
95
|
+
usage_reported: input.summary.usage_reported,
|
|
96
|
+
...(input.compaction ? { compaction: input.compaction } : {}),
|
|
97
|
+
...(input.changes ? { changes: input.changes } : {}),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
export function formatPrintJsonError(input) {
|
|
101
|
+
return JSON.stringify({
|
|
102
|
+
type: "error",
|
|
103
|
+
message: input.message,
|
|
104
|
+
stopReason: "error",
|
|
105
|
+
...(input.sessionId ? { sessionId: input.sessionId } : {}),
|
|
106
|
+
...(input.summary
|
|
107
|
+
? {
|
|
108
|
+
text: input.summary.text,
|
|
109
|
+
num_turns: input.summary.num_turns,
|
|
110
|
+
num_tool_calls: input.summary.num_tool_calls,
|
|
111
|
+
usage: input.summary.usage,
|
|
112
|
+
}
|
|
113
|
+
: {}),
|
|
114
|
+
...(input.compaction ? { compaction: input.compaction } : {}),
|
|
115
|
+
...(input.changes ? { changes: input.changes } : {}),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PermissionMode, ThinkingLevel } from "../types.js";
|
|
2
|
+
import { type EnvironmentPromptOptions } from "./environment.js";
|
|
3
|
+
import type { SkillSummary } from "../skills/types.js";
|
|
4
|
+
export interface ComposeSystemPromptOptions extends EnvironmentPromptOptions {
|
|
5
|
+
agentName?: string;
|
|
6
|
+
guidelines?: string[];
|
|
7
|
+
thinkingLevel?: ThinkingLevel;
|
|
8
|
+
mode?: PermissionMode;
|
|
9
|
+
/** Prompt-visible skills; when given (and `skill` is a tool), listed as a catalog. */
|
|
10
|
+
skills?: SkillSummary[];
|
|
11
|
+
/** Catalog budget in characters (default SKILL_CATALOG_CHARS); 0 falls back to search only. */
|
|
12
|
+
skillCatalogChars?: number;
|
|
13
|
+
memoryPrompt?: string;
|
|
14
|
+
agentProfilePrompt?: string;
|
|
15
|
+
/** Rendered subagent model-routing menu (design §4). Placed right after the
|
|
16
|
+
* delegation policy and gated the same way: spawn_agent present. */
|
|
17
|
+
modelRoutingPrompt?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function composeSystemPrompt(options?: ComposeSystemPromptOptions): string;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { buildAnthropicProviderPrompt } from "./provider-prompts/anthropic.js";
|
|
2
|
+
import { buildCodexProviderPrompt } from "./provider-prompts/codex.js";
|
|
3
|
+
import { buildDefaultProviderPrompt } from "./provider-prompts/default.js";
|
|
4
|
+
import { buildDeepSeekProviderPrompt } from "./provider-prompts/deepseek.js";
|
|
5
|
+
import { buildGeminiProviderPrompt } from "./provider-prompts/gemini.js";
|
|
6
|
+
import { buildGlmProviderPrompt } from "./provider-prompts/glm.js";
|
|
7
|
+
import { buildGptProviderPrompt } from "./provider-prompts/gpt.js";
|
|
8
|
+
import { buildKimiProviderPrompt } from "./provider-prompts/kimi.js";
|
|
9
|
+
import { buildDelegationPolicyPrompt } from "./delegation.js";
|
|
10
|
+
import { buildEnvironmentPrompt, defaultToolNames } from "./environment.js";
|
|
11
|
+
import { buildRuntimePrompt } from "./runtime.js";
|
|
12
|
+
import { buildSkillCatalog } from "../skills/format.js";
|
|
13
|
+
export function composeSystemPrompt(options = {}) {
|
|
14
|
+
const agentName = options.agentName ?? "Bubble";
|
|
15
|
+
const providerPrompt = buildProviderPrompt(agentName, options.configuredProvider, options.configuredModelId, options.configuredModel);
|
|
16
|
+
const environmentPrompt = buildEnvironmentPrompt({
|
|
17
|
+
configuredProvider: options.configuredProvider,
|
|
18
|
+
configuredModel: options.configuredModel,
|
|
19
|
+
configuredModelId: options.configuredModelId,
|
|
20
|
+
workingDir: options.workingDir,
|
|
21
|
+
currentDate: options.currentDate,
|
|
22
|
+
tools: options.tools ?? defaultToolNames,
|
|
23
|
+
toolSnippets: options.toolSnippets,
|
|
24
|
+
});
|
|
25
|
+
const tools = options.tools ?? defaultToolNames;
|
|
26
|
+
// Level one of skill loading: names and one-line descriptions are always in
|
|
27
|
+
// context; bodies load on demand with `skill`. Last section, so the prefix
|
|
28
|
+
// above stays byte-identical while the skill set is unchanged.
|
|
29
|
+
const skillCatalog = options.skills && tools.includes("skill")
|
|
30
|
+
? buildSkillCatalog(options.skills, {
|
|
31
|
+
budgetChars: options.skillCatalogChars,
|
|
32
|
+
searchable: tools.includes("skill_search"),
|
|
33
|
+
})
|
|
34
|
+
: undefined;
|
|
35
|
+
const runtimePrompt = buildRuntimePrompt({
|
|
36
|
+
thinkingLevel: options.thinkingLevel,
|
|
37
|
+
mode: options.mode,
|
|
38
|
+
guidelines: buildGuidelines(tools, options.guidelines ?? [], skillCatalog),
|
|
39
|
+
});
|
|
40
|
+
const delegationPrompt = buildDelegationPolicyPrompt(options.tools ?? defaultToolNames);
|
|
41
|
+
// Same gate as the delegation policy: children (no spawn_agent) never see the menu.
|
|
42
|
+
const modelRoutingPrompt = delegationPrompt ? options.modelRoutingPrompt : undefined;
|
|
43
|
+
return [
|
|
44
|
+
providerPrompt,
|
|
45
|
+
environmentPrompt,
|
|
46
|
+
runtimePrompt,
|
|
47
|
+
delegationPrompt,
|
|
48
|
+
modelRoutingPrompt,
|
|
49
|
+
options.agentProfilePrompt,
|
|
50
|
+
options.memoryPrompt,
|
|
51
|
+
skillCatalog?.text,
|
|
52
|
+
].filter(Boolean).join("\n\n");
|
|
53
|
+
}
|
|
54
|
+
function buildProviderPrompt(agentName, providerId, modelId, modelName) {
|
|
55
|
+
const provider = providerId ?? "";
|
|
56
|
+
const rawModel = modelId ?? modelName ?? "";
|
|
57
|
+
const model = rawModel.includes(":") ? rawModel.split(":").slice(1).join(":") : rawModel;
|
|
58
|
+
const lowerModel = model.toLowerCase();
|
|
59
|
+
if (provider === "anthropic" || provider === "minimax" || provider.endsWith("-anthropic") || model.startsWith("claude")) {
|
|
60
|
+
return buildAnthropicProviderPrompt(agentName);
|
|
61
|
+
}
|
|
62
|
+
if (provider === "google" || model.startsWith("gemini")) {
|
|
63
|
+
return buildGeminiProviderPrompt(agentName);
|
|
64
|
+
}
|
|
65
|
+
if (provider === "openai-codex" || model.includes("codex") || model.startsWith("gpt-5")) {
|
|
66
|
+
return buildCodexProviderPrompt(agentName);
|
|
67
|
+
}
|
|
68
|
+
if (provider === "deepseek" || model.startsWith("deepseek")) {
|
|
69
|
+
return buildDeepSeekProviderPrompt(agentName);
|
|
70
|
+
}
|
|
71
|
+
if (["moonshot-cn", "moonshot-intl", "kimi-for-coding"].includes(provider) || lowerModel.includes("kimi") || lowerModel.includes("k2.")) {
|
|
72
|
+
return buildKimiProviderPrompt(agentName);
|
|
73
|
+
}
|
|
74
|
+
if (["zhipuai", "zhipuai-coding-plan", "zai", "zai-coding-plan"].includes(provider) || model.startsWith("glm")) {
|
|
75
|
+
return buildGlmProviderPrompt(agentName);
|
|
76
|
+
}
|
|
77
|
+
if (provider === "openai" || provider === "openrouter" || model.startsWith("gpt") || model.startsWith("o1")) {
|
|
78
|
+
return buildGptProviderPrompt(agentName);
|
|
79
|
+
}
|
|
80
|
+
return buildDefaultProviderPrompt(agentName);
|
|
81
|
+
}
|
|
82
|
+
function buildGuidelines(tools, extraGuidelines, skillCatalog) {
|
|
83
|
+
const guidelines = [];
|
|
84
|
+
const add = (item) => {
|
|
85
|
+
if (!guidelines.includes(item)) {
|
|
86
|
+
guidelines.push(item);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
if (tools.includes("ls")) {
|
|
90
|
+
add("Use ls to list directory contents, including files and subdirectories");
|
|
91
|
+
}
|
|
92
|
+
if (tools.includes("grep")) {
|
|
93
|
+
add("Use grep to search file contents");
|
|
94
|
+
}
|
|
95
|
+
if (tools.includes("bash")) {
|
|
96
|
+
add("Use bash for file operations like ls, find, and rg when appropriate");
|
|
97
|
+
}
|
|
98
|
+
if (tools.includes("question")) {
|
|
99
|
+
add("When the user is explicitly discussing, brainstorming, or shaping an approach instead of asking for immediate execution, use the question tool for targeted clarification or preference choices when it would materially improve the discussion; do not use it for generic permission-to-proceed questions");
|
|
100
|
+
}
|
|
101
|
+
// With a catalog the Skills section itself says how to load; search remains
|
|
102
|
+
// the only route when the host gave no catalog or turned it off.
|
|
103
|
+
if (!skillCatalog?.listed && tools.includes("skill_search") && tools.includes("skill")) {
|
|
104
|
+
add("Skills may provide specialized workflows. When a task appears to match a specialized workflow, call skill_search to find relevant skills, then call skill with the exact name to load the selected skill before applying it");
|
|
105
|
+
}
|
|
106
|
+
for (const item of extraGuidelines) {
|
|
107
|
+
add(item);
|
|
108
|
+
}
|
|
109
|
+
return guidelines;
|
|
110
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delegation policy section for the parent agent's system prompt.
|
|
3
|
+
*
|
|
4
|
+
* Two-sided by design (review 2026-06-12): positive triggers are quantified
|
|
5
|
+
* and read-only-scoped, negative clauses get equal weight — the user's hard
|
|
6
|
+
* constraint is "proactive, but never delegate-everything". Gated on the
|
|
7
|
+
* delegation tools being present, so child agents (whose tool sets never
|
|
8
|
+
* include spawn_agent/run_workflow) never see it.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Returns the delegation policy section when the agent actually has the
|
|
12
|
+
* delegation tools; child agents and stripped-down tool sets get nothing.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildDelegationPolicyPrompt(tools: string[]): string | undefined;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delegation policy section for the parent agent's system prompt.
|
|
3
|
+
*
|
|
4
|
+
* Two-sided by design (review 2026-06-12): positive triggers are quantified
|
|
5
|
+
* and read-only-scoped, negative clauses get equal weight — the user's hard
|
|
6
|
+
* constraint is "proactive, but never delegate-everything". Gated on the
|
|
7
|
+
* delegation tools being present, so child agents (whose tool sets never
|
|
8
|
+
* include spawn_agent/run_workflow) never see it.
|
|
9
|
+
*/
|
|
10
|
+
const DELEGATION_POLICY = `## Delegation policy (subagents)
|
|
11
|
+
|
|
12
|
+
You can delegate work two ways: a single background subagent (spawn_agent),
|
|
13
|
+
or an orchestration script coordinating many subagents (run_workflow).
|
|
14
|
+
Delegate deliberately, not by default.
|
|
15
|
+
|
|
16
|
+
Explicit requests win, before any other rule: when the user names a
|
|
17
|
+
coordinated multi-agent run in any phrasing — a workflow, an orchestration,
|
|
18
|
+
an agent team, "fan out agents" — that means run_workflow, NOT a row of
|
|
19
|
+
spawn_agent calls. When they ask for a subagent, spawn one. Only when the
|
|
20
|
+
user has not named a mechanism do you choose by shape (below).
|
|
21
|
+
|
|
22
|
+
Delegate when:
|
|
23
|
+
- An investigation will clearly require more than four search or read
|
|
24
|
+
operations, or spans multiple files and patterns, and the conversation only
|
|
25
|
+
needs the conclusion — delegate to a subagent so the intermediate noise
|
|
26
|
+
stays out of the main context. Launch multiple subagents concurrently for
|
|
27
|
+
independent questions.
|
|
28
|
+
- The task fans out over many independent items (review, audit, summarize
|
|
29
|
+
across files, modules, endpoints) or needs staged orchestration — consider
|
|
30
|
+
run_workflow. Choose by shape, not by rule: a handful of subagents whose
|
|
31
|
+
results you want to read and react to individually favor spawn_agent; a
|
|
32
|
+
uniform sweep over many items, results that should be aggregated or
|
|
33
|
+
filtered before they reach this conversation, or control flow between
|
|
34
|
+
stages (pipelines, loops, retry rounds) favor a run_workflow script — each
|
|
35
|
+
member's full handoff stays out of your context and the script returns one
|
|
36
|
+
digested result. Inside parallel()/pipeline(), a failed agent() resolves to
|
|
37
|
+
null — report which items came back null instead of silently dropping them.
|
|
38
|
+
A bare "await agent(...)" outside those combinators PROPAGATES its error
|
|
39
|
+
and fails the whole run: keep must-not-die steps (a final synthesis, the
|
|
40
|
+
last aggregation) inside parallel([...]) or a try/catch so one member's
|
|
41
|
+
failure cannot discard every other member's finished work.
|
|
42
|
+
- A side-investigation is independent of your current main-line work and can
|
|
43
|
+
run in the background while you continue.
|
|
44
|
+
|
|
45
|
+
Briefing a subagent: it starts with zero context, so the task message must be
|
|
46
|
+
a self-contained work order — state the goal, list everything you already
|
|
47
|
+
know, and write known file paths or commands directly into the task. Never
|
|
48
|
+
outsource knowledge you already hold: if the task hinges on a specific path
|
|
49
|
+
or line number, pin it down yourself first and put it in the briefing. When
|
|
50
|
+
earlier work lives in an existing subagent, prefer send_input to resume it
|
|
51
|
+
over spawning a fresh one.
|
|
52
|
+
|
|
53
|
+
Do NOT delegate when:
|
|
54
|
+
- The edits are ENTANGLED — shared state, one file feeding the next, order
|
|
55
|
+
matters. Write delegation exists (the builtin "implementer" profile runs
|
|
56
|
+
in an isolated git worktree), but it only pays off for INDEPENDENT edit
|
|
57
|
+
groups with disjoint file sets. Worktree children fork from the last
|
|
58
|
+
commit and the parent reviews/applies their changes afterward; entangled
|
|
59
|
+
work through that contract only adds merge risk — do it yourself.
|
|
60
|
+
- The task takes one or two tool calls (reading a single file, looking up one
|
|
61
|
+
definition). The handoff overhead costs more than the task.
|
|
62
|
+
- Doing it well depends on conversation context (preferences the user stated
|
|
63
|
+
this session, decisions made in this discussion). Subagents start without
|
|
64
|
+
the conversation, and fork_context is not the fix: it copies only a recent
|
|
65
|
+
slice of the history, re-pays it as child tokens, and still loses earlier
|
|
66
|
+
decisions — do context-heavy work yourself.
|
|
67
|
+
- You already read the relevant files in this conversation; a subagent would
|
|
68
|
+
re-read everything from scratch.
|
|
69
|
+
- You already delegated it. Never redo delegated work locally, and never
|
|
70
|
+
re-spawn the same task to a second subagent.
|
|
71
|
+
|
|
72
|
+
When in doubt about a one-off task, do it yourself. When a task is clearly
|
|
73
|
+
the same read-only operation over three or more independent items — where
|
|
74
|
+
each item alone would take more than a couple of tool calls — prefer
|
|
75
|
+
run_workflow over doing them sequentially yourself. For just two small items,
|
|
76
|
+
do them yourself with parallel tool calls.
|
|
77
|
+
|
|
78
|
+
Routing (model per child): match each child's model to its task, not to
|
|
79
|
+
habit. Mechanical fan-out work — scanning, grepping, summarizing single
|
|
80
|
+
files, format checks, data extraction — belongs on category "quick" or
|
|
81
|
+
"explore", or an explicit fast-tier model from the routing menu; spawning
|
|
82
|
+
many children that all inherit a strong parent model is waste. Judgment
|
|
83
|
+
work — reviewing, adjudicating between findings, synthesizing a final
|
|
84
|
+
answer, subtle debugging — keeps the parent's model: do NOT downgrade it
|
|
85
|
+
to save cost. When unsure, inherit. Follow the routing menu's rules on
|
|
86
|
+
which model ids are valid and whether cross-provider routing is available.
|
|
87
|
+
Cross-provider (provider:model) is for a reason, not a habit: use it when
|
|
88
|
+
the user names a provider or a task clearly plays to another provider's
|
|
89
|
+
strength; tier labels do not compare across providers, so a cross-provider
|
|
90
|
+
pick is a judgment call you should be able to justify. Same-provider is
|
|
91
|
+
the default frame.`;
|
|
92
|
+
/**
|
|
93
|
+
* Returns the delegation policy section when the agent actually has the
|
|
94
|
+
* delegation tools; child agents and stripped-down tool sets get nothing.
|
|
95
|
+
*/
|
|
96
|
+
export function buildDelegationPolicyPrompt(tools) {
|
|
97
|
+
if (!tools.includes("spawn_agent"))
|
|
98
|
+
return undefined;
|
|
99
|
+
return DELEGATION_POLICY;
|
|
100
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface EnvironmentPromptOptions {
|
|
2
|
+
configuredProvider?: string;
|
|
3
|
+
configuredModel?: string;
|
|
4
|
+
configuredModelId?: string;
|
|
5
|
+
workingDir?: string;
|
|
6
|
+
currentDate?: string;
|
|
7
|
+
tools?: string[];
|
|
8
|
+
toolSnippets?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export declare const defaultToolSnippets: Record<string, string>;
|
|
11
|
+
export declare const defaultToolNames: string[];
|
|
12
|
+
export declare function buildEnvironmentPrompt(options?: EnvironmentPromptOptions): string;
|