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,407 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { AgentLoop } from '../orchestrator/loop.js';
|
|
4
|
+
import { LayeredContextComposer } from '../context/composer.js';
|
|
5
|
+
import { CompressorOrchestrator, StructuredSummarizer } from '../context/compressor.js';
|
|
6
|
+
import { TokenCounter } from '../context/tokenizer.js';
|
|
7
|
+
import { FilteredToolRegistry } from '../tools/filtered-registry.js';
|
|
8
|
+
import { createSandboxedTool } from '../tools/path-sandbox.js';
|
|
9
|
+
import { ToolExecutor } from '../tools/executor.js';
|
|
10
|
+
import { ConversationStore } from '../memory/conversation.js';
|
|
11
|
+
import { EventStore } from '../memory/events.js';
|
|
12
|
+
import { StatsManager } from '../memory/stats.js';
|
|
13
|
+
import { SummaryStore } from '../memory/summary.js';
|
|
14
|
+
import { LLMOrchestrator } from '../orchestrator/planner.js';
|
|
15
|
+
import { PlanStore } from '../orchestrator/plan-store.js';
|
|
16
|
+
import { ModelRouter } from '../provider/model-router.js';
|
|
17
|
+
import { subAgentUserId } from '../provider/user-id.js';
|
|
18
|
+
// ── 运行中子 Agent Loop 管理器(模块级,避免循环依赖) ──────────
|
|
19
|
+
const runningLoops = new Map();
|
|
20
|
+
/** 注册正在运行的子 Agent loop */
|
|
21
|
+
export function registerRunningLoop(instanceId, loop) {
|
|
22
|
+
runningLoops.set(instanceId, loop);
|
|
23
|
+
}
|
|
24
|
+
/** 注销已完成的子 Agent loop */
|
|
25
|
+
export function unregisterRunningLoop(instanceId) {
|
|
26
|
+
runningLoops.delete(instanceId);
|
|
27
|
+
}
|
|
28
|
+
/** 中断指定子 Agent */
|
|
29
|
+
export function interruptSubAgentLoop(instanceId) {
|
|
30
|
+
const loop = runningLoops.get(instanceId);
|
|
31
|
+
if (!loop)
|
|
32
|
+
return false;
|
|
33
|
+
loop.interrupt();
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
/** 销毁子 Agent session 目录(清理 conversation/events/stats/meta) */
|
|
37
|
+
export async function destroySubAgentSession(parentSessionDir, instanceId) {
|
|
38
|
+
const subDir = path.join(parentSessionDir, 'sub-agents', instanceId);
|
|
39
|
+
try {
|
|
40
|
+
await fs.rm(subDir, { recursive: true });
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 创建(或复用)子 Agent 的 AgentLoop 实例。
|
|
49
|
+
*
|
|
50
|
+
* session 按 instanceId 固定目录,多次 delegate 复用同一 session,
|
|
51
|
+
* 子 Agent 保留完整对话历史,无需每次重新交代背景。
|
|
52
|
+
*
|
|
53
|
+
* TTL 机制:若距离上次调用超过 sessionTtlMinutes(默认 10 分钟),
|
|
54
|
+
* 自动清理旧 session 并重建。
|
|
55
|
+
*/
|
|
56
|
+
export async function createSubAgentLoop(agentDef, task, parentContext) {
|
|
57
|
+
const instanceId = agentDef.instanceId ?? `${agentDef.name}-default`;
|
|
58
|
+
const subSessionDir = path.join(parentContext.sessionDir, 'sub-agents', instanceId);
|
|
59
|
+
const ttlMinutes = agentDef.sessionTtlMinutes ?? 10;
|
|
60
|
+
// TTL 检查:过期则清理重建
|
|
61
|
+
let isNew = false;
|
|
62
|
+
try {
|
|
63
|
+
const metaRaw = await fs.readFile(path.join(subSessionDir, 'meta.json'), 'utf-8');
|
|
64
|
+
const meta = JSON.parse(metaRaw);
|
|
65
|
+
const elapsed = (Date.now() - meta.createdAt) / 60_000;
|
|
66
|
+
if (elapsed > ttlMinutes) {
|
|
67
|
+
await fs.rm(subSessionDir, { recursive: true });
|
|
68
|
+
isNew = true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
isNew = true; // 目录不存在或 meta 损坏
|
|
73
|
+
}
|
|
74
|
+
if (isNew) {
|
|
75
|
+
await fs.mkdir(subSessionDir, { recursive: true });
|
|
76
|
+
await fs.writeFile(path.join(subSessionDir, 'meta.json'), JSON.stringify({
|
|
77
|
+
createdAt: Date.now(), agentName: agentDef.name, instanceId,
|
|
78
|
+
}), 'utf-8');
|
|
79
|
+
}
|
|
80
|
+
// 仅在首次创建时写入空文件(复用时不覆盖已有数据)
|
|
81
|
+
if (isNew) {
|
|
82
|
+
await fs.writeFile(path.join(subSessionDir, 'conversation.jsonl'), '', 'utf-8');
|
|
83
|
+
await fs.writeFile(path.join(subSessionDir, 'events.jsonl'), '', 'utf-8');
|
|
84
|
+
await fs.writeFile(path.join(subSessionDir, 'stats.json'), '{}', 'utf-8');
|
|
85
|
+
}
|
|
86
|
+
// 2. 创建 FilteredToolRegistry
|
|
87
|
+
const filteredRegistry = new FilteredToolRegistry(parentContext.toolRegistry, agentDef.allowedTools);
|
|
88
|
+
// 2.5 路径沙箱包装(若设置了 sandboxRoot)
|
|
89
|
+
if (parentContext.sandboxRoot) {
|
|
90
|
+
for (const tool of filteredRegistry.getAll()) {
|
|
91
|
+
const wrapped = createSandboxedTool(tool, parentContext.sandboxRoot);
|
|
92
|
+
filteredRegistry.register(wrapped);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// 3. 创建独立的 LayeredContextComposer,注入子 Agent 的 systemPrompt
|
|
96
|
+
const subComposer = new LayeredContextComposer(parentContext.maxContextTokens);
|
|
97
|
+
// 使用 registerPromptSection 注册子 Agent 的 system prompt 作为持久化 section
|
|
98
|
+
// 这样每次 compose() 调用时都会自动注册,不会被 builder 重置清除
|
|
99
|
+
let systemPrompt = agentDef.systemPrompt.replace(/\{\{task\}\}/g, task);
|
|
100
|
+
// 结构化输出:追加 JSON 格式指令
|
|
101
|
+
if (agentDef.outputFormat === 'json') {
|
|
102
|
+
const schemaStr = agentDef.outputSchema
|
|
103
|
+
? `\n\nCRITICAL OUTPUT FORMAT: Your final response MUST be valid JSON conforming to this schema:\n${JSON.stringify(agentDef.outputSchema, null, 2)}`
|
|
104
|
+
: '\n\nCRITICAL OUTPUT FORMAT: Your final response MUST be valid JSON.';
|
|
105
|
+
systemPrompt += schemaStr;
|
|
106
|
+
}
|
|
107
|
+
subComposer.registerPromptSection({
|
|
108
|
+
name: 'sub-agent-role',
|
|
109
|
+
priority: 0,
|
|
110
|
+
content: systemPrompt,
|
|
111
|
+
});
|
|
112
|
+
// 4. 创建独立的存储
|
|
113
|
+
const conversationStore = new ConversationStore();
|
|
114
|
+
const eventStore = new EventStore();
|
|
115
|
+
const statsManager = new StatsManager();
|
|
116
|
+
const summaryStore = new SummaryStore();
|
|
117
|
+
// 初始化 stats
|
|
118
|
+
await statsManager.init(subSessionDir);
|
|
119
|
+
// 5. 创建 ToolExecutor
|
|
120
|
+
const toolExecutor = new ToolExecutor(filteredRegistry);
|
|
121
|
+
// 6. 创建子 Agent 的独立 Provider(唯一 userId,与主Agent 和其他子Agent 缓存隔离)
|
|
122
|
+
const subProvider = parentContext.createSubProvider(subAgentUserId(agentDef.name, instanceId));
|
|
123
|
+
// 7. 创建 Compressor(复用主 Agent 的 ModelRouter 做压缩路由)
|
|
124
|
+
const tokenCounter = new TokenCounter();
|
|
125
|
+
const subModelRouter = new ModelRouter(subProvider);
|
|
126
|
+
const summarizer = new StructuredSummarizer(subModelRouter);
|
|
127
|
+
const compressor = new CompressorOrchestrator(tokenCounter, summarizer, parentContext.maxContextTokens);
|
|
128
|
+
// 8. 创建 LLMOrchestrator
|
|
129
|
+
const planStore = new PlanStore();
|
|
130
|
+
const orchestrator = new LLMOrchestrator(subProvider, planStore, subSessionDir, subModelRouter);
|
|
131
|
+
// 8. 创建 OutputHandler(有 onProgress 则报告进度,否则静默)
|
|
132
|
+
const emit = parentContext.onProgress;
|
|
133
|
+
const silentHandler = {
|
|
134
|
+
onText(text) { emit?.({ type: 'text', message: text, timestamp: Date.now() }); },
|
|
135
|
+
onThinking() { },
|
|
136
|
+
onToolUse(name, inputSummary) {
|
|
137
|
+
emit?.({ type: 'tool_call', message: `${name}(${inputSummary})`, timestamp: Date.now() });
|
|
138
|
+
},
|
|
139
|
+
onToolResult(name) {
|
|
140
|
+
emit?.({ type: 'tool_result', message: `${name} completed`, timestamp: Date.now() });
|
|
141
|
+
},
|
|
142
|
+
onStatus(msg) { emit?.({ type: 'status', message: msg, timestamp: Date.now() }); },
|
|
143
|
+
onTurnStart() { },
|
|
144
|
+
onFlush() { },
|
|
145
|
+
onInterrupt() { },
|
|
146
|
+
onPermissionRequest: async () => 'yes', // 子 Agent 自动批准权限请求
|
|
147
|
+
};
|
|
148
|
+
// 9. 创建 AgentLoop
|
|
149
|
+
const loop = new AgentLoop(subProvider, subComposer, compressor, orchestrator, toolExecutor, filteredRegistry, conversationStore, eventStore, statsManager, subSessionDir, summaryStore, agentDef.maxTurns, parentContext.maxContextTokens, silentHandler, undefined, // skillRegistry — 子 Agent 不使用 Skill
|
|
150
|
+
undefined, // mcpBridge — 子 Agent 不使用 MCP
|
|
151
|
+
parentContext.dependencyAnalyzer);
|
|
152
|
+
return { loop, sessionDir: subSessionDir, isNew };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* DelegateToAgentTool — 主 Agent 通过此工具委托任务给子 Agent
|
|
156
|
+
*/
|
|
157
|
+
export class DelegateToAgentTool {
|
|
158
|
+
name = 'delegate_to_agent';
|
|
159
|
+
description = 'Delegate a task to a specialized sub-agent. The sub-agent will execute the task independently and return results.';
|
|
160
|
+
inputSchema = {
|
|
161
|
+
type: 'object',
|
|
162
|
+
properties: {
|
|
163
|
+
agent_name: {
|
|
164
|
+
type: 'string',
|
|
165
|
+
description: 'Name of the sub-agent to delegate to (e.g., "code-reviewer"). If multiple instances exist, the first available one is selected. Use instance_id for precise targeting.',
|
|
166
|
+
},
|
|
167
|
+
instance_id: {
|
|
168
|
+
type: 'string',
|
|
169
|
+
description: 'Optional instance ID of a specific sub-agent instance (for targeting a clone/spawned copy). Takes priority over agent_name.',
|
|
170
|
+
},
|
|
171
|
+
task: {
|
|
172
|
+
type: 'string',
|
|
173
|
+
description: 'Clear description of the task to delegate to the sub-agent',
|
|
174
|
+
},
|
|
175
|
+
context: {
|
|
176
|
+
type: 'string',
|
|
177
|
+
description: 'Optional additional context to provide to the sub-agent (e.g., relevant code snippets, file paths)',
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
required: ['task'],
|
|
181
|
+
};
|
|
182
|
+
agentRegistry;
|
|
183
|
+
parentContext;
|
|
184
|
+
constructor(agentRegistry, parentContext) {
|
|
185
|
+
this.agentRegistry = agentRegistry;
|
|
186
|
+
this.parentContext = parentContext;
|
|
187
|
+
}
|
|
188
|
+
async execute(args) {
|
|
189
|
+
const instanceId = args.instance_id;
|
|
190
|
+
const agentName = args.agent_name;
|
|
191
|
+
const task = args.task;
|
|
192
|
+
const context = args.context;
|
|
193
|
+
if (!agentName && !instanceId) {
|
|
194
|
+
return 'Error: either agent_name or instance_id is required. Use list_sub_agents to see available agents and their instance IDs.';
|
|
195
|
+
}
|
|
196
|
+
// 查找子 Agent 定义(优先 instanceId)
|
|
197
|
+
let agentDef;
|
|
198
|
+
if (instanceId) {
|
|
199
|
+
agentDef = this.agentRegistry.getByInstanceId(instanceId);
|
|
200
|
+
if (!agentDef) {
|
|
201
|
+
return `Error: Sub-agent instance "${instanceId}" not found. Use list_sub_agents to see available instances.`;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else if (agentName) {
|
|
205
|
+
const instances = this.agentRegistry.get(agentName);
|
|
206
|
+
if (instances.length === 0) {
|
|
207
|
+
const available = this.agentRegistry.getAll().map(a => a.name + (this.agentRegistry.get(a.name).length > 1 ? ` (id: ${a.instanceId})` : '')).join(', ');
|
|
208
|
+
return `Error: Sub-agent "${agentName}" not found or all instances disabled. Available agents: ${available}`;
|
|
209
|
+
}
|
|
210
|
+
agentDef = instances[0]; // 取第一个可用实例
|
|
211
|
+
}
|
|
212
|
+
if (!agentDef) {
|
|
213
|
+
return 'Error: no sub-agent found matching the provided criteria.';
|
|
214
|
+
}
|
|
215
|
+
// 构造完整任务描述
|
|
216
|
+
const fullTask = context ? `${task}\n\nAdditional Context:\n${context}` : task;
|
|
217
|
+
try {
|
|
218
|
+
if (agentDef.collaborationMode === 'adversarial') {
|
|
219
|
+
// 对抗审查模式:找一个不同角色的子 Agent 同时审查
|
|
220
|
+
return await this.executeAdversarial(agentDef, fullTask);
|
|
221
|
+
}
|
|
222
|
+
else if (agentDef.collaborationMode === 'parallel') {
|
|
223
|
+
// 并行分工模式:所有 parallel 模式的子 Agent 并行执行
|
|
224
|
+
return await this.executeParallel(agentDef, fullTask);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
// 委托模式:直接委托给子 Agent
|
|
228
|
+
return await this.executeDelegate(agentDef, fullTask);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
233
|
+
return `Sub-agent delegation failed: ${message}`;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* 委托模式:单个子 Agent 执行任务
|
|
238
|
+
*/
|
|
239
|
+
async executeDelegate(agentDef, task) {
|
|
240
|
+
const instanceId = agentDef.instanceId;
|
|
241
|
+
const { loop, sessionDir, isNew } = await createSubAgentLoop(agentDef, task, this.parentContext);
|
|
242
|
+
registerRunningLoop(instanceId, loop);
|
|
243
|
+
try {
|
|
244
|
+
if (!isNew) {
|
|
245
|
+
// 复用 session 时更新 mtime,重置 TTL 倒计时
|
|
246
|
+
await fs.utimes(path.join(sessionDir, 'meta.json'), new Date(), new Date()).catch(() => { });
|
|
247
|
+
}
|
|
248
|
+
await loop.run(task);
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
unregisterRunningLoop(instanceId);
|
|
252
|
+
}
|
|
253
|
+
return this.collectResult(agentDef, task);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 对抗审查模式:两个不同角色的子 Agent 独立审查,综合意见
|
|
257
|
+
*/
|
|
258
|
+
async executeAdversarial(agentDef, task) {
|
|
259
|
+
// 找一个不同角色的子 Agent 作为对抗方
|
|
260
|
+
const allAgents = this.agentRegistry.getAll();
|
|
261
|
+
const adversary = allAgents.find(a => a.name !== agentDef.name && a.collaborationMode === 'adversarial');
|
|
262
|
+
// 第一个子 Agent 执行
|
|
263
|
+
const { loop: loop1, sessionDir: dir1, isNew: isNew1 } = await createSubAgentLoop(agentDef, task, this.parentContext);
|
|
264
|
+
registerRunningLoop(agentDef.instanceId, loop1);
|
|
265
|
+
try {
|
|
266
|
+
if (!isNew1)
|
|
267
|
+
await fs.utimes(path.join(dir1, 'meta.json'), new Date(), new Date()).catch(() => { });
|
|
268
|
+
await loop1.run(task);
|
|
269
|
+
}
|
|
270
|
+
finally {
|
|
271
|
+
unregisterRunningLoop(agentDef.instanceId);
|
|
272
|
+
}
|
|
273
|
+
const result1 = await this.collectConversationSummary(agentDef.name, agentDef.instanceId);
|
|
274
|
+
if (!adversary) {
|
|
275
|
+
return `## ${agentDef.name} Review\n\n${result1}`;
|
|
276
|
+
}
|
|
277
|
+
// 第二个子 Agent 执行(对抗方)
|
|
278
|
+
const { loop: loop2, sessionDir: dir2, isNew: isNew2 } = await createSubAgentLoop(adversary, task, this.parentContext);
|
|
279
|
+
registerRunningLoop(adversary.instanceId, loop2);
|
|
280
|
+
try {
|
|
281
|
+
if (!isNew2)
|
|
282
|
+
await fs.utimes(path.join(dir2, 'meta.json'), new Date(), new Date()).catch(() => { });
|
|
283
|
+
await loop2.run(task);
|
|
284
|
+
}
|
|
285
|
+
finally {
|
|
286
|
+
unregisterRunningLoop(adversary.instanceId);
|
|
287
|
+
}
|
|
288
|
+
const result2 = await this.collectConversationSummary(adversary.name, adversary.instanceId);
|
|
289
|
+
// 综合两个子 Agent 的意见
|
|
290
|
+
return `## Adversarial Review Results\n\n### ${agentDef.name} Perspective\n${result1}\n\n### ${adversary.name} Perspective\n${result2}\n\n---\nBoth agents reviewed independently. Consider both perspectives when making decisions.`;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* 并行分工模式:多个子 Agent 并行执行同一任务的不同方面,汇总结果
|
|
294
|
+
*/
|
|
295
|
+
async executeParallel(agentDef, task) {
|
|
296
|
+
// 找到所有 parallel 模式的子 Agent
|
|
297
|
+
const allAgents = this.agentRegistry.getAll();
|
|
298
|
+
const parallelAgents = allAgents.filter(a => a.collaborationMode === 'parallel');
|
|
299
|
+
if (parallelAgents.length <= 1) {
|
|
300
|
+
// 只有一个或没有 parallel 子 Agent,退化为普通委托
|
|
301
|
+
return await this.executeDelegate(agentDef, task);
|
|
302
|
+
}
|
|
303
|
+
// 并行启动所有 parallel 子 Agent
|
|
304
|
+
const results = await Promise.all(parallelAgents.map(async (agent) => {
|
|
305
|
+
const { loop, sessionDir, isNew } = await createSubAgentLoop(agent, task, this.parentContext);
|
|
306
|
+
registerRunningLoop(agent.instanceId, loop);
|
|
307
|
+
try {
|
|
308
|
+
if (!isNew)
|
|
309
|
+
await fs.utimes(path.join(sessionDir, 'meta.json'), new Date(), new Date()).catch(() => { });
|
|
310
|
+
await loop.run(task);
|
|
311
|
+
}
|
|
312
|
+
finally {
|
|
313
|
+
unregisterRunningLoop(agent.instanceId);
|
|
314
|
+
}
|
|
315
|
+
const summary = await this.collectConversationSummary(agent.name, agent.instanceId);
|
|
316
|
+
return { name: agent.name, summary };
|
|
317
|
+
}));
|
|
318
|
+
// 汇总所有子 Agent 的结果
|
|
319
|
+
const parts = results.map(r => `### ${r.name}\n${r.summary}`).join('\n\n');
|
|
320
|
+
return `## Parallel Execution Results\n\n${parts}\n\n---\nAll agents executed in parallel. Review each result independently.`;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* 收集子 Agent 的对话摘要
|
|
324
|
+
*/
|
|
325
|
+
async collectConversationSummary(agentName, instanceId) {
|
|
326
|
+
const result = await this.collectAgentResult(agentName, instanceId, '');
|
|
327
|
+
return result.summary;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* 收集子 Agent 执行的结构化结果
|
|
331
|
+
* session 目录按 instanceId 固定,直接读取,无需遍历查找
|
|
332
|
+
*/
|
|
333
|
+
async collectAgentResult(agentName, instanceId, task) {
|
|
334
|
+
const baseResult = {
|
|
335
|
+
agentName,
|
|
336
|
+
task,
|
|
337
|
+
status: 'error',
|
|
338
|
+
summary: 'No output captured',
|
|
339
|
+
turns: 0,
|
|
340
|
+
filesModified: [],
|
|
341
|
+
};
|
|
342
|
+
const subSessionDir = path.join(this.parentContext.sessionDir, 'sub-agents', instanceId);
|
|
343
|
+
const conversationPath = path.join(subSessionDir, 'conversation.jsonl');
|
|
344
|
+
try {
|
|
345
|
+
const content = await fs.readFile(conversationPath, 'utf-8');
|
|
346
|
+
const lines = content.split('\n').filter(l => l.trim());
|
|
347
|
+
const assistantTexts = [];
|
|
348
|
+
let turnCount = 0;
|
|
349
|
+
const modifiedFiles = new Set();
|
|
350
|
+
for (const line of lines) {
|
|
351
|
+
try {
|
|
352
|
+
const msg = JSON.parse(line);
|
|
353
|
+
// 跳过 LoopGuard 注入的系统消息(不计入子 Agent 轮次)
|
|
354
|
+
if (msg.role === 'user') {
|
|
355
|
+
const contents = Array.isArray(msg.content) ? msg.content : [msg.content];
|
|
356
|
+
const text = contents
|
|
357
|
+
.filter((c) => c.type === 'text')
|
|
358
|
+
.map((c) => String(c.text ?? ''))
|
|
359
|
+
.join('');
|
|
360
|
+
if (!text.startsWith('[LoopGuard]') && !text.startsWith('[Storm suppressed]')) {
|
|
361
|
+
turnCount++;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
if (msg.role === 'assistant' && Array.isArray(msg.content)) {
|
|
365
|
+
for (const block of msg.content) {
|
|
366
|
+
if (block.type === 'text' && block.text) {
|
|
367
|
+
assistantTexts.push(block.text);
|
|
368
|
+
}
|
|
369
|
+
// 追踪工具调用中的文件操作
|
|
370
|
+
if (block.type === 'tool_use') {
|
|
371
|
+
const toolName = block.name ?? block.tool_name ?? '';
|
|
372
|
+
const input = block.input ?? {};
|
|
373
|
+
const filePath = input.file_path ?? input.path ?? '';
|
|
374
|
+
if (['write', 'edit', 'bash'].includes(toolName) && filePath) {
|
|
375
|
+
modifiedFiles.add(filePath);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
catch { /* skip malformed lines */ }
|
|
382
|
+
}
|
|
383
|
+
const summary = assistantTexts.length > 0
|
|
384
|
+
? assistantTexts[assistantTexts.length - 1]
|
|
385
|
+
: 'No text output';
|
|
386
|
+
return {
|
|
387
|
+
agentName,
|
|
388
|
+
task,
|
|
389
|
+
status: 'completed',
|
|
390
|
+
summary,
|
|
391
|
+
turns: Math.ceil(turnCount / 2), // user+assistant 成对
|
|
392
|
+
filesModified: [...modifiedFiles],
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
return { ...baseResult, summary: 'Failed to read sub-agent output' };
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* 收集子 Agent 执行结果
|
|
401
|
+
*/
|
|
402
|
+
async collectResult(agentDef, task) {
|
|
403
|
+
const result = await this.collectAgentResult(agentDef.name, agentDef.instanceId, task);
|
|
404
|
+
return `## ${result.agentName} Result\nStatus: ${result.status}\nTurns: ${result.turns}\nFiles Modified: ${result.filesModified.join(', ') || 'none'}\n\n${result.summary}`;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=delegate-tool.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AgentRegistry } from './registry.js';
|
|
2
|
+
export { createBuiltinAgents } from './builtins.js';
|
|
3
|
+
export { DelegateToAgentTool, createSubAgentLoop, destroySubAgentSession, interruptSubAgentLoop, registerRunningLoop, unregisterRunningLoop } from './delegate-tool.js';
|
|
4
|
+
export { loadAgentConfigs } from './config-loader.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AgentRegistry } from './registry.js';
|
|
2
|
+
export { createBuiltinAgents } from './builtins.js';
|
|
3
|
+
export { DelegateToAgentTool, createSubAgentLoop, destroySubAgentSession, interruptSubAgentLoop, registerRunningLoop, unregisterRunningLoop } from './delegate-tool.js';
|
|
4
|
+
export { loadAgentConfigs } from './config-loader.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { BypassAgentBase } from '../../base.js';
|
|
2
|
+
import type { PreTurnContext, PostTurnContext, PreTurnResult } from '../../types.js';
|
|
3
|
+
export { WorldStore } from '../../../world-engine/store.js';
|
|
4
|
+
export { WorldTicker } from '../../../world-engine/ticker.js';
|
|
5
|
+
export * from '../../../world-engine/types.js';
|
|
6
|
+
export interface CharacterIdentity {
|
|
7
|
+
name: string;
|
|
8
|
+
desc?: string;
|
|
9
|
+
aliases?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface AgentIdentities {
|
|
12
|
+
protagonist?: CharacterIdentity;
|
|
13
|
+
companion?: CharacterIdentity;
|
|
14
|
+
}
|
|
15
|
+
export declare function parseNarration(input: string): {
|
|
16
|
+
narration: string;
|
|
17
|
+
dialogue: string;
|
|
18
|
+
};
|
|
19
|
+
export declare class WorldEngine extends BypassAgentBase {
|
|
20
|
+
private readonly characterName;
|
|
21
|
+
private readonly store;
|
|
22
|
+
private identities;
|
|
23
|
+
private ticker;
|
|
24
|
+
private started;
|
|
25
|
+
private _enabled;
|
|
26
|
+
private observeQueue;
|
|
27
|
+
private pendingNarration;
|
|
28
|
+
constructor(characterName: string);
|
|
29
|
+
get enabled(): boolean;
|
|
30
|
+
start(): Promise<void>;
|
|
31
|
+
stop(): Promise<void>;
|
|
32
|
+
narrate(): Promise<string | undefined>;
|
|
33
|
+
setPendingNarration(text: string): void;
|
|
34
|
+
observe(userInput: string, mainOutput: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* TODO: Memory 维护
|
|
37
|
+
* 当前 WorldEngine 只维护结构化世界状态(地点/NPC/关系/动态物),
|
|
38
|
+
* 缺少对"我们之间发生了什么"的情感/事件记忆。
|
|
39
|
+
*
|
|
40
|
+
* 计划在 postTurn 阶段新增一个轻量旁路调用:
|
|
41
|
+
* 输入:world.json(state.recentEvents + state.characters) + conversation.jsonl(原始对话)
|
|
42
|
+
* 输出:追加写入 ~/.agent/companion/<name>/memory.md
|
|
43
|
+
*
|
|
44
|
+
* 内容侧重:情感里程碑、共同经历、内部笑话、偏好变化。
|
|
45
|
+
* 与 WorldEngine 现有职责互补——WorldEngine 管"世界是怎样的",
|
|
46
|
+
* memory 管"我们之间发生了什么"。
|
|
47
|
+
*
|
|
48
|
+
* 实现方式:旁路 LLM 单次调用(无工具循环),prompt 驱动追加,
|
|
49
|
+
* 不新增工具、不引入 RAG。异常静默,不影响主流程。
|
|
50
|
+
*/
|
|
51
|
+
private _observe;
|
|
52
|
+
preTurn(_ctx: PreTurnContext): Promise<PreTurnResult>;
|
|
53
|
+
postTurn(ctx: PostTurnContext): Promise<void>;
|
|
54
|
+
private characterOverlay;
|
|
55
|
+
private mainCharacterNames;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|