@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,56 @@
|
|
|
1
|
+
const POLICY_MAP = {
|
|
2
|
+
search: {
|
|
3
|
+
type: "search",
|
|
4
|
+
allowedTools: ["read", "ls", "grep", "web_search", "web_fetch", "skill"],
|
|
5
|
+
reminder: [
|
|
6
|
+
"Subtask policy: search",
|
|
7
|
+
"- Focus on locating relevant files, symbols, and evidence quickly.",
|
|
8
|
+
"- Use ls for directory contents and grep for content search.",
|
|
9
|
+
"- Return a concise summary of what you found and where.",
|
|
10
|
+
].join("\n"),
|
|
11
|
+
resultStatus: "success",
|
|
12
|
+
taskBudget: { total: 180_000 },
|
|
13
|
+
},
|
|
14
|
+
security_investigation: {
|
|
15
|
+
type: "security_investigation",
|
|
16
|
+
allowedTools: ["read", "ls", "grep", "web_search", "web_fetch", "skill"],
|
|
17
|
+
reminder: [
|
|
18
|
+
"Subtask policy: security_investigation",
|
|
19
|
+
"- Investigate only in read-only mode.",
|
|
20
|
+
"- Collect evidence about config load paths, environment reads, persistence paths, masking, and exposure paths.",
|
|
21
|
+
"- Do not loop on broad keyword search; summarize evidence and uncertainty.",
|
|
22
|
+
].join("\n"),
|
|
23
|
+
resultStatus: "success",
|
|
24
|
+
taskBudget: { total: 220_000 },
|
|
25
|
+
},
|
|
26
|
+
evidence_correlation: {
|
|
27
|
+
type: "evidence_correlation",
|
|
28
|
+
allowedTools: ["read", "skill"],
|
|
29
|
+
reminder: [
|
|
30
|
+
"Subtask policy: evidence_correlation",
|
|
31
|
+
"- Correlate evidence already discovered.",
|
|
32
|
+
"- Avoid new broad searches; read only the specific files that matter.",
|
|
33
|
+
"- Produce a reasoning-focused summary that states what the evidence supports.",
|
|
34
|
+
].join("\n"),
|
|
35
|
+
resultStatus: "success",
|
|
36
|
+
taskBudget: { total: 120_000 },
|
|
37
|
+
},
|
|
38
|
+
general_readonly: {
|
|
39
|
+
type: "general_readonly",
|
|
40
|
+
allowedTools: ["read", "ls", "grep", "web_search", "web_fetch", "skill"],
|
|
41
|
+
reminder: [
|
|
42
|
+
"Subtask policy: general_readonly",
|
|
43
|
+
"- Stay in read-only mode.",
|
|
44
|
+
"- Keep the scope tightly bounded and summarize findings concisely.",
|
|
45
|
+
].join("\n"),
|
|
46
|
+
resultStatus: "success",
|
|
47
|
+
taskBudget: { total: 180_000 },
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
export function getSubtaskPolicy(type) {
|
|
51
|
+
return POLICY_MAP[type ?? "general_readonly"];
|
|
52
|
+
}
|
|
53
|
+
export function filterToolsForSubtask(tools, type) {
|
|
54
|
+
const policy = getSubtaskPolicy(type);
|
|
55
|
+
return tools.filter((tool) => policy.allowedTools.includes(tool.name));
|
|
56
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background-task lifecycle reminder (background-tasks design §2.3a).
|
|
3
|
+
*
|
|
4
|
+
* Emission is STATE-CHANGE gated, never per-model-call: the reminder channel
|
|
5
|
+
* is append-only (each injection is a persistent meta message that survives
|
|
6
|
+
* pruning and compaction), so the caller compares the manager's task state
|
|
7
|
+
* version and builds a reminder only when the owned task set changed since
|
|
8
|
+
* the last emission. This mirrors the subagent lifecycle reminder's activity
|
|
9
|
+
* gate rather than firing while tasks are merely alive.
|
|
10
|
+
*
|
|
11
|
+
* Because compaction preserves meta messages but drops session markers, this
|
|
12
|
+
* reminder is also how the model recovers task ids after /compact.
|
|
13
|
+
*/
|
|
14
|
+
import type { BackgroundTaskInfo } from "../tasks/manager.js";
|
|
15
|
+
export interface TaskReminderInput {
|
|
16
|
+
tasks: BackgroundTaskInfo[];
|
|
17
|
+
outputTail: (id: string) => string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* The task tools are already unlocked (the spawn path calls
|
|
20
|
+
* unlockDeferredTools). When true the tool_search hint is dropped — field
|
|
21
|
+
* test 2026-07-19 showed the unconditional hint makes the model burn a
|
|
22
|
+
* tool_search call for tools it already has.
|
|
23
|
+
*/
|
|
24
|
+
toolsAvailable?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function buildTaskLifecycleReminder({ tasks, outputTail, toolsAvailable }: TaskReminderInput): string | undefined;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background-task lifecycle reminder (background-tasks design §2.3a).
|
|
3
|
+
*
|
|
4
|
+
* Emission is STATE-CHANGE gated, never per-model-call: the reminder channel
|
|
5
|
+
* is append-only (each injection is a persistent meta message that survives
|
|
6
|
+
* pruning and compaction), so the caller compares the manager's task state
|
|
7
|
+
* version and builds a reminder only when the owned task set changed since
|
|
8
|
+
* the last emission. This mirrors the subagent lifecycle reminder's activity
|
|
9
|
+
* gate rather than firing while tasks are merely alive.
|
|
10
|
+
*
|
|
11
|
+
* Because compaction preserves meta messages but drops session markers, this
|
|
12
|
+
* reminder is also how the model recovers task ids after /compact.
|
|
13
|
+
*/
|
|
14
|
+
const OUTPUT_TAIL_CHARS = 2000;
|
|
15
|
+
export function buildTaskLifecycleReminder({ tasks, outputTail, toolsAvailable }) {
|
|
16
|
+
if (tasks.length === 0)
|
|
17
|
+
return undefined;
|
|
18
|
+
const running = tasks.filter((task) => task.status === "running");
|
|
19
|
+
const finishedUndelivered = tasks.filter((task) => task.status !== "running" && task.deliveredAt === undefined);
|
|
20
|
+
const finishedDelivered = tasks.filter((task) => task.status !== "running" && task.deliveredAt !== undefined);
|
|
21
|
+
if (running.length === 0 && finishedUndelivered.length === 0 && finishedDelivered.length === 0) {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
const lines = ["Background task truth:"];
|
|
25
|
+
for (const task of running) {
|
|
26
|
+
const elapsed = Math.round((Date.now() - task.startedAt) / 1000);
|
|
27
|
+
lines.push(`- running: ${task.id} (${label(task)}, ${elapsed}s elapsed)`);
|
|
28
|
+
}
|
|
29
|
+
for (const task of finishedUndelivered) {
|
|
30
|
+
const elapsed = Math.round(((task.endedAt ?? Date.now()) - task.startedAt) / 1000);
|
|
31
|
+
lines.push(`- finished since last update: ${task.id} (${label(task)}) ${task.status}${task.exitCode != null ? ` exit ${task.exitCode}` : ""} in ${elapsed}s`);
|
|
32
|
+
const tail = outputTail(task.id)?.trim();
|
|
33
|
+
if (tail) {
|
|
34
|
+
lines.push(` output tail:`);
|
|
35
|
+
lines.push(...clampTail(tail).split("\n").map((line) => ` ${line}`));
|
|
36
|
+
lines.push(" Call task_output only if you need more of the output.");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Delivered final results already reached the model in full — id + status
|
|
40
|
+
// only, never the output again (mirrors the subagent delivered demotion).
|
|
41
|
+
for (const task of finishedDelivered) {
|
|
42
|
+
lines.push(`- delivered: ${task.id} ${task.status}${task.exitCode != null ? ` (exit ${task.exitCode})` : ""}`);
|
|
43
|
+
}
|
|
44
|
+
lines.push(toolsAvailable
|
|
45
|
+
? "- Check tasks with task_output; stop them with kill_task. Both are already in your tool list — do NOT call tool_search for them."
|
|
46
|
+
: "- Check tasks with task_output; stop them with kill_task (deferred: load via tool_search with query 'select:task_output,kill_task' if not yet available).");
|
|
47
|
+
lines.push("- Never re-run work a finished task already did; never poll with foreground sleep.");
|
|
48
|
+
return lines.join("\n");
|
|
49
|
+
}
|
|
50
|
+
function label(task) {
|
|
51
|
+
return task.description?.trim() || truncate(task.command, 60);
|
|
52
|
+
}
|
|
53
|
+
function clampTail(tail) {
|
|
54
|
+
return tail.length <= OUTPUT_TAIL_CHARS ? tail : `…${tail.slice(-OUTPUT_TAIL_CHARS)}`;
|
|
55
|
+
}
|
|
56
|
+
function truncate(value, max) {
|
|
57
|
+
const oneLine = value.replace(/\s+/g, " ").trim();
|
|
58
|
+
return oneLine.length <= max ? oneLine : `${oneLine.slice(0, max - 1)}…`;
|
|
59
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ParsedToolCall } from "../types.js";
|
|
2
|
+
export type ToolFamily = "search" | "read" | "write" | "edit" | "shell" | "web" | "other";
|
|
3
|
+
export interface SearchIntent {
|
|
4
|
+
pattern: string;
|
|
5
|
+
path?: string;
|
|
6
|
+
include?: string;
|
|
7
|
+
signature: string;
|
|
8
|
+
familyKey: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ReadIntent {
|
|
11
|
+
path: string;
|
|
12
|
+
offset?: number | string;
|
|
13
|
+
limit?: number | string;
|
|
14
|
+
signature: string;
|
|
15
|
+
familyKey: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ToolIntent {
|
|
18
|
+
family: ToolFamily;
|
|
19
|
+
search?: SearchIntent;
|
|
20
|
+
read?: ReadIntent;
|
|
21
|
+
}
|
|
22
|
+
export declare function analyzeToolIntent(toolCall: Pick<ParsedToolCall, "name" | "parsedArgs">): ToolIntent;
|
|
23
|
+
export interface ParsedSearchCommand {
|
|
24
|
+
pattern: string;
|
|
25
|
+
path?: string;
|
|
26
|
+
include?: string;
|
|
27
|
+
/**
|
|
28
|
+
* True only when a structured-grep rewrite would execute EXACTLY what the
|
|
29
|
+
* model asked for. False whenever anything was dropped or reinterpreted:
|
|
30
|
+
* unknown flags (-i, -A, -w, ...), --iglob (case-insensitivity lost),
|
|
31
|
+
* --include under rg (not an rg flag - a faithful run would error), more
|
|
32
|
+
* than one path, or the `grep` binary itself (BRE dialect vs the tool's
|
|
33
|
+
* rg engine). Observation (intent classification) tolerates lossy parses;
|
|
34
|
+
* execution rewriting must not (tool-arbiter).
|
|
35
|
+
*/
|
|
36
|
+
lossless: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface ParsedReadCommand {
|
|
39
|
+
path: string;
|
|
40
|
+
offset?: number | string;
|
|
41
|
+
limit?: number | string;
|
|
42
|
+
}
|
|
43
|
+
export declare function parseSearchBashCommand(command: string): ParsedSearchCommand | undefined;
|
|
44
|
+
export declare function parseReadBashCommand(command: string): ParsedReadCommand | undefined;
|
|
45
|
+
export declare function shellSplit(command: string): string[];
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
const SEARCH_TOKEN_CANONICAL = new Map([
|
|
2
|
+
["api_key", "secret"],
|
|
3
|
+
["apikey", "secret"],
|
|
4
|
+
["api", "secret"],
|
|
5
|
+
["key", "secret"],
|
|
6
|
+
["keys", "secret"],
|
|
7
|
+
["secret", "secret"],
|
|
8
|
+
["secrets", "secret"],
|
|
9
|
+
["token", "secret"],
|
|
10
|
+
["tokens", "secret"],
|
|
11
|
+
["credential", "secret"],
|
|
12
|
+
["credentials", "secret"],
|
|
13
|
+
["auth", "secret"],
|
|
14
|
+
["password", "secret"],
|
|
15
|
+
["passwd", "secret"],
|
|
16
|
+
["bearer", "secret"],
|
|
17
|
+
["env", "config"],
|
|
18
|
+
["config", "config"],
|
|
19
|
+
["dotenv", "config"],
|
|
20
|
+
]);
|
|
21
|
+
export function analyzeToolIntent(toolCall) {
|
|
22
|
+
switch (toolCall.name) {
|
|
23
|
+
case "glob":
|
|
24
|
+
return {
|
|
25
|
+
family: "search",
|
|
26
|
+
search: buildSearchIntent(stringArg(toolCall.parsedArgs.pattern), stringArg(toolCall.parsedArgs.path)),
|
|
27
|
+
};
|
|
28
|
+
case "grep":
|
|
29
|
+
return {
|
|
30
|
+
family: "search",
|
|
31
|
+
search: buildSearchIntent(stringArg(toolCall.parsedArgs.pattern), stringArg(toolCall.parsedArgs.path), stringArg(toolCall.parsedArgs.glob)),
|
|
32
|
+
};
|
|
33
|
+
case "bash": {
|
|
34
|
+
const parsed = parseSearchBashCommand(stringArg(toolCall.parsedArgs.command));
|
|
35
|
+
if (parsed) {
|
|
36
|
+
return {
|
|
37
|
+
family: "search",
|
|
38
|
+
search: buildSearchIntent(parsed.pattern, parsed.path, parsed.include),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const parsedRead = parseReadBashCommand(stringArg(toolCall.parsedArgs.command));
|
|
42
|
+
if (parsedRead) {
|
|
43
|
+
return {
|
|
44
|
+
family: "read",
|
|
45
|
+
read: buildReadIntent(parsedRead.path, parsedRead.offset, parsedRead.limit),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return { family: "shell" };
|
|
49
|
+
}
|
|
50
|
+
case "read":
|
|
51
|
+
return {
|
|
52
|
+
family: "read",
|
|
53
|
+
read: buildReadIntent(stringArg(toolCall.parsedArgs.path ?? toolCall.parsedArgs.file), numberOrStringArg(toolCall.parsedArgs.offset), numberOrStringArg(toolCall.parsedArgs.limit)),
|
|
54
|
+
};
|
|
55
|
+
case "write":
|
|
56
|
+
return { family: "write" };
|
|
57
|
+
case "edit":
|
|
58
|
+
return { family: "edit" };
|
|
59
|
+
case "web_search":
|
|
60
|
+
case "web_fetch":
|
|
61
|
+
return { family: "web" };
|
|
62
|
+
default:
|
|
63
|
+
return { family: "other" };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function parseSearchBashCommand(command) {
|
|
67
|
+
const trimmed = command.trim();
|
|
68
|
+
if (!trimmed) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
if (/[|;&><`]/.test(trimmed)) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const tokens = shellSplit(trimmed);
|
|
75
|
+
if (tokens.length === 0) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const binary = tokens[0];
|
|
79
|
+
if (!["grep", "rg", "ripgrep"].includes(binary)) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
// The structured grep tool shells out to rg, so only rg-origin commands
|
|
83
|
+
// can be dialect-identical; GNU grep patterns are BRE and must not be
|
|
84
|
+
// silently re-executed under rg's Rust regex engine.
|
|
85
|
+
let lossless = binary !== "grep";
|
|
86
|
+
const positional = [];
|
|
87
|
+
let include;
|
|
88
|
+
for (let index = 1; index < tokens.length; index++) {
|
|
89
|
+
const token = tokens[index];
|
|
90
|
+
if (!token)
|
|
91
|
+
continue;
|
|
92
|
+
if (token === "--glob" || token === "--iglob" || token === "--include") {
|
|
93
|
+
include = tokens[index + 1];
|
|
94
|
+
// --iglob loses case-insensitivity in translation; --include is not an
|
|
95
|
+
// rg flag at all (a faithful run would error, and hiding that from the
|
|
96
|
+
// model masks its mistake). Only --glob maps 1:1 onto the tool.
|
|
97
|
+
if (token !== "--glob")
|
|
98
|
+
lossless = false;
|
|
99
|
+
index += 1;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (token.startsWith("--glob=") || token.startsWith("--iglob=") || token.startsWith("--include=")) {
|
|
103
|
+
include = token.slice(token.indexOf("=") + 1);
|
|
104
|
+
if (!token.startsWith("--glob="))
|
|
105
|
+
lossless = false;
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (token.startsWith("-")) {
|
|
109
|
+
// Any other flag (-i, -A 3, -w, -l, ...) has no representation in the
|
|
110
|
+
// structured tool; dropping it would change the search's meaning.
|
|
111
|
+
lossless = false;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
positional.push(token);
|
|
115
|
+
}
|
|
116
|
+
if (positional.length === 0) {
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
// A third positional (multiple search roots) cannot be expressed either.
|
|
120
|
+
if (positional.length > 2)
|
|
121
|
+
lossless = false;
|
|
122
|
+
const [pattern, maybePath] = positional;
|
|
123
|
+
return {
|
|
124
|
+
pattern,
|
|
125
|
+
path: maybePath,
|
|
126
|
+
include,
|
|
127
|
+
lossless,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export function parseReadBashCommand(command) {
|
|
131
|
+
const trimmed = command.trim();
|
|
132
|
+
if (!trimmed) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
if (/[|;&><`]/.test(trimmed)) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const tokens = shellSplit(trimmed);
|
|
139
|
+
if (tokens.length === 0) {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
const binary = tokens[0];
|
|
143
|
+
if (binary === "cat" || binary === "nl") {
|
|
144
|
+
const path = lastPositional(tokens.slice(1));
|
|
145
|
+
return path ? { path } : undefined;
|
|
146
|
+
}
|
|
147
|
+
if (binary === "head") {
|
|
148
|
+
const { path, lineCount } = parseHeadTailArgs(tokens.slice(1));
|
|
149
|
+
return path ? { path, offset: 1, limit: lineCount ?? "head" } : undefined;
|
|
150
|
+
}
|
|
151
|
+
if (binary === "tail") {
|
|
152
|
+
const { path, lineCount } = parseHeadTailArgs(tokens.slice(1));
|
|
153
|
+
return path ? { path, offset: `tail:${lineCount ?? "default"}`, limit: lineCount ?? "tail" } : undefined;
|
|
154
|
+
}
|
|
155
|
+
if (binary === "sed") {
|
|
156
|
+
return parseSedReadCommand(tokens.slice(1));
|
|
157
|
+
}
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
function buildSearchIntent(pattern, path, include) {
|
|
161
|
+
const normalizedPath = normalizePath(path ?? ".");
|
|
162
|
+
const rawNormalizedPattern = normalizeRawPattern(pattern);
|
|
163
|
+
const normalizedTokens = canonicalizeSearchTokens(pattern);
|
|
164
|
+
const signature = `${normalizedPath}::${include ?? "*"}::${rawNormalizedPattern || normalizedTokens.join("|")}`;
|
|
165
|
+
const familyTokens = normalizedTokens.filter((token) => token === "secret" || token === "config");
|
|
166
|
+
const familyKey = `${normalizedPath}::${familyTokens.join("|") || normalizedTokens.slice(0, 3).join("|") || "generic-search"}`;
|
|
167
|
+
return {
|
|
168
|
+
pattern,
|
|
169
|
+
path,
|
|
170
|
+
include,
|
|
171
|
+
signature,
|
|
172
|
+
familyKey,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function buildReadIntent(path, offset, limit) {
|
|
176
|
+
const normalizedPath = normalizePath(path || ".");
|
|
177
|
+
const normalizedOffset = offset ?? 1;
|
|
178
|
+
const normalizedLimit = limit ?? "default";
|
|
179
|
+
return {
|
|
180
|
+
path,
|
|
181
|
+
offset,
|
|
182
|
+
limit,
|
|
183
|
+
signature: `${normalizedPath}::${normalizedOffset}::${normalizedLimit}`,
|
|
184
|
+
familyKey: normalizedPath,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function canonicalizeSearchTokens(pattern) {
|
|
188
|
+
const normalized = normalizeRawPattern(pattern);
|
|
189
|
+
const tokens = normalized.split(/[^a-z0-9_]+/).filter(Boolean);
|
|
190
|
+
const canonical = new Set();
|
|
191
|
+
for (const token of tokens) {
|
|
192
|
+
canonical.add(SEARCH_TOKEN_CANONICAL.get(token) ?? token);
|
|
193
|
+
}
|
|
194
|
+
return [...canonical].sort();
|
|
195
|
+
}
|
|
196
|
+
function normalizeRawPattern(pattern) {
|
|
197
|
+
return pattern.trim().toLowerCase().replace(/\\s\+/g, " ").replace(/\s+/g, " ");
|
|
198
|
+
}
|
|
199
|
+
function normalizePath(pathValue) {
|
|
200
|
+
return pathValue.trim().replace(/\\/g, "/").replace(/\/+/g, "/");
|
|
201
|
+
}
|
|
202
|
+
function stringArg(value) {
|
|
203
|
+
return typeof value === "string" ? value : "";
|
|
204
|
+
}
|
|
205
|
+
function numberOrStringArg(value) {
|
|
206
|
+
return typeof value === "number" || typeof value === "string" ? value : undefined;
|
|
207
|
+
}
|
|
208
|
+
function lastPositional(tokens) {
|
|
209
|
+
for (let index = tokens.length - 1; index >= 0; index--) {
|
|
210
|
+
const token = tokens[index];
|
|
211
|
+
if (!token.startsWith("-")) {
|
|
212
|
+
return token;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
function parseHeadTailArgs(tokens) {
|
|
218
|
+
let lineCount;
|
|
219
|
+
const positional = [];
|
|
220
|
+
for (let index = 0; index < tokens.length; index++) {
|
|
221
|
+
const token = tokens[index];
|
|
222
|
+
if (token === "-n" || token === "--lines") {
|
|
223
|
+
lineCount = parseLineCount(tokens[index + 1]);
|
|
224
|
+
index += 1;
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (token.startsWith("-n") && token.length > 2) {
|
|
228
|
+
lineCount = parseLineCount(token.slice(2));
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
if (token.startsWith("--lines=")) {
|
|
232
|
+
lineCount = parseLineCount(token.slice("--lines=".length));
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (token.startsWith("-")) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
positional.push(token);
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
path: positional[positional.length - 1],
|
|
242
|
+
lineCount,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function parseSedReadCommand(tokens) {
|
|
246
|
+
const positional = [];
|
|
247
|
+
for (const token of tokens) {
|
|
248
|
+
if (token === "-n" || token.startsWith("-")) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
positional.push(token);
|
|
252
|
+
}
|
|
253
|
+
if (positional.length < 2) {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
const expression = positional[0];
|
|
257
|
+
const path = positional[positional.length - 1];
|
|
258
|
+
const range = expression.match(/^(\d+)(?:,(\d+))?p$/);
|
|
259
|
+
if (!range) {
|
|
260
|
+
return { path, offset: expression };
|
|
261
|
+
}
|
|
262
|
+
const start = Number(range[1]);
|
|
263
|
+
const end = range[2] ? Number(range[2]) : start;
|
|
264
|
+
return {
|
|
265
|
+
path,
|
|
266
|
+
offset: start,
|
|
267
|
+
limit: Math.max(1, end - start + 1),
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
function parseLineCount(value) {
|
|
271
|
+
if (!value) {
|
|
272
|
+
return undefined;
|
|
273
|
+
}
|
|
274
|
+
const parsed = Number(value.replace(/^\+/, ""));
|
|
275
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
|
|
276
|
+
}
|
|
277
|
+
export function shellSplit(command) {
|
|
278
|
+
const tokens = [];
|
|
279
|
+
let current = "";
|
|
280
|
+
let quote = null;
|
|
281
|
+
let escaped = false;
|
|
282
|
+
for (const char of command) {
|
|
283
|
+
if (escaped) {
|
|
284
|
+
current += char;
|
|
285
|
+
escaped = false;
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
if (char === "\\") {
|
|
289
|
+
escaped = true;
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
if (quote) {
|
|
293
|
+
if (char === quote) {
|
|
294
|
+
quote = null;
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
current += char;
|
|
298
|
+
}
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (char === "'" || char === '"') {
|
|
302
|
+
quote = char;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
if (/\s/.test(char)) {
|
|
306
|
+
if (current) {
|
|
307
|
+
tokens.push(current);
|
|
308
|
+
current = "";
|
|
309
|
+
}
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
current += char;
|
|
313
|
+
}
|
|
314
|
+
if (current) {
|
|
315
|
+
tokens.push(current);
|
|
316
|
+
}
|
|
317
|
+
return tokens;
|
|
318
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript visibility of tool results.
|
|
3
|
+
*
|
|
4
|
+
* `hiddenFromTranscript` is a general mechanism: a hook may block a tool call
|
|
5
|
+
* and mark the exchange hidden so it never reaches the model's transcript or
|
|
6
|
+
* the UI. These helpers are the canonical way to test for it.
|
|
7
|
+
*/
|
|
8
|
+
import type { ToolResult, ToolResultMetadata } from "../types.js";
|
|
9
|
+
export declare function isHiddenToolResult(result: ToolResult | undefined): result is ToolResult;
|
|
10
|
+
export declare function isHiddenToolMetadata(metadata: ToolResultMetadata | undefined): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript-level helpers: interrupted-run boundaries, the cancelled-tool
|
|
3
|
+
* sentinel, required-arg validation and the subagent-lifecycle tool-name
|
|
4
|
+
* predicate used when forking context for children.
|
|
5
|
+
*/
|
|
6
|
+
import type { Message, ToolResult } from "../types.js";
|
|
7
|
+
export declare function findMissingRequiredArgs(schema: {
|
|
8
|
+
required?: string[];
|
|
9
|
+
} | undefined, args: Record<string, any> | undefined): string[];
|
|
10
|
+
export declare function shouldAppendModelInterruptedBoundary(messages: Message[]): boolean;
|
|
11
|
+
export declare function createModelInterruptedMessage(_error: unknown, metadata: {
|
|
12
|
+
model: string;
|
|
13
|
+
providerId: string;
|
|
14
|
+
modelId: string;
|
|
15
|
+
}): Extract<Message, {
|
|
16
|
+
role: "assistant";
|
|
17
|
+
}>;
|
|
18
|
+
export declare function lastProviderMessage(messages: Message[]): Message | undefined;
|
|
19
|
+
export declare function cancelledToolResult(toolName: string): ToolResult;
|
|
20
|
+
export declare function isSubagentLifecycleTool(name: string): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export function findMissingRequiredArgs(schema, args) {
|
|
2
|
+
const required = schema?.required;
|
|
3
|
+
if (!required || required.length === 0)
|
|
4
|
+
return [];
|
|
5
|
+
const missing = [];
|
|
6
|
+
for (const name of required) {
|
|
7
|
+
const value = args ? args[name] : undefined;
|
|
8
|
+
// Empty strings/arrays are intentionally allowed — writing an empty file
|
|
9
|
+
// or passing an empty list can be legitimate. Only undefined/null counts
|
|
10
|
+
// as "missing", because the observed failure mode is `finalArgs: "{}"`
|
|
11
|
+
// where the field is entirely absent.
|
|
12
|
+
if (value === undefined || value === null) {
|
|
13
|
+
missing.push(name);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return missing;
|
|
17
|
+
}
|
|
18
|
+
export function shouldAppendModelInterruptedBoundary(messages) {
|
|
19
|
+
return messages.at(-1)?.role === "tool";
|
|
20
|
+
}
|
|
21
|
+
export function createModelInterruptedMessage(_error, metadata) {
|
|
22
|
+
return {
|
|
23
|
+
role: "assistant",
|
|
24
|
+
// This boundary is replayed to future providers and memory extraction.
|
|
25
|
+
// Never copy provider error text into conversational history.
|
|
26
|
+
content: "[model request interrupted before a final answer was produced]",
|
|
27
|
+
model: metadata.model,
|
|
28
|
+
providerId: metadata.providerId,
|
|
29
|
+
modelId: metadata.modelId,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function lastProviderMessage(messages) {
|
|
33
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
34
|
+
const message = messages[i];
|
|
35
|
+
if (message.role === "system" || message.role === "meta")
|
|
36
|
+
continue;
|
|
37
|
+
return message;
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
export function cancelledToolResult(toolName) {
|
|
42
|
+
return {
|
|
43
|
+
content: `Tool "${toolName}" was cancelled.`,
|
|
44
|
+
isError: true,
|
|
45
|
+
status: "cancelled",
|
|
46
|
+
metadata: { reason: "cancelled" },
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export function isSubagentLifecycleTool(name) {
|
|
50
|
+
return name === "subagent"
|
|
51
|
+
|| name === "spawn_agent"
|
|
52
|
+
|| name === "wait_agent"
|
|
53
|
+
|| name === "send_input"
|
|
54
|
+
|| name === "close_agent"
|
|
55
|
+
|| name === "list_agents"
|
|
56
|
+
|| name === "run_workflow"
|
|
57
|
+
|| name === "wait_workflow"
|
|
58
|
+
// Legacy names: still present in transcripts recorded before the tools
|
|
59
|
+
// were removed (2026-07-06); forked children must not inherit their
|
|
60
|
+
// dangling tool_calls either.
|
|
61
|
+
|| name === "agent_team"
|
|
62
|
+
|| name === "agent_batch";
|
|
63
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wake-latched update queue shared by the agent run loop: tool updates,
|
|
3
|
+
* subagent deliveries and workflow completions all park here until the loop
|
|
4
|
+
* is ready to drain them.
|
|
5
|
+
*/
|
|
6
|
+
/** Exported for tests: the wake latch below is easiest to pin directly. */
|
|
7
|
+
export declare function createUpdateQueue<T>(): {
|
|
8
|
+
push(item: T): void;
|
|
9
|
+
drain(): T[];
|
|
10
|
+
hasItems(): boolean;
|
|
11
|
+
wait(signal?: AbortSignal): Promise<"woken" | "aborted">;
|
|
12
|
+
wake(): void;
|
|
13
|
+
};
|