@pentoshi/clai 4.11.15 → 4.11.17
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 +51 -1
- package/dist/agent/compaction/summary-execution.d.ts +1 -0
- package/dist/agent/compaction/summary-execution.js +25 -16
- package/dist/agent/compaction/summary-execution.js.map +1 -1
- package/dist/agent/context/compact-with-summary.js +18 -0
- package/dist/agent/context/compact-with-summary.js.map +1 -1
- package/dist/agent/context/compaction-source-prefix.d.ts +8 -0
- package/dist/agent/context/compaction-source-prefix.js +26 -0
- package/dist/agent/context/compaction-source-prefix.js.map +1 -0
- package/dist/agent/parser/arg-formatting.js +42 -5
- package/dist/agent/parser/arg-formatting.js.map +1 -1
- package/dist/agent/plan-decision.js +5 -1
- package/dist/agent/plan-decision.js.map +1 -1
- package/dist/agent/runner.js +5 -7
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-policy.d.ts +2 -0
- package/dist/agent/session-policy.js.map +1 -1
- package/dist/agent/session-title.d.ts +1 -0
- package/dist/agent/session-title.js +7 -4
- package/dist/agent/session-title.js.map +1 -1
- package/dist/agent/subagents/manager.d.ts +54 -0
- package/dist/agent/subagents/manager.js +451 -0
- package/dist/agent/subagents/manager.js.map +1 -0
- package/dist/agent/subagents/model-chain.d.ts +31 -0
- package/dist/agent/subagents/model-chain.js +146 -0
- package/dist/agent/subagents/model-chain.js.map +1 -0
- package/dist/agent/subagents/read-only-tools.d.ts +9 -0
- package/dist/agent/subagents/read-only-tools.js +524 -0
- package/dist/agent/subagents/read-only-tools.js.map +1 -0
- package/dist/agent/subagents/report.d.ts +1 -0
- package/dist/agent/subagents/report.js +16 -0
- package/dist/agent/subagents/report.js.map +1 -0
- package/dist/agent/subagents/tools.d.ts +26 -0
- package/dist/agent/subagents/tools.js +141 -0
- package/dist/agent/subagents/tools.js.map +1 -0
- package/dist/agent/subagents/types.d.ts +76 -0
- package/dist/agent/subagents/types.js +2 -0
- package/dist/agent/subagents/types.js.map +1 -0
- package/dist/agent/subagents/worker.d.ts +2 -0
- package/dist/agent/subagents/worker.js +319 -0
- package/dist/agent/subagents/worker.js.map +1 -0
- package/dist/agent/turn/compaction-summarizer.d.ts +1 -0
- package/dist/agent/turn/compaction-summarizer.js +2 -0
- package/dist/agent/turn/compaction-summarizer.js.map +1 -1
- package/dist/agent/turn/loop/canonicalize-turn-call.d.ts +4 -0
- package/dist/agent/turn/loop/canonicalize-turn-call.js +20 -0
- package/dist/agent/turn/loop/canonicalize-turn-call.js.map +1 -1
- package/dist/agent/turn/loop/model-only-rounds.js +3 -3
- package/dist/agent/turn/loop/model-only-rounds.js.map +1 -1
- package/dist/agent/turn/loop/run-rounds.js +39 -5
- package/dist/agent/turn/loop/run-rounds.js.map +1 -1
- package/dist/agent/turn/loop/stream-request.js +1 -0
- package/dist/agent/turn/loop/stream-request.js.map +1 -1
- package/dist/agent/turn/prompt-sections.js +1 -0
- package/dist/agent/turn/prompt-sections.js.map +1 -1
- package/dist/agent/turn/setup/compaction-services.d.ts +2 -1
- package/dist/agent/turn/setup/compaction-services.js +14 -0
- package/dist/agent/turn/setup/compaction-services.js.map +1 -1
- package/dist/agent/turn/setup/turn-budget.js +1 -9
- package/dist/agent/turn/setup/turn-budget.js.map +1 -1
- package/dist/agent/turn/setup/turn-messages.js +3 -1
- package/dist/agent/turn/setup/turn-messages.js.map +1 -1
- package/dist/agent/turn/subagent-inbox.d.ts +26 -0
- package/dist/agent/turn/subagent-inbox.js +95 -0
- package/dist/agent/turn/subagent-inbox.js.map +1 -0
- package/dist/agent/turn/tool-call-preparation.js +6 -0
- package/dist/agent/turn/tool-call-preparation.js.map +1 -1
- package/dist/agent/turn/tool-execution/deps.d.ts +2 -1
- package/dist/agent/turn/tool-execution/single-tool.js +25 -2
- package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
- package/dist/agent/turn/tool-result-recorder.js +9 -1
- package/dist/agent/turn/tool-result-recorder.js.map +1 -1
- package/dist/agent/turn/tool-routing.d.ts +0 -3
- package/dist/agent/turn/tool-routing.js +2 -7
- package/dist/agent/turn/tool-routing.js.map +1 -1
- package/dist/app/commands/catalog.js +10 -0
- package/dist/app/commands/catalog.js.map +1 -1
- package/dist/app/commands/registry.js +1 -0
- package/dist/app/commands/registry.js.map +1 -1
- package/dist/app/controllers/cancel-coordinator.d.ts +6 -0
- package/dist/app/controllers/cancel-coordinator.js +2 -0
- package/dist/app/controllers/cancel-coordinator.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.d.ts +2 -0
- package/dist/app/controllers/session-compact-helper.js +7 -3
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-context-usage.d.ts +2 -5
- package/dist/app/controllers/session-context-usage.js +28 -107
- package/dist/app/controllers/session-context-usage.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +18 -1
- package/dist/app/controllers/session-controller.js +122 -42
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/app/controllers/session-naming.d.ts +4 -1
- package/dist/app/controllers/session-naming.js +86 -51
- package/dist/app/controllers/session-naming.js.map +1 -1
- package/dist/app/controllers/session-subagents.d.ts +29 -0
- package/dist/app/controllers/session-subagents.js +85 -0
- package/dist/app/controllers/session-subagents.js.map +1 -0
- package/dist/classic/app/ClassicApp.js +24 -4
- package/dist/classic/app/ClassicApp.js.map +1 -1
- package/dist/classic/app/app-wiring.js +5 -2
- package/dist/classic/app/app-wiring.js.map +1 -1
- package/dist/classic/blocks/tool-lines.d.ts +1 -1
- package/dist/classic/blocks/tool-lines.js +39 -18
- package/dist/classic/blocks/tool-lines.js.map +1 -1
- package/dist/classic/chrome/Chrome.d.ts +1 -1
- package/dist/classic/chrome/Chrome.js +1 -0
- package/dist/classic/chrome/Chrome.js.map +1 -1
- package/dist/classic/chrome/SubagentsStrip.d.ts +3 -0
- package/dist/classic/chrome/SubagentsStrip.js +9 -0
- package/dist/classic/chrome/SubagentsStrip.js.map +1 -0
- package/dist/classic/chrome/row-budget.d.ts +2 -0
- package/dist/classic/chrome/row-budget.js +4 -1
- package/dist/classic/chrome/row-budget.js.map +1 -1
- package/dist/classic/chrome/subagents-row.d.ts +9 -0
- package/dist/classic/chrome/subagents-row.js +13 -0
- package/dist/classic/chrome/subagents-row.js.map +1 -0
- package/dist/classic/input/input-router.js +2 -7
- package/dist/classic/input/input-router.js.map +1 -1
- package/dist/classic/panels/keys-panel.d.ts +2 -2
- package/dist/classic/panels/keys-panel.js +24 -8
- package/dist/classic/panels/keys-panel.js.map +1 -1
- package/dist/classic/panels/pager-panel.d.ts +3 -2
- package/dist/classic/panels/pager-panel.js +14 -10
- package/dist/classic/panels/pager-panel.js.map +1 -1
- package/dist/classic/panels/panel-controller.d.ts +3 -0
- package/dist/classic/panels/panel-controller.js +63 -1
- package/dist/classic/panels/panel-controller.js.map +1 -1
- package/dist/classic/panels/panel-frame.js +11 -4
- package/dist/classic/panels/panel-frame.js.map +1 -1
- package/dist/classic/panels/panel-host.js +7 -2
- package/dist/classic/panels/panel-host.js.map +1 -1
- package/dist/classic/panels/panel-wheel.js +1 -1
- package/dist/classic/panels/panel-wheel.js.map +1 -1
- package/dist/classic/panels/picker-panel.d.ts +1 -0
- package/dist/classic/panels/picker-panel.js +57 -44
- package/dist/classic/panels/picker-panel.js.map +1 -1
- package/dist/classic/panels/secret-panel.d.ts +5 -0
- package/dist/classic/panels/secret-panel.js +41 -6
- package/dist/classic/panels/secret-panel.js.map +1 -1
- package/dist/commands/providers.js +2 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/llm/agentrouter.d.ts +1 -0
- package/dist/llm/agentrouter.js +7 -2
- package/dist/llm/agentrouter.js.map +1 -1
- package/dist/llm/bynara.js +9 -20
- package/dist/llm/bynara.js.map +1 -1
- package/dist/llm/capabilities.d.ts +5 -1
- package/dist/llm/capabilities.js +129 -6
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/capability/state.d.ts +1 -1
- package/dist/llm/capability/tool-dialect.js +1 -0
- package/dist/llm/capability/tool-dialect.js.map +1 -1
- package/dist/llm/capability/vision-patterns.js +12 -0
- package/dist/llm/capability/vision-patterns.js.map +1 -1
- package/dist/llm/catalog-facts.js +10 -1
- package/dist/llm/catalog-facts.js.map +1 -1
- package/dist/llm/learned-capabilities.js +9 -3
- package/dist/llm/learned-capabilities.js.map +1 -1
- package/dist/llm/lowest-reasoning.d.ts +3 -0
- package/dist/llm/lowest-reasoning.js +33 -0
- package/dist/llm/lowest-reasoning.js.map +1 -0
- package/dist/llm/meta.js +8 -2
- package/dist/llm/meta.js.map +1 -1
- package/dist/llm/modal.js +5 -0
- package/dist/llm/modal.js.map +1 -1
- package/dist/llm/model-families.js +1 -1
- package/dist/llm/model-families.js.map +1 -1
- package/dist/llm/provider-identity.js +6 -0
- package/dist/llm/provider-identity.js.map +1 -1
- package/dist/llm/provider-info-text.js +51 -4
- package/dist/llm/provider-info-text.js.map +1 -1
- package/dist/llm/provider-model-layers.js +33 -0
- package/dist/llm/provider-model-layers.js.map +1 -1
- package/dist/llm/provider-profile-layers.js +43 -0
- package/dist/llm/provider-profile-layers.js.map +1 -1
- package/dist/llm/provider-profiles.js +1 -0
- package/dist/llm/provider-profiles.js.map +1 -1
- package/dist/llm/reasoning-capability.js +12 -0
- package/dist/llm/reasoning-capability.js.map +1 -1
- package/dist/llm/reasoning-errors.js +1 -1
- package/dist/llm/reasoning-errors.js.map +1 -1
- package/dist/llm/request-fingerprint.js +2 -0
- package/dist/llm/request-fingerprint.js.map +1 -1
- package/dist/llm/request-plan.js +1 -0
- package/dist/llm/request-plan.js.map +1 -1
- package/dist/llm/request-purpose.d.ts +3 -0
- package/dist/llm/request-purpose.js +11 -0
- package/dist/llm/request-purpose.js.map +1 -0
- package/dist/llm/router.d.ts +1 -0
- package/dist/llm/router.js +15 -4
- package/dist/llm/router.js.map +1 -1
- package/dist/llm/routing/attempt-complete.js +28 -11
- package/dist/llm/routing/attempt-complete.js.map +1 -1
- package/dist/llm/routing/attempt-request.d.ts +11 -0
- package/dist/llm/routing/attempt-request.js +51 -2
- package/dist/llm/routing/attempt-request.js.map +1 -1
- package/dist/llm/routing/attempt-stream.js +28 -11
- package/dist/llm/routing/attempt-stream.js.map +1 -1
- package/dist/llm/routing/error-classification.d.ts +2 -0
- package/dist/llm/routing/error-classification.js +32 -7
- package/dist/llm/routing/error-classification.js.map +1 -1
- package/dist/llm/routing/key-rotation.js +26 -11
- package/dist/llm/routing/key-rotation.js.map +1 -1
- package/dist/llm/routing/provider-selection.js +3 -0
- package/dist/llm/routing/provider-selection.js.map +1 -1
- package/dist/llm/routing/request-option-fallback.d.ts +2 -0
- package/dist/llm/routing/request-option-fallback.js +53 -0
- package/dist/llm/routing/request-option-fallback.js.map +1 -0
- package/dist/llm/session-affinity.d.ts +1 -0
- package/dist/llm/session-affinity.js +4 -0
- package/dist/llm/session-affinity.js.map +1 -1
- package/dist/llm/session-route.d.ts +7 -0
- package/dist/llm/session-route.js +16 -0
- package/dist/llm/session-route.js.map +1 -0
- package/dist/llm/tool-protocol.d.ts +2 -0
- package/dist/llm/tool-protocol.js +10 -1
- package/dist/llm/tool-protocol.js.map +1 -1
- package/dist/llm/tool-wire/argument-repair.js +5 -0
- package/dist/llm/tool-wire/argument-repair.js.map +1 -1
- package/dist/llm/vercel.d.ts +7 -0
- package/dist/llm/vercel.js +169 -0
- package/dist/llm/vercel.js.map +1 -0
- package/dist/llm/wire/capability-errors.js +4 -4
- package/dist/llm/wire/capability-errors.js.map +1 -1
- package/dist/llm/wire/chat-body.js +6 -5
- package/dist/llm/wire/chat-body.js.map +1 -1
- package/dist/llm/wire/effort-preflight.d.ts +15 -0
- package/dist/llm/wire/effort-preflight.js +141 -0
- package/dist/llm/wire/effort-preflight.js.map +1 -0
- package/dist/llm/wire/openai-complete.d.ts +3 -1
- package/dist/llm/wire/openai-complete.js +7 -2
- package/dist/llm/wire/openai-complete.js.map +1 -1
- package/dist/llm/wire/openai-stream.d.ts +4 -2
- package/dist/llm/wire/openai-stream.js +14 -8
- package/dist/llm/wire/openai-stream.js.map +1 -1
- package/dist/llm/wire/reasoning-payload.js +1 -1
- package/dist/llm/wire/reasoning-payload.js.map +1 -1
- package/dist/llm/wire/responses-first.d.ts +3 -1
- package/dist/llm/wire/responses-first.js +31 -15
- package/dist/llm/wire/responses-first.js.map +1 -1
- package/dist/llm/wire/responses-preflight.js +29 -12
- package/dist/llm/wire/responses-preflight.js.map +1 -1
- package/dist/mcp/runtime.js +11 -13
- package/dist/mcp/runtime.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.js +66 -22
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +8 -1
- package/dist/store/config/endpoints.d.ts +11 -0
- package/dist/store/config/endpoints.js +19 -1
- package/dist/store/config/endpoints.js.map +1 -1
- package/dist/store/config/subagent-models.d.ts +7 -0
- package/dist/store/config/subagent-models.js +73 -0
- package/dist/store/config/subagent-models.js.map +1 -0
- package/dist/store/config.d.ts +4 -3
- package/dist/store/config.js +4 -2
- package/dist/store/config.js.map +1 -1
- package/dist/store/history/lifecycle.js +8 -0
- package/dist/store/history/lifecycle.js.map +1 -1
- package/dist/store/history.js +14 -12
- package/dist/store/history.js.map +1 -1
- package/dist/store/session-model.js +4 -0
- package/dist/store/session-model.js.map +1 -1
- package/dist/store/subagents.d.ts +25 -0
- package/dist/store/subagents.js +252 -0
- package/dist/store/subagents.js.map +1 -0
- package/dist/tools/definitions/aggregate.js +19 -1
- package/dist/tools/definitions/aggregate.js.map +1 -1
- package/dist/tools/definitions/files.js +7 -3
- package/dist/tools/definitions/files.js.map +1 -1
- package/dist/tools/definitions/selection.js +5 -0
- package/dist/tools/definitions/selection.js.map +1 -1
- package/dist/tools/definitions/subagents.d.ts +2 -0
- package/dist/tools/definitions/subagents.js +60 -0
- package/dist/tools/definitions/subagents.js.map +1 -0
- package/dist/tools/definitions.d.ts +1 -0
- package/dist/tools/definitions.js +6 -2
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/fs/mutations.js +8 -1
- package/dist/tools/fs/mutations.js.map +1 -1
- package/dist/tools/fs/search.js +2 -1
- package/dist/tools/fs/search.js.map +1 -1
- package/dist/tools/registry.js +6 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tui-v2/app/App.js +6 -2
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/bootstrap/patch-opentui-text.js +14 -13
- package/dist/tui-v2/bootstrap/patch-opentui-text.js.map +1 -1
- package/dist/tui-v2/components/completion/completion-menu.js +3 -3
- package/dist/tui-v2/components/completion/completion-menu.js.map +1 -1
- package/dist/tui-v2/components/jobs/jobs-panel.js +8 -8
- package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
- package/dist/tui-v2/components/jobs/subagents-panel.d.ts +11 -0
- package/dist/tui-v2/components/jobs/subagents-panel.js +80 -0
- package/dist/tui-v2/components/jobs/subagents-panel.js.map +1 -0
- package/dist/tui-v2/components/modal/keys-modal-pick.d.ts +9 -0
- package/dist/tui-v2/components/modal/keys-modal-pick.js +15 -0
- package/dist/tui-v2/components/modal/keys-modal-pick.js.map +1 -0
- package/dist/tui-v2/components/modal/keys-modal.js +46 -12
- package/dist/tui-v2/components/modal/keys-modal.js.map +1 -1
- package/dist/tui-v2/components/modal/secret-modal.js +29 -17
- package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
- package/dist/tui-v2/components/pager/pager-line.d.ts +2 -0
- package/dist/tui-v2/components/pager/pager-line.js +11 -5
- package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
- package/dist/tui-v2/components/pager/pager.js +91 -70
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/picker/picker.js +118 -171
- package/dist/tui-v2/components/picker/picker.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-host.d.ts +1 -0
- package/dist/tui-v2/components/toast/toast-host.js +15 -3
- package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
- package/dist/tui-v2/components/transcript/thinking-block.js +1 -3
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/thinking-presentation.d.ts +0 -1
- package/dist/tui-v2/components/transcript/thinking-presentation.js +1 -3
- package/dist/tui-v2/components/transcript/thinking-presentation.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.js +40 -14
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/transcript-view.js +4 -2
- package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
- package/dist/tui-v2/rendering/pager-markdown.d.ts +2 -0
- package/dist/tui-v2/rendering/pager-markdown.js +10 -6
- package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
- package/dist/tui-v2/rendering/subagent-ansi.d.ts +4 -0
- package/dist/tui-v2/rendering/subagent-ansi.js +10 -0
- package/dist/tui-v2/rendering/subagent-ansi.js.map +1 -0
- package/dist/types.d.ts +3 -2
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/ui-core/commands/command-handlers.js +3 -0
- package/dist/ui-core/commands/command-handlers.js.map +1 -1
- package/dist/ui-core/commands/key-commands.js +0 -2
- package/dist/ui-core/commands/key-commands.js.map +1 -1
- package/dist/ui-core/commands/mcp-commands.js +23 -2
- package/dist/ui-core/commands/mcp-commands.js.map +1 -1
- package/dist/ui-core/commands/picker-commands.d.ts +12 -0
- package/dist/ui-core/commands/picker-commands.js +39 -9
- package/dist/ui-core/commands/picker-commands.js.map +1 -1
- package/dist/ui-core/commands/pickers/history.js +11 -6
- package/dist/ui-core/commands/pickers/history.js.map +1 -1
- package/dist/ui-core/commands/session-commands.js +20 -9
- package/dist/ui-core/commands/session-commands.js.map +1 -1
- package/dist/ui-core/commands/subagent-commands.d.ts +12 -0
- package/dist/ui-core/commands/subagent-commands.js +189 -0
- package/dist/ui-core/commands/subagent-commands.js.map +1 -0
- package/dist/ui-core/commands/subagent-models-editor.d.ts +2 -0
- package/dist/ui-core/commands/subagent-models-editor.js +123 -0
- package/dist/ui-core/commands/subagent-models-editor.js.map +1 -0
- package/dist/ui-core/composer/secret-buffer.d.ts +1 -0
- package/dist/ui-core/composer/secret-buffer.js +6 -0
- package/dist/ui-core/composer/secret-buffer.js.map +1 -1
- package/dist/ui-core/controllers/overlay-controller.d.ts +10 -0
- package/dist/ui-core/controllers/overlay-controller.js +1 -1
- package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
- package/dist/ui-core/layout/overlay-size.d.ts +6 -0
- package/dist/ui-core/layout/overlay-size.js +8 -0
- package/dist/ui-core/layout/overlay-size.js.map +1 -0
- package/dist/ui-core/rendering/format-usage.js +5 -0
- package/dist/ui-core/rendering/format-usage.js.map +1 -1
- package/dist/ui-core/rendering/markdown.d.ts +2 -0
- package/dist/ui-core/rendering/markdown.js +1 -1
- package/dist/ui-core/rendering/markdown.js.map +1 -1
- package/dist/ui-core/rendering/open-tool-output.js +4 -1
- package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
- package/dist/ui-core/rendering/pager-chrome.d.ts +4 -1
- package/dist/ui-core/rendering/pager-chrome.js +17 -9
- package/dist/ui-core/rendering/pager-chrome.js.map +1 -1
- package/dist/ui-core/rendering/picker-filter.d.ts +3 -0
- package/dist/ui-core/rendering/picker-filter.js.map +1 -1
- package/dist/ui-core/rendering/picker-layout.d.ts +23 -0
- package/dist/ui-core/rendering/picker-layout.js +78 -0
- package/dist/ui-core/rendering/picker-layout.js.map +1 -0
- package/dist/ui-core/rendering/picker-style.d.ts +3 -0
- package/dist/ui-core/rendering/picker-style.js +15 -0
- package/dist/ui-core/rendering/picker-style.js.map +1 -0
- package/dist/ui-core/rendering/sanitize-display.d.ts +3 -0
- package/dist/ui-core/rendering/sanitize-display.js +33 -2
- package/dist/ui-core/rendering/sanitize-display.js.map +1 -1
- package/dist/ui-core/rendering/status-segments.js +3 -1
- package/dist/ui-core/rendering/status-segments.js.map +1 -1
- package/dist/ui-core/rendering/subagent-presentation.d.ts +9 -0
- package/dist/ui-core/rendering/subagent-presentation.js +65 -0
- package/dist/ui-core/rendering/subagent-presentation.js.map +1 -0
- package/dist/ui-core/rendering/subagent-source.d.ts +8 -0
- package/dist/ui-core/rendering/subagent-source.js +178 -0
- package/dist/ui-core/rendering/subagent-source.js.map +1 -0
- package/dist/ui-core/rendering/theme.d.ts +1 -0
- package/dist/ui-core/rendering/theme.js +2 -0
- package/dist/ui-core/rendering/theme.js.map +1 -1
- package/dist/ui-core/rendering/tool-presenter.d.ts +7 -0
- package/dist/ui-core/rendering/tool-presenter.js +41 -9
- package/dist/ui-core/rendering/tool-presenter.js.map +1 -1
- package/dist/ui-core/rendering/usage-pager-source.d.ts +6 -0
- package/dist/ui-core/rendering/usage-pager-source.js +76 -0
- package/dist/ui-core/rendering/usage-pager-source.js.map +1 -0
- package/dist/ui-core/state/transcript-compaction.js +10 -1
- package/dist/ui-core/state/transcript-compaction.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +1 -1
- package/dist/llm/effort-fallback.d.ts +0 -6
- package/dist/llm/effort-fallback.js +0 -67
- package/dist/llm/effort-fallback.js.map +0 -1
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
import { lstat, opendir, realpath } from "node:fs/promises";
|
|
2
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { TOOL_DEFINITIONS } from "../../tools/definitions.js";
|
|
4
|
+
import { globToPathRegExp } from "../../tools/fs/search.js";
|
|
5
|
+
export const TOOL_OUTPUT_LIMIT = 12_000;
|
|
6
|
+
const fields = {
|
|
7
|
+
"fs.read": ["path", "offset", "limit", "startLine", "endLine", "maxBytes"],
|
|
8
|
+
"fs.list": ["path", "maxEntries"],
|
|
9
|
+
"fs.search": ["path", "pattern", "glob", "maxMatches", "caseInsensitive", "fixedString", "hidden", "timeoutMs"],
|
|
10
|
+
"web.search": ["query", "maxResults", "timeoutMs"],
|
|
11
|
+
"web.fetch": ["url", "maxBytes", "timeoutMs", "responseMode", "responsePart"],
|
|
12
|
+
"http.fetch": ["url", "maxBytes", "timeoutMs", "responseMode", "responsePart"],
|
|
13
|
+
"pdf.read": ["path", "firstPage", "lastPage", "maxPages", "maxChars"],
|
|
14
|
+
"image.view": ["path", "paths"],
|
|
15
|
+
"image.ocr": ["path", "lang", "psm", "preprocess"],
|
|
16
|
+
"sysinfo": [],
|
|
17
|
+
"tool.check": ["tools"],
|
|
18
|
+
"wordlist.find": ["query", "expand"],
|
|
19
|
+
"skill.load": ["name"],
|
|
20
|
+
"skill.list": ["query"],
|
|
21
|
+
"shell.exec": ["command", "timeoutMs"],
|
|
22
|
+
};
|
|
23
|
+
const descriptions = {
|
|
24
|
+
"fs.read": "Read a text file inside cwd with numbered lines. At most 300 lines and 12000 characters per call. Files over 2 MiB need parent inspection.",
|
|
25
|
+
"fs.list": "List directory entries inside cwd.",
|
|
26
|
+
"fs.search": "Bounded content search inside cwd returning matching file paths only. Skips symlinks, generated directories, and files over 1 MB; scans at most 64 files.",
|
|
27
|
+
"web.search": "Search the web for current information.",
|
|
28
|
+
"web.fetch": "Fetch a public URL as readable text.",
|
|
29
|
+
"http.fetch": "GET-only HTTP evidence for public targets. Mutating or authenticated requests are denied.",
|
|
30
|
+
"pdf.read": "Extract text from a PDF inside cwd with bounded paging.",
|
|
31
|
+
"image.view": "View image bytes for a file inside cwd.",
|
|
32
|
+
"image.ocr": "OCR text from an image file inside cwd.",
|
|
33
|
+
"sysinfo": "OS and environment facts.",
|
|
34
|
+
"tool.check": "Check tool availability on PATH.",
|
|
35
|
+
"wordlist.find": "Locate wordlists on disk.",
|
|
36
|
+
"skill.load": "Read one skill's instructions.",
|
|
37
|
+
"skill.list": "List installed skills.",
|
|
38
|
+
"shell.exec": "Read-only shell fallback for search and inspection. Normal command composition, pipelines, chaining, line breaks, and absolute read paths are allowed; file mutations, git state changes, installs, redirects, and network commands are denied.",
|
|
39
|
+
};
|
|
40
|
+
export const READ_ONLY_TOOLS = TOOL_DEFINITIONS
|
|
41
|
+
.filter((tool) => Object.hasOwn(fields, tool.name))
|
|
42
|
+
.map((tool) => ({
|
|
43
|
+
...tool,
|
|
44
|
+
description: descriptions[tool.name] ?? tool.description,
|
|
45
|
+
parameters: {
|
|
46
|
+
...tool.parameters,
|
|
47
|
+
properties: Object.fromEntries(Object.entries(tool.parameters.properties)
|
|
48
|
+
.filter(([key]) => fields[tool.name].includes(key))
|
|
49
|
+
.map(([key, schema]) => {
|
|
50
|
+
const { description: _dropped, ...rest } = schema;
|
|
51
|
+
return [key, rest];
|
|
52
|
+
})),
|
|
53
|
+
additionalProperties: false,
|
|
54
|
+
},
|
|
55
|
+
}));
|
|
56
|
+
export function boundedOutput(text) {
|
|
57
|
+
const suffix = "\n[Output truncated; narrow the query or page the file. Coverage is incomplete.]";
|
|
58
|
+
return text.length > TOOL_OUTPUT_LIMIT
|
|
59
|
+
? text.slice(0, TOOL_OUTPUT_LIMIT - suffix.length) + suffix
|
|
60
|
+
: text;
|
|
61
|
+
}
|
|
62
|
+
function inside(root, path) {
|
|
63
|
+
const rel = relative(root, path);
|
|
64
|
+
return rel === "" || (!isAbsolute(rel) && rel !== ".." && !rel.startsWith(`..${sep}`));
|
|
65
|
+
}
|
|
66
|
+
export async function confinedPath(root, value = ".") {
|
|
67
|
+
if (typeof value !== "string" || !value.trim() || value.includes("\0") || value !== value.trim()) {
|
|
68
|
+
throw new Error("Invalid path");
|
|
69
|
+
}
|
|
70
|
+
const canonicalRoot = await realpath(root);
|
|
71
|
+
const path = resolve(canonicalRoot, value);
|
|
72
|
+
if (!inside(canonicalRoot, path))
|
|
73
|
+
throw new Error("Path is outside the assigned cwd");
|
|
74
|
+
const canonical = await realpath(path);
|
|
75
|
+
if (!inside(canonicalRoot, canonical))
|
|
76
|
+
throw new Error("Symlink resolves outside the assigned cwd");
|
|
77
|
+
return canonical;
|
|
78
|
+
}
|
|
79
|
+
function number(args, key, fallback, max, min = 1) {
|
|
80
|
+
const value = args[key] ?? fallback;
|
|
81
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value) || value < min) {
|
|
82
|
+
throw new Error(`Invalid ${key}`);
|
|
83
|
+
}
|
|
84
|
+
return Math.min(value, max);
|
|
85
|
+
}
|
|
86
|
+
function string(args, key, max = 2048) {
|
|
87
|
+
const value = args[key];
|
|
88
|
+
if (typeof value !== "string" || !value.trim() || value.length > max || value.includes("\0")) {
|
|
89
|
+
throw new Error(`Invalid ${key}`);
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
function optionalString(args, key, max = 2048) {
|
|
94
|
+
if (args[key] === undefined)
|
|
95
|
+
return undefined;
|
|
96
|
+
return string(args, key, max);
|
|
97
|
+
}
|
|
98
|
+
function optionalBoolean(args, key) {
|
|
99
|
+
if (args[key] === undefined)
|
|
100
|
+
return undefined;
|
|
101
|
+
if (typeof args[key] !== "boolean")
|
|
102
|
+
throw new Error(`Invalid ${key}`);
|
|
103
|
+
return args[key];
|
|
104
|
+
}
|
|
105
|
+
function optionalNumber(args, key, max, min = 1) {
|
|
106
|
+
if (args[key] === undefined)
|
|
107
|
+
return undefined;
|
|
108
|
+
return number({ ...args, [key]: args[key] }, key, args[key], max, min);
|
|
109
|
+
}
|
|
110
|
+
function optionalEnum(args, key, allowed) {
|
|
111
|
+
if (args[key] === undefined)
|
|
112
|
+
return undefined;
|
|
113
|
+
if (typeof args[key] !== "string" || !allowed.includes(args[key]))
|
|
114
|
+
throw new Error(`Invalid ${key}`);
|
|
115
|
+
return args[key];
|
|
116
|
+
}
|
|
117
|
+
function stringList(value, key, min, max, itemMax = 2048) {
|
|
118
|
+
if (!Array.isArray(value) || value.length < min || value.length > max)
|
|
119
|
+
throw new Error(`Invalid ${key}`);
|
|
120
|
+
return value.map((entry) => {
|
|
121
|
+
if (typeof entry !== "string" || !entry.trim() || entry.length > itemMax || entry.includes("\0"))
|
|
122
|
+
throw new Error(`Invalid ${key}`);
|
|
123
|
+
return entry;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const GIT_ALWAYS_MUTATING_SUBCOMMANDS = new Set([
|
|
127
|
+
"add", "am", "apply", "bisect", "cherry-pick", "clean", "clone", "commit",
|
|
128
|
+
"fetch", "gc", "merge", "mv", "pull", "push", "rebase", "revert", "rm",
|
|
129
|
+
"reset", "restore", "stash", "switch", "update-ref",
|
|
130
|
+
]);
|
|
131
|
+
const SHELL_FIRST_ALLOW = new Set([
|
|
132
|
+
"grep", "egrep", "fgrep", "rg", "ag", "ack",
|
|
133
|
+
"find", "ls", "dir", "cat", "head", "tail", "wc",
|
|
134
|
+
"sort", "uniq", "cut", "tr", "file", "stat", "du",
|
|
135
|
+
"git", "python3", "python", "node", "jq",
|
|
136
|
+
"diff", "cmp", "comm", "strings", "xxd", "od",
|
|
137
|
+
"pwd", "printf", "echo", "true", "false", "date", "uname",
|
|
138
|
+
"whoami", "id", "readlink", "realpath", "basename", "dirname", "which",
|
|
139
|
+
]);
|
|
140
|
+
const SHELL_CONTENT_DENY = [
|
|
141
|
+
/-delete\b/, /-exec(dir)?\b/, /-ok\b/, /-fls\b/, /-fprint\b/,
|
|
142
|
+
/\b(?:rm|rmdir|mv|cp|install|mkdir|mktemp|touch|tee|dd|unlink|chmod|chown|ln|truncate)\b/,
|
|
143
|
+
/\b(?:npm|pnpm|yarn|bun)\s+(?:install|ci|add|remove|uninstall|update|link|publish|pack)\b/,
|
|
144
|
+
/\b(?:curl|wget|nc|netcat|socat|ssh|scp|rsync|ftp|telnet)\b/,
|
|
145
|
+
/subprocess/, /os\.system/, /os\.popen/, /os\.exec\w*\b/, /os\.spawn\w*\b/,
|
|
146
|
+
/os\.remove/, /os\.unlink/, /os\.rmdir/, /os\.mkdir/, /os\.rename/, /os\.replace/,
|
|
147
|
+
/os\.chmod/, /os\.chown/, /os\.symlink/, /os\.link/, /os\.truncate/, /os\.write/,
|
|
148
|
+
/os\.environ/, /getenv/, /shutil/, /socket/, /urllib/, /requests/, /http\.client/,
|
|
149
|
+
/ftplib/, /smtplib/, /telnetlib/, /child_process/, /process\.env/,
|
|
150
|
+
/require\s*\(\s*['"]fs['"]\s*\)/, /from\s+['"]fs['"]/, /import\s*\(\s*['"]fs['"]/,
|
|
151
|
+
/writefilesync/, /appendfilesync/, /mkdirsync/, /rmsync/, /unlinksync/, /rmdirsync/,
|
|
152
|
+
/renamesync/, /chmodsync/, /chownsync/, /truncatesync/, /createwritestream/,
|
|
153
|
+
/write_text/, /write_bytes/, /__import__/, /getattr\s*\(/, /setattr\s*\(/, /delattr\s*\(/,
|
|
154
|
+
/globals\s*\(/, /locals\s*\(/, /compile\s*\(/, /\beval\s*\(/, /\bexec\s*\(/,
|
|
155
|
+
/\binput\s*\(/, /\bfetch\s*\(/, /o_wronly/, /o_rdwr/, /o_creat/,
|
|
156
|
+
/ld_preload/, /ld_library_path/, /pythonpath/, /pythonhome/, /node_options/,
|
|
157
|
+
/open\s*\([^,]+,\s*['"][^'"]*[wax+]/,
|
|
158
|
+
];
|
|
159
|
+
function stripQuoted(command) {
|
|
160
|
+
let out = "";
|
|
161
|
+
let quote = "";
|
|
162
|
+
for (let i = 0; i < command.length; i++) {
|
|
163
|
+
const ch = command[i];
|
|
164
|
+
if (quote) {
|
|
165
|
+
if (ch === "\\")
|
|
166
|
+
i++;
|
|
167
|
+
else if (ch === quote)
|
|
168
|
+
quote = "";
|
|
169
|
+
out += " ";
|
|
170
|
+
}
|
|
171
|
+
else if (ch === "'" || ch === '"') {
|
|
172
|
+
quote = ch;
|
|
173
|
+
out += " ";
|
|
174
|
+
}
|
|
175
|
+
else if (ch === "\\") {
|
|
176
|
+
i++;
|
|
177
|
+
out += " ";
|
|
178
|
+
}
|
|
179
|
+
else
|
|
180
|
+
out += ch;
|
|
181
|
+
}
|
|
182
|
+
return out;
|
|
183
|
+
}
|
|
184
|
+
function denyShellStructure(visible) {
|
|
185
|
+
if (/`|\$\(|\$\{/.test(visible))
|
|
186
|
+
throw new Error("Command denied: shell expansion is not allowed");
|
|
187
|
+
if (/[><]/.test(visible))
|
|
188
|
+
throw new Error("Command denied: redirection is not allowed");
|
|
189
|
+
}
|
|
190
|
+
function denyShellContent(lower) {
|
|
191
|
+
if (SHELL_CONTENT_DENY.some((pattern) => pattern.test(lower)))
|
|
192
|
+
throw new Error("Command denied: mutating, network, or environment access is not allowed");
|
|
193
|
+
}
|
|
194
|
+
function shellSegments(visible) {
|
|
195
|
+
const segments = [];
|
|
196
|
+
let start = 0;
|
|
197
|
+
for (let index = 0; index < visible.length; index += 1) {
|
|
198
|
+
const separator = visible[index];
|
|
199
|
+
if (separator !== "|" && separator !== ";" && separator !== "&" && separator !== "\n" && separator !== "\r")
|
|
200
|
+
continue;
|
|
201
|
+
const segment = visible.slice(start, index).trim();
|
|
202
|
+
if (segment)
|
|
203
|
+
segments.push(segment);
|
|
204
|
+
if ((separator === "|" || separator === "&") && visible[index + 1] === separator)
|
|
205
|
+
index += 1;
|
|
206
|
+
start = index + 1;
|
|
207
|
+
}
|
|
208
|
+
const tail = visible.slice(start).trim();
|
|
209
|
+
if (tail)
|
|
210
|
+
segments.push(tail);
|
|
211
|
+
return segments;
|
|
212
|
+
}
|
|
213
|
+
function assertGitSegment(tokens, segment) {
|
|
214
|
+
const subcommand = tokens[1]?.toLowerCase();
|
|
215
|
+
if (!subcommand)
|
|
216
|
+
return;
|
|
217
|
+
if (GIT_ALWAYS_MUTATING_SUBCOMMANDS.has(subcommand)) {
|
|
218
|
+
throw new Error("Command denied: git state changes are not allowed for context gathering");
|
|
219
|
+
}
|
|
220
|
+
const args = tokens.slice(2);
|
|
221
|
+
if (subcommand === "branch" || subcommand === "tag") {
|
|
222
|
+
if (args.some((token) => !token.startsWith("-"))) {
|
|
223
|
+
throw new Error("Command denied: git state changes are not allowed for context gathering");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (subcommand === "remote" && args.some((token) => !["-v", "--verbose"].includes(token))) {
|
|
227
|
+
throw new Error("Command denied: git remote changes are not allowed for context gathering");
|
|
228
|
+
}
|
|
229
|
+
if (subcommand === "config" && !args.some((token) => ["--get", "--get-all", "--get-regexp", "--list", "-l", "--show-origin", "--show-scope", "--name-only"].includes(token))) {
|
|
230
|
+
throw new Error("Command denied: git config changes are not allowed for context gathering");
|
|
231
|
+
}
|
|
232
|
+
if (/\b(?:-d|-D|--delete|--move|--set-upstream-to)\b/.test(segment)) {
|
|
233
|
+
throw new Error("Command denied: git state changes are not allowed for context gathering");
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function assertShellSegment(segment) {
|
|
237
|
+
const tokens = segment.trim().split(/\s+/).filter(Boolean);
|
|
238
|
+
const first = tokens[0]?.toLowerCase();
|
|
239
|
+
if (!first || !SHELL_FIRST_ALLOW.has(first))
|
|
240
|
+
throw new Error("Command denied: use a read-only search or inspection command");
|
|
241
|
+
if (first === "git")
|
|
242
|
+
assertGitSegment(tokens, segment);
|
|
243
|
+
if (first === "find" && /-(delete|exec(dir)?|ok|fls|fprint)\b/.test(segment))
|
|
244
|
+
throw new Error("Command denied: find may not modify or execute");
|
|
245
|
+
if (first === "sort" && /-o\b|--output\b/.test(segment))
|
|
246
|
+
throw new Error("Command denied: sort may not write files");
|
|
247
|
+
}
|
|
248
|
+
async function prepareShellExec(root, args) {
|
|
249
|
+
const raw = string(args, "command", 4000).trim();
|
|
250
|
+
if (!raw)
|
|
251
|
+
throw new Error("Invalid command");
|
|
252
|
+
const visible = stripQuoted(raw);
|
|
253
|
+
denyShellStructure(visible);
|
|
254
|
+
denyShellContent(raw.toLowerCase());
|
|
255
|
+
for (const segment of shellSegments(visible))
|
|
256
|
+
assertShellSegment(segment);
|
|
257
|
+
return { command: raw, cwd: await confinedPath(root, "."), timeoutMs: number(args, "timeoutMs", 15_000, 30_000), background: "never" };
|
|
258
|
+
}
|
|
259
|
+
function publicUrl(value, maxBytesFallback) {
|
|
260
|
+
const href = new URL(string({ url: value }, "url", 4096)).href;
|
|
261
|
+
const parsed = new URL(href);
|
|
262
|
+
if (!["https:", "http:"].includes(parsed.protocol) || parsed.username || parsed.password)
|
|
263
|
+
throw new Error("Only public HTTP(S) web URLs without credentials are allowed");
|
|
264
|
+
return { url: parsed.href, maxBytes: maxBytesFallback, timeoutMs: 15_000 };
|
|
265
|
+
}
|
|
266
|
+
async function prepareFsRead(root, args) {
|
|
267
|
+
if (args.path === undefined)
|
|
268
|
+
throw new Error("fs.read requires path");
|
|
269
|
+
const path = await confinedPath(root, args.path);
|
|
270
|
+
const offset = number(args, "offset", number(args, "startLine", 1, 10_000_000), 10_000_000, 0) || 1;
|
|
271
|
+
const limit = number(args, "limit", 200, 300);
|
|
272
|
+
const end = number(args, "endLine", offset + limit - 1, 10_000_300);
|
|
273
|
+
if (end < offset)
|
|
274
|
+
throw new Error("endLine precedes offset");
|
|
275
|
+
return { path, offset, limit: Math.min(limit, end - offset + 1), maxBytes: number(args, "maxBytes", TOOL_OUTPUT_LIMIT, TOOL_OUTPUT_LIMIT) };
|
|
276
|
+
}
|
|
277
|
+
async function prepareFsList(root, args) {
|
|
278
|
+
return { path: await confinedPath(root, args.path), maxEntries: number(args, "maxEntries", 100, 200) };
|
|
279
|
+
}
|
|
280
|
+
async function prepareFsSearch(root, args) {
|
|
281
|
+
const safe = {
|
|
282
|
+
path: await confinedPath(root, args.path), pattern: string(args, "pattern"),
|
|
283
|
+
maxMatches: number(args, "maxMatches", 30, 100),
|
|
284
|
+
maxPerFile: 1, context: 0, filesOnly: true,
|
|
285
|
+
timeoutMs: number(args, "timeoutMs", 2000, 2000),
|
|
286
|
+
};
|
|
287
|
+
for (const key of ["caseInsensitive", "fixedString", "hidden"]) {
|
|
288
|
+
if (args[key] !== undefined && typeof args[key] !== "boolean")
|
|
289
|
+
throw new Error(`Invalid ${key}`);
|
|
290
|
+
safe[key] = args[key] ?? false;
|
|
291
|
+
}
|
|
292
|
+
if (args.glob !== undefined)
|
|
293
|
+
safe.glob = string(args, "glob", 256);
|
|
294
|
+
return safe;
|
|
295
|
+
}
|
|
296
|
+
function prepareWebSearch(args) {
|
|
297
|
+
return { query: string(args, "query"), maxResults: number(args, "maxResults", 5, 5), timeoutMs: number(args, "timeoutMs", 15_000, 30_000) };
|
|
298
|
+
}
|
|
299
|
+
function prepareWebFetch(args) {
|
|
300
|
+
const base = publicUrl(args.url, number(args, "maxBytes", 65_536, 65_536));
|
|
301
|
+
base.timeoutMs = number(args, "timeoutMs", 15_000, 30_000);
|
|
302
|
+
const safe = { url: base.url, maxBytes: base.maxBytes, timeoutMs: base.timeoutMs };
|
|
303
|
+
const mode = optionalEnum(args, "responseMode", ["readable", "raw"]);
|
|
304
|
+
if (mode !== undefined)
|
|
305
|
+
safe.responseMode = mode;
|
|
306
|
+
const part = optionalEnum(args, "responsePart", ["full", "headers", "body"]);
|
|
307
|
+
if (part !== undefined)
|
|
308
|
+
safe.responsePart = part;
|
|
309
|
+
return safe;
|
|
310
|
+
}
|
|
311
|
+
function prepareHttpFetch(args) {
|
|
312
|
+
return prepareWebFetch(args);
|
|
313
|
+
}
|
|
314
|
+
async function preparePdfRead(root, args) {
|
|
315
|
+
const safe = { path: await confinedPath(root, args.path) };
|
|
316
|
+
const first = optionalNumber(args, "firstPage", 500, 1);
|
|
317
|
+
if (first !== undefined)
|
|
318
|
+
safe.firstPage = first;
|
|
319
|
+
const last = optionalNumber(args, "lastPage", 500, 1);
|
|
320
|
+
if (last !== undefined)
|
|
321
|
+
safe.lastPage = last;
|
|
322
|
+
const pages = optionalNumber(args, "maxPages", 50, 1);
|
|
323
|
+
if (pages !== undefined)
|
|
324
|
+
safe.maxPages = pages;
|
|
325
|
+
else
|
|
326
|
+
safe.maxPages = 50;
|
|
327
|
+
const chars = optionalNumber(args, "maxChars", 50_000, 1000);
|
|
328
|
+
if (chars !== undefined)
|
|
329
|
+
safe.maxChars = chars;
|
|
330
|
+
if (safe.firstPage !== undefined && safe.lastPage !== undefined && safe.lastPage < safe.firstPage)
|
|
331
|
+
throw new Error("lastPage precedes firstPage");
|
|
332
|
+
return safe;
|
|
333
|
+
}
|
|
334
|
+
async function prepareImageView(root, args) {
|
|
335
|
+
const hasPath = args.path !== undefined;
|
|
336
|
+
const hasPaths = args.paths !== undefined;
|
|
337
|
+
if (!hasPath && !hasPaths)
|
|
338
|
+
throw new Error("image.view requires path or paths");
|
|
339
|
+
const safe = {};
|
|
340
|
+
if (hasPath)
|
|
341
|
+
safe.path = await confinedPath(root, args.path);
|
|
342
|
+
if (hasPaths) {
|
|
343
|
+
const paths = stringList(args.paths, "paths", 1, 4, 4096);
|
|
344
|
+
const confined = [];
|
|
345
|
+
for (const entry of paths)
|
|
346
|
+
confined.push(await confinedPath(root, entry));
|
|
347
|
+
safe.paths = confined;
|
|
348
|
+
}
|
|
349
|
+
return safe;
|
|
350
|
+
}
|
|
351
|
+
async function prepareImageOcr(root, args) {
|
|
352
|
+
const safe = { path: await confinedPath(root, args.path) };
|
|
353
|
+
const lang = optionalString(args, "lang", 64);
|
|
354
|
+
if (lang !== undefined)
|
|
355
|
+
safe.lang = lang;
|
|
356
|
+
const psm = optionalNumber(args, "psm", 13, 0);
|
|
357
|
+
if (psm !== undefined)
|
|
358
|
+
safe.psm = psm;
|
|
359
|
+
const preprocess = optionalBoolean(args, "preprocess");
|
|
360
|
+
if (preprocess !== undefined)
|
|
361
|
+
safe.preprocess = preprocess;
|
|
362
|
+
return safe;
|
|
363
|
+
}
|
|
364
|
+
function prepareToolCheck(args) {
|
|
365
|
+
return { tools: stringList(args.tools, "tools", 1, 20, 256) };
|
|
366
|
+
}
|
|
367
|
+
function prepareWordlistFind(args) {
|
|
368
|
+
const safe = { query: string(args, "query") };
|
|
369
|
+
const expand = optionalBoolean(args, "expand");
|
|
370
|
+
if (expand !== undefined)
|
|
371
|
+
safe.expand = expand;
|
|
372
|
+
return safe;
|
|
373
|
+
}
|
|
374
|
+
function prepareSkillLoad(args) {
|
|
375
|
+
return { name: string(args, "name", 256) };
|
|
376
|
+
}
|
|
377
|
+
function prepareSkillList(args) {
|
|
378
|
+
const query = optionalString(args, "query", 256);
|
|
379
|
+
return query === undefined ? {} : { query };
|
|
380
|
+
}
|
|
381
|
+
export async function prepareReadOnlyCall(root, call) {
|
|
382
|
+
const allowed = fields[call.name];
|
|
383
|
+
if (!Object.hasOwn(fields, call.name) || !allowed)
|
|
384
|
+
throw new Error(`Tool denied: ${call.name}`);
|
|
385
|
+
if (!call.args || typeof call.args !== "object" || Array.isArray(call.args))
|
|
386
|
+
throw new Error("Invalid tool arguments");
|
|
387
|
+
for (const key of Object.keys(call.args)) {
|
|
388
|
+
if (!allowed.includes(key))
|
|
389
|
+
throw new Error(`Argument denied: ${call.name}.${key}`);
|
|
390
|
+
}
|
|
391
|
+
const args = call.args;
|
|
392
|
+
switch (call.name) {
|
|
393
|
+
case "fs.read": return { name: call.name, args: await prepareFsRead(root, args) };
|
|
394
|
+
case "fs.list": return { name: call.name, args: await prepareFsList(root, args) };
|
|
395
|
+
case "fs.search": return { name: call.name, args: await prepareFsSearch(root, args) };
|
|
396
|
+
case "web.search": return { name: call.name, args: prepareWebSearch(args) };
|
|
397
|
+
case "web.fetch": return { name: call.name, args: prepareWebFetch(args) };
|
|
398
|
+
case "http.fetch": return { name: call.name, args: prepareHttpFetch(args) };
|
|
399
|
+
case "pdf.read": return { name: call.name, args: await preparePdfRead(root, args) };
|
|
400
|
+
case "image.view": return { name: call.name, args: await prepareImageView(root, args) };
|
|
401
|
+
case "image.ocr": return { name: call.name, args: await prepareImageOcr(root, args) };
|
|
402
|
+
case "sysinfo": return { name: call.name, args: {} };
|
|
403
|
+
case "tool.check": return { name: call.name, args: prepareToolCheck(args) };
|
|
404
|
+
case "wordlist.find": return { name: call.name, args: prepareWordlistFind(args) };
|
|
405
|
+
case "skill.load": return { name: call.name, args: prepareSkillLoad(args) };
|
|
406
|
+
case "skill.list": return { name: call.name, args: prepareSkillList(args) };
|
|
407
|
+
case "shell.exec": return { name: call.name, args: await prepareShellExec(root, args) };
|
|
408
|
+
default: throw new Error(`Tool denied: ${call.name}`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
const excluded = new Set([".git", ".hg", ".svn", "node_modules", "dist", "build", "out", "target", "coverage", ".next", ".venv", "__pycache__"]);
|
|
412
|
+
async function confineViewPaths(root, args) {
|
|
413
|
+
const safe = { ...args };
|
|
414
|
+
if (args.path !== undefined)
|
|
415
|
+
safe.path = await confinedPath(root, args.path);
|
|
416
|
+
if (args.paths !== undefined) {
|
|
417
|
+
const confined = [];
|
|
418
|
+
for (const entry of args.paths)
|
|
419
|
+
confined.push(await confinedPath(root, entry));
|
|
420
|
+
safe.paths = confined;
|
|
421
|
+
}
|
|
422
|
+
return safe;
|
|
423
|
+
}
|
|
424
|
+
export async function executeReadOnlyCall(root, call, execute, options) {
|
|
425
|
+
options.signal?.throwIfAborted();
|
|
426
|
+
if (!Object.hasOwn(fields, call.name))
|
|
427
|
+
throw new Error(`Tool denied: ${call.name}`);
|
|
428
|
+
if (call.name !== "fs.search") {
|
|
429
|
+
let safe = call;
|
|
430
|
+
if (call.name.startsWith("fs.") || call.name === "pdf.read" || call.name === "image.ocr") {
|
|
431
|
+
safe = { ...call, args: { ...call.args, path: await confinedPath(root, call.args.path) } };
|
|
432
|
+
}
|
|
433
|
+
else if (call.name === "image.view") {
|
|
434
|
+
safe = { ...call, args: await confineViewPaths(root, call.args) };
|
|
435
|
+
}
|
|
436
|
+
if (safe.name === "fs.read") {
|
|
437
|
+
const stat = await lstat(String(safe.args.path));
|
|
438
|
+
if (!stat.isFile() && !stat.isDirectory())
|
|
439
|
+
throw new Error("Only regular files and directories are readable");
|
|
440
|
+
if (stat.isFile() && stat.size > 2 * 1024 * 1024) {
|
|
441
|
+
throw new Error("File exceeds the child 2 MiB read limit; report this coverage gap for parent inspection");
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
options.signal?.throwIfAborted();
|
|
445
|
+
const result = await execute(safe, options);
|
|
446
|
+
options.signal?.throwIfAborted();
|
|
447
|
+
return { ...result, output: boundedOutput(result.output) };
|
|
448
|
+
}
|
|
449
|
+
const files = [];
|
|
450
|
+
const gaps = new Set(["Symlinks, generated directories and files over 1 MB are excluded."]);
|
|
451
|
+
let entries = 0;
|
|
452
|
+
const glob = typeof call.args.glob === "string" ? call.args.glob : undefined;
|
|
453
|
+
const matcher = glob ? globToPathRegExp(glob.startsWith("!") ? glob.slice(1) : glob) : undefined;
|
|
454
|
+
if (glob && !matcher)
|
|
455
|
+
throw new Error("Invalid search glob");
|
|
456
|
+
const start = String(call.args.path);
|
|
457
|
+
const collect = async (path, depth) => {
|
|
458
|
+
options.signal?.throwIfAborted();
|
|
459
|
+
if (entries >= 2048 || files.length >= 64 || depth > 16) {
|
|
460
|
+
gaps.add("Search traversal limit reached; narrow path/glob for remaining coverage.");
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
entries += 1;
|
|
464
|
+
const stat = await lstat(path);
|
|
465
|
+
if (stat.isSymbolicLink())
|
|
466
|
+
return;
|
|
467
|
+
await confinedPath(root, path);
|
|
468
|
+
if (stat.isFile()) {
|
|
469
|
+
const rel = relative(start, path) || relative(root, path);
|
|
470
|
+
if (stat.size <= 1_048_576 && (!matcher || matcher.test(rel) !== glob.startsWith("!")))
|
|
471
|
+
files.push(path);
|
|
472
|
+
}
|
|
473
|
+
else if (stat.isDirectory()) {
|
|
474
|
+
const dir = await opendir(path);
|
|
475
|
+
for await (const entry of dir) {
|
|
476
|
+
options.signal?.throwIfAborted();
|
|
477
|
+
if (entries >= 2048 || files.length >= 64) {
|
|
478
|
+
gaps.add("Search traversal limit reached; narrow path/glob for remaining coverage.");
|
|
479
|
+
break;
|
|
480
|
+
}
|
|
481
|
+
entries += 1;
|
|
482
|
+
if (entry.isSymbolicLink()) {
|
|
483
|
+
await confinedPath(root, resolve(path, entry.name));
|
|
484
|
+
continue;
|
|
485
|
+
}
|
|
486
|
+
if (excluded.has(entry.name) || (!call.args.hidden && entry.name.startsWith(".")))
|
|
487
|
+
continue;
|
|
488
|
+
await collect(resolve(path, entry.name), depth + 1);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
await collect(start, 0);
|
|
493
|
+
let output = "";
|
|
494
|
+
let ok = true;
|
|
495
|
+
let scanned = 0;
|
|
496
|
+
let matched = 0;
|
|
497
|
+
for (const file of files) {
|
|
498
|
+
options.signal?.throwIfAborted();
|
|
499
|
+
const path = await confinedPath(root, file);
|
|
500
|
+
if (!(await lstat(path)).isFile())
|
|
501
|
+
throw new Error("Search target is no longer a regular file");
|
|
502
|
+
options.signal?.throwIfAborted();
|
|
503
|
+
const { glob: _glob, ...args } = call.args;
|
|
504
|
+
const result = await execute({ name: call.name, args: { ...args, path } }, options);
|
|
505
|
+
options.signal?.throwIfAborted();
|
|
506
|
+
scanned += 1;
|
|
507
|
+
ok = ok && result.ok;
|
|
508
|
+
if (!result.ok || !/^# no matches$/m.test(result.output)) {
|
|
509
|
+
output += `${result.output}\n`;
|
|
510
|
+
if (result.ok)
|
|
511
|
+
matched += 1;
|
|
512
|
+
}
|
|
513
|
+
if (matched >= Number(call.args.maxMatches)) {
|
|
514
|
+
gaps.add("Match limit reached; remaining files were not searched.");
|
|
515
|
+
break;
|
|
516
|
+
}
|
|
517
|
+
if (output.length >= TOOL_OUTPUT_LIMIT - 1000) {
|
|
518
|
+
gaps.add("Search output limit reached; remaining files were not searched.");
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
return { ok, output: boundedOutput(`Scanned ${scanned} files; ${matched} matching paths. Use fs.read for numbered evidence. Coverage gaps: ${[...gaps].join(" ")}\n${output || "No matches in the scanned files."}`) };
|
|
523
|
+
}
|
|
524
|
+
//# sourceMappingURL=read-only-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-only-tools.js","sourceRoot":"","sources":["../../../src/agent/subagents/read-only-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function subagentReportStatus(text: string): "completed" | "partial" | undefined;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SUBAGENT_LIMITS } from "../../store/subagents.js";
|
|
2
|
+
export function subagentReportStatus(text) {
|
|
3
|
+
const status = /^Status: (complete|partial)\r?\n/i.exec(text.trimStart())?.[1]?.toLowerCase();
|
|
4
|
+
if (!status || text.trim().length < 160 || Buffer.byteLength(text) > SUBAGENT_LIMITS.report)
|
|
5
|
+
return undefined;
|
|
6
|
+
const sections = new Map(text.split(/^## /m).slice(1).map((section) => {
|
|
7
|
+
const line = section.indexOf("\n");
|
|
8
|
+
return line < 0 ? [section.trim().toLowerCase(), ""] : [section.slice(0, line).trim().toLowerCase(), section.slice(line + 1).trim()];
|
|
9
|
+
}));
|
|
10
|
+
if (!["findings", "evidence", "next steps", "coverage gaps"].every((heading) => sections.get(heading)))
|
|
11
|
+
return undefined;
|
|
12
|
+
if (!/(?:https?:\/\/\S+|[\w./-]+(?:(?::|#L?)|`?\s+lines?\s+)[1-9]\d*\b)/i.test(sections.get("evidence")))
|
|
13
|
+
return undefined;
|
|
14
|
+
return status === "complete" ? "completed" : "partial";
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/agent/subagents/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,MAAM,GAAG,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9F,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACpE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvI,CAAC,CAAC,CAAC,CAAC;IACJ,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzH,IAAI,CAAC,oEAAoE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5H,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ToolCall, ToolResult, ProviderId } from "../../types.js";
|
|
2
|
+
import type { SubagentManager } from "./manager.js";
|
|
3
|
+
import type { SubagentRun } from "./types.js";
|
|
4
|
+
export declare function isSubagentTool(name: string): boolean;
|
|
5
|
+
export declare function orchestrationContext(enabled: boolean): string;
|
|
6
|
+
export declare function subagentResult(run: SubagentRun, offset?: number, length?: number): {
|
|
7
|
+
report: string | undefined;
|
|
8
|
+
reportOffset: number;
|
|
9
|
+
reportLength: number | undefined;
|
|
10
|
+
nextOffset: number | undefined;
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
status: import("./types.js").SubagentStatus;
|
|
14
|
+
attempt: number;
|
|
15
|
+
updatedAt: number;
|
|
16
|
+
reportAvailable: boolean;
|
|
17
|
+
error: string | undefined;
|
|
18
|
+
recovery: "history" | "exact" | "fresh" | undefined;
|
|
19
|
+
lastKnownSummaryAttempt: number | undefined;
|
|
20
|
+
};
|
|
21
|
+
export declare function runSubagentTool(call: ToolCall, context: {
|
|
22
|
+
manager?: SubagentManager | undefined;
|
|
23
|
+
provider: ProviderId;
|
|
24
|
+
model: string;
|
|
25
|
+
cwd: string;
|
|
26
|
+
}, signal: AbortSignal): Promise<ToolResult>;
|