@bubblebrain-ai/bubble 0.0.63 → 0.0.65
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 +399 -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 +256 -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 +584 -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,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tool_search — meta-tool that loads schemas for deferred tools on demand.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors Claude Code's ToolSearch. Two query modes:
|
|
5
|
+
*
|
|
6
|
+
* - "select:a,b,c" → fetch these exact tools by name (ignores ranking)
|
|
7
|
+
* - free text → rank deferred tools by substring match against name
|
|
8
|
+
* and description, return the top N
|
|
9
|
+
*
|
|
10
|
+
* Output is a <functions>…</functions> block containing one
|
|
11
|
+
* `<function>{schema JSON}</function>` per match — the same encoding the
|
|
12
|
+
* provider uses for the tool list at the top of the prompt. The matched
|
|
13
|
+
* tools are also unlocked on the agent so subsequent turns include them in
|
|
14
|
+
* the real tool list.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Without an injected controller, back the tool with the executing agent from
|
|
18
|
+
* the tool context. This keeps tool_search available in EVERY host — a host
|
|
19
|
+
* that forgets to wire a controller must not strand deferred tools behind an
|
|
20
|
+
* unreachable unlock path (Feishu and the desktop bridge hit exactly that
|
|
21
|
+
* with deferred MCP tools).
|
|
22
|
+
*/
|
|
23
|
+
function contextController(ctx) {
|
|
24
|
+
const agent = ctx.agent;
|
|
25
|
+
if (!agent?.listDeferredTools || !agent.unlockDeferredTools)
|
|
26
|
+
return undefined;
|
|
27
|
+
return {
|
|
28
|
+
listDeferred: () => agent.listDeferredTools(),
|
|
29
|
+
unlock: (names) => agent.unlockDeferredTools(names),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function createToolSearchTool(controller) {
|
|
33
|
+
return {
|
|
34
|
+
name: "tool_search",
|
|
35
|
+
readOnly: true,
|
|
36
|
+
effect: "read",
|
|
37
|
+
description: 'Fetches full schema definitions for deferred tools so they can be called. ' +
|
|
38
|
+
'Deferred tools appear by name in hidden runtime reminders; their parameters are unknown ' +
|
|
39
|
+
'until loaded. Use this tool with query "select:<name>[,<name>...]" to load specific tools, ' +
|
|
40
|
+
'or with free-text keywords to search for relevant tools.',
|
|
41
|
+
parameters: {
|
|
42
|
+
type: "object",
|
|
43
|
+
properties: {
|
|
44
|
+
query: {
|
|
45
|
+
type: "string",
|
|
46
|
+
description: 'Query to find deferred tools. Use "select:<name>,<name>" for direct selection, or keywords to search.',
|
|
47
|
+
},
|
|
48
|
+
max_results: {
|
|
49
|
+
type: "number",
|
|
50
|
+
description: "Maximum number of matches to return (default 5).",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
required: ["query"],
|
|
54
|
+
},
|
|
55
|
+
async execute(args, ctx) {
|
|
56
|
+
const resolved = controller ?? contextController(ctx);
|
|
57
|
+
if (!resolved) {
|
|
58
|
+
return { content: "Error: tool_search requires an agent runtime.", isError: true };
|
|
59
|
+
}
|
|
60
|
+
const query = typeof args.query === "string" ? args.query : "";
|
|
61
|
+
const maxResults = typeof args.max_results === "number" && args.max_results > 0
|
|
62
|
+
? Math.min(Math.floor(args.max_results), 25)
|
|
63
|
+
: 5;
|
|
64
|
+
const deferred = resolved.listDeferred();
|
|
65
|
+
if (deferred.length === 0) {
|
|
66
|
+
return { content: "No deferred tools are registered in this session." };
|
|
67
|
+
}
|
|
68
|
+
let matches;
|
|
69
|
+
const selectPrefix = "select:";
|
|
70
|
+
if (query.startsWith(selectPrefix)) {
|
|
71
|
+
const names = new Set(query
|
|
72
|
+
.slice(selectPrefix.length)
|
|
73
|
+
.split(",")
|
|
74
|
+
.map((s) => s.trim())
|
|
75
|
+
.filter(Boolean));
|
|
76
|
+
matches = deferred.filter((t) => names.has(t.name));
|
|
77
|
+
if (matches.length === 0) {
|
|
78
|
+
const available = deferred.map((t) => t.name).join(", ");
|
|
79
|
+
return {
|
|
80
|
+
content: `No deferred tool matched select list. Known deferred tools: ${available}`,
|
|
81
|
+
isError: true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
matches = rankByKeywords(deferred, query).slice(0, maxResults);
|
|
87
|
+
if (matches.length === 0) {
|
|
88
|
+
return {
|
|
89
|
+
content: `No deferred tools matched "${query}". Use query "select:<name>" to fetch by exact name, or try different keywords.`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
resolved.unlock(matches.map((t) => t.name));
|
|
94
|
+
const lines = ["<functions>"];
|
|
95
|
+
for (const tool of matches) {
|
|
96
|
+
const schema = {
|
|
97
|
+
description: tool.description,
|
|
98
|
+
name: tool.name,
|
|
99
|
+
parameters: tool.parameters,
|
|
100
|
+
};
|
|
101
|
+
lines.push(`<function>${JSON.stringify(schema)}</function>`);
|
|
102
|
+
}
|
|
103
|
+
lines.push("</functions>");
|
|
104
|
+
lines.push("");
|
|
105
|
+
lines.push(`Loaded ${matches.length} tool${matches.length === 1 ? "" : "s"}. They are now available and callable on the next turn.`);
|
|
106
|
+
return { content: lines.join("\n") };
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function rankByKeywords(tools, rawQuery) {
|
|
111
|
+
const terms = rawQuery.toLowerCase().split(/\s+/).filter(Boolean);
|
|
112
|
+
if (terms.length === 0)
|
|
113
|
+
return [];
|
|
114
|
+
const requiredTerms = [];
|
|
115
|
+
const optionalTerms = [];
|
|
116
|
+
for (const term of terms) {
|
|
117
|
+
if (term.startsWith("+") && term.length > 1) {
|
|
118
|
+
requiredTerms.push(term.slice(1));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
optionalTerms.push(term);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const scored = [];
|
|
125
|
+
for (const tool of tools) {
|
|
126
|
+
const haystack = `${tool.name} ${tool.description}`.toLowerCase();
|
|
127
|
+
if (!requiredTerms.every((t) => haystack.includes(t)))
|
|
128
|
+
continue;
|
|
129
|
+
let score = 0;
|
|
130
|
+
for (const t of optionalTerms) {
|
|
131
|
+
if (tool.name.toLowerCase().includes(t))
|
|
132
|
+
score += 3;
|
|
133
|
+
if (tool.description.toLowerCase().includes(t))
|
|
134
|
+
score += 1;
|
|
135
|
+
}
|
|
136
|
+
if (requiredTerms.length > 0 && optionalTerms.length === 0) {
|
|
137
|
+
// Required-only query: every required term already matched, surface by name strength.
|
|
138
|
+
score = requiredTerms.reduce((acc, t) => acc + (tool.name.toLowerCase().includes(t) ? 3 : 1), 0);
|
|
139
|
+
}
|
|
140
|
+
if (score > 0)
|
|
141
|
+
scored.push({ tool, score });
|
|
142
|
+
}
|
|
143
|
+
scored.sort((a, b) => b.score - a.score);
|
|
144
|
+
return scored.map((s) => s.tool);
|
|
145
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web fetch tool - remote Exa MCP-backed page extraction.
|
|
3
|
+
*/
|
|
4
|
+
import type { ApprovalController } from "../approval/types.js";
|
|
5
|
+
import type { ToolRegistryEntry } from "../types.js";
|
|
6
|
+
export declare function createWebFetchTool(approval?: ApprovalController): ToolRegistryEntry;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web fetch tool - remote Exa MCP-backed page extraction.
|
|
3
|
+
*/
|
|
4
|
+
import { callExaMcpTool } from "./exa-mcp.js";
|
|
5
|
+
export function createWebFetchTool(approval) {
|
|
6
|
+
return {
|
|
7
|
+
name: "web_fetch",
|
|
8
|
+
readOnly: true,
|
|
9
|
+
effect: "read",
|
|
10
|
+
description: "Fetch and extract the contents of a specific URL using a remote web crawling service.",
|
|
11
|
+
parameters: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
url: { type: "string", description: "The URL to fetch and extract" },
|
|
15
|
+
query: { type: "string", description: "Optional topic to focus the extracted summary/highlights on" },
|
|
16
|
+
maxCharacters: {
|
|
17
|
+
type: "number",
|
|
18
|
+
description: "Maximum number of characters to include in the extracted context",
|
|
19
|
+
},
|
|
20
|
+
livecrawl: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: "Live crawl mode",
|
|
23
|
+
enum: ["never", "fallback", "preferred", "always"],
|
|
24
|
+
},
|
|
25
|
+
livecrawlTimeout: {
|
|
26
|
+
type: "number",
|
|
27
|
+
description: "Maximum live crawl time in milliseconds",
|
|
28
|
+
},
|
|
29
|
+
subpages: {
|
|
30
|
+
type: "number",
|
|
31
|
+
description: "Optional number of linked subpages to fetch as well",
|
|
32
|
+
},
|
|
33
|
+
subpageTarget: {
|
|
34
|
+
type: "string",
|
|
35
|
+
description: "Optional guidance for which subpages matter most",
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ["url"],
|
|
39
|
+
},
|
|
40
|
+
async execute(args) {
|
|
41
|
+
const url = typeof args.url === "string" ? args.url.trim() : "";
|
|
42
|
+
if (!url) {
|
|
43
|
+
return { content: "Error: url is required", isError: true };
|
|
44
|
+
}
|
|
45
|
+
if (approval) {
|
|
46
|
+
const result = approval.checkRules({ tool: "WebFetch", url });
|
|
47
|
+
if (result.decision === "deny") {
|
|
48
|
+
return {
|
|
49
|
+
content: `Error: WebFetch blocked by deny rule: ${result.rule?.source ?? "<unknown>"} (${url})`,
|
|
50
|
+
isError: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const query = typeof args.query === "string" ? args.query.trim() : undefined;
|
|
55
|
+
return callExaMcpTool("crawling_exa", {
|
|
56
|
+
urls: [url],
|
|
57
|
+
livecrawl: typeof args.livecrawl === "string" ? args.livecrawl : "fallback",
|
|
58
|
+
...(typeof args.livecrawlTimeout === "number" ? { livecrawlTimeout: args.livecrawlTimeout } : {}),
|
|
59
|
+
...(typeof args.subpages === "number" ? { subpages: args.subpages } : {}),
|
|
60
|
+
...(typeof args.subpageTarget === "string" && args.subpageTarget.trim()
|
|
61
|
+
? { subpageTarget: args.subpageTarget.trim() }
|
|
62
|
+
: {}),
|
|
63
|
+
text: true,
|
|
64
|
+
context: typeof args.maxCharacters === "number" ? { maxCharacters: args.maxCharacters } : true,
|
|
65
|
+
summary: query ? { query } : true,
|
|
66
|
+
highlights: query
|
|
67
|
+
? {
|
|
68
|
+
query,
|
|
69
|
+
numSentences: 3,
|
|
70
|
+
highlightsPerUrl: 5,
|
|
71
|
+
}
|
|
72
|
+
: undefined,
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web search tool - remote Exa MCP-backed search.
|
|
3
|
+
*/
|
|
4
|
+
import { callExaMcpTool } from "./exa-mcp.js";
|
|
5
|
+
const DEFAULT_RESULTS = 8;
|
|
6
|
+
export function createWebSearchTool() {
|
|
7
|
+
return {
|
|
8
|
+
name: "web_search",
|
|
9
|
+
readOnly: true,
|
|
10
|
+
effect: "read",
|
|
11
|
+
description: "Search the web using a remote search service and return current, structured results.",
|
|
12
|
+
parameters: {
|
|
13
|
+
type: "object",
|
|
14
|
+
properties: {
|
|
15
|
+
query: { type: "string", description: "Web search query" },
|
|
16
|
+
numResults: { type: "number", description: `Number of search results to return (default: ${DEFAULT_RESULTS})` },
|
|
17
|
+
livecrawl: {
|
|
18
|
+
type: "string",
|
|
19
|
+
description: "Live crawl mode",
|
|
20
|
+
enum: ["fallback", "preferred"],
|
|
21
|
+
},
|
|
22
|
+
type: {
|
|
23
|
+
type: "string",
|
|
24
|
+
description: "Search type",
|
|
25
|
+
enum: ["auto", "fast", "deep"],
|
|
26
|
+
},
|
|
27
|
+
contextMaxCharacters: {
|
|
28
|
+
type: "number",
|
|
29
|
+
description: "Maximum number of characters to return in the result context",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ["query"],
|
|
33
|
+
},
|
|
34
|
+
async execute(args) {
|
|
35
|
+
const query = typeof args.query === "string" ? args.query.trim() : "";
|
|
36
|
+
if (!query) {
|
|
37
|
+
return { content: "Error: query is required", isError: true };
|
|
38
|
+
}
|
|
39
|
+
return callExaMcpTool("web_search_exa", {
|
|
40
|
+
query,
|
|
41
|
+
type: typeof args.type === "string" ? args.type : "auto",
|
|
42
|
+
numResults: typeof args.numResults === "number" ? args.numResults : DEFAULT_RESULTS,
|
|
43
|
+
livecrawl: typeof args.livecrawl === "string" ? args.livecrawl : "fallback",
|
|
44
|
+
...(typeof args.contextMaxCharacters === "number"
|
|
45
|
+
? { contextMaxCharacters: args.contextMaxCharacters }
|
|
46
|
+
: {}),
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write tool - create files or replace full file contents.
|
|
3
|
+
*/
|
|
4
|
+
import type { ApprovalController } from "../approval/types.js";
|
|
5
|
+
import type { CheckpointStore } from "../checkpoints.js";
|
|
6
|
+
import type { ToolRegistryEntry } from "../types.js";
|
|
7
|
+
import { type LspService } from "../lsp/index.js";
|
|
8
|
+
import { type FileStateTracker } from "./file-state.js";
|
|
9
|
+
export type WriteToolOptions = Record<string, never>;
|
|
10
|
+
export declare function createWriteTool(cwd: string, _options?: WriteToolOptions, approval?: ApprovalController, lsp?: LspService, fileState?: FileStateTracker, checkpoints?: () => CheckpointStore | undefined): ToolRegistryEntry;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write tool - create files or replace full file contents.
|
|
3
|
+
*/
|
|
4
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
5
|
+
import { dirname } from "node:path";
|
|
6
|
+
import { createTwoFilesPatch } from "diff";
|
|
7
|
+
import { gateToolAction } from "../approval/tool-helper.js";
|
|
8
|
+
import { formatDiagnosticBlocks } from "../lsp/index.js";
|
|
9
|
+
import { isWithinWorkspace } from "./file-state.js";
|
|
10
|
+
import { withFileMutationQueue } from "./file-mutation-queue.js";
|
|
11
|
+
import { resolveToolPath } from "./path-utils.js";
|
|
12
|
+
function prepareWriteArguments(input) {
|
|
13
|
+
if (!input || typeof input !== "object")
|
|
14
|
+
return input;
|
|
15
|
+
const args = { ...input };
|
|
16
|
+
if (typeof args.file_path === "string" && typeof args.path !== "string") {
|
|
17
|
+
args.path = args.file_path;
|
|
18
|
+
}
|
|
19
|
+
return args;
|
|
20
|
+
}
|
|
21
|
+
export function createWriteTool(cwd, _options = {}, approval, lsp, fileState, checkpoints) {
|
|
22
|
+
return {
|
|
23
|
+
name: "write",
|
|
24
|
+
effect: "write_direct",
|
|
25
|
+
requiresApproval: true,
|
|
26
|
+
description: "Write content to a file. Creates parent directories as needed. If the file already exists, this replaces the full file; use edit for small targeted changes.",
|
|
27
|
+
promptSnippet: "Create new files or intentionally rewrite complete files",
|
|
28
|
+
promptGuidelines: [
|
|
29
|
+
"Use write only for new files, generated files, or intentional complete rewrites. Use edit for targeted changes to existing files.",
|
|
30
|
+
],
|
|
31
|
+
parameters: {
|
|
32
|
+
type: "object",
|
|
33
|
+
properties: {
|
|
34
|
+
path: { type: "string", description: "Path to the file (relative or absolute)" },
|
|
35
|
+
content: { type: "string", description: "File contents" },
|
|
36
|
+
},
|
|
37
|
+
required: ["path", "content"],
|
|
38
|
+
},
|
|
39
|
+
prepareArguments: prepareWriteArguments,
|
|
40
|
+
async execute(args) {
|
|
41
|
+
const filePath = resolveToolPath(cwd, args.path);
|
|
42
|
+
// Outside-workspace paths are not blocked outright: the flag escalates
|
|
43
|
+
// the approval request past default-mode auto-approval, so the user
|
|
44
|
+
// decides (bypassPermissions and allow rules still auto-approve, and a
|
|
45
|
+
// worktree child's approval policy still rejects escapes).
|
|
46
|
+
const outsideWorkspace = !isWithinWorkspace(cwd, filePath);
|
|
47
|
+
return withFileMutationQueue(filePath, async () => {
|
|
48
|
+
let existed = false;
|
|
49
|
+
let oldContent = "";
|
|
50
|
+
try {
|
|
51
|
+
oldContent = await readFile(filePath, "utf-8");
|
|
52
|
+
existed = true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// New file.
|
|
56
|
+
}
|
|
57
|
+
const diff = createTwoFilesPatch(filePath, filePath, oldContent, args.content, "original", "modified", { context: 3 });
|
|
58
|
+
const gate = await gateToolAction(approval, {
|
|
59
|
+
type: "write",
|
|
60
|
+
path: filePath,
|
|
61
|
+
content: args.content,
|
|
62
|
+
diff,
|
|
63
|
+
fileExists: existed,
|
|
64
|
+
outsideWorkspace,
|
|
65
|
+
});
|
|
66
|
+
if (!gate.approved)
|
|
67
|
+
return gate.result;
|
|
68
|
+
const changed = await changedSincePreview(filePath, existed, oldContent);
|
|
69
|
+
if (changed) {
|
|
70
|
+
return changedDuringApprovalResult(filePath, changed);
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
await checkpoints?.()?.captureBefore(filePath, existed ? oldContent : null);
|
|
74
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
75
|
+
await writeFile(filePath, args.content, "utf-8");
|
|
76
|
+
await fileState?.observe(filePath, "write", args.content).catch(() => undefined);
|
|
77
|
+
const lineCount = args.content.split("\n").length;
|
|
78
|
+
const verb = existed ? "Updated" : "Wrote";
|
|
79
|
+
let content = `${verb} ${lineCount} lines to ${filePath}`;
|
|
80
|
+
if (lsp) {
|
|
81
|
+
try {
|
|
82
|
+
await lsp.touchFile(filePath, "document");
|
|
83
|
+
content += formatDiagnosticBlocks(cwd, filePath, lsp.diagnostics());
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// LSP diagnostics should not turn a successful write into a failed tool call.
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
content,
|
|
91
|
+
status: "success",
|
|
92
|
+
metadata: {
|
|
93
|
+
kind: "write",
|
|
94
|
+
path: filePath,
|
|
95
|
+
fileExists: existed,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
return { content: `Error: ${err.message}`, isError: true };
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
async function changedSincePreview(filePath, existed, oldContent) {
|
|
107
|
+
try {
|
|
108
|
+
const latest = await readFile(filePath, "utf-8");
|
|
109
|
+
if (!existed)
|
|
110
|
+
return "created";
|
|
111
|
+
return latest === oldContent ? undefined : "changed";
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return existed ? "missing" : undefined;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function changedDuringApprovalResult(filePath, reason) {
|
|
118
|
+
if (reason === "changed") {
|
|
119
|
+
return {
|
|
120
|
+
content: `Error: Cannot safely write ${filePath} because it changed while approval was pending.\n\n`
|
|
121
|
+
+ "Re-read the file and retry the write against the latest content.",
|
|
122
|
+
isError: true,
|
|
123
|
+
status: "blocked",
|
|
124
|
+
metadata: {
|
|
125
|
+
kind: "security",
|
|
126
|
+
path: filePath,
|
|
127
|
+
reason,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
if (reason === "created") {
|
|
132
|
+
return {
|
|
133
|
+
content: `Error: Cannot safely write ${filePath} because it was created while approval was pending.\n\n`
|
|
134
|
+
+ "Re-read the file and retry the write against the latest content.",
|
|
135
|
+
isError: true,
|
|
136
|
+
status: "blocked",
|
|
137
|
+
metadata: {
|
|
138
|
+
kind: "security",
|
|
139
|
+
path: filePath,
|
|
140
|
+
reason,
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
content: `Error: Cannot safely write ${filePath} because it is missing now.\n\n`
|
|
146
|
+
+ "Check the path before retrying.",
|
|
147
|
+
isError: true,
|
|
148
|
+
status: "blocked",
|
|
149
|
+
metadata: {
|
|
150
|
+
kind: "security",
|
|
151
|
+
path: filePath,
|
|
152
|
+
reason,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One clock owns all decorative TUI animation. Components expose pure frame
|
|
3
|
+
* advancement; they never create timers or request renders independently.
|
|
4
|
+
*/
|
|
5
|
+
export declare class TuiAnimationClock {
|
|
6
|
+
private readonly onTick;
|
|
7
|
+
private readonly intervalMs;
|
|
8
|
+
private timer;
|
|
9
|
+
constructor(onTick: (elapsedMs: number) => void, intervalMs?: number);
|
|
10
|
+
setActive(active: boolean): void;
|
|
11
|
+
isActive(): boolean;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
private stop;
|
|
14
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One clock owns all decorative TUI animation. Components expose pure frame
|
|
3
|
+
* advancement; they never create timers or request renders independently.
|
|
4
|
+
*/
|
|
5
|
+
export class TuiAnimationClock {
|
|
6
|
+
onTick;
|
|
7
|
+
intervalMs;
|
|
8
|
+
timer = null;
|
|
9
|
+
constructor(onTick, intervalMs = 100) {
|
|
10
|
+
this.onTick = onTick;
|
|
11
|
+
this.intervalMs = intervalMs;
|
|
12
|
+
}
|
|
13
|
+
setActive(active) {
|
|
14
|
+
if (active) {
|
|
15
|
+
if (this.timer)
|
|
16
|
+
return;
|
|
17
|
+
this.timer = setInterval(() => this.onTick(this.intervalMs), this.intervalMs);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
this.stop();
|
|
21
|
+
}
|
|
22
|
+
isActive() {
|
|
23
|
+
return this.timer !== null;
|
|
24
|
+
}
|
|
25
|
+
dispose() {
|
|
26
|
+
this.stop();
|
|
27
|
+
}
|
|
28
|
+
stop() {
|
|
29
|
+
if (!this.timer)
|
|
30
|
+
return;
|
|
31
|
+
clearInterval(this.timer);
|
|
32
|
+
this.timer = null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { type TuiMode, type Terminal } from "@bubblebrain-ai/pi-tui";
|
|
2
|
+
import { BubbleTuiController } from "./controller/controller.js";
|
|
3
|
+
import { type ClipboardImageReader } from "./controller/composer-controller.js";
|
|
4
|
+
import type { Agent } from "../agent.js";
|
|
5
|
+
import { SessionManager } from "../session.js";
|
|
6
|
+
import type { ProviderRegistry } from "../provider-registry.js";
|
|
7
|
+
import type { QuestionController } from "../question/controller.js";
|
|
8
|
+
import type { ApprovalDecision, ApprovalRequest } from "../approval/types.js";
|
|
9
|
+
import type { PlanDecision } from "../types.js";
|
|
10
|
+
import type { FeedbackPayload, SubmitResult } from "../feedback/types.js";
|
|
11
|
+
import type { BashAllowlist } from "../approval/session-cache.js";
|
|
12
|
+
import type { SkillRegistry } from "../skills/registry.js";
|
|
13
|
+
import { type ResolvedTheme, type ThemeMode } from "./model/theme.js";
|
|
14
|
+
export interface PiAppCallbacks {
|
|
15
|
+
onExitRequest(): void;
|
|
16
|
+
onClearTranscript(): void;
|
|
17
|
+
onThemeToggle(): void;
|
|
18
|
+
onThemeModeChange?(mode: import("../config.js").ThemeMode): void;
|
|
19
|
+
onCompact?(): void;
|
|
20
|
+
}
|
|
21
|
+
export interface PiTuiAppOptions {
|
|
22
|
+
agent: Agent;
|
|
23
|
+
sessionManager: SessionManager;
|
|
24
|
+
registry?: ProviderRegistry;
|
|
25
|
+
createProvider?: (providerId: string, apiKey: string, baseURL: string) => unknown;
|
|
26
|
+
skillRegistry?: SkillRegistry;
|
|
27
|
+
bashAllowlist?: BashAllowlist;
|
|
28
|
+
settingsManager?: unknown;
|
|
29
|
+
hookController?: unknown;
|
|
30
|
+
mcpManager?: unknown;
|
|
31
|
+
lspService?: unknown;
|
|
32
|
+
questionController?: QuestionController;
|
|
33
|
+
planHandlerRef?: {
|
|
34
|
+
current?: (plan: string) => Promise<PlanDecision>;
|
|
35
|
+
};
|
|
36
|
+
approvalHandlerRef?: {
|
|
37
|
+
current?: (request: ApprovalRequest) => Promise<ApprovalDecision>;
|
|
38
|
+
};
|
|
39
|
+
controller: BubbleTuiController;
|
|
40
|
+
callbacks: PiAppCallbacks;
|
|
41
|
+
/** Update notice already known from the local startup cache. */
|
|
42
|
+
updateNotice?: string;
|
|
43
|
+
/** Late registry result that should surface without restarting the TUI. */
|
|
44
|
+
updateNoticeRefresh?: Promise<string | null>;
|
|
45
|
+
flushMemory?: () => Promise<void>;
|
|
46
|
+
runMemoryCompaction?: () => Promise<string>;
|
|
47
|
+
runMemorySummary?: (scope?: string) => Promise<string>;
|
|
48
|
+
runMemoryRefresh?: (scope?: string) => Promise<string>;
|
|
49
|
+
/** Test/embedded host injection; production uses ProcessTerminal. */
|
|
50
|
+
terminal?: Terminal;
|
|
51
|
+
/** Renderer selected before the first terminal paint. Production defaults to fullscreen. */
|
|
52
|
+
uiMode?: TuiMode;
|
|
53
|
+
/** Non-blocking git lookup used to populate the footer after first paint. */
|
|
54
|
+
resolveGitBranch?: (cwd: string) => Promise<string | undefined>;
|
|
55
|
+
/** Override composer history storage (primarily for embedded hosts/tests). */
|
|
56
|
+
inputHistoryFilePath?: string;
|
|
57
|
+
/** Override the native clipboard image reader (primarily for embedded hosts/tests). */
|
|
58
|
+
readClipboardImage?: ClipboardImageReader;
|
|
59
|
+
/** Override feedback transport for embedded hosts and tests. */
|
|
60
|
+
submitFeedback?: (payload: FeedbackPayload) => Promise<SubmitResult>;
|
|
61
|
+
/** Persisted theme preference and the terminal color detected before raw mode. */
|
|
62
|
+
themeMode?: ThemeMode;
|
|
63
|
+
detectedTheme?: ResolvedTheme;
|
|
64
|
+
themeOverrides?: Record<string, string>;
|
|
65
|
+
}
|
|
66
|
+
export declare class PiTuiApp {
|
|
67
|
+
private readonly options;
|
|
68
|
+
private readonly tui;
|
|
69
|
+
private readonly editor;
|
|
70
|
+
private readonly composer;
|
|
71
|
+
private readonly composerPreview;
|
|
72
|
+
private readonly composerSlot;
|
|
73
|
+
private viewportScroll;
|
|
74
|
+
private readonly transcriptBox;
|
|
75
|
+
private readonly streamingMessage;
|
|
76
|
+
private readonly markdown;
|
|
77
|
+
private readonly markdownRenderer;
|
|
78
|
+
private readonly settledTranscript;
|
|
79
|
+
private readonly welcome;
|
|
80
|
+
private readonly footer;
|
|
81
|
+
private readonly tasksPane;
|
|
82
|
+
private readonly taskStatusBar;
|
|
83
|
+
private readonly animationClock;
|
|
84
|
+
private readonly traceInteraction;
|
|
85
|
+
private readonly overlays;
|
|
86
|
+
private themeMode;
|
|
87
|
+
private readonly detectedTheme;
|
|
88
|
+
private readonly themeOverrides?;
|
|
89
|
+
private theme;
|
|
90
|
+
private readonly transcriptTheme;
|
|
91
|
+
private gitBranch;
|
|
92
|
+
private metadataManager;
|
|
93
|
+
private metadataUnsubscribe;
|
|
94
|
+
private currentUpdateNotice?;
|
|
95
|
+
private updateNoticeRefreshStarted;
|
|
96
|
+
private showReasoning;
|
|
97
|
+
private verboseTrace;
|
|
98
|
+
private controllerUnsubscribe;
|
|
99
|
+
private questionUnsubscribe;
|
|
100
|
+
private activeQuestion;
|
|
101
|
+
private readonly questionQueue;
|
|
102
|
+
private providerKeyPhase;
|
|
103
|
+
private rewindPhase;
|
|
104
|
+
private rewindPreviewMessageIndex;
|
|
105
|
+
private feishuSetupPhase;
|
|
106
|
+
private disposed;
|
|
107
|
+
/** Compatibility/debug view backed by the canonical persistent history. */
|
|
108
|
+
get history(): string[];
|
|
109
|
+
constructor(options: PiTuiAppOptions);
|
|
110
|
+
private activeSessionManager;
|
|
111
|
+
private syncMetadataSubscription;
|
|
112
|
+
private installBlockingHandlers;
|
|
113
|
+
private buildLayout;
|
|
114
|
+
private wireInput;
|
|
115
|
+
private handleSubmit;
|
|
116
|
+
private handleCommand;
|
|
117
|
+
private buildSlashContext;
|
|
118
|
+
private pushUserRow;
|
|
119
|
+
private resolvedTheme;
|
|
120
|
+
private applyThemeMode;
|
|
121
|
+
private pushNotice;
|
|
122
|
+
private appendTranscriptRow;
|
|
123
|
+
private streamingMounted;
|
|
124
|
+
/** One display policy feeds both committed history and the live row pool. */
|
|
125
|
+
private transcriptRenderOptions;
|
|
126
|
+
renderSnapshot(): void;
|
|
127
|
+
/**
|
|
128
|
+
* The streaming preview is a persistent row-pool component mounted as the
|
|
129
|
+
* transcript's LAST child (upstream AssistantMessageComponent pattern).
|
|
130
|
+
* Rows are only ever setText — re-creating components per frame is what
|
|
131
|
+
* leaked every intermediate prefix into scrollback (verified with a
|
|
132
|
+
* VirtualTerminal matrix). On turn end it collapses to zero rows in the
|
|
133
|
+
* same frame the settled message commits, so the full answer replaces the
|
|
134
|
+
* preview with no duplicate.
|
|
135
|
+
*/
|
|
136
|
+
private updateStreamingRegion;
|
|
137
|
+
private syncAnimationClock;
|
|
138
|
+
private fullscreen;
|
|
139
|
+
/**
|
|
140
|
+
* Switch to the alternate-screen transcript view. The main screen stays
|
|
141
|
+
* mounted but paused (stopped renderer); both modes subscribe to the same
|
|
142
|
+
* controller so the transcript stays in sync. Escape / Ctrl+C / /fullscreen
|
|
143
|
+
* return here.
|
|
144
|
+
*/
|
|
145
|
+
private enterFullscreen;
|
|
146
|
+
private exitFullscreen;
|
|
147
|
+
private openImageViewer;
|
|
148
|
+
private openStats;
|
|
149
|
+
private openSkills;
|
|
150
|
+
private openSessionPicker;
|
|
151
|
+
private openContextInfo;
|
|
152
|
+
private openProviderKeyPhase;
|
|
153
|
+
private closeProviderKeyPhase;
|
|
154
|
+
private saveProviderKey;
|
|
155
|
+
private openRewindPicker;
|
|
156
|
+
private collectRewindPoints;
|
|
157
|
+
private cancelRunForRewind;
|
|
158
|
+
private waitForControllerIdle;
|
|
159
|
+
private executeRewindFromPicker;
|
|
160
|
+
private closeRewindPicker;
|
|
161
|
+
private previewRewindPoint;
|
|
162
|
+
private planDialog;
|
|
163
|
+
private openFeedback;
|
|
164
|
+
private openFeishuSetup;
|
|
165
|
+
private openWorkflowInspector;
|
|
166
|
+
private openSubagentInspector;
|
|
167
|
+
private handleTraceAction;
|
|
168
|
+
private openTaskInspector;
|
|
169
|
+
private approvalDialog;
|
|
170
|
+
private openNextQuestion;
|
|
171
|
+
private removeQueuedQuestion;
|
|
172
|
+
start(): void;
|
|
173
|
+
private watchUpdateNoticeRefresh;
|
|
174
|
+
dispose(): void;
|
|
175
|
+
waitUntilExit(): Promise<void>;
|
|
176
|
+
}
|