hyacinth-ai 0.9.6
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/LICENSE +21 -0
- package/README.md +205 -0
- package/commands.json +25 -0
- package/dist/agents/builtins.d.ts +8 -0
- package/dist/agents/builtins.js +50 -0
- package/dist/agents/config-loader.d.ts +15 -0
- package/dist/agents/config-loader.js +75 -0
- package/dist/agents/delegate-tool.d.ts +109 -0
- package/dist/agents/delegate-tool.js +407 -0
- package/dist/agents/index.d.ts +5 -0
- package/dist/agents/index.js +5 -0
- package/dist/agents/registry.d.ts +2 -0
- package/dist/agents/registry.js +2 -0
- package/dist/bypass/agents/companion/index.d.ts +57 -0
- package/dist/bypass/agents/companion/index.js +487 -0
- package/dist/bypass/agents/orchestrator/index.d.ts +17 -0
- package/dist/bypass/agents/orchestrator/index.js +414 -0
- package/dist/bypass/agents/orchestrator.d.ts +16 -0
- package/dist/bypass/agents/orchestrator.js +377 -0
- package/dist/bypass/agents/world-engine/agent.d.ts +41 -0
- package/dist/bypass/agents/world-engine/agent.js +385 -0
- package/dist/bypass/agents/world-engine/index.d.ts +52 -0
- package/dist/bypass/agents/world-engine/index.js +198 -0
- package/dist/bypass/agents/world-engine/sim.d.ts +14 -0
- package/dist/bypass/agents/world-engine/sim.js +120 -0
- package/dist/bypass/agents/world-engine/store.d.ts +110 -0
- package/dist/bypass/agents/world-engine/store.js +519 -0
- package/dist/bypass/agents/world-engine/ticker.d.ts +37 -0
- package/dist/bypass/agents/world-engine/ticker.js +214 -0
- package/dist/bypass/agents/world-engine/tools.d.ts +6 -0
- package/dist/bypass/agents/world-engine/tools.js +380 -0
- package/dist/bypass/agents/world-engine/types.d.ts +202 -0
- package/dist/bypass/agents/world-engine/types.js +56 -0
- package/dist/bypass/agents/world-engine.d.ts +20 -0
- package/dist/bypass/agents/world-engine.js +63 -0
- package/dist/bypass/base.d.ts +48 -0
- package/dist/bypass/base.js +126 -0
- package/dist/bypass/index.d.ts +5 -0
- package/dist/bypass/index.js +6 -0
- package/dist/bypass/manager.d.ts +41 -0
- package/dist/bypass/manager.js +179 -0
- package/dist/bypass/types.d.ts +63 -0
- package/dist/bypass/types.js +14 -0
- package/dist/channels/auto-detect.d.ts +25 -0
- package/dist/channels/auto-detect.js +77 -0
- package/dist/channels/builtin/http-webhook.d.ts +25 -0
- package/dist/channels/builtin/http-webhook.js +287 -0
- package/dist/channels/builtin/tui-channel.d.ts +33 -0
- package/dist/channels/builtin/tui-channel.js +61 -0
- package/dist/channels/builtin/tui-ws-session.d.ts +16 -0
- package/dist/channels/builtin/tui-ws-session.js +90 -0
- package/dist/channels/builtin/webui-output-handler.d.ts +30 -0
- package/dist/channels/builtin/webui-output-handler.js +93 -0
- package/dist/channels/index.d.ts +5 -0
- package/dist/channels/index.js +3 -0
- package/dist/channels/interface.d.ts +148 -0
- package/dist/channels/interface.js +15 -0
- package/dist/channels/manager.d.ts +43 -0
- package/dist/channels/manager.js +156 -0
- package/dist/channels/message-queue.d.ts +36 -0
- package/dist/channels/message-queue.js +91 -0
- package/dist/channels/plugins/clawbot/clawbot-auth.d.ts +50 -0
- package/dist/channels/plugins/clawbot/clawbot-auth.js +235 -0
- package/dist/channels/plugins/clawbot/clawbot-channel.d.ts +76 -0
- package/dist/channels/plugins/clawbot/clawbot-channel.js +566 -0
- package/dist/channels/plugins/clawbot/clawbot-client.d.ts +180 -0
- package/dist/channels/plugins/clawbot/clawbot-client.js +312 -0
- package/dist/channels/plugins/clawbot/clawbot-config.d.ts +30 -0
- package/dist/channels/plugins/clawbot/clawbot-config.js +28 -0
- package/dist/channels/plugins/clawbot/clawbot-message-queue.d.ts +27 -0
- package/dist/channels/plugins/clawbot/clawbot-message-queue.js +114 -0
- package/dist/channels/plugins/clawbot/clawbot-session.d.ts +10 -0
- package/dist/channels/plugins/clawbot/clawbot-session.js +26 -0
- package/dist/channels/plugins/clawbot/index.d.ts +17 -0
- package/dist/channels/plugins/clawbot/index.js +58 -0
- package/dist/channels/plugins/feishu/feishu-channel.d.ts +57 -0
- package/dist/channels/plugins/feishu/feishu-channel.js +602 -0
- package/dist/channels/plugins/feishu/feishu-client.d.ts +23 -0
- package/dist/channels/plugins/feishu/feishu-client.js +86 -0
- package/dist/channels/plugins/feishu/feishu-config.d.ts +53 -0
- package/dist/channels/plugins/feishu/feishu-config.js +35 -0
- package/dist/channels/plugins/feishu/feishu-event.d.ts +102 -0
- package/dist/channels/plugins/feishu/feishu-event.js +257 -0
- package/dist/channels/plugins/feishu/feishu-log-suppressor.d.ts +7 -0
- package/dist/channels/plugins/feishu/feishu-log-suppressor.js +34 -0
- package/dist/channels/plugins/feishu/feishu-message-queue.d.ts +27 -0
- package/dist/channels/plugins/feishu/feishu-message-queue.js +112 -0
- package/dist/channels/plugins/feishu/feishu-send.d.ts +44 -0
- package/dist/channels/plugins/feishu/feishu-send.js +232 -0
- package/dist/channels/plugins/feishu/feishu-session.d.ts +44 -0
- package/dist/channels/plugins/feishu/feishu-session.js +84 -0
- package/dist/channels/plugins/feishu/feishu-streaming.d.ts +49 -0
- package/dist/channels/plugins/feishu/feishu-streaming.js +185 -0
- package/dist/channels/plugins/feishu/feishu-transport.d.ts +29 -0
- package/dist/channels/plugins/feishu/feishu-transport.js +99 -0
- package/dist/channels/plugins/feishu/index.d.ts +22 -0
- package/dist/channels/plugins/feishu/index.js +68 -0
- package/dist/cli/doctor.d.ts +20 -0
- package/dist/cli/doctor.js +317 -0
- package/dist/context/cache-strategy.d.ts +76 -0
- package/dist/context/cache-strategy.js +123 -0
- package/dist/context/composer.d.ts +77 -0
- package/dist/context/composer.js +318 -0
- package/dist/context/compressor.d.ts +218 -0
- package/dist/context/compressor.js +909 -0
- package/dist/context/index.d.ts +14 -0
- package/dist/context/index.js +8 -0
- package/dist/context/interface.d.ts +33 -0
- package/dist/context/interface.js +2 -0
- package/dist/context/manifest-defaults.d.ts +51 -0
- package/dist/context/manifest-defaults.js +133 -0
- package/dist/context/manifest-loader.d.ts +16 -0
- package/dist/context/manifest-loader.js +103 -0
- package/dist/context/manifest-types.d.ts +26 -0
- package/dist/context/manifest-types.js +2 -0
- package/dist/context/precision/analyzer.d.ts +31 -0
- package/dist/context/precision/analyzer.js +131 -0
- package/dist/context/precision/companion.d.ts +27 -0
- package/dist/context/precision/companion.js +144 -0
- package/dist/context/precision/default.d.ts +14 -0
- package/dist/context/precision/default.js +17 -0
- package/dist/context/precision/index.d.ts +9 -0
- package/dist/context/precision/index.js +7 -0
- package/dist/context/precision/keyword-pool.d.ts +27 -0
- package/dist/context/precision/keyword-pool.js +66 -0
- package/dist/context/precision/strategy.d.ts +18 -0
- package/dist/context/precision/strategy.js +51 -0
- package/dist/context/precision/summary-store.d.ts +18 -0
- package/dist/context/precision/summary-store.js +67 -0
- package/dist/context/precision/types.d.ts +23 -0
- package/dist/context/precision/types.js +2 -0
- package/dist/context/profiles.d.ts +45 -0
- package/dist/context/profiles.js +92 -0
- package/dist/context/prompt-builder.d.ts +76 -0
- package/dist/context/prompt-builder.js +133 -0
- package/dist/context/retriever.d.ts +44 -0
- package/dist/context/retriever.js +203 -0
- package/dist/context/router.d.ts +122 -0
- package/dist/context/router.js +291 -0
- package/dist/context/section-resolver.d.ts +38 -0
- package/dist/context/section-resolver.js +398 -0
- package/dist/context/tokenizer.d.ts +23 -0
- package/dist/context/tokenizer.js +78 -0
- package/dist/dependency/analyzer.d.ts +33 -0
- package/dist/dependency/analyzer.js +242 -0
- package/dist/dependency/data-flow-tracker.d.ts +12 -0
- package/dist/dependency/data-flow-tracker.js +97 -0
- package/dist/dependency/function-parser.d.ts +34 -0
- package/dist/dependency/function-parser.js +295 -0
- package/dist/dependency/index.d.ts +14 -0
- package/dist/dependency/index.js +20 -0
- package/dist/dependency/parser.d.ts +10 -0
- package/dist/dependency/parser.js +93 -0
- package/dist/dependency/types.d.ts +57 -0
- package/dist/dependency/types.js +2 -0
- package/dist/env/env-collector.d.ts +45 -0
- package/dist/env/env-collector.js +221 -0
- package/dist/env/index.d.ts +3 -0
- package/dist/env/index.js +2 -0
- package/dist/event-store.d.ts +27 -0
- package/dist/event-store.js +71 -0
- package/dist/evolution/git-manager.d.ts +46 -0
- package/dist/evolution/git-manager.js +276 -0
- package/dist/evolution/index.d.ts +3 -0
- package/dist/evolution/index.js +2 -0
- package/dist/flow/bootstrap-flow.d.ts +19 -0
- package/dist/flow/bootstrap-flow.js +72 -0
- package/dist/flow/flow-registry.d.ts +12 -0
- package/dist/flow/flow-registry.js +74 -0
- package/dist/flow/flow-tools.d.ts +8 -0
- package/dist/flow/flow-tools.js +106 -0
- package/dist/flow/index.d.ts +6 -0
- package/dist/flow/index.js +8 -0
- package/dist/flow/todo-flow.d.ts +25 -0
- package/dist/flow/todo-flow.js +107 -0
- package/dist/flow/types.d.ts +78 -0
- package/dist/flow/types.js +12 -0
- package/dist/flows/bootstrap.d.ts +18 -0
- package/dist/flows/bootstrap.js +119 -0
- package/dist/flows/index.d.ts +6 -0
- package/dist/flows/index.js +11 -0
- package/dist/flows/todo.d.ts +26 -0
- package/dist/flows/todo.js +174 -0
- package/dist/flows/tools.d.ts +8 -0
- package/dist/flows/tools.js +119 -0
- package/dist/flows/types.d.ts +27 -0
- package/dist/flows/types.js +10 -0
- package/dist/gateway/cli.d.ts +5 -0
- package/dist/gateway/cli.js +1027 -0
- package/dist/gateway/factory.d.ts +80 -0
- package/dist/gateway/factory.js +832 -0
- package/dist/gateway/guardian.d.ts +8 -0
- package/dist/gateway/guardian.js +30 -0
- package/dist/gateway/index.d.ts +3 -0
- package/dist/gateway/index.js +3 -0
- package/dist/gateway/server.d.ts +17 -0
- package/dist/gateway/server.js +96 -0
- package/dist/gateway/tui.d.ts +16 -0
- package/dist/gateway/tui.js +3273 -0
- package/dist/hot-reload/agent-watcher.d.ts +24 -0
- package/dist/hot-reload/agent-watcher.js +175 -0
- package/dist/hot-reload/bundle-watcher.d.ts +12 -0
- package/dist/hot-reload/bundle-watcher.js +35 -0
- package/dist/hot-reload/channel-watcher.d.ts +19 -0
- package/dist/hot-reload/channel-watcher.js +54 -0
- package/dist/hot-reload/command-watcher.d.ts +14 -0
- package/dist/hot-reload/command-watcher.js +54 -0
- package/dist/hot-reload/config-watcher.d.ts +20 -0
- package/dist/hot-reload/config-watcher.js +58 -0
- package/dist/hot-reload/index.d.ts +12 -0
- package/dist/hot-reload/index.js +12 -0
- package/dist/hot-reload/manager.d.ts +58 -0
- package/dist/hot-reload/manager.js +243 -0
- package/dist/hot-reload/manifest-watcher.d.ts +9 -0
- package/dist/hot-reload/manifest-watcher.js +42 -0
- package/dist/hot-reload/mcp-watcher.d.ts +18 -0
- package/dist/hot-reload/mcp-watcher.js +64 -0
- package/dist/hot-reload/model-catalog-watcher.d.ts +18 -0
- package/dist/hot-reload/model-catalog-watcher.js +62 -0
- package/dist/hot-reload/plugin-watcher.d.ts +20 -0
- package/dist/hot-reload/plugin-watcher.js +56 -0
- package/dist/hot-reload/prompt-watcher.d.ts +6 -0
- package/dist/hot-reload/prompt-watcher.js +38 -0
- package/dist/hot-reload/provider-watcher.d.ts +16 -0
- package/dist/hot-reload/provider-watcher.js +45 -0
- package/dist/hot-reload/skill-watcher.d.ts +19 -0
- package/dist/hot-reload/skill-watcher.js +82 -0
- package/dist/hot-reload/tool-watcher.d.ts +16 -0
- package/dist/hot-reload/tool-watcher.js +168 -0
- package/dist/hot-reload/workflow-watcher.d.ts +19 -0
- package/dist/hot-reload/workflow-watcher.js +84 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +6 -0
- package/dist/knowledge/fts5-retriever.d.ts +30 -0
- package/dist/knowledge/fts5-retriever.js +223 -0
- package/dist/knowledge/index.d.ts +11 -0
- package/dist/knowledge/index.js +14 -0
- package/dist/knowledge/indexer.d.ts +41 -0
- package/dist/knowledge/indexer.js +186 -0
- package/dist/knowledge/query-preprocessor.d.ts +13 -0
- package/dist/knowledge/query-preprocessor.js +63 -0
- package/dist/knowledge/retriever.d.ts +45 -0
- package/dist/knowledge/retriever.js +9 -0
- package/dist/knowledge/store.d.ts +27 -0
- package/dist/knowledge/store.js +61 -0
- package/dist/knowledge/structured-store.d.ts +78 -0
- package/dist/knowledge/structured-store.js +280 -0
- package/dist/knowledge/structured-tools.d.ts +12 -0
- package/dist/knowledge/structured-tools.js +151 -0
- package/dist/knowledge/tools.d.ts +20 -0
- package/dist/knowledge/tools.js +238 -0
- package/dist/knowledge/watcher.d.ts +28 -0
- package/dist/knowledge/watcher.js +113 -0
- package/dist/lifecycle/index.d.ts +12 -0
- package/dist/lifecycle/index.js +14 -0
- package/dist/lifecycle/interface.d.ts +94 -0
- package/dist/lifecycle/interface.js +2 -0
- package/dist/lifecycle/local-model.d.ts +62 -0
- package/dist/lifecycle/local-model.js +331 -0
- package/dist/lifecycle/manager.d.ts +70 -0
- package/dist/lifecycle/manager.js +374 -0
- package/dist/lifecycle/supervisor.d.ts +89 -0
- package/dist/lifecycle/supervisor.js +277 -0
- package/dist/lifecycle-integration-test.d.ts +2 -0
- package/dist/lifecycle-integration-test.js +72 -0
- package/dist/local-model/download-manager.d.ts +59 -0
- package/dist/local-model/download-manager.js +517 -0
- package/dist/local-model/index.d.ts +109 -0
- package/dist/local-model/index.js +233 -0
- package/dist/local-model/llamacpp-provider.d.ts +95 -0
- package/dist/local-model/llamacpp-provider.js +379 -0
- package/dist/local-model/model-bridge.d.ts +48 -0
- package/dist/local-model/model-bridge.js +256 -0
- package/dist/local-model/model-registry.d.ts +47 -0
- package/dist/local-model/model-registry.js +188 -0
- package/dist/local-model/types.d.ts +49 -0
- package/dist/local-model/types.js +2 -0
- package/dist/logging/index.d.ts +3 -0
- package/dist/logging/index.js +3 -0
- package/dist/logging/logger.d.ts +56 -0
- package/dist/logging/logger.js +94 -0
- package/dist/machine/flows/bootstrap.d.ts +18 -0
- package/dist/machine/flows/bootstrap.js +119 -0
- package/dist/machine/flows/index.d.ts +6 -0
- package/dist/machine/flows/index.js +11 -0
- package/dist/machine/flows/spec.d.ts +17 -0
- package/dist/machine/flows/spec.js +176 -0
- package/dist/machine/flows/todo.d.ts +26 -0
- package/dist/machine/flows/todo.js +175 -0
- package/dist/machine/flows/tools.d.ts +8 -0
- package/dist/machine/flows/tools.js +119 -0
- package/dist/machine/flows/types.d.ts +33 -0
- package/dist/machine/flows/types.js +10 -0
- package/dist/machine/index.d.ts +8 -0
- package/dist/machine/index.js +9 -0
- package/dist/machine/registry.d.ts +34 -0
- package/dist/machine/registry.js +98 -0
- package/dist/machine/runner.d.ts +41 -0
- package/dist/machine/runner.js +177 -0
- package/dist/machine/types.d.ts +121 -0
- package/dist/machine/types.js +9 -0
- package/dist/mcp/bridge.d.ts +33 -0
- package/dist/mcp/bridge.js +99 -0
- package/dist/mcp/client.d.ts +37 -0
- package/dist/mcp/client.js +161 -0
- package/dist/mcp/config.d.ts +15 -0
- package/dist/mcp/config.js +85 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/install-manager.d.ts +31 -0
- package/dist/mcp/install-manager.js +158 -0
- package/dist/mcp/lifecycle.d.ts +41 -0
- package/dist/mcp/lifecycle.js +175 -0
- package/dist/mcp/process-transport.d.ts +21 -0
- package/dist/mcp/process-transport.js +59 -0
- package/dist/mcp/side-effect.d.ts +5 -0
- package/dist/mcp/side-effect.js +21 -0
- package/dist/mcp/system.d.ts +95 -0
- package/dist/mcp/system.js +279 -0
- package/dist/memory/companion-session.d.ts +22 -0
- package/dist/memory/companion-session.js +77 -0
- package/dist/memory/compression-boundary.d.ts +20 -0
- package/dist/memory/compression-boundary.js +40 -0
- package/dist/memory/conversation.d.ts +34 -0
- package/dist/memory/conversation.js +107 -0
- package/dist/memory/events.d.ts +42 -0
- package/dist/memory/events.js +56 -0
- package/dist/memory/index.d.ts +7 -0
- package/dist/memory/index.js +6 -0
- package/dist/memory/memory-store.d.ts +11 -0
- package/dist/memory/memory-store.js +51 -0
- package/dist/memory/session-allowlist.d.ts +11 -0
- package/dist/memory/session-allowlist.js +50 -0
- package/dist/memory/session.d.ts +48 -0
- package/dist/memory/session.js +275 -0
- package/dist/memory/stats.d.ts +23 -0
- package/dist/memory/stats.js +59 -0
- package/dist/memory/summary.d.ts +7 -0
- package/dist/memory/summary.js +23 -0
- package/dist/multimodal/index.d.ts +66 -0
- package/dist/multimodal/index.js +210 -0
- package/dist/orchestrator/index.d.ts +5 -0
- package/dist/orchestrator/index.js +4 -0
- package/dist/orchestrator/loop.d.ts +331 -0
- package/dist/orchestrator/loop.js +2443 -0
- package/dist/orchestrator/plan-store.d.ts +81 -0
- package/dist/orchestrator/plan-store.js +167 -0
- package/dist/orchestrator/planner.d.ts +20 -0
- package/dist/orchestrator/planner.js +34 -0
- package/dist/parser/index.d.ts +2 -0
- package/dist/parser/index.js +2 -0
- package/dist/parser/router.d.ts +30 -0
- package/dist/parser/router.js +61 -0
- package/dist/plugins/api.d.ts +39 -0
- package/dist/plugins/api.js +85 -0
- package/dist/plugins/define.d.ts +27 -0
- package/dist/plugins/define.js +32 -0
- package/dist/plugins/index.d.ts +9 -0
- package/dist/plugins/index.js +5 -0
- package/dist/plugins/loader.d.ts +39 -0
- package/dist/plugins/loader.js +128 -0
- package/dist/plugins/manager.d.ts +61 -0
- package/dist/plugins/manager.js +257 -0
- package/dist/plugins/types.d.ts +82 -0
- package/dist/plugins/types.js +2 -0
- package/dist/prompts/agents/code-reviewer.md +16 -0
- package/dist/prompts/agents/security-auditor.md +17 -0
- package/dist/prompts/agents/test-writer.md +15 -0
- package/dist/prompts/attention/attention.md +12 -0
- package/dist/prompts/environment/environment.md +18 -0
- package/dist/prompts/environment/feishu.md +107 -0
- package/dist/prompts/flows/bootstrap-confirm.md +14 -0
- package/dist/prompts/flows/bootstrap-identity.md +11 -0
- package/dist/prompts/flows/bootstrap-soul.md +19 -0
- package/dist/prompts/flows/bootstrap-user.md +11 -0
- package/dist/prompts/flows/spec-checklist.md +27 -0
- package/dist/prompts/flows/spec-define.md +64 -0
- package/dist/prompts/flows/spec-executing-checklist.md +15 -0
- package/dist/prompts/flows/spec-executing-tasks.md +15 -0
- package/dist/prompts/flows/spec-spec.md +51 -0
- package/dist/prompts/flows/spec-tasks.md +32 -0
- package/dist/prompts/flows/todo-execution.md +7 -0
- package/dist/prompts/flows/todo-planning.md +18 -0
- package/dist/prompts/framework/architecture.md +131 -0
- package/dist/prompts/identity/identity.md +2 -0
- package/dist/prompts/loader.d.ts +24 -0
- package/dist/prompts/loader.js +102 -0
- package/dist/prompts/loader.ts +119 -0
- package/dist/prompts/orchestration/summary.md +14 -0
- package/dist/prompts/persona/BOOTSTRAP.md +5 -0
- package/dist/prompts/persona/IDENTITY.md +16 -0
- package/dist/prompts/persona/PartnerMemory.md +5 -0
- package/dist/prompts/persona/PartnerSoul.md +7 -0
- package/dist/prompts/persona/SOUL.md +30 -0
- package/dist/prompts/persona/USER.md +16 -0
- package/dist/prompts/precise/analyze.md +23 -0
- package/dist/prompts/precise/persona.md +18 -0
- package/dist/prompts/safety/coding-standards.md +5 -0
- package/dist/prompts/safety/safety.md +4 -0
- package/dist/prompts/skills/code-review.md +4 -0
- package/dist/prompts/skills/debug.md +7 -0
- package/dist/prompts/skills/framework-reference.md +131 -0
- package/dist/prompts/skills/refactor.md +6 -0
- package/dist/prompts/summary.md +22 -0
- package/dist/prompts/tools/framework-capabilities.md +241 -0
- package/dist/prompts/tools/tool-rules.md +15 -0
- package/dist/provider/anthropic.d.ts +62 -0
- package/dist/provider/anthropic.js +361 -0
- package/dist/provider/catalog.d.ts +58 -0
- package/dist/provider/catalog.js +97 -0
- package/dist/provider/compatible.d.ts +89 -0
- package/dist/provider/compatible.js +328 -0
- package/dist/provider/config.d.ts +23 -0
- package/dist/provider/config.js +158 -0
- package/dist/provider/deepseek.d.ts +25 -0
- package/dist/provider/deepseek.js +37 -0
- package/dist/provider/fallback.d.ts +51 -0
- package/dist/provider/fallback.js +113 -0
- package/dist/provider/gemini.d.ts +27 -0
- package/dist/provider/gemini.js +170 -0
- package/dist/provider/index.d.ts +36 -0
- package/dist/provider/index.js +42 -0
- package/dist/provider/interface.d.ts +62 -0
- package/dist/provider/interface.js +2 -0
- package/dist/provider/local-config.d.ts +37 -0
- package/dist/provider/local-config.js +146 -0
- package/dist/provider/local.d.ts +45 -0
- package/dist/provider/local.js +248 -0
- package/dist/provider/manager.d.ts +67 -0
- package/dist/provider/manager.js +355 -0
- package/dist/provider/mimo.d.ts +19 -0
- package/dist/provider/mimo.js +30 -0
- package/dist/provider/minimax.d.ts +22 -0
- package/dist/provider/minimax.js +33 -0
- package/dist/provider/model-catalog-loader.d.ts +42 -0
- package/dist/provider/model-catalog-loader.js +89 -0
- package/dist/provider/model-channel-registry.d.ts +130 -0
- package/dist/provider/model-channel-registry.js +488 -0
- package/dist/provider/model-router.d.ts +60 -0
- package/dist/provider/model-router.js +87 -0
- package/dist/provider/openai.d.ts +54 -0
- package/dist/provider/openai.js +274 -0
- package/dist/provider/qwen.d.ts +19 -0
- package/dist/provider/qwen.js +30 -0
- package/dist/provider/resilient.d.ts +46 -0
- package/dist/provider/resilient.js +181 -0
- package/dist/provider/retry.d.ts +16 -0
- package/dist/provider/retry.js +78 -0
- package/dist/provider/router.d.ts +68 -0
- package/dist/provider/router.js +145 -0
- package/dist/provider/tool-args-recovery.d.ts +36 -0
- package/dist/provider/tool-args-recovery.js +91 -0
- package/dist/provider/user-id.d.ts +13 -0
- package/dist/provider/user-id.js +53 -0
- package/dist/provider/zhipu.d.ts +19 -0
- package/dist/provider/zhipu.js +32 -0
- package/dist/registry/agent.registry.d.ts +57 -0
- package/dist/registry/agent.registry.js +224 -0
- package/dist/registry/base.d.ts +54 -0
- package/dist/registry/base.js +99 -0
- package/dist/registry/channel.registry.d.ts +53 -0
- package/dist/registry/channel.registry.js +87 -0
- package/dist/registry/index.d.ts +9 -0
- package/dist/registry/index.js +10 -0
- package/dist/registry/mcp.registry.d.ts +2 -0
- package/dist/registry/mcp.registry.js +2 -0
- package/dist/registry/plugin.registry.d.ts +33 -0
- package/dist/registry/plugin.registry.js +66 -0
- package/dist/registry/provider.registry.d.ts +51 -0
- package/dist/registry/provider.registry.js +104 -0
- package/dist/registry/skill.registry.d.ts +33 -0
- package/dist/registry/skill.registry.js +95 -0
- package/dist/registry/tool.registry.d.ts +68 -0
- package/dist/registry/tool.registry.js +185 -0
- package/dist/repair/loop-guard.d.ts +98 -0
- package/dist/repair/loop-guard.js +217 -0
- package/dist/repair/scavenge.d.ts +19 -0
- package/dist/repair/scavenge.js +81 -0
- package/dist/repair/storm.d.ts +7 -0
- package/dist/repair/storm.js +7 -0
- package/dist/rollback/index.d.ts +5 -0
- package/dist/rollback/index.js +4 -0
- package/dist/rollback/rollback-tool.d.ts +13 -0
- package/dist/rollback/rollback-tool.js +167 -0
- package/dist/rollback/turn-recorder.d.ts +37 -0
- package/dist/rollback/turn-recorder.js +183 -0
- package/dist/rollback/turn-store.d.ts +29 -0
- package/dist/rollback/turn-store.js +114 -0
- package/dist/rollback/types.d.ts +51 -0
- package/dist/rollback/types.js +9 -0
- package/dist/runtime/config-center.d.ts +92 -0
- package/dist/runtime/config-center.js +467 -0
- package/dist/runtime/config-schema.d.ts +201 -0
- package/dist/runtime/config-schema.js +2 -0
- package/dist/runtime/defaults.d.ts +3 -0
- package/dist/runtime/defaults.js +146 -0
- package/dist/schedule/cron.d.ts +24 -0
- package/dist/schedule/cron.js +145 -0
- package/dist/schedule/index.d.ts +6 -0
- package/dist/schedule/index.js +4 -0
- package/dist/schedule/persistence.d.ts +33 -0
- package/dist/schedule/persistence.js +106 -0
- package/dist/schedule/scheduler.d.ts +85 -0
- package/dist/schedule/scheduler.js +630 -0
- package/dist/schedule/types.d.ts +185 -0
- package/dist/schedule/types.js +2 -0
- package/dist/setup/config.d.ts +189 -0
- package/dist/setup/config.js +253 -0
- package/dist/setup/index.d.ts +3 -0
- package/dist/setup/index.js +3 -0
- package/dist/setup/model-defaults.d.ts +13 -0
- package/dist/setup/model-defaults.js +87 -0
- package/dist/setup/persona-bootstrap.d.ts +42 -0
- package/dist/setup/persona-bootstrap.js +379 -0
- package/dist/setup/wizard.d.ts +32 -0
- package/dist/setup/wizard.js +384 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.js +4 -0
- package/dist/skills/loader.d.ts +12 -0
- package/dist/skills/loader.js +83 -0
- package/dist/skills/registry.d.ts +2 -0
- package/dist/skills/registry.js +2 -0
- package/dist/skills/skill-tool.d.ts +20 -0
- package/dist/skills/skill-tool.js +49 -0
- package/dist/tools/archive.d.ts +17 -0
- package/dist/tools/archive.js +131 -0
- package/dist/tools/ask-user.d.ts +9 -0
- package/dist/tools/ask-user.js +62 -0
- package/dist/tools/background-registry.d.ts +45 -0
- package/dist/tools/background-registry.js +164 -0
- package/dist/tools/bash.d.ts +56 -0
- package/dist/tools/bash.js +391 -0
- package/dist/tools/bundle-registry.d.ts +42 -0
- package/dist/tools/bundle-registry.js +239 -0
- package/dist/tools/bundle-tools.d.ts +11 -0
- package/dist/tools/bundle-tools.js +168 -0
- package/dist/tools/channel-info.d.ts +5 -0
- package/dist/tools/channel-info.js +38 -0
- package/dist/tools/compression.d.ts +7 -0
- package/dist/tools/compression.js +21 -0
- package/dist/tools/config.d.ts +23 -0
- package/dist/tools/config.js +255 -0
- package/dist/tools/db-query.d.ts +12 -0
- package/dist/tools/db-query.js +107 -0
- package/dist/tools/diagnostics.d.ts +30 -0
- package/dist/tools/diagnostics.js +111 -0
- package/dist/tools/diff-channel.d.ts +9 -0
- package/dist/tools/diff-channel.js +17 -0
- package/dist/tools/diff-files.d.ts +17 -0
- package/dist/tools/diff-files.js +88 -0
- package/dist/tools/disk-usage.d.ts +34 -0
- package/dist/tools/disk-usage.js +258 -0
- package/dist/tools/edit.d.ts +30 -0
- package/dist/tools/edit.js +235 -0
- package/dist/tools/executor.d.ts +32 -0
- package/dist/tools/executor.js +66 -0
- package/dist/tools/file-tracker.d.ts +20 -0
- package/dist/tools/file-tracker.js +44 -0
- package/dist/tools/filtered-registry.d.ts +29 -0
- package/dist/tools/filtered-registry.js +50 -0
- package/dist/tools/flow.d.ts +10 -0
- package/dist/tools/flow.js +180 -0
- package/dist/tools/git-tool.d.ts +24 -0
- package/dist/tools/git-tool.js +113 -0
- package/dist/tools/glob.d.ts +29 -0
- package/dist/tools/glob.js +152 -0
- package/dist/tools/grep.d.ts +14 -0
- package/dist/tools/grep.js +325 -0
- package/dist/tools/http-request.d.ts +14 -0
- package/dist/tools/http-request.js +126 -0
- package/dist/tools/index.d.ts +43 -0
- package/dist/tools/index.js +76 -0
- package/dist/tools/injection-filter.d.ts +6 -0
- package/dist/tools/injection-filter.js +71 -0
- package/dist/tools/insert.d.ts +13 -0
- package/dist/tools/insert.js +61 -0
- package/dist/tools/interface.d.ts +30 -0
- package/dist/tools/interface.js +2 -0
- package/dist/tools/json-edit.d.ts +15 -0
- package/dist/tools/json-edit.js +122 -0
- package/dist/tools/multi-edit.d.ts +9 -0
- package/dist/tools/multi-edit.js +146 -0
- package/dist/tools/path-sandbox.d.ts +14 -0
- package/dist/tools/path-sandbox.js +60 -0
- package/dist/tools/process-tools.d.ts +15 -0
- package/dist/tools/process-tools.js +95 -0
- package/dist/tools/python-bridge/bridge.d.ts +24 -0
- package/dist/tools/python-bridge/bridge.js +39 -0
- package/dist/tools/python-bridge/executor.d.ts +6 -0
- package/dist/tools/python-bridge/executor.js +69 -0
- package/dist/tools/python-bridge/index.d.ts +5 -0
- package/dist/tools/python-bridge/index.js +4 -0
- package/dist/tools/python-bridge/parser.d.ts +21 -0
- package/dist/tools/python-bridge/parser.js +258 -0
- package/dist/tools/read.d.ts +16 -0
- package/dist/tools/read.js +276 -0
- package/dist/tools/registry.d.ts +2 -0
- package/dist/tools/registry.js +2 -0
- package/dist/tools/restart.d.ts +10 -0
- package/dist/tools/restart.js +46 -0
- package/dist/tools/result-buffer.d.ts +66 -0
- package/dist/tools/result-buffer.js +146 -0
- package/dist/tools/runtime-control.d.ts +163 -0
- package/dist/tools/runtime-control.js +1780 -0
- package/dist/tools/symbol-references.d.ts +5 -0
- package/dist/tools/symbol-references.js +331 -0
- package/dist/tools/system-info.d.ts +3 -0
- package/dist/tools/system-info.js +55 -0
- package/dist/tools/write.d.ts +18 -0
- package/dist/tools/write.js +118 -0
- package/dist/tools/xref/index.d.ts +25 -0
- package/dist/tools/xref/index.js +25 -0
- package/dist/tools/xref/manager.d.ts +85 -0
- package/dist/tools/xref/manager.js +948 -0
- package/dist/tools/xref/parser.d.ts +34 -0
- package/dist/tools/xref/parser.js +64 -0
- package/dist/tools/xref/regex-parser.d.ts +26 -0
- package/dist/tools/xref/regex-parser.js +446 -0
- package/dist/tools/xref/schema.d.ts +104 -0
- package/dist/tools/xref/schema.js +68 -0
- package/dist/tools/xref/ts-parser.d.ts +20 -0
- package/dist/tools/xref/ts-parser.js +403 -0
- package/dist/tools/xref/xref-build.d.ts +20 -0
- package/dist/tools/xref/xref-build.js +128 -0
- package/dist/tools/xref/xref-graph.d.ts +24 -0
- package/dist/tools/xref/xref-graph.js +88 -0
- package/dist/tools/xref/xref-query.d.ts +30 -0
- package/dist/tools/xref/xref-query.js +123 -0
- package/dist/types.d.ts +217 -0
- package/dist/types.js +2 -0
- package/dist/ui/assistant-message.d.ts +7 -0
- package/dist/ui/assistant-message.js +18 -0
- package/dist/ui/chat-log.d.ts +52 -0
- package/dist/ui/chat-log.js +246 -0
- package/dist/ui/command-registry.d.ts +73 -0
- package/dist/ui/command-registry.js +838 -0
- package/dist/ui/diff-component.d.ts +14 -0
- package/dist/ui/diff-component.js +42 -0
- package/dist/ui/hyperlink-markdown.d.ts +10 -0
- package/dist/ui/hyperlink-markdown.js +21 -0
- package/dist/ui/markdown-message.d.ts +10 -0
- package/dist/ui/markdown-message.js +16 -0
- package/dist/ui/osc8-hyperlinks.d.ts +4 -0
- package/dist/ui/osc8-hyperlinks.js +142 -0
- package/dist/ui/pi-tui-editor.d.ts +35 -0
- package/dist/ui/pi-tui-editor.js +79 -0
- package/dist/ui/slash-commands.d.ts +16 -0
- package/dist/ui/slash-commands.js +29 -0
- package/dist/ui/slash-panel.d.ts +54 -0
- package/dist/ui/slash-panel.js +199 -0
- package/dist/ui/theme.d.ts +120 -0
- package/dist/ui/theme.js +154 -0
- package/dist/ui/tool-display.d.ts +13 -0
- package/dist/ui/tool-display.js +85 -0
- package/dist/ui/tool-execution.d.ts +22 -0
- package/dist/ui/tool-execution.js +87 -0
- package/dist/ui/tui-formatters.d.ts +2 -0
- package/dist/ui/tui-formatters.js +145 -0
- package/dist/ui/user-message.d.ts +5 -0
- package/dist/ui/user-message.js +11 -0
- package/dist/update/check.d.ts +8 -0
- package/dist/update/check.js +28 -0
- package/dist/update/config.d.ts +6 -0
- package/dist/update/config.js +18 -0
- package/dist/update/download.d.ts +3 -0
- package/dist/update/download.js +27 -0
- package/dist/update/index.d.ts +6 -0
- package/dist/update/index.js +5 -0
- package/dist/update/install.d.ts +3 -0
- package/dist/update/install.js +33 -0
- package/dist/update/types.d.ts +16 -0
- package/dist/update/types.js +2 -0
- package/dist/utils/diff.d.ts +9 -0
- package/dist/utils/diff.js +45 -0
- package/dist/utils/misc.d.ts +12 -0
- package/dist/utils/misc.js +34 -0
- package/dist/world-engine/agent.d.ts +41 -0
- package/dist/world-engine/agent.js +385 -0
- package/dist/world-engine/index.d.ts +45 -0
- package/dist/world-engine/index.js +160 -0
- package/dist/world-engine/sim.d.ts +14 -0
- package/dist/world-engine/sim.js +120 -0
- package/dist/world-engine/store.d.ts +110 -0
- package/dist/world-engine/store.js +519 -0
- package/dist/world-engine/ticker.d.ts +37 -0
- package/dist/world-engine/ticker.js +214 -0
- package/dist/world-engine/tools.d.ts +6 -0
- package/dist/world-engine/tools.js +380 -0
- package/dist/world-engine/types.d.ts +202 -0
- package/dist/world-engine/types.js +56 -0
- package/docs/api.md +180 -0
- package/docs/architecture.md +206 -0
- package/docs/diagnostics/2026-06-08-config-prompt-guidance.md +67 -0
- package/docs/superpowers/plans/2026-06-08-global-bootstrap-mode.md +89 -0
- package/docs/superpowers/specs/2026-06-08-global-bootstrap-mode-design.md +174 -0
- package/docs/user-guide.md +226 -0
- package/package.json +63 -0
- package/plugins/example-greeter/index.js +55 -0
- package/plugins/example-greeter/plugin.json +8 -0
- package/pnpm-workspace.yaml +5 -0
- package/provider_arch.md +179 -0
- package/start-webui.sh +27 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/webui-channel-design.md +789 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
你可以管理自己的运行环境。以下是可用的能力和可修改的配置文件。
|
|
2
|
+
|
|
3
|
+
## 模型
|
|
4
|
+
|
|
5
|
+
**切换模型:**
|
|
6
|
+
- `list_providers` — 查看可用模型列表
|
|
7
|
+
- `provider_info` — 当前模型详情(含 fallback 状态)
|
|
8
|
+
- `switch_provider` — 切换模型,name 为 provider 类型
|
|
9
|
+
- `switch_to_auto_route` — 切回自动路由
|
|
10
|
+
|
|
11
|
+
**可用 provider:** `anthropic` | `openai` | `deepseek` | `gemini` | `groq` | `xai` | `mistral` | `openrouter` | `moonshot` | `qwen` | `zhipu` | `minimax` | `mimo` | `local`
|
|
12
|
+
|
|
13
|
+
**本地模型 (`local`):** 系统自动检测 Ollama 或 llama.cpp。切到本地时使用 `switch_provider name="local"`。无需指定后端或模型名——后端类型和连接地址由系统自动检测。本地模型数据不外传,适合隐私敏感任务。
|
|
14
|
+
|
|
15
|
+
**何时切换:**
|
|
16
|
+
- 当前在线模型连续失败 → 系统自动降级,你无需操作
|
|
17
|
+
- 用户要求使用本地模型 / 离线 / 隐私 → `switch_provider name="local"`
|
|
18
|
+
- 简单任务想省配额 → 主动建议切到本地
|
|
19
|
+
- 降级链已切到本地 → `provider_info` 会显示 `on_fallback: true`,告知用户即可
|
|
20
|
+
|
|
21
|
+
## 多通道模型路由
|
|
22
|
+
|
|
23
|
+
系统支持 N 通道模型路由:不同角色(主对话、压缩器、子 Agent 等)可以各自使用不同的 Provider 和模型。配置在 `.agent/model-channels.json`:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"channels": {
|
|
28
|
+
"main": { "provider": "deepseek", "model": "deepseek-v4-flash" },
|
|
29
|
+
"compression": { "provider": "deepseek", "model": "deepseek-v4-pro" },
|
|
30
|
+
"sub-agent": { "provider": "local", "model": "qwen3.5:9b" }
|
|
31
|
+
},
|
|
32
|
+
"roles": {
|
|
33
|
+
"assessment": "main",
|
|
34
|
+
"planning": "main",
|
|
35
|
+
"compression": "compression",
|
|
36
|
+
"sub-agent": "sub-agent"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**通道管理工具(7 个):**
|
|
42
|
+
|
|
43
|
+
- `list_model_channels` — 列出所有通道及角色映射
|
|
44
|
+
- `add_model_channel` — 新增通道(name 必填,provider 必填,model 可选)。一个通道 = 一个 Provider + 模型组合
|
|
45
|
+
- `remove_model_channel` — 删除通道(main 不可删除)
|
|
46
|
+
- `set_channel_role` — 将角色(assessment/planning/compression/sub-agent)映射到指定通道
|
|
47
|
+
- `set_channel_model` — **运行时**切换某通道当前使用的 Provider/模型(不持久化,重启恢复)
|
|
48
|
+
- `reset_channel_model` — 取消运行时覆盖,恢复为 `model-channels.json` 配置
|
|
49
|
+
- `channel_info` — 查看指定通道详情(provider、模型、角色映射)
|
|
50
|
+
|
|
51
|
+
**TUI 管理:** 用户可通过 `/channel` 面板操作(add/remove/role/list,选中通道后 info/model/reset)。
|
|
52
|
+
|
|
53
|
+
**接口复用:** 多个角色可共享一个通道,只需在 `roles` 中指向同一个 channel 名。
|
|
54
|
+
|
|
55
|
+
**压缩:**
|
|
56
|
+
- 压缩通过独立 compression 通道(独立 userId)执行,不影响主对话的 KV 缓存。
|
|
57
|
+
- `trigger_compression` 工具可在对话过长时主动触发压缩。
|
|
58
|
+
|
|
59
|
+
## 知识库
|
|
60
|
+
|
|
61
|
+
当 Zone 4 已开启时,知识库自动检索并注入上下文,你无需手动搜索。使用 `kb_structured` 工具管理知识库(通过 action 参数区分操作):
|
|
62
|
+
|
|
63
|
+
- `kb_structured` action=add — 结构化写入条目(id、title、tags、category、content ≤200字、refs),一次可写 1-10 条
|
|
64
|
+
- `kb_structured` action=update — 按 id 更新条目
|
|
65
|
+
- `kb_structured` action=delete — 删除条目
|
|
66
|
+
- `kb_structured` action=list — 列出已有条目
|
|
67
|
+
|
|
68
|
+
**使用时机:**
|
|
69
|
+
- 用户让你"记住"、"存下来"、"加入知识库" → 用 `kb_structured` action=add
|
|
70
|
+
- 读到有价值的资料(API 文档、配置说明、技术笔记)→ 主动提炼为结构化条目写入
|
|
71
|
+
- 发现知识库缺漏 → 补充新条目
|
|
72
|
+
- 用户问的问题知识库有答案但不够精确 → 优化已有条目的 tags/content
|
|
73
|
+
|
|
74
|
+
**关键原则:**
|
|
75
|
+
- id 用英文下划线(如 `api_create_thread`)
|
|
76
|
+
- tags 2-5 个精确关键词——用户输入中包含这些词时自动匹配
|
|
77
|
+
- content 不超过 200 字——只要核心信息
|
|
78
|
+
- refs 关联相关条目 ID——检索时会自动扩展
|
|
79
|
+
|
|
80
|
+
## 工具 / Skill / 子 Agent
|
|
81
|
+
- `list_tools` / `toggle_tool <name> <enabled>` — 查看和启停工具
|
|
82
|
+
- `list_skills` / `toggle_skill <name> <enabled>` — 查看和启停 Skill
|
|
83
|
+
- `list_sub_agents` / `toggle_sub_agent <name> <enabled>` — 管理子 Agent
|
|
84
|
+
- `spawn_sub_agent <name>` — 派生子 Agent 执行独立任务
|
|
85
|
+
|
|
86
|
+
### Skill 文件规范
|
|
87
|
+
|
|
88
|
+
外部 Skill 放在 `.agent/skills/*.md`,**必须有 YAML frontmatter**:
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
---
|
|
92
|
+
name: skill-name
|
|
93
|
+
description: 一句话描述
|
|
94
|
+
tools: tool1,tool2
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
正文内容...
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
- `name` 必填,否则不加载
|
|
101
|
+
- `tools` 可选,逗号分隔
|
|
102
|
+
- 修改/删除 skill 文件即时生效(热加载),无需重启
|
|
103
|
+
|
|
104
|
+
## MCP(扩展外部工具)
|
|
105
|
+
- MCP Server 配置在 `.agent/mcp.json`,支持 stdio(本地进程)和 SSE(远程服务)两种方式
|
|
106
|
+
- MCP 工具直接调用即可,命名格式为 `mcp__{server}__{tool}`
|
|
107
|
+
- `mcp_status` — 查询所有 MCP Server 的连接状态
|
|
108
|
+
- 当用户需求超出当前能力时(数据库、特定 API、文件系统等),主动建议配置 MCP Server
|
|
109
|
+
- 不允许用 shell 命令(bash/cmd/powershell)作为 MCP Server
|
|
110
|
+
|
|
111
|
+
## 运行配置
|
|
112
|
+
- `get_config <path>` / `update_config <path> <value>` / `reset_config <path>` — 读写配置
|
|
113
|
+
- `config_schema` — 查看完整配置结构
|
|
114
|
+
|
|
115
|
+
运行时配置适合修改 RuntimeConfigCenter 已支持的路径,例如:
|
|
116
|
+
|
|
117
|
+
| 配置 | 常见路径 |
|
|
118
|
+
|------|----------|
|
|
119
|
+
| 当前 Provider | `provider.active` |
|
|
120
|
+
| 路由模式 | `provider.routeMode` |
|
|
121
|
+
| Provider 模型 | `provider.<provider>.model` |
|
|
122
|
+
| thinking/reasoning | `provider.enableThinking` |
|
|
123
|
+
| 会话轮次/上下文 | `session.maxTurns` / `session.maxContext` |
|
|
124
|
+
| 安全确认/允许命令 | `safety.requireConfirmation` / `safety.allowedCommands` |
|
|
125
|
+
| 工具/Skill 禁用 | `tools.disabled` / `skills.disabled` |
|
|
126
|
+
| 工具结果缓冲 | `tools.resultBuffer.*` |
|
|
127
|
+
| 上下文压缩阈值 | `context.compressThreshold` |
|
|
128
|
+
|
|
129
|
+
| 紧急压缩阈值 | `context.emergencyThreshold` |
|
|
130
|
+
| 压缩激进程度 | `context.compressDepth` |
|
|
131
|
+
| 子 Agent 模型路由 | `models.assessment` / `models.planning` / `models.compression` |
|
|
132
|
+
| 日志/热重载 | `logging.level` / `hotReload.*` |
|
|
133
|
+
|
|
134
|
+
当用户要求修改框架设置时:
|
|
135
|
+
1. 先用 `get_config` 或 `config_schema` 确认当前值和可用路径
|
|
136
|
+
2. 如果路径在 schema 中,优先用 `update_config`(即时生效,无需重启)
|
|
137
|
+
3. 如果目标是未进入 schema 的项目文件配置,改用 `read` + `write` 直接修改对应 JSON
|
|
138
|
+
4. 写 JSON 前必须保留已有字段,只合并用户要求的部分
|
|
139
|
+
5. 不要随意调用 `restart`——仅 `channels` 配置和本地模型需要重启,其他变更均为热加载即时生效
|
|
140
|
+
|
|
141
|
+
## 项目文件配置
|
|
142
|
+
|
|
143
|
+
以下配置通常不通过 `update_config` 修改,而是直接编辑项目 `.agent/` 下的文件:
|
|
144
|
+
|
|
145
|
+
| 需求 | 文件 | 写法 | 生效方式 |
|
|
146
|
+
|------|------|------|----------|
|
|
147
|
+
| 渠道(飞书/Lark 等) | `.agent/config.json` | 修改根对象的 `channels` 字段 | **需重启**:调用 `restart` 工具 |
|
|
148
|
+
| MCP Server | `.agent/mcp.json` | 添加或更新 server 定义 | **热加载**:保存后自动检测,无需重启 |
|
|
149
|
+
| 工具包 | `.agent/tool-bundles.json` | 优先用 `list_bundles` / `activate_bundle` / `create_bundle` 等工具 | **热加载**:即时生效 |
|
|
150
|
+
| Provider 元数据 | `.agent/providers.json` | 修改 provider 的 baseUrl、defaultModel、envKey、maxTokens | **热加载**:即时生效 |
|
|
151
|
+
| 本地模型 | `.agent/models.json` 或 `.agent/local-models.json` | 配置本地模型启动项 | **需重启**:模型进程管理在启动时进行 |
|
|
152
|
+
| 本地 Provider 默认值 | `config.json` 的 `local` 和 `provider.local` 段 | 配置 baseUrl、port、defaultModel、maxTokens | **热加载**:即时生效 |
|
|
153
|
+
| 子 Agent 定义 | `.agent/agents.json` | 添加或更新 Agent 定义 | **热加载**:即时生效 |
|
|
154
|
+
| 跨会话记忆 | `~/.agent/prompts/persona/memory.md`(可在 config.json 的 `memoryFile` 中配置) | 用户要求记下时,编辑此文件写入或整理。 | **热加载**:即时生效 |
|
|
155
|
+
|
|
156
|
+
> **生效规则**:只有 `channels` 和本地模型需要重启,其余配置(MCP、工具、Skill、子 Agent、Provider)均为热加载,修改后即时生效,不需要调 `restart`。
|
|
157
|
+
| 身份提示词 | `~/.agent/prompts/persona/*.md` | 修改全局身份文件;有项目覆写时按项目要求处理 |
|
|
158
|
+
| 陪伴模式提示词 | `~/.agent/prompts/persona/PartnerSoul.md` | 陪伴模式提示词位置,通过工具切换模式 |
|
|
159
|
+
|
|
160
|
+
### 渠道配置
|
|
161
|
+
|
|
162
|
+
渠道配置写在项目级 `.agent/config.json` 的 `channels` 字段中。配置飞书或 Lark 时,读取并合并完整 JSON,例如:
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
{
|
|
166
|
+
"channels": {
|
|
167
|
+
"feishu": {
|
|
168
|
+
"enabled": true,
|
|
169
|
+
"appId": "cli_xxxxxxxxxxxx",
|
|
170
|
+
"appSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
171
|
+
"domain": "feishu",
|
|
172
|
+
"dmPolicy": "open",
|
|
173
|
+
"requireMention": true
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
配置渠道时:
|
|
180
|
+
1. 优先修改当前工作区的 `.agent/config.json`
|
|
181
|
+
2. 先读取现有 JSON,保留 provider、session、safety 等已有配置
|
|
182
|
+
3. 合并或新增 `channels.<channelName>`
|
|
183
|
+
4. 用 `write` 写回完整 JSON
|
|
184
|
+
5. 不要用 `update_config` 写 `channels`,除非 `config_schema` 明确包含该路径
|
|
185
|
+
|
|
186
|
+
## 会话
|
|
187
|
+
- `interrupt` — 中断当前长任务
|
|
188
|
+
- `session_stats` — 当前会话统计
|
|
189
|
+
- `/session list` 查看历史会话,`/session <完整ID>/load` 加载指定会话
|
|
190
|
+
- ⚠️ session ID 必须完整复制(格式: `YYYYMMDD-HHMMSS-xxxx`),不可自己拼接或转换为日期
|
|
191
|
+
|
|
192
|
+
## 可编辑的配置文件
|
|
193
|
+
|
|
194
|
+
以下文件可通过 `read` + `write` 直接修改:
|
|
195
|
+
|
|
196
|
+
| 文件 | 用途 |
|
|
197
|
+
|------|------|
|
|
198
|
+
| `.agent/config.json` | 运行时配置(provider、model、maxContext 等) |
|
|
199
|
+
| `.agent/mcp.json` | MCP 服务器 |
|
|
200
|
+
| `.agent/agents.json` | 子 Agent 定义 |
|
|
201
|
+
| `.agent/providers.json` | Provider API 配置 |
|
|
202
|
+
| `.agent/model-channels.json` | 多通道模型路由(角色→通道→Provider) |
|
|
203
|
+
| `.agent/tool-bundles.json` | 工具包配置 |
|
|
204
|
+
| `config.json` (`local` / `provider.local`) | 本地 Provider 默认配置 |
|
|
205
|
+
| `.agent/models.json` | 本地模型配置 |
|
|
206
|
+
| `.agent/skills/*.md` | Skill 提示词 |
|
|
207
|
+
| `.agent/tools/*.js` | 动态工具(JavaScript) |
|
|
208
|
+
| `.agent/tools/*.py` | 动态工具(Python) |
|
|
209
|
+
|
|
210
|
+
## 动态工具
|
|
211
|
+
|
|
212
|
+
可以将 `.js` 或 `.py` 脚本放入 `.agent/tools/` 目录,热加载为可调用工具。
|
|
213
|
+
|
|
214
|
+
### JavaScript 工具(`.js`)
|
|
215
|
+
|
|
216
|
+
需实现 Tool 接口的四个字段(`name`、`description`、`inputSchema`、`execute`)。
|
|
217
|
+
|
|
218
|
+
### Python 工具(`.py`)
|
|
219
|
+
|
|
220
|
+
在文件顶部写 docstring 声明元信息:
|
|
221
|
+
|
|
222
|
+
```python
|
|
223
|
+
"""
|
|
224
|
+
name: my_tool
|
|
225
|
+
description: 工具描述
|
|
226
|
+
parameters:
|
|
227
|
+
type: object
|
|
228
|
+
properties:
|
|
229
|
+
arg1: {type: string, description: 参数1}
|
|
230
|
+
required: [arg1]
|
|
231
|
+
"""
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
- 参数通过 stdin 传入 JSON,输出打印到 stdout
|
|
235
|
+
- 文件放入 `.agent/tools/` 后即时热加载,无需重启
|
|
236
|
+
|
|
237
|
+
## 原则
|
|
238
|
+
|
|
239
|
+
1. 修改配置前告知用户当前值和将要改成的值
|
|
240
|
+
2. 不要在没有用户明确请求的情况下擅自修改框架配置
|
|
241
|
+
3. 不要在配置文件中写入 API Key
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
工具使用规则:
|
|
2
|
+
- 并行调用:当需要多个独立工具(结果互不依赖)时,在一次回复中同时发出所有调用。
|
|
3
|
+
比如同时读3个文件、同时搜索2个模式、同时执行互不依赖的命令。
|
|
4
|
+
不要逐一轮询独立调用——这浪费对话轮次和API开销。
|
|
5
|
+
- Edit — 局部修改文件,而不是重写整个文件
|
|
6
|
+
- 任务复杂时先制定计划再执行
|
|
7
|
+
- list_bundles — 查看所有工具包
|
|
8
|
+
- activate_bundle <name> — 激活指定工具包(限制可用工具)
|
|
9
|
+
- deactivate_bundle — 取消所有工具包限制,回到全量模式(默认状态)
|
|
10
|
+
|
|
11
|
+
MCP 工具使用规范:
|
|
12
|
+
- MCP 工具名格式为 mcp__{server}__{tool},调用前确认 Server 已连接
|
|
13
|
+
- 标注 [side-effect] 的工具可能产生不可逆操作(如打开浏览器、创建资源),调用前评估必要性
|
|
14
|
+
- 对有状态的工具(如浏览器、数据库连接),先检查已有状态再操作,避免重复创建实例
|
|
15
|
+
- 如果 MCP 工具返回连接错误,不要重试,报告给用户
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Message, StreamEvent, ProviderType, ProviderConfig, ToolDefinition } from '../types.js';
|
|
2
|
+
import type { Provider, ProviderCapabilities } from './interface.js';
|
|
3
|
+
/** AnthropicProvider 构造选项(在 ProviderConfig 基础上扩展) */
|
|
4
|
+
export interface AnthropicProviderOptions {
|
|
5
|
+
/** 必须提供 apiKey,或通过 ANTHROPIC_API_KEY 环境变量自动读取 */
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
/** 可选自定义 base URL(代理/企业端点) */
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
/** 模型名称,默认 claude-sonnet-4-20250514 */
|
|
10
|
+
model?: string;
|
|
11
|
+
/** 单次请求最大输出 token 数。兼容旧键名 maxTokens。 */
|
|
12
|
+
maxOutputTokens?: number;
|
|
13
|
+
/** @deprecated 使用 maxOutputTokens */
|
|
14
|
+
maxTokens?: number;
|
|
15
|
+
/** 是否启用 extended thinking,默认 false */
|
|
16
|
+
thinkingEnabled?: boolean;
|
|
17
|
+
/** thinking 预算 token 数,默认 10000(仅在 thinkingEnabled=true 时生效) */
|
|
18
|
+
thinkingBudget?: number;
|
|
19
|
+
/** 覆盖 ProviderType(MiniMax/Qwen/Zhipu/MiMo 等兼容协议用) */
|
|
20
|
+
providerType?: ProviderType;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Anthropic Provider — 通过 @anthropic-ai/sdk 实现流式调用。
|
|
24
|
+
*
|
|
25
|
+
* 支持:
|
|
26
|
+
* - Extended Thinking(thinking 模式)
|
|
27
|
+
* - Prompt Caching(cache_control 标记)— message 层面的断点由 context/cache-strategy.ts 统一管理
|
|
28
|
+
* - 流式返回 StreamEvent(TEXT / THINKING / TOOL_USE / USAGE / STOP)
|
|
29
|
+
*/
|
|
30
|
+
export declare class AnthropicProvider implements Provider {
|
|
31
|
+
private client;
|
|
32
|
+
private model;
|
|
33
|
+
private maxTokens;
|
|
34
|
+
private thinkingEnabled;
|
|
35
|
+
private thinkingBudget;
|
|
36
|
+
private _providerType;
|
|
37
|
+
constructor(opts?: AnthropicProviderOptions);
|
|
38
|
+
getProviderType(): ProviderType;
|
|
39
|
+
getModel(): string;
|
|
40
|
+
getCapabilities(): ProviderCapabilities;
|
|
41
|
+
/** 运行时切换 thinking 模式 */
|
|
42
|
+
setThinking(enabled: boolean, budget?: number): void;
|
|
43
|
+
createStream(messages: Message[], tools?: ToolDefinition[], signal?: AbortSignal): AsyncIterable<StreamEvent>;
|
|
44
|
+
/**
|
|
45
|
+
* 从消息列表中提取 system 消息和 user/assistant 消息。
|
|
46
|
+
*
|
|
47
|
+
* Anthropic API 要求 system prompt 通过 `system` 参数传递,
|
|
48
|
+
* 不能出现在 messages 数组中。此方法将 role='system' 的消息提取出来,
|
|
49
|
+
* 拼接为 system 字符串或 TextBlockParam 数组(含 cache_control 时),
|
|
50
|
+
* 仅 role='user' 和 role='assistant' 的消息进入 messages 数组。
|
|
51
|
+
*/
|
|
52
|
+
private extractSystemAndMessages;
|
|
53
|
+
/** 将内部 Message[] 转换为 Anthropic MessageParam[](已废弃,保留兼容) */
|
|
54
|
+
private convertMessages;
|
|
55
|
+
/** 转换内容块,必要时添加 cache_control 标记 */
|
|
56
|
+
private convertContentBlocks;
|
|
57
|
+
/** 将内部 ToolDefinition[] 转换为 Anthropic Tool[] */
|
|
58
|
+
private convertTools;
|
|
59
|
+
}
|
|
60
|
+
/** 便捷工厂:从 ProviderConfig 创建 AnthropicProvider */
|
|
61
|
+
export declare function createAnthropicProvider(config: ProviderConfig): AnthropicProvider;
|
|
62
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { getModelInfo } from './catalog.js';
|
|
3
|
+
import { recoverToolArguments, logToolArgsWarning } from './tool-args-recovery.js';
|
|
4
|
+
/**
|
|
5
|
+
* Anthropic Provider — 通过 @anthropic-ai/sdk 实现流式调用。
|
|
6
|
+
*
|
|
7
|
+
* 支持:
|
|
8
|
+
* - Extended Thinking(thinking 模式)
|
|
9
|
+
* - Prompt Caching(cache_control 标记)— message 层面的断点由 context/cache-strategy.ts 统一管理
|
|
10
|
+
* - 流式返回 StreamEvent(TEXT / THINKING / TOOL_USE / USAGE / STOP)
|
|
11
|
+
*/
|
|
12
|
+
export class AnthropicProvider {
|
|
13
|
+
client;
|
|
14
|
+
model;
|
|
15
|
+
maxTokens;
|
|
16
|
+
thinkingEnabled;
|
|
17
|
+
thinkingBudget;
|
|
18
|
+
_providerType;
|
|
19
|
+
constructor(opts = {}) {
|
|
20
|
+
this._providerType = opts.providerType ?? 'anthropic';
|
|
21
|
+
const isAnthropic = this._providerType === 'anthropic';
|
|
22
|
+
const apiKey = opts.apiKey ?? (isAnthropic ? process.env.ANTHROPIC_API_KEY : undefined);
|
|
23
|
+
if (!apiKey) {
|
|
24
|
+
const label = isAnthropic ? 'Anthropic' : this._providerType.toUpperCase();
|
|
25
|
+
const envVar = isAnthropic ? 'ANTHROPIC_API_KEY' : `${this._providerType.toUpperCase()}_API_KEY`;
|
|
26
|
+
throw new Error(`${label} API key is required. Set ${envVar} environment variable or pass apiKey in options.`);
|
|
27
|
+
}
|
|
28
|
+
this.client = new Anthropic({
|
|
29
|
+
apiKey,
|
|
30
|
+
baseURL: opts.baseUrl ?? process.env.ANTHROPIC_BASE_URL,
|
|
31
|
+
});
|
|
32
|
+
this.model = opts.model ?? 'claude-sonnet-4-20250514';
|
|
33
|
+
this.maxTokens = opts.maxOutputTokens // ① 临时覆盖
|
|
34
|
+
?? opts.maxTokens // 向后兼容
|
|
35
|
+
?? getModelInfo('anthropic', this.model)?.maxOutputTokens // ② 本机模型目录
|
|
36
|
+
?? 8192; // ③ 兜底
|
|
37
|
+
this.thinkingEnabled = opts.thinkingEnabled ?? false;
|
|
38
|
+
this.thinkingBudget = opts.thinkingBudget ?? 10000;
|
|
39
|
+
}
|
|
40
|
+
getProviderType() {
|
|
41
|
+
return this._providerType;
|
|
42
|
+
}
|
|
43
|
+
getModel() {
|
|
44
|
+
return this.model;
|
|
45
|
+
}
|
|
46
|
+
getCapabilities() {
|
|
47
|
+
const info = getModelInfo('anthropic', this.model);
|
|
48
|
+
return {
|
|
49
|
+
toolCalling: true,
|
|
50
|
+
streaming: true,
|
|
51
|
+
adapterSupport: false,
|
|
52
|
+
maxContextTokens: info?.contextWindow ?? 200000,
|
|
53
|
+
isLocal: false,
|
|
54
|
+
vision: info?.capabilities.vision ?? true, // Anthropic models mostly support vision
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** 运行时切换 thinking 模式 */
|
|
58
|
+
setThinking(enabled, budget = 10000) {
|
|
59
|
+
this.thinkingEnabled = enabled;
|
|
60
|
+
this.thinkingBudget = budget;
|
|
61
|
+
}
|
|
62
|
+
async *createStream(messages, tools, signal) {
|
|
63
|
+
// ---- 构建请求参数 ----
|
|
64
|
+
// 使用 MessageCreateParamsNonStreaming(stream 字段可选),stream() 方法内部会自动设置 stream: true
|
|
65
|
+
const { system, messages: filteredMessages } = this.extractSystemAndMessages(messages);
|
|
66
|
+
const params = {
|
|
67
|
+
model: this.model,
|
|
68
|
+
max_tokens: this.maxTokens,
|
|
69
|
+
messages: filteredMessages,
|
|
70
|
+
};
|
|
71
|
+
// system prompt(Anthropic API 要求通过 system 参数传递,不能出现在 messages 中)
|
|
72
|
+
if (system) {
|
|
73
|
+
params.system = system;
|
|
74
|
+
}
|
|
75
|
+
// tools
|
|
76
|
+
if (tools && tools.length > 0) {
|
|
77
|
+
params.tools = this.convertTools(tools);
|
|
78
|
+
}
|
|
79
|
+
// thinking
|
|
80
|
+
if (this.thinkingEnabled) {
|
|
81
|
+
params.thinking = {
|
|
82
|
+
type: 'enabled',
|
|
83
|
+
budget_tokens: this.thinkingBudget,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// ---- 流式消费 ----
|
|
87
|
+
const stream = this.client.messages.stream(params, { signal });
|
|
88
|
+
// 追踪正在构建的 tool_use
|
|
89
|
+
let currentToolUse = null;
|
|
90
|
+
// 累计 usage
|
|
91
|
+
let inputTokens = 0;
|
|
92
|
+
let outputTokens = 0;
|
|
93
|
+
let cacheReadInputTokens;
|
|
94
|
+
let cacheCreationInputTokens;
|
|
95
|
+
try {
|
|
96
|
+
for await (const event of stream) {
|
|
97
|
+
switch (event.type) {
|
|
98
|
+
// ---- message_start:获取初始 usage ----
|
|
99
|
+
case 'message_start': {
|
|
100
|
+
const usage = event.message.usage;
|
|
101
|
+
if (usage) {
|
|
102
|
+
inputTokens = usage.input_tokens;
|
|
103
|
+
if (usage.cache_read_input_tokens != null) {
|
|
104
|
+
cacheReadInputTokens = usage.cache_read_input_tokens;
|
|
105
|
+
}
|
|
106
|
+
if (usage.cache_creation_input_tokens != null) {
|
|
107
|
+
cacheCreationInputTokens = usage.cache_creation_input_tokens;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
// ---- content_block_start:检测 tool_use / thinking 块 ----
|
|
113
|
+
case 'content_block_start': {
|
|
114
|
+
const block = event.content_block;
|
|
115
|
+
if (block.type === 'tool_use') {
|
|
116
|
+
currentToolUse = {
|
|
117
|
+
id: block.id,
|
|
118
|
+
name: block.name,
|
|
119
|
+
inputJson: '',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
// thinking 块的起始没有内容需要 emit,等待 delta
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
// ---- content_block_delta:增量文本 / thinking / tool input ----
|
|
126
|
+
case 'content_block_delta': {
|
|
127
|
+
const delta = event.delta;
|
|
128
|
+
if (delta.type === 'text_delta') {
|
|
129
|
+
yield { type: 'TEXT', content: delta.text };
|
|
130
|
+
}
|
|
131
|
+
else if (delta.type === 'thinking_delta') {
|
|
132
|
+
yield { type: 'THINKING', content: delta.thinking };
|
|
133
|
+
}
|
|
134
|
+
else if (delta.type === 'input_json_delta') {
|
|
135
|
+
if (currentToolUse) {
|
|
136
|
+
currentToolUse.inputJson += delta.partial_json;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
// ---- content_block_stop:完成 tool_use 块 ----
|
|
142
|
+
case 'content_block_stop': {
|
|
143
|
+
if (currentToolUse) {
|
|
144
|
+
const raw = currentToolUse.inputJson || '';
|
|
145
|
+
const { recovered, complete, error } = recoverToolArguments(raw, currentToolUse.name);
|
|
146
|
+
if (!complete) {
|
|
147
|
+
logToolArgsWarning('anthropic', currentToolUse.name, raw, error);
|
|
148
|
+
}
|
|
149
|
+
yield {
|
|
150
|
+
type: 'TOOL_USE',
|
|
151
|
+
id: currentToolUse.id,
|
|
152
|
+
name: currentToolUse.name,
|
|
153
|
+
input: recovered,
|
|
154
|
+
};
|
|
155
|
+
currentToolUse = null;
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
// ---- message_delta:stop_reason + output usage ----
|
|
160
|
+
case 'message_delta': {
|
|
161
|
+
if (event.usage) {
|
|
162
|
+
outputTokens = event.usage.output_tokens;
|
|
163
|
+
}
|
|
164
|
+
if (event.delta.stop_reason) {
|
|
165
|
+
// 先 emit USAGE,再 emit STOP
|
|
166
|
+
const usageEvent = {
|
|
167
|
+
type: 'USAGE',
|
|
168
|
+
input_tokens: inputTokens,
|
|
169
|
+
output_tokens: outputTokens,
|
|
170
|
+
};
|
|
171
|
+
if (cacheReadInputTokens != null) {
|
|
172
|
+
usageEvent.cache_read_input_tokens = cacheReadInputTokens;
|
|
173
|
+
}
|
|
174
|
+
if (cacheCreationInputTokens != null) {
|
|
175
|
+
usageEvent.cache_creation_input_tokens = cacheCreationInputTokens;
|
|
176
|
+
}
|
|
177
|
+
yield usageEvent;
|
|
178
|
+
yield { type: 'STOP', reason: event.delta.stop_reason };
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
// message_stop / 其他事件不需要特殊处理
|
|
183
|
+
default:
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (error instanceof Anthropic.APIError) {
|
|
190
|
+
throw new Error(`Anthropic API error (${error.status}): ${error.message}`);
|
|
191
|
+
}
|
|
192
|
+
if (error instanceof Error) {
|
|
193
|
+
throw new Error(`Anthropic stream error: ${error.message}`);
|
|
194
|
+
}
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// ---- 内部转换方法 ----
|
|
199
|
+
/**
|
|
200
|
+
* 从消息列表中提取 system 消息和 user/assistant 消息。
|
|
201
|
+
*
|
|
202
|
+
* Anthropic API 要求 system prompt 通过 `system` 参数传递,
|
|
203
|
+
* 不能出现在 messages 数组中。此方法将 role='system' 的消息提取出来,
|
|
204
|
+
* 拼接为 system 字符串或 TextBlockParam 数组(含 cache_control 时),
|
|
205
|
+
* 仅 role='user' 和 role='assistant' 的消息进入 messages 数组。
|
|
206
|
+
*/
|
|
207
|
+
extractSystemAndMessages(messages) {
|
|
208
|
+
const systemBlocks = [];
|
|
209
|
+
const filteredMessages = [];
|
|
210
|
+
for (const msg of messages) {
|
|
211
|
+
if (msg.role === 'system') {
|
|
212
|
+
// 提取 system 消息的内容块
|
|
213
|
+
const blocks = Array.isArray(msg.content) ? msg.content : [msg.content];
|
|
214
|
+
for (const block of blocks) {
|
|
215
|
+
if (block.type === 'text') {
|
|
216
|
+
const textBlock = {
|
|
217
|
+
type: 'text',
|
|
218
|
+
text: block.text,
|
|
219
|
+
};
|
|
220
|
+
// 传递 cache_control 标记
|
|
221
|
+
if (block.cache_control) {
|
|
222
|
+
textBlock.cache_control = block.cache_control;
|
|
223
|
+
}
|
|
224
|
+
systemBlocks.push(textBlock);
|
|
225
|
+
}
|
|
226
|
+
// system 消息中的非 text 块(如 tool_use / tool_result)忽略
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (msg.role === 'user' || msg.role === 'assistant') {
|
|
230
|
+
const content = Array.isArray(msg.content) ? msg.content : [msg.content];
|
|
231
|
+
filteredMessages.push({
|
|
232
|
+
role: msg.role,
|
|
233
|
+
content: this.convertContentBlocks(content),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// 构建 system 参数
|
|
238
|
+
let system;
|
|
239
|
+
if (systemBlocks.length > 0) {
|
|
240
|
+
// 检查是否有任何 block 带有 cache_control
|
|
241
|
+
const hasCacheControl = systemBlocks.some((b) => b.cache_control != null);
|
|
242
|
+
if (hasCacheControl) {
|
|
243
|
+
// 有 cache_control 时使用数组格式
|
|
244
|
+
system = systemBlocks;
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// 无 cache_control 时使用纯字符串格式
|
|
248
|
+
system = systemBlocks.map((b) => b.text).join('\n\n');
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return { system, messages: filteredMessages };
|
|
252
|
+
}
|
|
253
|
+
/** 将内部 Message[] 转换为 Anthropic MessageParam[](已废弃,保留兼容) */
|
|
254
|
+
convertMessages(messages) {
|
|
255
|
+
return messages
|
|
256
|
+
.filter((msg) => msg.role !== 'system')
|
|
257
|
+
.map((msg) => {
|
|
258
|
+
const content = Array.isArray(msg.content) ? msg.content : [msg.content];
|
|
259
|
+
return {
|
|
260
|
+
role: msg.role,
|
|
261
|
+
content: this.convertContentBlocks(content),
|
|
262
|
+
};
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
/** 转换内容块,必要时添加 cache_control 标记 */
|
|
266
|
+
convertContentBlocks(blocks) {
|
|
267
|
+
const result = [];
|
|
268
|
+
for (let idx = 0; idx < blocks.length; idx++) {
|
|
269
|
+
const block = blocks[idx];
|
|
270
|
+
const isLast = idx === blocks.length - 1;
|
|
271
|
+
switch (block.type) {
|
|
272
|
+
case 'text': {
|
|
273
|
+
const textBlock = { type: 'text', text: block.text };
|
|
274
|
+
// If the content block already has cache_control (set by composer), pass it through
|
|
275
|
+
if (block.cache_control) {
|
|
276
|
+
textBlock.cache_control = block.cache_control;
|
|
277
|
+
}
|
|
278
|
+
result.push(textBlock);
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
case 'tool_use':
|
|
282
|
+
result.push({
|
|
283
|
+
type: 'tool_use',
|
|
284
|
+
id: block.id,
|
|
285
|
+
name: block.name,
|
|
286
|
+
input: block.input,
|
|
287
|
+
});
|
|
288
|
+
break;
|
|
289
|
+
case 'tool_result':
|
|
290
|
+
result.push({
|
|
291
|
+
type: 'tool_result',
|
|
292
|
+
tool_use_id: block.tool_use_id,
|
|
293
|
+
content: block.content,
|
|
294
|
+
...(block.is_error != null ? { is_error: block.is_error } : {}),
|
|
295
|
+
});
|
|
296
|
+
break;
|
|
297
|
+
case 'thinking':
|
|
298
|
+
// Anthropic API 不接受 thinking 块作为输入,跳过
|
|
299
|
+
break;
|
|
300
|
+
case 'image': {
|
|
301
|
+
if (!this.getCapabilities().vision) {
|
|
302
|
+
// 非视觉模型 → 降级为文本占位符
|
|
303
|
+
const src = block.source;
|
|
304
|
+
result.push({
|
|
305
|
+
type: 'text',
|
|
306
|
+
text: src.type === 'base64'
|
|
307
|
+
? `[Image: ${src.media_type}]`
|
|
308
|
+
: `[Image URL: ${src.url}]`,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
const mime = block.source.type === 'base64'
|
|
313
|
+
? (['image/jpeg', 'image/png', 'image/gif', 'image/webp'].includes(block.source.media_type)
|
|
314
|
+
? block.source.media_type
|
|
315
|
+
: 'image/png') // fallback: unsupported types → png
|
|
316
|
+
: '';
|
|
317
|
+
const src = block.source.type === 'base64'
|
|
318
|
+
? { type: 'base64', media_type: mime, data: block.source.data }
|
|
319
|
+
: { type: 'url', url: block.source.url };
|
|
320
|
+
const imgBlock = { type: 'image', source: src };
|
|
321
|
+
if (block.cache_control) {
|
|
322
|
+
imgBlock.cache_control = block.cache_control;
|
|
323
|
+
}
|
|
324
|
+
result.push(imgBlock);
|
|
325
|
+
}
|
|
326
|
+
break;
|
|
327
|
+
}
|
|
328
|
+
default:
|
|
329
|
+
// 兜底:作为 text 块处理
|
|
330
|
+
result.push({ type: 'text', text: JSON.stringify(block) });
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return result;
|
|
335
|
+
}
|
|
336
|
+
/** 将内部 ToolDefinition[] 转换为 Anthropic Tool[] */
|
|
337
|
+
convertTools(tools) {
|
|
338
|
+
return tools.map((tool, idx) => {
|
|
339
|
+
const isLast = idx === tools.length - 1;
|
|
340
|
+
const result = {
|
|
341
|
+
name: tool.name,
|
|
342
|
+
description: tool.description,
|
|
343
|
+
input_schema: tool.input_schema,
|
|
344
|
+
};
|
|
345
|
+
// Note: cache_control on tools was previously gated behind this.cacheControl.
|
|
346
|
+
// Message-level breakpoints are now handled by context/cache-strategy.ts via composer.
|
|
347
|
+
// Tool-level cache_control is intentionally omitted — Anthropic's 4-breakpoint limit
|
|
348
|
+
// is fully consumed by the 4 Zone-boundary message markers (BP1-BP3b).
|
|
349
|
+
return result;
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/** 便捷工厂:从 ProviderConfig 创建 AnthropicProvider */
|
|
354
|
+
export function createAnthropicProvider(config) {
|
|
355
|
+
return new AnthropicProvider({
|
|
356
|
+
apiKey: config.apiKey,
|
|
357
|
+
baseUrl: config.baseUrl,
|
|
358
|
+
model: config.model,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=anthropic.js.map
|