@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
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Delete is SOFT — files are moved to <baseDir>/memory-trash/<ISO>/<scope>/
|
|
15
15
|
* by MemoryManager, so accidental deletions are recoverable by hand.
|
|
16
|
+
*
|
|
17
|
+
* Three locations are exposed:
|
|
18
|
+
* - "global" Cross-project memory under CODE_SHELL_HOME.
|
|
19
|
+
* - "project" Memory scoped to ctx.cwd (the backward-compatible default).
|
|
20
|
+
* - "profile" Portable memory owned by the active digital-human profile;
|
|
21
|
+
* available only when ToolContext.profileMemoryDir is present.
|
|
16
22
|
*/
|
|
17
23
|
import type { ToolDefinition } from "../../types.js";
|
|
18
24
|
import type { ToolContext } from "../context.js";
|
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
*
|
|
14
14
|
* Delete is SOFT — files are moved to <baseDir>/memory-trash/<ISO>/<scope>/
|
|
15
15
|
* by MemoryManager, so accidental deletions are recoverable by hand.
|
|
16
|
+
*
|
|
17
|
+
* Three locations are exposed:
|
|
18
|
+
* - "global" Cross-project memory under CODE_SHELL_HOME.
|
|
19
|
+
* - "project" Memory scoped to ctx.cwd (the backward-compatible default).
|
|
20
|
+
* - "profile" Portable memory owned by the active digital-human profile;
|
|
21
|
+
* available only when ToolContext.profileMemoryDir is present.
|
|
16
22
|
*/
|
|
17
23
|
import { MemoryManager } from "../../session/memory.js";
|
|
18
24
|
const VALID_SCOPES = ["user", "dream"];
|
|
@@ -26,10 +32,11 @@ function parseScope(raw) {
|
|
|
26
32
|
}
|
|
27
33
|
return raw;
|
|
28
34
|
}
|
|
29
|
-
/** Location
|
|
30
|
-
* (default, back-compat) → this repo's store. Anything else → "project". */
|
|
35
|
+
/** Location defaults to project for backward compatibility. */
|
|
31
36
|
function parseLocation(raw) {
|
|
32
|
-
|
|
37
|
+
if (raw === "global" || raw === "profile")
|
|
38
|
+
return raw;
|
|
39
|
+
return "project";
|
|
33
40
|
}
|
|
34
41
|
function parseOrigin(raw) {
|
|
35
42
|
return typeof raw === "string" && VALID_ORIGINS.includes(raw)
|
|
@@ -37,6 +44,12 @@ function parseOrigin(raw) {
|
|
|
37
44
|
: undefined;
|
|
38
45
|
}
|
|
39
46
|
function mmFor(ctx, scope, location = "project") {
|
|
47
|
+
if (location === "profile") {
|
|
48
|
+
if (!ctx?.profileMemoryDir) {
|
|
49
|
+
throw new Error('profile memory is unavailable for this run; activate a digital human with portableMemory enabled before using location "profile"');
|
|
50
|
+
}
|
|
51
|
+
return new MemoryManager({ baseDir: ctx.profileMemoryDir, scope });
|
|
52
|
+
}
|
|
40
53
|
// location=global → omit projectDir so the manager points at the global store.
|
|
41
54
|
return new MemoryManager({
|
|
42
55
|
projectDir: location === "global" ? undefined : ctx?.cwd,
|
|
@@ -45,15 +58,16 @@ function mmFor(ctx, scope, location = "project") {
|
|
|
45
58
|
}
|
|
46
59
|
const LOCATION_SCHEMA = {
|
|
47
60
|
type: "string",
|
|
48
|
-
enum: ["global", "project"],
|
|
49
|
-
description: 'Which store: "global" (applies across all projects)
|
|
61
|
+
enum: ["global", "project", "profile"],
|
|
62
|
+
description: 'Which store: "global" (applies across all projects), "project" (this repo only), or "profile" (travels with the active digital human; requires portableMemory). Defaults to "project".',
|
|
50
63
|
};
|
|
51
64
|
// ─── MemoryList ────────────────────────────────────────────────────────────
|
|
52
65
|
export const memoryListToolDef = {
|
|
53
66
|
name: "MemoryList",
|
|
54
67
|
description: "List persistent memory entries from one scope. " +
|
|
55
|
-
"Returns each entry's id, origin, counts, name, type, and short description (not the full content — use MemoryRead for that). " +
|
|
68
|
+
"Returns each entry's exact scope/location locator, id, origin, counts, name, type, and short description (not the full content — use MemoryRead for that). " +
|
|
56
69
|
"Use this before MemorySave/MemoryDelete to find the exact name to target. " +
|
|
70
|
+
"Copy the returned scope and location exactly when calling MemoryRead; never guess them from the entry name or type. " +
|
|
57
71
|
'Scopes: "user" (entries the user owns; you need permission to modify) or "dream" (auto-consolidation workspace; you may freely modify).',
|
|
58
72
|
inputSchema: {
|
|
59
73
|
type: "object",
|
|
@@ -74,12 +88,14 @@ export async function memoryListTool(args, ctx) {
|
|
|
74
88
|
return scope;
|
|
75
89
|
}
|
|
76
90
|
try {
|
|
77
|
-
const
|
|
91
|
+
const location = parseLocation(args.location);
|
|
92
|
+
const mm = mmFor(ctx, scope, location);
|
|
78
93
|
const entries = mm.loadAll();
|
|
79
|
-
if (entries.length === 0)
|
|
80
|
-
return `(no memories
|
|
94
|
+
if (entries.length === 0) {
|
|
95
|
+
return `(no memories at scope="${scope}" location="${location}")`;
|
|
96
|
+
}
|
|
81
97
|
return entries
|
|
82
|
-
.map((e) => `- [${e.type}] ${e.name} ` +
|
|
98
|
+
.map((e) => `- [scope="${scope}" location="${location}" type="${e.type}"] ${e.name} ` +
|
|
83
99
|
`(id:${e.id ?? "(none)"}, origin:${e.origin ?? "manual"}, use:${e.useCount ?? 0}, updates:${e.updateCount ?? 0}) — ` +
|
|
84
100
|
e.description)
|
|
85
101
|
.join("\n");
|
|
@@ -92,14 +108,15 @@ export async function memoryListTool(args, ctx) {
|
|
|
92
108
|
export const memoryReadToolDef = {
|
|
93
109
|
name: "MemoryRead",
|
|
94
110
|
description: "Read the full content of a single memory entry by name. " +
|
|
95
|
-
"Use
|
|
111
|
+
"Use the exact scope and location printed on the injected memory index or returned by MemoryList; never infer or guess either value. " +
|
|
112
|
+
"If a read reports that the memory is missing, do not repeat the identical call. Use MemoryList once to refresh that exact store, or continue without the memory.",
|
|
96
113
|
inputSchema: {
|
|
97
114
|
type: "object",
|
|
98
115
|
properties: {
|
|
99
116
|
scope: {
|
|
100
117
|
type: "string",
|
|
101
118
|
enum: ["user", "dream"],
|
|
102
|
-
description: "
|
|
119
|
+
description: "Exact scope printed on the injected memory index or returned by MemoryList",
|
|
103
120
|
},
|
|
104
121
|
location: LOCATION_SCHEMA,
|
|
105
122
|
name: {
|
|
@@ -123,8 +140,10 @@ export async function memoryReadTool(args, ctx) {
|
|
|
123
140
|
const mm = mmFor(ctx, scope, location);
|
|
124
141
|
const entries = mm.loadAll();
|
|
125
142
|
const entry = entries.find((e) => e.name === name || e.fileName === name);
|
|
126
|
-
if (!entry)
|
|
127
|
-
return `Error: no memory named "${name}"
|
|
143
|
+
if (!entry) {
|
|
144
|
+
return (`Error: no memory named "${name}" at scope="${scope}" location="${location}". ` +
|
|
145
|
+
"Do not repeat this identical MemoryRead call. Use MemoryList once to refresh this exact store, or continue without the memory.");
|
|
146
|
+
}
|
|
128
147
|
// Recall signal (用户拍板 C + 可见性): reading a memory bumps its usage so
|
|
129
148
|
// the recall-TTL sweep keeps frequently-read memories alive, and emits a
|
|
130
149
|
// stream event so the UI can show the user this memory was actually used.
|
|
@@ -148,6 +167,8 @@ export async function memoryReadTool(args, ctx) {
|
|
|
148
167
|
}
|
|
149
168
|
return (`name: ${entry.name}\n` +
|
|
150
169
|
`id: ${entry.id ?? ""}\n` +
|
|
170
|
+
`scope: ${scope}\n` +
|
|
171
|
+
`location: ${location}\n` +
|
|
151
172
|
`description: ${entry.description}\n` +
|
|
152
173
|
`type: ${entry.type}\n` +
|
|
153
174
|
`origin: ${entry.origin ?? "manual"}\n` +
|
|
@@ -170,7 +191,7 @@ export const memorySaveToolDef = {
|
|
|
170
191
|
"feedback (how to approach work), " +
|
|
171
192
|
"project (non-obvious facts about ongoing work), " +
|
|
172
193
|
"reference (pointers to external resources). " +
|
|
173
|
-
"Pick `location`: global (a lesson/preference true in ANY project)
|
|
194
|
+
"Pick `location`: global (a lesson/preference true in ANY project), project (this repo only), or profile (knowledge that should travel with the active digital human). " +
|
|
174
195
|
"If a memory in the injected index is now stale or wrong, update it by id or MemoryDelete it — keep the store correct rather than letting contradictions pile up. " +
|
|
175
196
|
"The `description` is a one-line summary shown in the index; the `content` is the full body.",
|
|
176
197
|
inputSchema: {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ContentBlock, ToolDefinition } from "../../types.js";
|
|
2
|
+
import type { ToolContext } from "../context.js";
|
|
3
|
+
export declare const panelToolDef: ToolDefinition;
|
|
4
|
+
type PanelToolImageResult = {
|
|
5
|
+
contentBlocks: ContentBlock[];
|
|
6
|
+
result: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function panelTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | PanelToolImageResult>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { validateToolInputSchemaStrict } from "../validation.js";
|
|
2
|
+
export const panelToolDef = {
|
|
3
|
+
name: "Panel",
|
|
4
|
+
description: "Discover, open, and use panels in the interactive host. Use action='list' to discover " +
|
|
5
|
+
"stable panel ids, action='tools' to inspect a Panel App's structured Agent tools, and " +
|
|
6
|
+
"action='invoke' to call one. Invoking a tool opens its panel automatically.",
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object",
|
|
9
|
+
properties: {
|
|
10
|
+
action: {
|
|
11
|
+
type: "string",
|
|
12
|
+
enum: ["list", "open", "tools", "invoke"],
|
|
13
|
+
description: "List panels, open one, list its tools, or invoke one of its tools.",
|
|
14
|
+
},
|
|
15
|
+
panel_id: {
|
|
16
|
+
type: "string",
|
|
17
|
+
description: "Stable id returned by action='list'. Required except for action='list'.",
|
|
18
|
+
},
|
|
19
|
+
tool_name: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Declared tool name returned by action='tools'. Required for action='invoke'.",
|
|
22
|
+
},
|
|
23
|
+
arguments: {
|
|
24
|
+
type: "object",
|
|
25
|
+
description: "JSON object passed to the Panel App tool handler.",
|
|
26
|
+
additionalProperties: true,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: ["action"],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const NO_PANEL_HOST = "Error: panel hosting is not available in this session. This tool requires an interactive Desktop host.";
|
|
33
|
+
const INVALID_PANEL_IMAGE = "Error: Panel App returned an invalid image result";
|
|
34
|
+
const MAX_PANEL_IMAGE_DIMENSION = 16_384;
|
|
35
|
+
const MAX_PANEL_IMAGE_PIXELS = 24_000_000;
|
|
36
|
+
const MAX_PANEL_JSON_RESULT_BYTES = 512 * 1024;
|
|
37
|
+
function plainObject(value) {
|
|
38
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
39
|
+
return false;
|
|
40
|
+
const prototype = Object.getPrototypeOf(value);
|
|
41
|
+
return prototype === Object.prototype || prototype === null;
|
|
42
|
+
}
|
|
43
|
+
function boundedPanelJson(value) {
|
|
44
|
+
try {
|
|
45
|
+
const encoded = JSON.stringify(value, null, 2);
|
|
46
|
+
return Buffer.byteLength(encoded, "utf8") <= MAX_PANEL_JSON_RESULT_BYTES ? encoded : null;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function safePanelToolDescriptors(value) {
|
|
53
|
+
if (!Array.isArray(value) || value.length > 16)
|
|
54
|
+
return null;
|
|
55
|
+
const tools = [];
|
|
56
|
+
for (const candidate of value) {
|
|
57
|
+
if (!plainObject(candidate) ||
|
|
58
|
+
typeof candidate.name !== "string" ||
|
|
59
|
+
!/^[a-z][a-z0-9_]{0,63}$/.test(candidate.name) ||
|
|
60
|
+
typeof candidate.description !== "string" ||
|
|
61
|
+
candidate.description.length < 1 ||
|
|
62
|
+
candidate.description.length > 500 ||
|
|
63
|
+
!plainObject(candidate.inputSchema) ||
|
|
64
|
+
candidate.inputSchema.type !== "object" ||
|
|
65
|
+
validateToolInputSchemaStrict(candidate.inputSchema) !== null ||
|
|
66
|
+
typeof candidate.readOnly !== "boolean") {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
tools.push({
|
|
70
|
+
name: candidate.name,
|
|
71
|
+
description: candidate.description,
|
|
72
|
+
inputSchema: candidate.inputSchema,
|
|
73
|
+
readOnly: candidate.readOnly,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (new Set(tools.map((tool) => tool.name)).size !== tools.length)
|
|
77
|
+
return null;
|
|
78
|
+
return tools;
|
|
79
|
+
}
|
|
80
|
+
function validImageDimensions(width, height) {
|
|
81
|
+
return (Number.isSafeInteger(width) &&
|
|
82
|
+
Number.isSafeInteger(height) &&
|
|
83
|
+
width > 0 &&
|
|
84
|
+
height > 0 &&
|
|
85
|
+
width <= MAX_PANEL_IMAGE_DIMENSION &&
|
|
86
|
+
height <= MAX_PANEL_IMAGE_DIMENSION &&
|
|
87
|
+
width * height <= MAX_PANEL_IMAGE_PIXELS);
|
|
88
|
+
}
|
|
89
|
+
function jpegDimensions(bytes) {
|
|
90
|
+
if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8)
|
|
91
|
+
return null;
|
|
92
|
+
let offset = 2;
|
|
93
|
+
while (offset + 3 < bytes.length) {
|
|
94
|
+
while (offset < bytes.length && bytes[offset] === 0xff)
|
|
95
|
+
offset += 1;
|
|
96
|
+
if (offset >= bytes.length)
|
|
97
|
+
return null;
|
|
98
|
+
const marker = bytes[offset];
|
|
99
|
+
offset += 1;
|
|
100
|
+
if (marker === 0xd8 || marker === 0x01)
|
|
101
|
+
continue;
|
|
102
|
+
if (marker === 0xd9 || marker === 0xda)
|
|
103
|
+
return null;
|
|
104
|
+
if (offset + 2 > bytes.length)
|
|
105
|
+
return null;
|
|
106
|
+
const length = bytes.readUInt16BE(offset);
|
|
107
|
+
if (length < 2 || offset + length > bytes.length)
|
|
108
|
+
return null;
|
|
109
|
+
const startOfFrame = (marker >= 0xc0 && marker <= 0xc3) ||
|
|
110
|
+
(marker >= 0xc5 && marker <= 0xc7) ||
|
|
111
|
+
(marker >= 0xc9 && marker <= 0xcb) ||
|
|
112
|
+
(marker >= 0xcd && marker <= 0xcf);
|
|
113
|
+
if (startOfFrame) {
|
|
114
|
+
if (length < 7)
|
|
115
|
+
return null;
|
|
116
|
+
return {
|
|
117
|
+
height: bytes.readUInt16BE(offset + 3),
|
|
118
|
+
width: bytes.readUInt16BE(offset + 5),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
offset += length;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
function webpDimensions(bytes) {
|
|
126
|
+
if (bytes.length < 20 ||
|
|
127
|
+
bytes.subarray(0, 4).toString("ascii") !== "RIFF" ||
|
|
128
|
+
bytes.subarray(8, 12).toString("ascii") !== "WEBP") {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
const format = bytes.subarray(12, 16).toString("ascii");
|
|
132
|
+
if (format === "VP8X") {
|
|
133
|
+
if (bytes.length < 30)
|
|
134
|
+
return null;
|
|
135
|
+
return {
|
|
136
|
+
width: 1 + bytes.readUIntLE(24, 3),
|
|
137
|
+
height: 1 + bytes.readUIntLE(27, 3),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
if (format === "VP8 ") {
|
|
141
|
+
if (bytes.length < 30 || bytes[23] !== 0x9d || bytes[24] !== 0x01 || bytes[25] !== 0x2a) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
width: bytes.readUInt16LE(26) & 0x3fff,
|
|
146
|
+
height: bytes.readUInt16LE(28) & 0x3fff,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (format === "VP8L") {
|
|
150
|
+
if (bytes.length < 25 || bytes[20] !== 0x2f)
|
|
151
|
+
return null;
|
|
152
|
+
return {
|
|
153
|
+
width: 1 + bytes[21] + ((bytes[22] & 0x3f) << 8),
|
|
154
|
+
height: 1 + (bytes[22] >> 6) + (bytes[23] << 2) + ((bytes[24] & 0x0f) << 10),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
function imageDimensions(mediaType, data) {
|
|
160
|
+
let bytes;
|
|
161
|
+
try {
|
|
162
|
+
bytes = Buffer.from(data, "base64");
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
if (mediaType === "image/png") {
|
|
168
|
+
if (bytes.length < 24 ||
|
|
169
|
+
!bytes.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) ||
|
|
170
|
+
bytes.readUInt32BE(8) !== 13 ||
|
|
171
|
+
bytes.subarray(12, 16).toString("ascii") !== "IHDR") {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
return { width: bytes.readUInt32BE(16), height: bytes.readUInt32BE(20) };
|
|
175
|
+
}
|
|
176
|
+
if (mediaType === "image/jpeg") {
|
|
177
|
+
return jpegDimensions(bytes);
|
|
178
|
+
}
|
|
179
|
+
if (mediaType === "image/webp") {
|
|
180
|
+
return webpDimensions(bytes);
|
|
181
|
+
}
|
|
182
|
+
if (mediaType === "image/gif") {
|
|
183
|
+
const signature = bytes.subarray(0, 6).toString("ascii");
|
|
184
|
+
if (bytes.length < 10 || (signature !== "GIF87a" && signature !== "GIF89a"))
|
|
185
|
+
return null;
|
|
186
|
+
return { width: bytes.readUInt16LE(6), height: bytes.readUInt16LE(8) };
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
function imageResult(value) {
|
|
191
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
192
|
+
return null;
|
|
193
|
+
const candidate = value;
|
|
194
|
+
if (candidate.kind !== "image")
|
|
195
|
+
return null;
|
|
196
|
+
const mediaType = candidate.mediaType;
|
|
197
|
+
const data = candidate.data;
|
|
198
|
+
if (typeof mediaType !== "string" ||
|
|
199
|
+
!["image/png", "image/jpeg", "image/webp", "image/gif"].includes(mediaType) ||
|
|
200
|
+
typeof data !== "string" ||
|
|
201
|
+
data.length === 0 ||
|
|
202
|
+
data.length > 350_000 ||
|
|
203
|
+
data.length % 4 !== 0 ||
|
|
204
|
+
!/^[a-z0-9+/]+={0,2}$/iu.test(data)) {
|
|
205
|
+
return INVALID_PANEL_IMAGE;
|
|
206
|
+
}
|
|
207
|
+
const dimensions = imageDimensions(mediaType, data);
|
|
208
|
+
if (!dimensions ||
|
|
209
|
+
!validImageDimensions(dimensions.width, dimensions.height) ||
|
|
210
|
+
(candidate.width !== undefined && candidate.width !== dimensions.width) ||
|
|
211
|
+
(candidate.height !== undefined && candidate.height !== dimensions.height)) {
|
|
212
|
+
return INVALID_PANEL_IMAGE;
|
|
213
|
+
}
|
|
214
|
+
const metadata = { mediaType, ...dimensions };
|
|
215
|
+
for (const key of [
|
|
216
|
+
"nodeId",
|
|
217
|
+
"pageId",
|
|
218
|
+
"pageName",
|
|
219
|
+
"path",
|
|
220
|
+
"revision",
|
|
221
|
+
"stateRevision",
|
|
222
|
+
"summary",
|
|
223
|
+
]) {
|
|
224
|
+
const value = candidate[key];
|
|
225
|
+
if (typeof value === "string" && value.length <= 2_000)
|
|
226
|
+
metadata[key] = value;
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
contentBlocks: [
|
|
230
|
+
{
|
|
231
|
+
type: "image",
|
|
232
|
+
source: {
|
|
233
|
+
type: "base64",
|
|
234
|
+
media_type: mediaType,
|
|
235
|
+
data,
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
result: JSON.stringify(metadata, null, 2),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export async function panelTool(args, ctx) {
|
|
243
|
+
const bridge = ctx?.panels;
|
|
244
|
+
if (!bridge)
|
|
245
|
+
return NO_PANEL_HOST;
|
|
246
|
+
const action = args.action;
|
|
247
|
+
if (action === "list") {
|
|
248
|
+
const listed = await bridge.list();
|
|
249
|
+
// A failed discovery must not be reported as an empty host: "(no panels
|
|
250
|
+
// available)" reads as fact and makes the model stop trying.
|
|
251
|
+
if (listed.failed)
|
|
252
|
+
return `Error: ${listed.failed}`;
|
|
253
|
+
const panels = listed.items;
|
|
254
|
+
if (panels.length === 0)
|
|
255
|
+
return "(no panels available)";
|
|
256
|
+
return panels.map((panel) => `${panel.id}\t${panel.title}\t${panel.source}`).join("\n");
|
|
257
|
+
}
|
|
258
|
+
if (action === "open") {
|
|
259
|
+
const panelId = typeof args.panel_id === "string" ? args.panel_id.trim() : "";
|
|
260
|
+
if (!panelId)
|
|
261
|
+
return "Error: panel_id is required for action='open'";
|
|
262
|
+
const result = await bridge.open(panelId);
|
|
263
|
+
return result.ok
|
|
264
|
+
? `Opened panel ${result.panelId}`
|
|
265
|
+
: `Error: ${result.detail ?? `could not open panel ${panelId}`}`;
|
|
266
|
+
}
|
|
267
|
+
if (action === "tools") {
|
|
268
|
+
const panelId = typeof args.panel_id === "string" ? args.panel_id.trim() : "";
|
|
269
|
+
if (!panelId)
|
|
270
|
+
return "Error: panel_id is required for action='tools'";
|
|
271
|
+
if (!bridge.tools)
|
|
272
|
+
return "Error: this panel host does not expose Agent tools";
|
|
273
|
+
const queried = await bridge.tools(panelId);
|
|
274
|
+
// Same hazard as list: "has no Agent tools" is a factual claim, so a Stop or
|
|
275
|
+
// a timeout must not be laundered into it.
|
|
276
|
+
if (queried.failed)
|
|
277
|
+
return `Error: ${queried.failed}`;
|
|
278
|
+
const tools = safePanelToolDescriptors(queried.items);
|
|
279
|
+
if (!tools)
|
|
280
|
+
return "Error: panel host returned malformed Agent tool descriptors";
|
|
281
|
+
if (tools.length === 0)
|
|
282
|
+
return `(panel ${panelId} has no Agent tools)`;
|
|
283
|
+
return (boundedPanelJson({ panelId, tools }) ??
|
|
284
|
+
"Error: panel host returned oversized Agent tool descriptors");
|
|
285
|
+
}
|
|
286
|
+
if (action === "invoke") {
|
|
287
|
+
const panelId = typeof args.panel_id === "string" ? args.panel_id.trim() : "";
|
|
288
|
+
const toolName = typeof args.tool_name === "string" ? args.tool_name.trim() : "";
|
|
289
|
+
if (!panelId)
|
|
290
|
+
return "Error: panel_id is required for action='invoke'";
|
|
291
|
+
if (!toolName)
|
|
292
|
+
return "Error: tool_name is required for action='invoke'";
|
|
293
|
+
if (!bridge.invoke)
|
|
294
|
+
return "Error: this panel host cannot invoke Agent tools";
|
|
295
|
+
if (args.arguments !== undefined &&
|
|
296
|
+
(!args.arguments || typeof args.arguments !== "object" || Array.isArray(args.arguments))) {
|
|
297
|
+
return "Error: arguments must be a JSON object for action='invoke'";
|
|
298
|
+
}
|
|
299
|
+
const toolArgs = args.arguments ?? {};
|
|
300
|
+
const result = await bridge.invoke(panelId, toolName, toolArgs);
|
|
301
|
+
if (!result.ok) {
|
|
302
|
+
return `Error: ${result.detail ?? `could not invoke ${toolName} in ${panelId}`}`;
|
|
303
|
+
}
|
|
304
|
+
const image = imageResult(result.result);
|
|
305
|
+
if (image)
|
|
306
|
+
return image;
|
|
307
|
+
return (boundedPanelJson({
|
|
308
|
+
panelId: result.panelId,
|
|
309
|
+
toolName: result.toolName,
|
|
310
|
+
result: result.result ?? null,
|
|
311
|
+
}) ?? "Error: Panel App returned an oversized or non-JSON result");
|
|
312
|
+
}
|
|
313
|
+
return `Error: unknown panel action '${String(action)}'`;
|
|
314
|
+
}
|
|
@@ -125,7 +125,11 @@ function detectBinary(filePath, sample) {
|
|
|
125
125
|
if (sample.includes(0))
|
|
126
126
|
return { kind: "binary" };
|
|
127
127
|
try {
|
|
128
|
-
|
|
128
|
+
// `stream: true` tolerates a multi-byte UTF-8 char truncated by the sample
|
|
129
|
+
// boundary (e.g. a CJK char split at byte 8192). Without it, a valid UTF-8
|
|
130
|
+
// text file gets misdetected as binary whenever the sample cut lands mid-char.
|
|
131
|
+
// A genuinely invalid byte in the MIDDLE of the sample still throws.
|
|
132
|
+
new TextDecoder("utf-8", { fatal: true }).decode(sample, { stream: true });
|
|
129
133
|
}
|
|
130
134
|
catch {
|
|
131
135
|
return { kind: "binary" };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ToolDefinition } from "../../types.js";
|
|
2
|
+
import type { ToolContext, ToolVisibilityContext } from "../context.js";
|
|
3
|
+
export declare const SEND_MESSAGE_TO_SESSION_TOOL_NAME = "SendMessageToSession";
|
|
4
|
+
export declare const sendMessageToSessionToolDef: ToolDefinition;
|
|
5
|
+
export declare function rewriteSendMessageToSessionToolDefinition(def: ToolDefinition, ctx: ToolVisibilityContext): ToolDefinition;
|
|
6
|
+
export declare function sendMessageToSessionTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export const SEND_MESSAGE_TO_SESSION_TOOL_NAME = "SendMessageToSession";
|
|
2
|
+
export const sendMessageToSessionToolDef = {
|
|
3
|
+
name: SEND_MESSAGE_TO_SESSION_TOOL_NAME,
|
|
4
|
+
description: "Send a message to another host-authorized Session in the current project. " +
|
|
5
|
+
"Use this exactly like a person sending a message in that Session: the message becomes the target Session's next user turn and queues or starts its work. " +
|
|
6
|
+
"When you have later additions, call this tool again with another message. The call creates no persistent relationship or automatic subscription.",
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object",
|
|
9
|
+
properties: {
|
|
10
|
+
target_session_id: {
|
|
11
|
+
type: "string",
|
|
12
|
+
description: "One target Session id from the host-authorized closed list.",
|
|
13
|
+
},
|
|
14
|
+
message: {
|
|
15
|
+
type: "string",
|
|
16
|
+
minLength: 1,
|
|
17
|
+
maxLength: 48_000,
|
|
18
|
+
description: "The complete message to send as the target Session's user turn: task, relevant context, constraints, and artifact paths.",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
required: ["target_session_id", "message"],
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export function rewriteSendMessageToSessionToolDefinition(def, ctx) {
|
|
25
|
+
const targets = ctx.sessionMessageTargets ?? [];
|
|
26
|
+
return {
|
|
27
|
+
...def,
|
|
28
|
+
description: `${def.description}\n\nAvailable target Sessions:\n${targets
|
|
29
|
+
.map((target) => formatTarget(target))
|
|
30
|
+
.join("\n")}`,
|
|
31
|
+
inputSchema: {
|
|
32
|
+
...def.inputSchema,
|
|
33
|
+
properties: {
|
|
34
|
+
...(def.inputSchema.properties ?? {}),
|
|
35
|
+
target_session_id: {
|
|
36
|
+
type: "string",
|
|
37
|
+
enum: targets.map((target) => target.sessionId),
|
|
38
|
+
description: "Select exactly one host-authorized target Session listed below.",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export async function sendMessageToSessionTool(args, ctx) {
|
|
45
|
+
const service = ctx?.sessionMessages;
|
|
46
|
+
if (!service)
|
|
47
|
+
return "Error: cross-Session messaging is not available in this run.";
|
|
48
|
+
const targetSessionId = typeof args.target_session_id === "string" ? args.target_session_id.trim() : "";
|
|
49
|
+
const message = typeof args.message === "string" ? args.message : "";
|
|
50
|
+
if (!targetSessionId)
|
|
51
|
+
return "Error: target_session_id is required.";
|
|
52
|
+
if (!message.trim())
|
|
53
|
+
return "Error: message is required.";
|
|
54
|
+
if (message.length > 48_000)
|
|
55
|
+
return "Error: message exceeds 48000 characters.";
|
|
56
|
+
try {
|
|
57
|
+
const target = await service.send({ targetSessionId, message });
|
|
58
|
+
return `Message sent to "${target.title}" (${target.sessionId}); its Session has queued the turn.`;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return `Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function formatTarget(target) {
|
|
65
|
+
const profile = target.workspaceProfile ? `; digital human: ${target.workspaceProfile}` : "";
|
|
66
|
+
return `- ${target.sessionId}: ${target.title}${profile}`;
|
|
67
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolDefinition } from "../../types.js";
|
|
2
|
+
import type { ToolContext } from "../context.js";
|
|
3
|
+
/** Registering the same adapter objects is safe to repeat across test/host imports. */
|
|
4
|
+
export declare function registerBuiltinSourceAdapters(): void;
|
|
5
|
+
export declare const listSourcesToolDef: ToolDefinition;
|
|
6
|
+
export declare function listSourcesTool(_args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
7
|
+
export declare const readSourceToolDef: ToolDefinition;
|
|
8
|
+
export declare function readSourceTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|