@cjhyy/code-shell-core 0.5.0-rc.2 → 0.6.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -10
- package/dist/agent/agent-definition-registry.d.ts +3 -0
- package/dist/agent/agent-definition-registry.js +3 -1
- package/dist/agent/agent-definition.d.ts +15 -0
- package/dist/agent/agent-definition.js +27 -3
- package/dist/arena/context/context-tools.js +47 -4
- package/dist/arena/ledger.js +9 -1
- package/dist/arena/strategies/utils.d.ts +1 -4
- package/dist/arena/strategies/utils.js +7 -84
- package/dist/automation/cron-expr.d.ts +10 -0
- package/dist/automation/cron-expr.js +23 -5
- package/dist/automation/runner.d.ts +21 -4
- package/dist/automation/runner.js +48 -12
- package/dist/automation/scheduler.d.ts +38 -0
- package/dist/automation/scheduler.js +89 -12
- package/dist/automation/store.js +5 -2
- package/dist/capability-control/disabled-lists.d.ts +25 -0
- package/dist/capability-control/disabled-lists.js +57 -0
- package/dist/capability-control/overlay.d.ts +15 -0
- package/dist/capability-control/overlay.js +27 -0
- package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
- package/dist/cc-orchestrator/agent-adapter.js +133 -0
- package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
- package/dist/cc-orchestrator/cc-capability.js +53 -0
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
- package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
- package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
- package/dist/cc-orchestrator/codex-session-history.js +187 -0
- package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
- package/dist/cc-orchestrator/external-agent-changes.js +214 -0
- package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
- package/dist/cc-orchestrator/external-agent-driver.js +69 -0
- package/dist/cc-orchestrator/index.d.ts +8 -0
- package/dist/cc-orchestrator/index.js +8 -0
- package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
- package/dist/cc-orchestrator/relevance-judge.js +29 -0
- package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
- package/dist/cc-orchestrator/session-discovery.js +125 -0
- package/dist/cc-orchestrator/session-history.d.ts +19 -0
- package/dist/cc-orchestrator/session-history.js +67 -0
- package/dist/cli/agent-server-stdio.d.ts +15 -1
- package/dist/cli/agent-server-stdio.js +115 -17
- package/dist/cli/agent-server-tcp.js +40 -26
- package/dist/context/compaction.d.ts +56 -0
- package/dist/context/compaction.js +186 -0
- package/dist/context/manager.js +25 -4
- package/dist/cost-tracker.js +5 -61
- package/dist/credentials/cipher.d.ts +49 -0
- package/dist/credentials/cipher.js +45 -0
- package/dist/credentials/cookie-jar.d.ts +24 -0
- package/dist/credentials/cookie-jar.js +40 -0
- package/dist/credentials/index.d.ts +7 -0
- package/dist/credentials/index.js +5 -0
- package/dist/credentials/inject-credential-tool.d.ts +20 -0
- package/dist/credentials/inject-credential-tool.js +130 -0
- package/dist/credentials/store.d.ts +72 -0
- package/dist/credentials/store.js +184 -0
- package/dist/credentials/types.d.ts +56 -0
- package/dist/credentials/use-credential-tool.d.ts +29 -0
- package/dist/credentials/use-credential-tool.js +205 -0
- package/dist/credentials/use-gate.d.ts +56 -0
- package/dist/credentials/use-gate.js +52 -0
- package/dist/data/model-metadata.d.ts +77 -0
- package/dist/data/model-metadata.js +56 -0
- package/dist/data/model-metadata.json +216 -0
- package/dist/data/openrouter-models.d.ts +18 -7
- package/dist/data/openrouter-models.js +35 -8
- package/dist/engine/aux-key.d.ts +10 -0
- package/dist/engine/aux-key.js +11 -0
- package/dist/engine/dynamic-tool-defs.d.ts +19 -0
- package/dist/engine/dynamic-tool-defs.js +36 -0
- package/dist/engine/engine.d.ts +267 -138
- package/dist/engine/engine.js +957 -191
- package/dist/engine/friendly-error.d.ts +18 -0
- package/dist/engine/friendly-error.js +63 -0
- package/dist/engine/goal.d.ts +145 -0
- package/dist/engine/goal.js +144 -0
- package/dist/engine/image-policy.d.ts +13 -0
- package/dist/engine/image-policy.js +24 -0
- package/dist/engine/model-connections-pool.d.ts +17 -0
- package/dist/engine/model-connections-pool.js +66 -0
- package/dist/engine/model-facade.d.ts +10 -0
- package/dist/engine/model-facade.js +25 -0
- package/dist/engine/patch-orphaned-tools.js +3 -0
- package/dist/engine/resolve-llm-config.d.ts +16 -0
- package/dist/engine/resolve-llm-config.js +44 -0
- package/dist/engine/runtime.js +2 -1
- package/dist/engine/sandbox-cache-key.d.ts +10 -0
- package/dist/engine/sandbox-cache-key.js +9 -0
- package/dist/engine/sandbox-config.d.ts +31 -0
- package/dist/engine/sandbox-config.js +38 -0
- package/dist/engine/session-usage.d.ts +19 -0
- package/dist/engine/session-usage.js +25 -0
- package/dist/engine/steer-queue.d.ts +32 -0
- package/dist/engine/steer-queue.js +26 -0
- package/dist/engine/streaming-tool-queue.d.ts +12 -0
- package/dist/engine/streaming-tool-queue.js +50 -10
- package/dist/engine/turn-loop.d.ts +67 -3
- package/dist/engine/turn-loop.js +292 -41
- package/dist/engine/types.d.ts +175 -0
- package/dist/engine/types.js +13 -0
- package/dist/external-agents/config.d.ts +2 -0
- package/dist/external-agents/config.js +15 -0
- package/dist/external-agents/types.d.ts +31 -0
- package/dist/external-agents/types.js +1 -0
- package/dist/git/utils.js +11 -6
- package/dist/git/worktree.d.ts +48 -0
- package/dist/git/worktree.js +86 -10
- package/dist/hooks/goal-stop-hook.d.ts +28 -0
- package/dist/hooks/goal-stop-hook.js +186 -9
- package/dist/hooks/registry.d.ts +8 -0
- package/dist/hooks/registry.js +19 -0
- package/dist/hooks/shell-runner.js +10 -21
- package/dist/index.d.ts +49 -6
- package/dist/index.js +60 -4
- package/dist/llm/capabilities/param-specs.d.ts +14 -0
- package/dist/llm/capabilities/param-specs.js +62 -0
- package/dist/llm/capabilities/rules.js +4 -0
- package/dist/llm/capabilities/types.d.ts +10 -0
- package/dist/llm/client-base.d.ts +28 -1
- package/dist/llm/client-base.js +119 -13
- package/dist/llm/model-cache.js +4 -2
- package/dist/llm/model-pool.d.ts +14 -0
- package/dist/llm/model-pool.js +13 -0
- package/dist/llm/provider-auth.d.ts +41 -0
- package/dist/llm/provider-auth.js +76 -0
- package/dist/llm/provider-catalog.d.ts +4 -0
- package/dist/llm/providers/anthropic.js +64 -14
- package/dist/llm/providers/openai.d.ts +36 -0
- package/dist/llm/providers/openai.js +257 -51
- package/dist/llm/reasoning-setting.d.ts +3 -3
- package/dist/llm/reasoning-setting.js +9 -1
- package/dist/llm/stream-watchdog.js +5 -1
- package/dist/llm/token-counter.js +9 -2
- package/dist/llm/types.d.ts +4 -0
- package/dist/logging/sanitize-messages.js +22 -0
- package/dist/lsp/manager.d.ts +1 -1
- package/dist/lsp/manager.js +40 -10
- package/dist/model-catalog/builtin.d.ts +12 -0
- package/dist/model-catalog/builtin.js +407 -0
- package/dist/model-catalog/gen-connections.d.ts +20 -0
- package/dist/model-catalog/gen-connections.js +28 -0
- package/dist/model-catalog/index.d.ts +41 -0
- package/dist/model-catalog/index.js +90 -0
- package/dist/model-catalog/params.d.ts +20 -0
- package/dist/model-catalog/params.js +45 -0
- package/dist/model-catalog/resolve.d.ts +48 -0
- package/dist/model-catalog/resolve.js +33 -0
- package/dist/model-catalog/save-entry.d.ts +32 -0
- package/dist/model-catalog/save-entry.js +104 -0
- package/dist/model-catalog/types.d.ts +561 -0
- package/dist/model-catalog/types.js +93 -0
- package/dist/model-catalog/upsert.d.ts +9 -0
- package/dist/model-catalog/upsert.js +8 -0
- package/dist/onboarding.d.ts +12 -82
- package/dist/onboarding.js +61 -326
- package/dist/plugins/gitOps.d.ts +19 -0
- package/dist/plugins/gitOps.js +73 -4
- package/dist/plugins/installer/checkUpdate.d.ts +16 -0
- package/dist/plugins/installer/checkUpdate.js +32 -0
- package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
- package/dist/plugins/installer/codex/convertCommands.js +46 -0
- package/dist/plugins/installer/codex/convertMcp.d.ts +5 -2
- package/dist/plugins/installer/codex/convertMcp.js +45 -5
- package/dist/plugins/installer/install.js +25 -1
- package/dist/plugins/installer/installFromArchive.d.ts +43 -0
- package/dist/plugins/installer/installFromArchive.js +134 -0
- package/dist/plugins/installer/installFromSource.js +8 -2
- package/dist/plugins/installer/loadPluginAgents.js +6 -2
- package/dist/plugins/installer/loadPluginMcp.d.ts +9 -2
- package/dist/plugins/installer/loadPluginMcp.js +35 -2
- package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
- package/dist/plugins/installer/pruneDisabled.js +73 -0
- package/dist/plugins/installer/types.d.ts +5 -2
- package/dist/plugins/installer/types.js +1 -0
- package/dist/plugins/installer/uninstall.js +4 -0
- package/dist/plugins/installer/unzip.d.ts +14 -0
- package/dist/plugins/installer/unzip.js +82 -0
- package/dist/plugins/installer/update.d.ts +14 -0
- package/dist/plugins/installer/update.js +53 -21
- package/dist/plugins/loadPluginHooks.d.ts +47 -1
- package/dist/plugins/loadPluginHooks.js +73 -1
- package/dist/plugins/marketplaceManager.d.ts +7 -0
- package/dist/plugins/marketplaceManager.js +20 -0
- package/dist/plugins/pluginCommandHook.js +4 -18
- package/dist/plugins/pluginContent.d.ts +30 -0
- package/dist/plugins/pluginContent.js +83 -0
- package/dist/plugins/pluginInstaller.d.ts +13 -0
- package/dist/plugins/pluginInstaller.js +42 -8
- package/dist/plugins/schemas.js +1 -0
- package/dist/plugins/types.d.ts +6 -0
- package/dist/preset/index.d.ts +7 -1
- package/dist/preset/index.js +96 -6
- package/dist/product/types.d.ts +1 -1
- package/dist/prompt/composer.d.ts +27 -0
- package/dist/prompt/composer.js +67 -21
- package/dist/prompt/instruction-scanner.js +5 -3
- package/dist/prompt/section-loader.js +1 -0
- package/dist/prompt/sections/base.md +1 -0
- package/dist/prompt/sections/browser.md +10 -0
- package/dist/prompt/sections/coding.md +4 -0
- package/dist/protocol/chat-session-manager.d.ts +8 -2
- package/dist/protocol/chat-session-manager.js +36 -0
- package/dist/protocol/chat-session.d.ts +65 -0
- package/dist/protocol/chat-session.js +94 -2
- package/dist/protocol/client.d.ts +27 -0
- package/dist/protocol/client.js +38 -0
- package/dist/protocol/server.d.ts +112 -0
- package/dist/protocol/server.js +586 -16
- package/dist/protocol/transport.js +3 -2
- package/dist/protocol/types.d.ts +46 -0
- package/dist/protocol/types.js +16 -0
- package/dist/quota/credentials.d.ts +3 -0
- package/dist/quota/credentials.js +80 -0
- package/dist/quota/index.d.ts +36 -0
- package/dist/quota/index.js +155 -0
- package/dist/quota/types.d.ts +48 -0
- package/dist/quota/types.js +13 -0
- package/dist/review/review-prompt.d.ts +28 -0
- package/dist/review/review-prompt.js +81 -0
- package/dist/run/FileRunStore.js +8 -3
- package/dist/run/RunApprovalBackend.js +25 -5
- package/dist/run/RunManager.d.ts +12 -0
- package/dist/run/RunManager.js +35 -0
- package/dist/run/factory.d.ts +1 -1
- package/dist/runtime/background-shell.d.ts +139 -0
- package/dist/runtime/background-shell.js +495 -0
- package/dist/runtime/output-clean.d.ts +24 -0
- package/dist/runtime/output-clean.js +41 -0
- package/dist/runtime/ring-file.d.ts +64 -0
- package/dist/runtime/ring-file.js +174 -0
- package/dist/runtime/safe-spawn.js +15 -34
- package/dist/runtime/spawn-common.d.ts +148 -0
- package/dist/runtime/spawn-common.js +303 -0
- package/dist/runtime/truncate-output.d.ts +22 -0
- package/dist/runtime/truncate-output.js +49 -0
- package/dist/runtime/utf8-cut.d.ts +11 -0
- package/dist/runtime/utf8-cut.js +23 -0
- package/dist/services/auto-dream.d.ts +4 -0
- package/dist/services/auto-dream.js +26 -26
- package/dist/services/diagnostics.d.ts +1 -2
- package/dist/services/diagnostics.js +12 -7
- package/dist/services/extract-memories.d.ts +14 -1
- package/dist/services/extract-memories.js +45 -6
- package/dist/services/memory-orchestrator.d.ts +21 -0
- package/dist/services/memory-orchestrator.js +125 -50
- package/dist/services/session-memory.js +24 -12
- package/dist/session/file-history.d.ts +124 -1
- package/dist/session/file-history.js +222 -6
- package/dist/session/memory.d.ts +116 -2
- package/dist/session/memory.js +250 -28
- package/dist/session/session-manager.d.ts +40 -0
- package/dist/session/session-manager.js +113 -3
- package/dist/session/simple-diff.d.ts +23 -0
- package/dist/session/simple-diff.js +84 -0
- package/dist/session/transcript.d.ts +25 -1
- package/dist/session/transcript.js +35 -2
- package/dist/session/undo-target.d.ts +67 -0
- package/dist/session/undo-target.js +144 -0
- package/dist/settings/disk-defaults.d.ts +9 -2
- package/dist/settings/disk-defaults.js +11 -2
- package/dist/settings/feature-flags.d.ts +64 -0
- package/dist/settings/feature-flags.js +61 -0
- package/dist/settings/manager.d.ts +68 -1
- package/dist/settings/manager.js +266 -29
- package/dist/settings/migrate-config.d.ts +45 -0
- package/dist/settings/migrate-config.js +125 -0
- package/dist/settings/schema-export.d.ts +25 -0
- package/dist/settings/schema-export.js +38 -0
- package/dist/settings/schema.d.ts +1186 -771
- package/dist/settings/schema.js +268 -97
- package/dist/skills/scanner.d.ts +9 -0
- package/dist/skills/scanner.js +30 -2
- package/dist/stt/resolve-transcribe.d.ts +31 -0
- package/dist/stt/resolve-transcribe.js +108 -0
- package/dist/stt/transcribe.d.ts +51 -0
- package/dist/stt/transcribe.js +65 -0
- package/dist/tool-system/browser-bridge.d.ts +226 -0
- package/dist/tool-system/browser-bridge.js +163 -0
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
- package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
- package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
- package/dist/tool-system/builtin/agent-notifications.js +9 -3
- package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
- package/dist/tool-system/builtin/agent-output-file.js +72 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +12 -0
- package/dist/tool-system/builtin/agent-registry.js +8 -0
- package/dist/tool-system/builtin/agent.d.ts +21 -1
- package/dist/tool-system/builtin/agent.js +489 -42
- package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
- package/dist/tool-system/builtin/apply-patch/index.js +0 -15
- package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
- package/dist/tool-system/builtin/background-jobs.js +124 -0
- package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
- package/dist/tool-system/builtin/background-shell-tools.js +108 -0
- package/dist/tool-system/builtin/background-work.d.ts +67 -0
- package/dist/tool-system/builtin/background-work.js +86 -0
- package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
- package/dist/tool-system/builtin/bash-output-style.js +40 -0
- package/dist/tool-system/builtin/bash.d.ts +5 -2
- package/dist/tool-system/builtin/bash.js +98 -62
- package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
- package/dist/tool-system/builtin/browser-tools.js +312 -0
- package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
- package/dist/tool-system/builtin/cancel-goal.js +64 -0
- package/dist/tool-system/builtin/check-quota.d.ts +15 -0
- package/dist/tool-system/builtin/check-quota.js +34 -0
- package/dist/tool-system/builtin/config.js +7 -0
- package/dist/tool-system/builtin/cron.d.ts +7 -0
- package/dist/tool-system/builtin/cron.js +55 -3
- package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
- package/dist/tool-system/builtin/drive-claude-code.js +157 -0
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
- package/dist/tool-system/builtin/edit.js +20 -16
- package/dist/tool-system/builtin/eol.d.ts +29 -0
- package/dist/tool-system/builtin/eol.js +37 -0
- package/dist/tool-system/builtin/file-cache.d.ts +6 -0
- package/dist/tool-system/builtin/file-cache.js +8 -0
- package/dist/tool-system/builtin/generate-image.d.ts +35 -0
- package/dist/tool-system/builtin/generate-image.js +278 -50
- package/dist/tool-system/builtin/generate-video.d.ts +55 -0
- package/dist/tool-system/builtin/generate-video.js +361 -0
- package/dist/tool-system/builtin/glob.js +0 -7
- package/dist/tool-system/builtin/grep.js +6 -8
- package/dist/tool-system/builtin/image-providers.d.ts +86 -0
- package/dist/tool-system/builtin/image-providers.js +190 -0
- package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
- package/dist/tool-system/builtin/image-uploader.js +74 -0
- package/dist/tool-system/builtin/index.d.ts +7 -1
- package/dist/tool-system/builtin/index.js +249 -25
- package/dist/tool-system/builtin/mcp-tools.js +23 -3
- package/dist/tool-system/builtin/memory.js +45 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -7
- package/dist/tool-system/builtin/powershell.js +4 -1
- package/dist/tool-system/builtin/read.js +10 -10
- package/dist/tool-system/builtin/repl.js +4 -1
- package/dist/tool-system/builtin/skill.js +9 -0
- package/dist/tool-system/builtin/sleep.js +3 -2
- package/dist/tool-system/builtin/tool-search.js +25 -7
- package/dist/tool-system/builtin/video-providers.d.ts +154 -0
- package/dist/tool-system/builtin/video-providers.js +235 -0
- package/dist/tool-system/builtin/web-fetch.js +12 -2
- package/dist/tool-system/builtin/web-search.js +21 -7
- package/dist/tool-system/builtin/worktree.d.ts +2 -1
- package/dist/tool-system/builtin/worktree.js +31 -4
- package/dist/tool-system/builtin/write.js +0 -6
- package/dist/tool-system/context.d.ts +154 -6
- package/dist/tool-system/executor.d.ts +3 -1
- package/dist/tool-system/executor.js +172 -88
- package/dist/tool-system/investigation-guard.js +1 -1
- package/dist/tool-system/mcp-manager.d.ts +42 -4
- package/dist/tool-system/mcp-manager.js +186 -20
- package/dist/tool-system/path-policy.d.ts +5 -0
- package/dist/tool-system/path-policy.js +307 -8
- package/dist/tool-system/permission.d.ts +36 -1
- package/dist/tool-system/permission.js +281 -69
- package/dist/tool-system/plan-mode-allowlist.d.ts +13 -2
- package/dist/tool-system/plan-mode-allowlist.js +24 -2
- package/dist/tool-system/registry.d.ts +1 -0
- package/dist/tool-system/registry.js +16 -2
- package/dist/tool-system/sandbox/index.d.ts +8 -0
- package/dist/tool-system/sandbox/index.js +7 -2
- package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
- package/dist/tool-system/validate-tool-metadata.js +63 -0
- package/dist/types.d.ts +217 -6
- package/dist/updater.js +20 -9
- package/dist/utils/envUtils.d.ts +0 -9
- package/dist/utils/envUtils.js +3 -28
- package/dist/utils/exec.d.ts +40 -0
- package/dist/utils/exec.js +144 -0
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +92 -0
- package/dist/utils/theme.d.ts +1 -1
- package/dist/utils/theme.js +1 -1
- package/dist/utils/toolDisplay.js +0 -1
- package/package.json +13 -7
- package/dist/agent/coordinator.d.ts +0 -49
- package/dist/agent/coordinator.js +0 -77
- package/dist/settings/manager.test.js +0 -73
- package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
- package/dist/tool-system/builtin/remote-trigger.js +0 -54
- package/dist/tool-system/builtin/send-message.d.ts +0 -6
- package/dist/tool-system/builtin/send-message.js +0 -47
- /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
import { readToolDef, readTool } from "./read.js";
|
|
5
5
|
import { writeToolDef, writeTool } from "./write.js";
|
|
6
6
|
import { generateImageToolDef, generateImageTool, isGenerateImageAvailable } from "./generate-image.js";
|
|
7
|
+
import { editModelCatalogToolDef, editModelCatalogTool } from "./edit-model-catalog.js";
|
|
8
|
+
import { generateVideoToolDef, generateVideoTool, isGenerateVideoAvailable } from "./generate-video.js";
|
|
7
9
|
import { viewImageToolDef, viewImageTool } from "./view-image.js";
|
|
8
10
|
import { editToolDef, editTool } from "./edit.js";
|
|
9
11
|
import { applyPatchToolDef, applyPatchTool } from "./apply-patch/index.js";
|
|
@@ -13,27 +15,33 @@ import { bashToolDef, bashTool } from "./bash.js";
|
|
|
13
15
|
import { webSearchToolDef, webSearchTool, isWebSearchAvailable } from "./web-search.js";
|
|
14
16
|
import { webFetchToolDef, webFetchTool } from "./web-fetch.js";
|
|
15
17
|
import { askUserToolDef, askUserTool } from "./ask-user.js";
|
|
16
|
-
import { agentToolDef, agentTool, agentStatusToolDef, agentStatusTool, agentCancelToolDef, agentCancelTool, } from "./agent.js";
|
|
18
|
+
import { agentToolDef, agentTool, agentStatusToolDef, agentStatusTool, agentCancelToolDef, agentCancelTool, agentSendInputToolDef, agentSendInputTool, } from "./agent.js";
|
|
17
19
|
import { enterPlanModeToolDef, enterPlanModeTool, exitPlanModeToolDef, exitPlanModeTool } from "./plan.js";
|
|
18
20
|
import { toolSearchToolDef, toolSearchTool } from "./tool-search.js";
|
|
19
21
|
import { todoWriteToolDef, todoWriteTool } from "./task.js";
|
|
20
22
|
import { enterWorktreeToolDef, enterWorktreeTool, exitWorktreeToolDef, exitWorktreeTool } from "./worktree.js";
|
|
21
|
-
import { sendMessageToolDef, sendMessageTool } from "./send-message.js";
|
|
22
23
|
import { sleepToolDef, sleepTool } from "./sleep.js";
|
|
23
24
|
import { configToolDef, configTool } from "./config.js";
|
|
24
25
|
import { notebookEditToolDef, notebookEditTool } from "./notebook-edit.js";
|
|
25
26
|
import { lspToolDef, lspTool } from "./lsp.js";
|
|
26
27
|
import { cronCreateToolDef, cronCreateTool, cronDeleteToolDef, cronDeleteTool, cronListToolDef, cronListTool } from "./cron.js";
|
|
28
|
+
import { driveClaudeCodeToolDef, driveClaudeCodeTool, driveAgentToolDef, driveAgentTool } from "./drive-claude-code.js";
|
|
29
|
+
import { checkQuotaToolDef, checkQuotaTool } from "./check-quota.js";
|
|
27
30
|
import { skillToolDef, skillTool } from "./skill.js";
|
|
28
31
|
import { mcpToolDef, mcpToolExecute, listMcpResourcesToolDef, listMcpResourcesTool, readMcpResourceToolDef, readMcpResourceTool } from "./mcp-tools.js";
|
|
29
|
-
import { remoteTriggerToolDef, remoteTriggerTool } from "./remote-trigger.js";
|
|
30
32
|
import { replToolDef, replTool } from "./repl.js";
|
|
31
33
|
import { briefToolDef, briefTool } from "./brief.js";
|
|
32
34
|
import { powershellToolDef, powershellTool } from "./powershell.js";
|
|
33
35
|
import { arenaToolDef, arenaTool } from "./arena.js";
|
|
34
36
|
import { memoryListToolDef, memoryListTool, memoryReadToolDef, memoryReadTool, memorySaveToolDef, memorySaveTool, memoryDeleteToolDef, memoryDeleteTool, } from "./memory.js";
|
|
35
37
|
import { completeGoalToolDef, completeGoalTool } from "./complete-goal.js";
|
|
38
|
+
import { cancelGoalToolDef, cancelGoalTool } from "./cancel-goal.js";
|
|
36
39
|
import { addMarketplaceToolDef, addMarketplaceTool } from "./add-marketplace.js";
|
|
40
|
+
import { bashOutputToolDef, bashOutputTool, killShellToolDef, killShellTool, listShellsToolDef, listShellsTool, } from "./background-shell-tools.js";
|
|
41
|
+
import { browserObserveToolDef, browserObserveTool, browserActToolDef, browserActTool, browserNavigateToolDef, browserNavigateTool, } from "./browser-tools.js";
|
|
42
|
+
import { useCredentialToolDef, useCredentialTool } from "../../credentials/use-credential-tool.js";
|
|
43
|
+
import { injectCredentialToolDef, injectCredentialTool, isInjectCredentialAvailable, } from "../../credentials/inject-credential-tool.js";
|
|
44
|
+
import { CredentialStore } from "../../credentials/store.js";
|
|
37
45
|
export const BUILTIN_TOOLS = [
|
|
38
46
|
{
|
|
39
47
|
definition: {
|
|
@@ -42,6 +50,7 @@ export const BUILTIN_TOOLS = [
|
|
|
42
50
|
permissionDefault: "allow",
|
|
43
51
|
isReadOnly: true,
|
|
44
52
|
isConcurrencySafe: true,
|
|
53
|
+
pathPolicy: [{ kind: "arg", arg: "file_path", operation: "read" }],
|
|
45
54
|
},
|
|
46
55
|
execute: readTool,
|
|
47
56
|
},
|
|
@@ -52,20 +61,58 @@ export const BUILTIN_TOOLS = [
|
|
|
52
61
|
permissionDefault: "ask",
|
|
53
62
|
isReadOnly: false,
|
|
54
63
|
isConcurrencySafe: false,
|
|
64
|
+
pathPolicy: [{ kind: "arg", arg: "file_path", operation: "write" }],
|
|
55
65
|
},
|
|
56
66
|
execute: writeTool,
|
|
57
67
|
},
|
|
68
|
+
{
|
|
69
|
+
definition: {
|
|
70
|
+
...editModelCatalogToolDef,
|
|
71
|
+
source: "builtin",
|
|
72
|
+
permissionDefault: "ask", // writes user config — confirm before each write
|
|
73
|
+
isReadOnly: false,
|
|
74
|
+
isConcurrencySafe: false, // serializes writes to the single catalog file
|
|
75
|
+
},
|
|
76
|
+
execute: editModelCatalogTool,
|
|
77
|
+
},
|
|
58
78
|
{
|
|
59
79
|
definition: {
|
|
60
80
|
...generateImageToolDef,
|
|
61
81
|
source: "builtin",
|
|
62
82
|
permissionDefault: "ask",
|
|
63
83
|
isReadOnly: false,
|
|
64
|
-
|
|
84
|
+
// Independent external I/O with no shared state — same class as WebFetch/GenerateVideo.
|
|
85
|
+
// Each call writes its own collision-free file (Date.now()+random suffix), so N images
|
|
86
|
+
// in one turn run concurrently (~3min for 6 instead of ~15min serial). Dependent chains
|
|
87
|
+
// (image → video) are forced across turns and serialize naturally via the drain barrier.
|
|
88
|
+
isConcurrencySafe: true,
|
|
65
89
|
timeoutMs: 600_000, // 10min — high-quality / large image generation routinely exceeds the 120s default; give slow renders ample room while still bounding a hung request (Stop / ctx.signal cancels sooner)
|
|
90
|
+
// `referenceImages` are local files read off disk and shipped to the
|
|
91
|
+
// provider — gate them through the path-policy layer like Read, so an
|
|
92
|
+
// out-of-workspace ref ("../../etc/passwd") prompts for approval instead
|
|
93
|
+
// of silently leaking. (array arg → executor enforces each element)
|
|
94
|
+
pathPolicy: [{ kind: "arg", arg: "referenceImages", operation: "read" }],
|
|
66
95
|
},
|
|
67
96
|
execute: generateImageTool,
|
|
68
97
|
},
|
|
98
|
+
{
|
|
99
|
+
definition: {
|
|
100
|
+
...generateVideoToolDef,
|
|
101
|
+
source: "builtin",
|
|
102
|
+
permissionDefault: "ask",
|
|
103
|
+
isReadOnly: false,
|
|
104
|
+
isConcurrencySafe: true,
|
|
105
|
+
// Returns fast (fire-and-forget: submits + backgrounds the poll loop),
|
|
106
|
+
// so the default timeout is plenty — the long poll runs detached.
|
|
107
|
+
// `images`/`image` may be local files (uploaded to the provider) — same
|
|
108
|
+
// path-policy gating as GenerateImage's referenceImages.
|
|
109
|
+
pathPolicy: [
|
|
110
|
+
{ kind: "arg", arg: "images", operation: "read" },
|
|
111
|
+
{ kind: "arg", arg: "image", operation: "read" },
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
execute: generateVideoTool,
|
|
115
|
+
},
|
|
69
116
|
{
|
|
70
117
|
definition: {
|
|
71
118
|
...viewImageToolDef,
|
|
@@ -73,6 +120,7 @@ export const BUILTIN_TOOLS = [
|
|
|
73
120
|
permissionDefault: "allow",
|
|
74
121
|
isReadOnly: true,
|
|
75
122
|
isConcurrencySafe: true,
|
|
123
|
+
pathPolicy: [{ kind: "arg", arg: "path", operation: "read" }],
|
|
76
124
|
},
|
|
77
125
|
execute: viewImageTool,
|
|
78
126
|
},
|
|
@@ -83,6 +131,7 @@ export const BUILTIN_TOOLS = [
|
|
|
83
131
|
permissionDefault: "ask",
|
|
84
132
|
isReadOnly: false,
|
|
85
133
|
isConcurrencySafe: false,
|
|
134
|
+
pathPolicy: [{ kind: "arg", arg: "file_path", operation: "write" }],
|
|
86
135
|
},
|
|
87
136
|
execute: editTool,
|
|
88
137
|
},
|
|
@@ -93,6 +142,7 @@ export const BUILTIN_TOOLS = [
|
|
|
93
142
|
permissionDefault: "ask",
|
|
94
143
|
isReadOnly: false,
|
|
95
144
|
isConcurrencySafe: false,
|
|
145
|
+
pathPolicy: [{ kind: "apply_patch", arg: "patch", operation: "write" }],
|
|
96
146
|
},
|
|
97
147
|
execute: applyPatchTool,
|
|
98
148
|
},
|
|
@@ -103,6 +153,7 @@ export const BUILTIN_TOOLS = [
|
|
|
103
153
|
permissionDefault: "allow",
|
|
104
154
|
isReadOnly: true,
|
|
105
155
|
isConcurrencySafe: true,
|
|
156
|
+
pathPolicy: [{ kind: "arg", arg: "path", operation: "read", defaultToCwd: true }],
|
|
106
157
|
},
|
|
107
158
|
execute: globTool,
|
|
108
159
|
},
|
|
@@ -113,6 +164,7 @@ export const BUILTIN_TOOLS = [
|
|
|
113
164
|
permissionDefault: "allow",
|
|
114
165
|
isReadOnly: true,
|
|
115
166
|
isConcurrencySafe: true,
|
|
167
|
+
pathPolicy: [{ kind: "arg", arg: "path", operation: "read", defaultToCwd: true }],
|
|
116
168
|
},
|
|
117
169
|
execute: grepTool,
|
|
118
170
|
},
|
|
@@ -127,6 +179,37 @@ export const BUILTIN_TOOLS = [
|
|
|
127
179
|
},
|
|
128
180
|
execute: bashTool,
|
|
129
181
|
},
|
|
182
|
+
// ─── Background shells (Bash run_in_background companions) ──────
|
|
183
|
+
{
|
|
184
|
+
definition: {
|
|
185
|
+
...bashOutputToolDef,
|
|
186
|
+
source: "builtin",
|
|
187
|
+
permissionDefault: "allow",
|
|
188
|
+
isReadOnly: true,
|
|
189
|
+
isConcurrencySafe: true,
|
|
190
|
+
},
|
|
191
|
+
execute: bashOutputTool,
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
definition: {
|
|
195
|
+
...killShellToolDef,
|
|
196
|
+
source: "builtin",
|
|
197
|
+
permissionDefault: "allow",
|
|
198
|
+
isReadOnly: false,
|
|
199
|
+
isConcurrencySafe: false,
|
|
200
|
+
},
|
|
201
|
+
execute: killShellTool,
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
definition: {
|
|
205
|
+
...listShellsToolDef,
|
|
206
|
+
source: "builtin",
|
|
207
|
+
permissionDefault: "allow",
|
|
208
|
+
isReadOnly: true,
|
|
209
|
+
isConcurrencySafe: true,
|
|
210
|
+
},
|
|
211
|
+
execute: listShellsTool,
|
|
212
|
+
},
|
|
130
213
|
{
|
|
131
214
|
definition: {
|
|
132
215
|
...webSearchToolDef,
|
|
@@ -189,6 +272,17 @@ export const BUILTIN_TOOLS = [
|
|
|
189
272
|
},
|
|
190
273
|
execute: agentCancelTool,
|
|
191
274
|
},
|
|
275
|
+
{
|
|
276
|
+
definition: {
|
|
277
|
+
...agentSendInputToolDef,
|
|
278
|
+
source: "builtin",
|
|
279
|
+
permissionDefault: "allow",
|
|
280
|
+
isReadOnly: true,
|
|
281
|
+
isConcurrencySafe: true,
|
|
282
|
+
timeoutMs: 1_800_000, // 30min — a continuation may execute many tool calls, like Agent
|
|
283
|
+
},
|
|
284
|
+
execute: agentSendInputTool,
|
|
285
|
+
},
|
|
192
286
|
{
|
|
193
287
|
definition: {
|
|
194
288
|
...enterPlanModeToolDef,
|
|
@@ -250,16 +344,6 @@ export const BUILTIN_TOOLS = [
|
|
|
250
344
|
},
|
|
251
345
|
execute: exitWorktreeTool,
|
|
252
346
|
},
|
|
253
|
-
{
|
|
254
|
-
definition: {
|
|
255
|
-
...sendMessageToolDef,
|
|
256
|
-
source: "builtin",
|
|
257
|
-
permissionDefault: "allow",
|
|
258
|
-
isReadOnly: false,
|
|
259
|
-
isConcurrencySafe: true,
|
|
260
|
-
},
|
|
261
|
-
execute: sendMessageTool,
|
|
262
|
-
},
|
|
263
347
|
// ─── Phase 5: Utility Tools ────────────────────────────────────
|
|
264
348
|
{
|
|
265
349
|
definition: {
|
|
@@ -288,6 +372,13 @@ export const BUILTIN_TOOLS = [
|
|
|
288
372
|
permissionDefault: "ask",
|
|
289
373
|
isReadOnly: false,
|
|
290
374
|
isConcurrencySafe: false,
|
|
375
|
+
pathPolicy: [
|
|
376
|
+
{
|
|
377
|
+
kind: "arg",
|
|
378
|
+
arg: "file_path",
|
|
379
|
+
operation: { fromArg: "action", readValues: ["read"], default: "write" },
|
|
380
|
+
},
|
|
381
|
+
],
|
|
291
382
|
},
|
|
292
383
|
execute: notebookEditTool,
|
|
293
384
|
},
|
|
@@ -299,6 +390,7 @@ export const BUILTIN_TOOLS = [
|
|
|
299
390
|
permissionDefault: "allow",
|
|
300
391
|
isReadOnly: true,
|
|
301
392
|
isConcurrencySafe: true,
|
|
393
|
+
pathPolicy: [{ kind: "arg", arg: "file_path", operation: "read" }],
|
|
302
394
|
},
|
|
303
395
|
execute: lspTool,
|
|
304
396
|
},
|
|
@@ -333,6 +425,43 @@ export const BUILTIN_TOOLS = [
|
|
|
333
425
|
},
|
|
334
426
|
execute: cronListTool,
|
|
335
427
|
},
|
|
428
|
+
// ─── Drive external coding-agent CLI (claude / codex) ──────────
|
|
429
|
+
{
|
|
430
|
+
definition: {
|
|
431
|
+
...driveAgentToolDef,
|
|
432
|
+
source: "builtin",
|
|
433
|
+
permissionDefault: "ask",
|
|
434
|
+
isReadOnly: false,
|
|
435
|
+
isConcurrencySafe: false,
|
|
436
|
+
},
|
|
437
|
+
execute: driveAgentTool,
|
|
438
|
+
},
|
|
439
|
+
// Back-compat alias: DriveClaudeCode = DriveAgent pinned to cli:claude. Kept
|
|
440
|
+
// registered so old prompts/memories that name DriveClaudeCode still resolve.
|
|
441
|
+
{
|
|
442
|
+
definition: {
|
|
443
|
+
...driveClaudeCodeToolDef,
|
|
444
|
+
source: "builtin",
|
|
445
|
+
permissionDefault: "ask",
|
|
446
|
+
isReadOnly: false,
|
|
447
|
+
isConcurrencySafe: false,
|
|
448
|
+
},
|
|
449
|
+
execute: driveClaudeCodeTool,
|
|
450
|
+
},
|
|
451
|
+
// ─── Check remaining CC/Codex subscription quota ──────────────
|
|
452
|
+
{
|
|
453
|
+
definition: {
|
|
454
|
+
...checkQuotaToolDef,
|
|
455
|
+
source: "builtin",
|
|
456
|
+
// Read-only intent (reports quota, mutates nothing). Note: the "claude"
|
|
457
|
+
// path sends a 1-token probe (Anthropic exposes quota only via response
|
|
458
|
+
// headers) — that tiny cost is documented in the tool description.
|
|
459
|
+
permissionDefault: "allow",
|
|
460
|
+
isReadOnly: true,
|
|
461
|
+
isConcurrencySafe: true,
|
|
462
|
+
},
|
|
463
|
+
execute: checkQuotaTool,
|
|
464
|
+
},
|
|
336
465
|
// ─── Phase 7: Missing tools from restored-src ─────────────────
|
|
337
466
|
{
|
|
338
467
|
definition: {
|
|
@@ -368,22 +497,17 @@ export const BUILTIN_TOOLS = [
|
|
|
368
497
|
definition: {
|
|
369
498
|
...readMcpResourceToolDef,
|
|
370
499
|
source: "builtin",
|
|
371
|
-
|
|
500
|
+
// Reading resource CONTENT (unlike enumerating names) can pull arbitrary
|
|
501
|
+
// data — potentially secrets — from a connected MCP server. Default to ask
|
|
502
|
+
// rather than the old unconditional allow so a default-mode session
|
|
503
|
+
// confirms the read; the executor also gates the target server against the
|
|
504
|
+
// session's allowedMcpServers.
|
|
505
|
+
permissionDefault: "ask",
|
|
372
506
|
isReadOnly: true,
|
|
373
507
|
isConcurrencySafe: true,
|
|
374
508
|
},
|
|
375
509
|
execute: readMcpResourceTool,
|
|
376
510
|
},
|
|
377
|
-
{
|
|
378
|
-
definition: {
|
|
379
|
-
...remoteTriggerToolDef,
|
|
380
|
-
source: "builtin",
|
|
381
|
-
permissionDefault: "ask",
|
|
382
|
-
isReadOnly: false,
|
|
383
|
-
isConcurrencySafe: false,
|
|
384
|
-
},
|
|
385
|
-
execute: remoteTriggerTool,
|
|
386
|
-
},
|
|
387
511
|
{
|
|
388
512
|
definition: {
|
|
389
513
|
...replToolDef,
|
|
@@ -485,6 +609,21 @@ export const BUILTIN_TOOLS = [
|
|
|
485
609
|
},
|
|
486
610
|
execute: completeGoalTool,
|
|
487
611
|
},
|
|
612
|
+
// ─── Goal mode: user-initiated cancellation ────────────────────
|
|
613
|
+
// Distinct from complete_goal — the user explicitly asked to abandon the
|
|
614
|
+
// goal. The turn-loop short-circuits on this call (only when confirm===true)
|
|
615
|
+
// AND clears the persisted goal. The tool itself only records an
|
|
616
|
+
// acknowledgement string, so it's read-only and concurrency-safe.
|
|
617
|
+
{
|
|
618
|
+
definition: {
|
|
619
|
+
...cancelGoalToolDef,
|
|
620
|
+
source: "builtin",
|
|
621
|
+
permissionDefault: "allow",
|
|
622
|
+
isReadOnly: true,
|
|
623
|
+
isConcurrencySafe: true,
|
|
624
|
+
},
|
|
625
|
+
execute: cancelGoalTool,
|
|
626
|
+
},
|
|
488
627
|
// ─── Plugin marketplace: model-driven source registration ──────
|
|
489
628
|
{
|
|
490
629
|
definition: {
|
|
@@ -497,6 +636,73 @@ export const BUILTIN_TOOLS = [
|
|
|
497
636
|
},
|
|
498
637
|
execute: addMarketplaceTool,
|
|
499
638
|
},
|
|
639
|
+
// Browser automation — 3 semantic tools driving the in-app webview via the
|
|
640
|
+
// BrowserBridge (CDP). All serial on one webview (isConcurrencySafe:false).
|
|
641
|
+
// browser_observe is read-only. browser_act is permissionDefault "allow"; its
|
|
642
|
+
// sensitive actions (click/type/select) are escalated to "ask" by a preset
|
|
643
|
+
// PermissionRule keyed on argsPattern { action } (see preset/index.ts §4.6) —
|
|
644
|
+
// so one tool carries per-action gating. Sensitive-action + domain-whitelist
|
|
645
|
+
// enforcement also lives main-side in the bridge. Tools self-gate to
|
|
646
|
+
// unavailable when no bridge is wired (headless).
|
|
647
|
+
{
|
|
648
|
+
definition: {
|
|
649
|
+
...browserObserveToolDef,
|
|
650
|
+
source: "builtin",
|
|
651
|
+
permissionDefault: "allow",
|
|
652
|
+
isReadOnly: true,
|
|
653
|
+
isConcurrencySafe: false,
|
|
654
|
+
timeoutMs: 30_000, // wait/observe can sit through a load; RPC headroom
|
|
655
|
+
},
|
|
656
|
+
execute: browserObserveTool,
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
definition: {
|
|
660
|
+
...browserActToolDef,
|
|
661
|
+
source: "builtin",
|
|
662
|
+
permissionDefault: "allow", // per-action gating via preset rule (argsPattern.action)
|
|
663
|
+
isReadOnly: false,
|
|
664
|
+
isConcurrencySafe: false,
|
|
665
|
+
timeoutMs: 30_000, // the wait action internally bounds; give RPC headroom
|
|
666
|
+
},
|
|
667
|
+
execute: browserActTool,
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
definition: {
|
|
671
|
+
...browserNavigateToolDef,
|
|
672
|
+
source: "builtin",
|
|
673
|
+
permissionDefault: "allow",
|
|
674
|
+
isReadOnly: false,
|
|
675
|
+
isConcurrencySafe: false,
|
|
676
|
+
},
|
|
677
|
+
execute: browserNavigateTool,
|
|
678
|
+
},
|
|
679
|
+
// ─── Credentials: AI 取用已存凭证(token/link/cookie) ──────────
|
|
680
|
+
// permissionDefault:"allow" —— 取用审批由工具内部的 CredentialUseGate 负责
|
|
681
|
+
// (默认问/本会话记住/全自动),不走工具级权限层,避免双重弹窗。
|
|
682
|
+
// 读取凭证库本身不写文件(cookie 物化成临时 cookies.txt 是用完即弃的副产物)。
|
|
683
|
+
{
|
|
684
|
+
definition: {
|
|
685
|
+
...useCredentialToolDef,
|
|
686
|
+
source: "builtin",
|
|
687
|
+
permissionDefault: "allow",
|
|
688
|
+
isReadOnly: true,
|
|
689
|
+
isConcurrencySafe: true,
|
|
690
|
+
},
|
|
691
|
+
execute: useCredentialTool,
|
|
692
|
+
},
|
|
693
|
+
// InjectCredential:把 cookie 凭证注入内置浏览器(恢复登录态)。审批由工具内部
|
|
694
|
+
// CredentialUseGate 负责(逐条 autoInjectByAI),故 permissionDefault:"allow"。
|
|
695
|
+
// 改浏览器登录态有副作用 → 非 read-only。
|
|
696
|
+
{
|
|
697
|
+
definition: {
|
|
698
|
+
...injectCredentialToolDef,
|
|
699
|
+
source: "builtin",
|
|
700
|
+
permissionDefault: "allow",
|
|
701
|
+
isReadOnly: false,
|
|
702
|
+
isConcurrencySafe: false,
|
|
703
|
+
},
|
|
704
|
+
execute: injectCredentialTool,
|
|
705
|
+
},
|
|
500
706
|
];
|
|
501
707
|
/**
|
|
502
708
|
* Per-tool availability predicates. A tool listed here is filtered OUT of the
|
|
@@ -507,4 +713,22 @@ export const BUILTIN_TOOLS = [
|
|
|
507
713
|
export const BUILTIN_TOOL_GUARDS = new Map([
|
|
508
714
|
[webSearchToolDef.name, isWebSearchAvailable],
|
|
509
715
|
[generateImageToolDef.name, isGenerateImageAvailable],
|
|
716
|
+
[generateVideoToolDef.name, isGenerateVideoAvailable],
|
|
717
|
+
// UseCredential is hidden until at least one credential exists — keeps it out
|
|
718
|
+
// of the tool list (and the context) for the common no-credentials case,
|
|
719
|
+
// matching the spec's "quiet when empty" intent (true ToolSearch-deferral for
|
|
720
|
+
// builtins isn't wired in the engine).
|
|
721
|
+
[useCredentialToolDef.name, isUseCredentialAvailable],
|
|
722
|
+
// InjectCredential hidden until ≥1 cookie credential exists (browser injection
|
|
723
|
+
// is cookie-only). Also degrades at call time if no browser bridge is wired.
|
|
724
|
+
[injectCredentialToolDef.name, isInjectCredentialAvailable],
|
|
510
725
|
]);
|
|
726
|
+
/** UseCredential is available when the cwd's CredentialStore has ≥1 credential. */
|
|
727
|
+
export function isUseCredentialAvailable(cwd) {
|
|
728
|
+
try {
|
|
729
|
+
return new CredentialStore(cwd).listMasked().length > 0;
|
|
730
|
+
}
|
|
731
|
+
catch {
|
|
732
|
+
return false;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
@@ -28,10 +28,13 @@ export async function mcpToolExecute(args) {
|
|
|
28
28
|
const server = args.server;
|
|
29
29
|
const tool = args.tool;
|
|
30
30
|
const toolArgs = args.arguments ?? {};
|
|
31
|
+
// Forward the run's abort signal (registry injects __signal) so Stop cancels
|
|
32
|
+
// an in-flight MCP call instead of waiting out the SDK's default timeout.
|
|
33
|
+
const signal = args.__signal;
|
|
31
34
|
try {
|
|
32
35
|
const { MCPManager } = await import("../mcp-manager.js");
|
|
33
36
|
const manager = MCPManager.getInstance();
|
|
34
|
-
const result = await manager.callTool(server, tool, toolArgs);
|
|
37
|
+
const result = await manager.callTool(server, tool, toolArgs, signal);
|
|
35
38
|
return typeof result === "string" ? result : JSON.stringify(result, null, 2);
|
|
36
39
|
}
|
|
37
40
|
catch (err) {
|
|
@@ -54,10 +57,26 @@ export const listMcpResourcesToolDef = {
|
|
|
54
57
|
};
|
|
55
58
|
export async function listMcpResourcesTool(args) {
|
|
56
59
|
const server = args.server ?? "";
|
|
60
|
+
// The executor injects the session's allowed-server set (see executor.ts).
|
|
61
|
+
// When no explicit server filter is given, we must only enumerate resources
|
|
62
|
+
// from servers THIS session enabled — otherwise a shared worker leaks another
|
|
63
|
+
// session's MCP resources. An undefined set means "no gating" (legacy/sub-agent).
|
|
64
|
+
const allowed = args.__allowedMcpServers;
|
|
57
65
|
try {
|
|
58
66
|
const { MCPManager } = await import("../mcp-manager.js");
|
|
59
67
|
const manager = MCPManager.getInstance();
|
|
60
|
-
|
|
68
|
+
// Forward the run's abort signal (registry injects __signal) so Stop cancels
|
|
69
|
+
// promptly instead of waiting out the SDK's default request timeout.
|
|
70
|
+
const signal = args.__signal;
|
|
71
|
+
let resources = await manager.listResources(server || undefined, signal);
|
|
72
|
+
if (allowed && resources) {
|
|
73
|
+
resources = resources.filter((r) => {
|
|
74
|
+
// Resource entries may carry the owning server on `serverName`/`server`;
|
|
75
|
+
// when unknown, drop it under gating rather than risk a cross-session leak.
|
|
76
|
+
const owner = (r.serverName ?? r.server);
|
|
77
|
+
return owner ? allowed.has(owner) : false;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
61
80
|
if (!resources || resources.length === 0) {
|
|
62
81
|
return "No MCP resources available.";
|
|
63
82
|
}
|
|
@@ -93,7 +112,8 @@ export async function readMcpResourceTool(args) {
|
|
|
93
112
|
try {
|
|
94
113
|
const { MCPManager } = await import("../mcp-manager.js");
|
|
95
114
|
const manager = MCPManager.getInstance();
|
|
96
|
-
const
|
|
115
|
+
const signal = args.__signal;
|
|
116
|
+
const content = await manager.readResource(server, uri, signal);
|
|
97
117
|
return typeof content === "string" ? content : JSON.stringify(content, null, 2);
|
|
98
118
|
}
|
|
99
119
|
catch (err) {
|
|
@@ -25,9 +25,23 @@ function parseScope(raw) {
|
|
|
25
25
|
}
|
|
26
26
|
return raw;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
/** Location: "global" → cross-project store (no projectDir); "project"
|
|
29
|
+
* (default, back-compat) → this repo's store. Anything else → "project". */
|
|
30
|
+
function parseLocation(raw) {
|
|
31
|
+
return raw === "global" ? "global" : "project";
|
|
30
32
|
}
|
|
33
|
+
function mmFor(ctx, scope, location = "project") {
|
|
34
|
+
// location=global → omit projectDir so the manager points at the global store.
|
|
35
|
+
return new MemoryManager({
|
|
36
|
+
projectDir: location === "global" ? undefined : ctx?.cwd,
|
|
37
|
+
scope,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const LOCATION_SCHEMA = {
|
|
41
|
+
type: "string",
|
|
42
|
+
enum: ["global", "project"],
|
|
43
|
+
description: 'Which store: "global" (applies across all projects) or "project" (this repo only). Defaults to "project".',
|
|
44
|
+
};
|
|
31
45
|
// ─── MemoryList ────────────────────────────────────────────────────────────
|
|
32
46
|
export const memoryListToolDef = {
|
|
33
47
|
name: "MemoryList",
|
|
@@ -43,6 +57,7 @@ export const memoryListToolDef = {
|
|
|
43
57
|
enum: ["user", "dream"],
|
|
44
58
|
description: "Which scope to list",
|
|
45
59
|
},
|
|
60
|
+
location: LOCATION_SCHEMA,
|
|
46
61
|
},
|
|
47
62
|
required: ["scope"],
|
|
48
63
|
},
|
|
@@ -53,7 +68,7 @@ export async function memoryListTool(args, ctx) {
|
|
|
53
68
|
return scope;
|
|
54
69
|
}
|
|
55
70
|
try {
|
|
56
|
-
const mm = mmFor(ctx, scope);
|
|
71
|
+
const mm = mmFor(ctx, scope, parseLocation(args.location));
|
|
57
72
|
const entries = mm.loadAll();
|
|
58
73
|
if (entries.length === 0)
|
|
59
74
|
return `(no memories in scope "${scope}")`;
|
|
@@ -78,6 +93,7 @@ export const memoryReadToolDef = {
|
|
|
78
93
|
enum: ["user", "dream"],
|
|
79
94
|
description: "Which scope to read from",
|
|
80
95
|
},
|
|
96
|
+
location: LOCATION_SCHEMA,
|
|
81
97
|
name: {
|
|
82
98
|
type: "string",
|
|
83
99
|
description: "The memory entry's name (from MemoryList output)",
|
|
@@ -91,15 +107,32 @@ export async function memoryReadTool(args, ctx) {
|
|
|
91
107
|
if (typeof scope !== "string" || !VALID_SCOPES.includes(scope)) {
|
|
92
108
|
return scope;
|
|
93
109
|
}
|
|
110
|
+
const location = parseLocation(args.location);
|
|
94
111
|
const name = args.name;
|
|
95
112
|
if (typeof name !== "string" || !name)
|
|
96
113
|
return "Error: name is required";
|
|
97
114
|
try {
|
|
98
|
-
const mm = mmFor(ctx, scope);
|
|
115
|
+
const mm = mmFor(ctx, scope, location);
|
|
99
116
|
const entries = mm.loadAll();
|
|
100
117
|
const entry = entries.find((e) => e.name === name || e.fileName === name);
|
|
101
118
|
if (!entry)
|
|
102
119
|
return `Error: no memory named "${name}" in scope "${scope}"`;
|
|
120
|
+
// Recall signal (用户拍板 C + 可见性): reading a memory bumps its usage so
|
|
121
|
+
// the recall-TTL sweep keeps frequently-read memories alive, and emits a
|
|
122
|
+
// stream event so the UI can show the user this memory was actually used.
|
|
123
|
+
// Best-effort — never let accounting failure break the read.
|
|
124
|
+
try {
|
|
125
|
+
mm.recordRecall(entry.name);
|
|
126
|
+
const cb = ctx?.streamCallback;
|
|
127
|
+
if (cb) {
|
|
128
|
+
// scope here is always "user"|"dream" (validated above); pending is
|
|
129
|
+
// never tool-readable, so the narrower event type is correct.
|
|
130
|
+
void cb({ type: "memory_recalled", name: entry.name, scope: scope, location });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// ignore — the read result below is what matters
|
|
135
|
+
}
|
|
103
136
|
return (`name: ${entry.name}\n` +
|
|
104
137
|
`description: ${entry.description}\n` +
|
|
105
138
|
`type: ${entry.type}\n` +
|
|
@@ -120,6 +153,8 @@ export const memorySaveToolDef = {
|
|
|
120
153
|
"feedback (how to approach work), " +
|
|
121
154
|
"project (non-obvious facts about ongoing work), " +
|
|
122
155
|
"reference (pointers to external resources). " +
|
|
156
|
+
"Pick `location`: global (a lesson/preference true in ANY project) vs project (this repo only). " +
|
|
157
|
+
"If a memory in the injected index is now stale or wrong, overwrite it (same name) or MemoryDelete it — keep the store correct rather than letting contradictions pile up. " +
|
|
123
158
|
"The `description` is a one-line summary shown in the index; the `content` is the full body.",
|
|
124
159
|
inputSchema: {
|
|
125
160
|
type: "object",
|
|
@@ -129,6 +164,7 @@ export const memorySaveToolDef = {
|
|
|
129
164
|
enum: ["user", "dream"],
|
|
130
165
|
description: "Which scope to save to",
|
|
131
166
|
},
|
|
167
|
+
location: LOCATION_SCHEMA,
|
|
132
168
|
name: {
|
|
133
169
|
type: "string",
|
|
134
170
|
description: "Short kebab-case identifier (also becomes the filename slug)",
|
|
@@ -169,14 +205,15 @@ export async function memorySaveTool(args, ctx) {
|
|
|
169
205
|
return `Error: type must be one of ${VALID_TYPES.join(", ")}`;
|
|
170
206
|
}
|
|
171
207
|
try {
|
|
172
|
-
const
|
|
208
|
+
const location = parseLocation(args.location);
|
|
209
|
+
const mm = mmFor(ctx, scope, location);
|
|
173
210
|
const fileName = mm.save({
|
|
174
211
|
name,
|
|
175
212
|
description,
|
|
176
213
|
type: type,
|
|
177
214
|
content,
|
|
178
215
|
});
|
|
179
|
-
return `Saved memory "${name}" → ${scope}/${fileName}`;
|
|
216
|
+
return `Saved memory "${name}" → ${location}/${scope}/${fileName}`;
|
|
180
217
|
}
|
|
181
218
|
catch (err) {
|
|
182
219
|
return `Error saving memory: ${err.message}`;
|
|
@@ -197,6 +234,7 @@ export const memoryDeleteToolDef = {
|
|
|
197
234
|
enum: ["user", "dream"],
|
|
198
235
|
description: "Which scope to delete from",
|
|
199
236
|
},
|
|
237
|
+
location: LOCATION_SCHEMA,
|
|
200
238
|
name: {
|
|
201
239
|
type: "string",
|
|
202
240
|
description: "The memory entry's name (from MemoryList output)",
|
|
@@ -214,7 +252,7 @@ export async function memoryDeleteTool(args, ctx) {
|
|
|
214
252
|
if (typeof name !== "string" || !name)
|
|
215
253
|
return "Error: name is required";
|
|
216
254
|
try {
|
|
217
|
-
const mm = mmFor(ctx, scope);
|
|
255
|
+
const mm = mmFor(ctx, scope, parseLocation(args.location));
|
|
218
256
|
const ok = mm.delete(name);
|
|
219
257
|
return ok
|
|
220
258
|
? `Deleted memory "${name}" from scope "${scope}" (moved to memory-trash/)`
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* NotebookEditTool — read and edit Jupyter notebook (.ipynb) cells.
|
|
3
3
|
*/
|
|
4
4
|
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
5
|
-
import { enforcePathPolicy } from "../path-policy.js";
|
|
6
5
|
export const notebookEditToolDef = {
|
|
7
6
|
name: "NotebookEdit",
|
|
8
7
|
description: "Edit a Jupyter notebook (.ipynb) file. Supports actions: " +
|
|
@@ -44,12 +43,6 @@ export async function notebookEditTool(args, ctx) {
|
|
|
44
43
|
return "Error: file_path is required";
|
|
45
44
|
if (!filePath.endsWith(".ipynb"))
|
|
46
45
|
return "Error: file must be a .ipynb file";
|
|
47
|
-
// Path policy: 'read' goes through the read-side rules (sensitive paths
|
|
48
|
-
// still ask), all other actions are writes and use the stricter rules.
|
|
49
|
-
const op = action === "read" ? "read" : "write";
|
|
50
|
-
const blocked = enforcePathPolicy(filePath, op, ctx?.cwd);
|
|
51
|
-
if (blocked)
|
|
52
|
-
return blocked;
|
|
53
46
|
if (action === "read") {
|
|
54
47
|
if (!existsSync(filePath))
|
|
55
48
|
return `Error: File not found: ${filePath}`;
|
|
@@ -27,7 +27,10 @@ export const powershellToolDef = {
|
|
|
27
27
|
const PS_MAX_BUFFER = 5 * 1024 * 1024;
|
|
28
28
|
export async function powershellTool(args, ctx) {
|
|
29
29
|
const command = args.command;
|
|
30
|
-
|
|
30
|
+
// `??` only catches null/undefined — a non-positive timeout (0/-5) would slip
|
|
31
|
+
// through to setTimeout (clamped to 0 → near-instant kill). Floor to default.
|
|
32
|
+
const rawTimeout = args.timeout;
|
|
33
|
+
const timeout = typeof rawTimeout === "number" && rawTimeout > 0 ? rawTimeout : 120_000;
|
|
31
34
|
if (!command.trim()) {
|
|
32
35
|
return "Error: command is required.";
|
|
33
36
|
}
|