@cjhyy/code-shell-core 0.7.1 → 0.8.0
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 +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +254 -195
- package/dist/engine/engine.js +1812 -2041
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +34 -123
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +60 -0
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.js +2 -6
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +77 -19
- package/dist/tool-system/executor.js +75 -50
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +186 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -45
- package/dist/arena/arena.js +0 -362
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -518
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -72
- package/dist/git/worktree/crud.js +0 -235
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -87
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -43
- package/dist/git/worktree/query.js +0 -128
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -416
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -363
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
const MAX_RESPONSE_BYTES = 1024 * 1024;
|
|
2
|
+
const REQUEST_TIMEOUT_MS = 20_000;
|
|
3
|
+
const LOCAL_LINK_ALLOWED_HOSTS = new Set([
|
|
4
|
+
"api.github.com",
|
|
5
|
+
"gitlab.com",
|
|
6
|
+
"api.figma.com",
|
|
7
|
+
"api.notion.com",
|
|
8
|
+
"api.linear.app",
|
|
9
|
+
"slack.com",
|
|
10
|
+
"sentry.io",
|
|
11
|
+
"api.airtable.com",
|
|
12
|
+
"api.todoist.com",
|
|
13
|
+
"api.vercel.com",
|
|
14
|
+
]);
|
|
15
|
+
export async function linkRequestJson(request) {
|
|
16
|
+
if (request.url.protocol !== "https:" ||
|
|
17
|
+
!LOCAL_LINK_ALLOWED_HOSTS.has(request.url.hostname.toLowerCase())) {
|
|
18
|
+
throw new Error(`Link provider host is not allowed: ${request.url.hostname}`);
|
|
19
|
+
}
|
|
20
|
+
const fetchImpl = request.fetchImpl ?? fetch;
|
|
21
|
+
const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS);
|
|
22
|
+
const signal = request.signal ? AbortSignal.any([request.signal, timeout]) : timeout;
|
|
23
|
+
const response = await fetchImpl(request.url, {
|
|
24
|
+
method: request.method ?? "GET",
|
|
25
|
+
headers: {
|
|
26
|
+
Accept: "application/json",
|
|
27
|
+
...request.headers,
|
|
28
|
+
...(request.body === undefined ? {} : { "Content-Type": "application/json" }),
|
|
29
|
+
},
|
|
30
|
+
body: request.body === undefined ? undefined : JSON.stringify(request.body),
|
|
31
|
+
redirect: "error",
|
|
32
|
+
signal,
|
|
33
|
+
});
|
|
34
|
+
const text = await readResponseText(response);
|
|
35
|
+
let data;
|
|
36
|
+
try {
|
|
37
|
+
data = text ? JSON.parse(text) : null;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
throw new Error(`Link provider returned invalid JSON (HTTP ${response.status})`);
|
|
41
|
+
}
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
throw new Error(normalizeProviderError(response.status, data));
|
|
44
|
+
}
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
async function readResponseText(response) {
|
|
48
|
+
if (!response.body)
|
|
49
|
+
return "";
|
|
50
|
+
const reader = response.body.getReader();
|
|
51
|
+
const chunks = [];
|
|
52
|
+
let bytes = 0;
|
|
53
|
+
try {
|
|
54
|
+
while (true) {
|
|
55
|
+
const { done, value } = await reader.read();
|
|
56
|
+
if (done)
|
|
57
|
+
break;
|
|
58
|
+
bytes += value.byteLength;
|
|
59
|
+
if (bytes > MAX_RESPONSE_BYTES) {
|
|
60
|
+
await reader.cancel();
|
|
61
|
+
throw new Error(`Link provider response exceeded ${MAX_RESPONSE_BYTES} bytes`);
|
|
62
|
+
}
|
|
63
|
+
chunks.push(value);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
finally {
|
|
67
|
+
reader.releaseLock();
|
|
68
|
+
}
|
|
69
|
+
const combined = new Uint8Array(bytes);
|
|
70
|
+
let offset = 0;
|
|
71
|
+
for (const chunk of chunks) {
|
|
72
|
+
combined.set(chunk, offset);
|
|
73
|
+
offset += chunk.byteLength;
|
|
74
|
+
}
|
|
75
|
+
return new TextDecoder().decode(combined);
|
|
76
|
+
}
|
|
77
|
+
function normalizeProviderError(status, data) {
|
|
78
|
+
const record = asRecord(data);
|
|
79
|
+
const nested = asRecord(record?.error);
|
|
80
|
+
const message = firstString(record?.message, record?.error_description, nested?.message, nested?.type);
|
|
81
|
+
return message
|
|
82
|
+
? `Link provider request failed (HTTP ${status}): ${message.slice(0, 300)}`
|
|
83
|
+
: `Link provider request failed (HTTP ${status})`;
|
|
84
|
+
}
|
|
85
|
+
export function asRecord(value) {
|
|
86
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
87
|
+
? value
|
|
88
|
+
: undefined;
|
|
89
|
+
}
|
|
90
|
+
export function asArray(value) {
|
|
91
|
+
return Array.isArray(value) ? value : [];
|
|
92
|
+
}
|
|
93
|
+
export function firstString(...values) {
|
|
94
|
+
return values.find((value) => typeof value === "string" && value.length > 0);
|
|
95
|
+
}
|
|
96
|
+
export function stringParam(params, key, options = {}) {
|
|
97
|
+
const value = params[key];
|
|
98
|
+
if (value === undefined || value === null || value === "") {
|
|
99
|
+
if (options.required)
|
|
100
|
+
throw new Error(`Missing required Link Action parameter: ${key}`);
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
if (typeof value !== "string")
|
|
104
|
+
throw new Error(`Link Action parameter ${key} must be a string`);
|
|
105
|
+
const trimmed = value.trim();
|
|
106
|
+
if (!trimmed && options.required)
|
|
107
|
+
throw new Error(`Missing required Link Action parameter: ${key}`);
|
|
108
|
+
const max = options.maxLength ?? 300;
|
|
109
|
+
if (trimmed.length > max)
|
|
110
|
+
throw new Error(`Link Action parameter ${key} is too long`);
|
|
111
|
+
return trimmed;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Values interpolated into a fixed URL path template must never move the
|
|
115
|
+
* request to another endpoint. `encodeURIComponent` does not neutralize
|
|
116
|
+
* `.`/`..`, and both `new URL()` and CLI backends like `gh api` normalize dot
|
|
117
|
+
* segments away, so `organization: ".."` would otherwise turn
|
|
118
|
+
* `/organizations/../projects/` into `/projects/`.
|
|
119
|
+
*/
|
|
120
|
+
export function assertPathSegment(value, key) {
|
|
121
|
+
let decoded = value;
|
|
122
|
+
try {
|
|
123
|
+
decoded = decodeURIComponent(value);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Not valid percent-encoding; the raw value is still checked below.
|
|
127
|
+
}
|
|
128
|
+
for (const candidate of [value, decoded]) {
|
|
129
|
+
if (!candidate || candidate === "." || candidate === ".." || /[/\\]/.test(candidate)) {
|
|
130
|
+
throw new Error(`Link Action parameter ${key} contains an invalid path segment`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return value;
|
|
134
|
+
}
|
|
135
|
+
/** A string param used as exactly one segment of a URL path template. */
|
|
136
|
+
export function pathSegmentParam(params, key, options = {}) {
|
|
137
|
+
const value = stringParam(params, key, options);
|
|
138
|
+
if (value === undefined)
|
|
139
|
+
return undefined;
|
|
140
|
+
return assertPathSegment(value, key);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* A slash-separated resource path (e.g. a file path inside a repository).
|
|
144
|
+
* Every segment is validated like assertPathSegment and encoded individually;
|
|
145
|
+
* the returned string is ready to interpolate into a URL path template.
|
|
146
|
+
*/
|
|
147
|
+
export function pathParam(params, key, options = {}) {
|
|
148
|
+
const value = stringParam(params, key, options);
|
|
149
|
+
if (value === undefined)
|
|
150
|
+
return undefined;
|
|
151
|
+
return value
|
|
152
|
+
.split("/")
|
|
153
|
+
.map((segment) => encodeURIComponent(assertPathSegment(segment, key)))
|
|
154
|
+
.join("/");
|
|
155
|
+
}
|
|
156
|
+
export function intParam(params, key, fallback, max) {
|
|
157
|
+
const raw = params[key];
|
|
158
|
+
const value = typeof raw === "number" ? raw : typeof raw === "string" ? Number(raw) : fallback;
|
|
159
|
+
if (!Number.isInteger(value) || value < 1)
|
|
160
|
+
throw new Error(`${key} must be a positive integer`);
|
|
161
|
+
return Math.min(value, max);
|
|
162
|
+
}
|
|
163
|
+
export function pick(record, keys) {
|
|
164
|
+
const source = asRecord(record) ?? {};
|
|
165
|
+
return Object.fromEntries(keys.flatMap((key) => (source[key] === undefined ? [] : [[key, source[key]]])));
|
|
166
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { LOCAL_LINK_PROVIDERS, getLocalLinkProvider, listLocalLinkProviders, validateLocalLinkToken, } from "./providers.js";
|
|
2
|
+
export { linkActionToolDef, linkActionTool, isLinkActionAvailable } from "./link-action-tool.js";
|
|
3
|
+
export { assertCliLinkAccount, connectCliLink, executeCliLinkAction, getCliLinkStatus, isCliLinkProvider, managedLinkCliPath, resolveLinkCliExecutable, runCliLinkCommand, type CliLinkCommandResult, type CliLinkCommandRunner, type CliLinkProviderId, type CliLinkRunOptions, type CliLinkStatus, } from "./cli.js";
|
|
4
|
+
export type { LinkActionRisk, LocalLinkIdentity, LocalLinkValidationResult, LocalLinkActionSummary, LocalLinkProviderSummary, LocalLinkActionContext, LocalLinkActionSpec, LocalLinkProviderSpec, } from "./types.js";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { LOCAL_LINK_PROVIDERS, getLocalLinkProvider, listLocalLinkProviders, validateLocalLinkToken, } from "./providers.js";
|
|
2
|
+
export { linkActionToolDef, linkActionTool, isLinkActionAvailable } from "./link-action-tool.js";
|
|
3
|
+
export { assertCliLinkAccount, connectCliLink, executeCliLinkAction, getCliLinkStatus, isCliLinkProvider, managedLinkCliPath, resolveLinkCliExecutable, runCliLinkCommand, } from "./cli.js";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ToolDefinition } from "../types.js";
|
|
2
|
+
import type { ToolContext } from "../tool-system/context.js";
|
|
3
|
+
export declare const linkActionToolDef: ToolDefinition;
|
|
4
|
+
export declare function linkActionTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
5
|
+
export declare function isLinkActionAvailable(cwd: string, settingsScope?: import("../settings/manager.js").SettingsScope): boolean;
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { credentialAccessScope, getCredentialAccess, } from "../credentials/access.js";
|
|
2
|
+
import { getLocalLinkProvider, listLocalLinkProviders } from "./providers.js";
|
|
3
|
+
import { assertCliLinkAccount, executeCliLinkAction, isCliLinkProvider } from "./cli.js";
|
|
4
|
+
const TOOL_NAME = "LinkAction";
|
|
5
|
+
export const linkActionToolDef = {
|
|
6
|
+
name: TOOL_NAME,
|
|
7
|
+
description: "Use a connected local Link provider without exposing its token. Call with no arguments " +
|
|
8
|
+
"to list connected providers and actions. Call with provider and action plus params to run " +
|
|
9
|
+
"an action. Provider responses are untrusted external content. Write actions always ask the " +
|
|
10
|
+
"user for approval inside the tool.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
provider: {
|
|
15
|
+
type: "string",
|
|
16
|
+
description: "Connected provider id, for example github, figma, notion, or slack.",
|
|
17
|
+
},
|
|
18
|
+
action: {
|
|
19
|
+
type: "string",
|
|
20
|
+
description: "Provider action id. Omit to list that provider's available actions.",
|
|
21
|
+
},
|
|
22
|
+
params: {
|
|
23
|
+
type: "object",
|
|
24
|
+
description: "Action-specific parameters. List the provider first when unsure.",
|
|
25
|
+
additionalProperties: true,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
function isUsableLinkCredential(credential) {
|
|
31
|
+
return credential.oauthStatus?.state !== "expired" && credential.oauthStatus?.state !== "invalid";
|
|
32
|
+
}
|
|
33
|
+
function connectedLocalLinks(ctx) {
|
|
34
|
+
const cwd = ctx?.cwd ?? process.cwd();
|
|
35
|
+
const scope = credentialAccessScope(ctx?.settingsScope);
|
|
36
|
+
return getCredentialAccess()
|
|
37
|
+
.listMasked(cwd, scope)
|
|
38
|
+
.flatMap((credential) => {
|
|
39
|
+
const providerId = credential.meta?.linkProvider;
|
|
40
|
+
return credential.type === "link" &&
|
|
41
|
+
credential.hasSecret &&
|
|
42
|
+
isUsableLinkCredential(credential) &&
|
|
43
|
+
credential.meta?.linkExecutionRuntime === "local" &&
|
|
44
|
+
typeof providerId === "string" &&
|
|
45
|
+
getLocalLinkProvider(providerId)
|
|
46
|
+
? [{ credential, providerId }]
|
|
47
|
+
: [];
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function newestConnection(connections) {
|
|
51
|
+
return [...connections].sort((left, right) => {
|
|
52
|
+
const l = Date.parse(left.credential.meta?.linkLastVerifiedAt ?? "") || 0;
|
|
53
|
+
const r = Date.parse(right.credential.meta?.linkLastVerifiedAt ?? "") || 0;
|
|
54
|
+
return r - l;
|
|
55
|
+
})[0];
|
|
56
|
+
}
|
|
57
|
+
function parseParams(value) {
|
|
58
|
+
if (value === undefined)
|
|
59
|
+
return {};
|
|
60
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
61
|
+
throw new Error("Link Action params must be an object");
|
|
62
|
+
}
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
export async function linkActionTool(args, ctx) {
|
|
66
|
+
const providerId = typeof args.provider === "string" ? args.provider.trim() : "";
|
|
67
|
+
const actionId = typeof args.action === "string" ? args.action.trim() : "";
|
|
68
|
+
const links = connectedLocalLinks(ctx);
|
|
69
|
+
if (!providerId) {
|
|
70
|
+
const summaries = listLocalLinkProviders();
|
|
71
|
+
return JSON.stringify({
|
|
72
|
+
kind: "connected_providers",
|
|
73
|
+
runtimePreference: "local-first",
|
|
74
|
+
providers: summaries.flatMap((provider) => {
|
|
75
|
+
const connection = newestConnection(links.filter((candidate) => candidate.providerId === provider.id));
|
|
76
|
+
if (!connection)
|
|
77
|
+
return [];
|
|
78
|
+
return [
|
|
79
|
+
{
|
|
80
|
+
id: provider.id,
|
|
81
|
+
name: provider.displayName,
|
|
82
|
+
account: connection.credential.meta?.linkAccountLabel,
|
|
83
|
+
verifiedAt: connection.credential.meta?.linkLastVerifiedAt,
|
|
84
|
+
actions: provider.actions,
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
}),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const provider = getLocalLinkProvider(providerId);
|
|
91
|
+
if (!provider) {
|
|
92
|
+
return JSON.stringify({ kind: "error", error: `Unknown local Link provider: ${providerId}` });
|
|
93
|
+
}
|
|
94
|
+
const connection = newestConnection(links.filter((candidate) => candidate.providerId === providerId));
|
|
95
|
+
if (!connection) {
|
|
96
|
+
return JSON.stringify({
|
|
97
|
+
kind: "error",
|
|
98
|
+
error: `${provider.displayName} is not connected locally. Connect it in Credentials → Link.`,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (!actionId) {
|
|
102
|
+
return JSON.stringify({
|
|
103
|
+
kind: "provider_actions",
|
|
104
|
+
provider: provider.id,
|
|
105
|
+
name: provider.displayName,
|
|
106
|
+
account: connection.credential.meta?.linkAccountLabel,
|
|
107
|
+
actions: provider.actions.map(({ id, title, description, risk }) => ({
|
|
108
|
+
id,
|
|
109
|
+
title,
|
|
110
|
+
description,
|
|
111
|
+
risk,
|
|
112
|
+
})),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const action = provider.actions.find((candidate) => candidate.id === actionId);
|
|
116
|
+
if (!action) {
|
|
117
|
+
return JSON.stringify({
|
|
118
|
+
kind: "error",
|
|
119
|
+
error: `Unknown ${provider.displayName} Link Action: ${actionId}`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const capabilityId = `${providerId}.${actionId}`;
|
|
123
|
+
if (connection.credential.meta?.linkCapabilityIds?.length &&
|
|
124
|
+
!connection.credential.meta.linkCapabilityIds.includes(capabilityId)) {
|
|
125
|
+
return JSON.stringify({
|
|
126
|
+
kind: "error",
|
|
127
|
+
error: `${provider.displayName} connection does not allow Link Action ${actionId}.`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
let params;
|
|
131
|
+
try {
|
|
132
|
+
params = parseParams(args.params);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return JSON.stringify({ kind: "error", error: String(error) });
|
|
136
|
+
}
|
|
137
|
+
if (action.risk === "write") {
|
|
138
|
+
if (!ctx?.askUser) {
|
|
139
|
+
return JSON.stringify({
|
|
140
|
+
kind: "error",
|
|
141
|
+
error: `Cannot run write Link Action ${providerId}.${actionId} without an approval UI.`,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const allowLabel = "允许执行";
|
|
145
|
+
const answer = await ctx.askUser(`允许 CodeShell 通过本地 ${provider.displayName} 连接执行「${action.title}」吗?\n\n参数:${JSON.stringify(params).slice(0, 2_000)}`, {
|
|
146
|
+
header: "Link 写入",
|
|
147
|
+
optionsOnly: true,
|
|
148
|
+
options: [
|
|
149
|
+
{ label: allowLabel, description: "仅执行本次操作。", tone: "ok" },
|
|
150
|
+
{ label: "取消", description: "不执行,并且不会发送请求。", tone: "danger" },
|
|
151
|
+
],
|
|
152
|
+
});
|
|
153
|
+
if (answer !== allowLabel) {
|
|
154
|
+
return JSON.stringify({ kind: "cancelled", provider: providerId, action: actionId });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const cwd = ctx?.cwd ?? process.cwd();
|
|
158
|
+
const scope = credentialAccessScope(ctx?.settingsScope);
|
|
159
|
+
const access = getCredentialAccess();
|
|
160
|
+
const invalidated = new AbortController();
|
|
161
|
+
const stillConnected = () => {
|
|
162
|
+
const live = access.resolveMeta(cwd, connection.credential.id, scope);
|
|
163
|
+
return Boolean(live?.hasSecret &&
|
|
164
|
+
live.type === "link" &&
|
|
165
|
+
live.meta?.linkExecutionRuntime === "local" &&
|
|
166
|
+
live.meta.linkProvider === providerId &&
|
|
167
|
+
live.meta.linkLastVerifiedAt === connection.credential.meta?.linkLastVerifiedAt);
|
|
168
|
+
};
|
|
169
|
+
const unsubscribe = access.subscribe?.(() => {
|
|
170
|
+
if (!stillConnected())
|
|
171
|
+
invalidated.abort("Link connection disconnected");
|
|
172
|
+
});
|
|
173
|
+
try {
|
|
174
|
+
if (!stillConnected())
|
|
175
|
+
throw new Error(`${provider.displayName} connection was disconnected`);
|
|
176
|
+
const signal = ctx?.signal
|
|
177
|
+
? AbortSignal.any([ctx.signal, invalidated.signal])
|
|
178
|
+
: invalidated.signal;
|
|
179
|
+
let data;
|
|
180
|
+
if (connection.credential.meta?.linkExecutionBackend === "cli") {
|
|
181
|
+
if (!isCliLinkProvider(providerId)) {
|
|
182
|
+
throw new Error(`${provider.displayName} does not support local CLI execution`);
|
|
183
|
+
}
|
|
184
|
+
const accountId = connection.credential.meta.linkAccountId;
|
|
185
|
+
if (!accountId) {
|
|
186
|
+
throw new Error(`${provider.displayName} CLI connection must be reconnected`);
|
|
187
|
+
}
|
|
188
|
+
await assertCliLinkAccount(providerId, accountId, { cwd, signal });
|
|
189
|
+
if (!stillConnected())
|
|
190
|
+
throw new Error(`${provider.displayName} connection was disconnected`);
|
|
191
|
+
data = await executeCliLinkAction(providerId, actionId, params, { cwd, signal });
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
// Resolve on every invocation (and after write approval). Disconnecting the
|
|
195
|
+
// credential therefore invalidates the next action instead of reusing an old token.
|
|
196
|
+
if (!access.resolveValue)
|
|
197
|
+
throw new Error("Credential resolver is unavailable");
|
|
198
|
+
const token = await access.resolveValue({
|
|
199
|
+
cwd,
|
|
200
|
+
id: connection.credential.id,
|
|
201
|
+
scope,
|
|
202
|
+
purpose: "link",
|
|
203
|
+
});
|
|
204
|
+
data = await action.execute({ token, params, signal });
|
|
205
|
+
}
|
|
206
|
+
return JSON.stringify({
|
|
207
|
+
kind: "action_result",
|
|
208
|
+
provider: providerId,
|
|
209
|
+
action: actionId,
|
|
210
|
+
runtime: "local",
|
|
211
|
+
untrustedExternalContent: true,
|
|
212
|
+
data,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
return JSON.stringify({
|
|
217
|
+
kind: "error",
|
|
218
|
+
provider: providerId,
|
|
219
|
+
action: actionId,
|
|
220
|
+
error: error instanceof Error ? error.message : String(error),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
unsubscribe?.();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
export function isLinkActionAvailable(cwd, settingsScope) {
|
|
228
|
+
try {
|
|
229
|
+
return getCredentialAccess()
|
|
230
|
+
.listMasked(cwd, credentialAccessScope(settingsScope))
|
|
231
|
+
.some((credential) => credential.type === "link" &&
|
|
232
|
+
credential.hasSecret &&
|
|
233
|
+
isUsableLinkCredential(credential) &&
|
|
234
|
+
credential.meta?.linkExecutionRuntime === "local" &&
|
|
235
|
+
Boolean(credential.meta.linkProvider) &&
|
|
236
|
+
Boolean(getLocalLinkProvider(credential.meta.linkProvider)));
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LocalLinkProviderSpec, LocalLinkProviderSummary } from "./types.js";
|
|
2
|
+
export declare const LOCAL_LINK_PROVIDERS: readonly LocalLinkProviderSpec[];
|
|
3
|
+
export declare function getLocalLinkProvider(providerId: string): LocalLinkProviderSpec | undefined;
|
|
4
|
+
export declare function listLocalLinkProviders(): LocalLinkProviderSummary[];
|
|
5
|
+
export declare function validateLocalLinkToken(providerId: string, token: string, options?: {
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
fetchImpl?: typeof fetch;
|
|
8
|
+
}): Promise<import("./types.js").LocalLinkValidationResult>;
|