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,87 @@
|
|
|
1
|
+
import { DEFAULT_MAX_CONTEXT_TOKENS } from './config.js';
|
|
2
|
+
import { getModelCatalogLoader } from '../provider/model-catalog-loader.js';
|
|
3
|
+
const PROVIDER_ALIAS = {
|
|
4
|
+
google: 'gemini',
|
|
5
|
+
};
|
|
6
|
+
function resolveProvider(provider) {
|
|
7
|
+
return PROVIDER_ALIAS[provider] ?? provider;
|
|
8
|
+
}
|
|
9
|
+
function buildProviderModels() {
|
|
10
|
+
const loader = getModelCatalogLoader();
|
|
11
|
+
const entries = loader.getAll();
|
|
12
|
+
const map = {};
|
|
13
|
+
const excludedIds = new Set(['__default__']);
|
|
14
|
+
for (const e of entries) {
|
|
15
|
+
if (excludedIds.has(e.id))
|
|
16
|
+
continue;
|
|
17
|
+
const p = e.provider;
|
|
18
|
+
if (!map[p])
|
|
19
|
+
map[p] = [];
|
|
20
|
+
map[p].push({
|
|
21
|
+
id: e.id,
|
|
22
|
+
name: e.name,
|
|
23
|
+
contextWindow: e.contextWindow,
|
|
24
|
+
maxOutputTokens: e.maxOutputTokens,
|
|
25
|
+
reasoning: e.reasoning,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return map;
|
|
29
|
+
}
|
|
30
|
+
let _providerModels = null;
|
|
31
|
+
function getProviderModels() {
|
|
32
|
+
if (!_providerModels) {
|
|
33
|
+
_providerModels = buildProviderModels();
|
|
34
|
+
}
|
|
35
|
+
return _providerModels;
|
|
36
|
+
}
|
|
37
|
+
/** @deprecated 使用 ModelCatalogLoader 代替 */
|
|
38
|
+
export const PROVIDER_MODELS = new Proxy({}, {
|
|
39
|
+
get(_target, prop) {
|
|
40
|
+
const resolved = resolveProvider(prop);
|
|
41
|
+
const models = getProviderModels();
|
|
42
|
+
return models[resolved] ?? models[prop];
|
|
43
|
+
},
|
|
44
|
+
ownKeys() {
|
|
45
|
+
return Reflect.ownKeys(getProviderModels());
|
|
46
|
+
},
|
|
47
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
48
|
+
const resolved = resolveProvider(prop);
|
|
49
|
+
const models = getProviderModels();
|
|
50
|
+
if (resolved in models) {
|
|
51
|
+
return { enumerable: true, configurable: true, value: models[resolved] };
|
|
52
|
+
}
|
|
53
|
+
if (prop in models) {
|
|
54
|
+
return { enumerable: true, configurable: true, value: models[prop] };
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
export function getModelContextWindow(provider, model) {
|
|
60
|
+
const resolved = resolveProvider(provider);
|
|
61
|
+
const loader = getModelCatalogLoader();
|
|
62
|
+
const entries = loader.getByProvider(resolved);
|
|
63
|
+
if (entries.length === 0)
|
|
64
|
+
return DEFAULT_MAX_CONTEXT_TOKENS;
|
|
65
|
+
if (model) {
|
|
66
|
+
const found = entries.find((m) => m.id === model);
|
|
67
|
+
if (found)
|
|
68
|
+
return found.contextWindow;
|
|
69
|
+
}
|
|
70
|
+
const firstNonDefault = entries.find((m) => m.id !== '__default__');
|
|
71
|
+
return firstNonDefault?.contextWindow ?? entries[0]?.contextWindow ?? DEFAULT_MAX_CONTEXT_TOKENS;
|
|
72
|
+
}
|
|
73
|
+
export function getModelMaxTokens(provider, model) {
|
|
74
|
+
const resolved = resolveProvider(provider);
|
|
75
|
+
const loader = getModelCatalogLoader();
|
|
76
|
+
const entries = loader.getByProvider(resolved);
|
|
77
|
+
if (entries.length === 0)
|
|
78
|
+
return 8192;
|
|
79
|
+
if (model) {
|
|
80
|
+
const found = entries.find((m) => m.id === model);
|
|
81
|
+
if (found)
|
|
82
|
+
return found.maxOutputTokens;
|
|
83
|
+
}
|
|
84
|
+
const firstNonDefault = entries.find((m) => m.id !== '__default__');
|
|
85
|
+
return firstNonDefault?.maxOutputTokens ?? entries[0]?.maxOutputTokens ?? 8192;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=model-defaults.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
declare const PERSONA_FILE_NAMES: readonly ["BOOTSTRAP.md", "SOUL.md", "IDENTITY.md", "USER.md", "PartnerSoul.md", "PartnerMemory.md"];
|
|
2
|
+
export type PersonaFileName = (typeof PERSONA_FILE_NAMES)[number];
|
|
3
|
+
export type BootstrapStatus = 'pending' | 'complete';
|
|
4
|
+
export interface PersonaState {
|
|
5
|
+
version: number;
|
|
6
|
+
bootstrapSeededAt?: string;
|
|
7
|
+
setupCompletedAt?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface PersonaFile {
|
|
10
|
+
name: PersonaFileName;
|
|
11
|
+
path: string;
|
|
12
|
+
content?: string;
|
|
13
|
+
missing: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface PersonaValidationResult {
|
|
16
|
+
complete: boolean;
|
|
17
|
+
missing: PersonaFileName[];
|
|
18
|
+
templateFiles: PersonaFileName[];
|
|
19
|
+
}
|
|
20
|
+
export declare function getGlobalPersonaDir(configHome?: string): string;
|
|
21
|
+
export declare const DEFAULT_PERSONA_DIR: string;
|
|
22
|
+
export declare function ensurePersonaFiles(personaDir: string): Promise<{
|
|
23
|
+
status: BootstrapStatus;
|
|
24
|
+
filesCreated: string[];
|
|
25
|
+
state: PersonaState;
|
|
26
|
+
}>;
|
|
27
|
+
export declare function ensureGlobalPersonaFiles(configHome?: string): Promise<{
|
|
28
|
+
status: BootstrapStatus;
|
|
29
|
+
filesCreated: string[];
|
|
30
|
+
state: PersonaState;
|
|
31
|
+
personaDir: string;
|
|
32
|
+
}>;
|
|
33
|
+
export declare function validatePersonaFiles(personaDir: string): Promise<PersonaValidationResult>;
|
|
34
|
+
export declare function validatePersonaFilesSync(personaDir: string): PersonaValidationResult;
|
|
35
|
+
export declare function isBootstrapComplete(personaDir: string): Promise<boolean>;
|
|
36
|
+
export declare function getBootstrapStatus(personaDir: string): Promise<BootstrapStatus>;
|
|
37
|
+
export declare function markBootstrapComplete(personaDir: string): Promise<void>;
|
|
38
|
+
export declare function markBootstrapCompleteSync(personaDir: string): void;
|
|
39
|
+
export declare function loadPersonaFiles(personaDir: string, cwdFallback?: string): Promise<PersonaFile[]>;
|
|
40
|
+
export declare function getPersonaState(personaDir: string): Promise<PersonaState>;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=persona-bootstrap.d.ts.map
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import fsp from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { createLogger } from '../logging/logger.js';
|
|
7
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const logger = createLogger('persona-bootstrap');
|
|
9
|
+
// ─── Constants ──────────────────────────────────────────────────────
|
|
10
|
+
const PERSONA_STATE_DIR = '.state';
|
|
11
|
+
const PERSONA_STATE_FILE = 'persona-state.json';
|
|
12
|
+
const PERSONA_STATE_VERSION = 1;
|
|
13
|
+
const PERSONA_FILE_NAMES = [
|
|
14
|
+
'BOOTSTRAP.md',
|
|
15
|
+
'SOUL.md',
|
|
16
|
+
'IDENTITY.md',
|
|
17
|
+
'USER.md',
|
|
18
|
+
'PartnerSoul.md',
|
|
19
|
+
'PartnerMemory.md',
|
|
20
|
+
];
|
|
21
|
+
export function getGlobalPersonaDir(configHome = path.join(os.homedir(), '.agent')) {
|
|
22
|
+
return path.join(configHome, 'prompts', 'persona');
|
|
23
|
+
}
|
|
24
|
+
export const DEFAULT_PERSONA_DIR = getGlobalPersonaDir();
|
|
25
|
+
// ─── Template Loading ───────────────────────────────────────────────
|
|
26
|
+
function loadTemplateContent(fileName) {
|
|
27
|
+
const possibleDirs = [
|
|
28
|
+
path.join(__dirname, '..', 'prompts', 'persona'),
|
|
29
|
+
path.join(process.cwd(), 'src', 'prompts', 'persona'),
|
|
30
|
+
path.join(process.cwd(), 'dist', 'prompts', 'persona'),
|
|
31
|
+
];
|
|
32
|
+
for (const dir of possibleDirs) {
|
|
33
|
+
const filePath = path.join(dir, fileName);
|
|
34
|
+
try {
|
|
35
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`Template not found: ${fileName}. Searched: ${possibleDirs.join(', ')}`);
|
|
42
|
+
}
|
|
43
|
+
// ─── State Management ────────────────────────────────────────────────
|
|
44
|
+
function resolveStatePath(personaDir) {
|
|
45
|
+
return path.join(personaDir, PERSONA_STATE_DIR, PERSONA_STATE_FILE);
|
|
46
|
+
}
|
|
47
|
+
async function readState(personaDir) {
|
|
48
|
+
const statePath = resolveStatePath(personaDir);
|
|
49
|
+
try {
|
|
50
|
+
const raw = await fsp.readFile(statePath, 'utf-8');
|
|
51
|
+
const parsed = JSON.parse(raw);
|
|
52
|
+
if (parsed && typeof parsed === 'object' && parsed.version === PERSONA_STATE_VERSION) {
|
|
53
|
+
return parsed;
|
|
54
|
+
}
|
|
55
|
+
return { version: PERSONA_STATE_VERSION };
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const code = err.code;
|
|
59
|
+
if (code === 'ENOENT') {
|
|
60
|
+
return { version: PERSONA_STATE_VERSION };
|
|
61
|
+
}
|
|
62
|
+
throw err;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async function writeState(personaDir, state) {
|
|
66
|
+
const stateDir = path.join(personaDir, PERSONA_STATE_DIR);
|
|
67
|
+
await fsp.mkdir(stateDir, { recursive: true });
|
|
68
|
+
const statePath = resolveStatePath(personaDir);
|
|
69
|
+
await fsp.writeFile(statePath, JSON.stringify(state, null, 2) + '\n', 'utf-8');
|
|
70
|
+
}
|
|
71
|
+
// ─── File Operations ─────────────────────────────────────────────────
|
|
72
|
+
async function writeFileIfMissing(filePath, content) {
|
|
73
|
+
try {
|
|
74
|
+
await fsp.writeFile(filePath, content, { encoding: 'utf-8', flag: 'wx' });
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
const code = err.code;
|
|
79
|
+
if (code === 'EEXIST')
|
|
80
|
+
return false;
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function fileContentDiffersFromTemplate(filePath, template) {
|
|
85
|
+
try {
|
|
86
|
+
const existing = await fsp.readFile(filePath, 'utf-8');
|
|
87
|
+
return existing !== template;
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
const code = err.code;
|
|
91
|
+
if (code === 'ENOENT')
|
|
92
|
+
return false;
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// ─── Public API ──────────────────────────────────────────────────────
|
|
97
|
+
export async function ensurePersonaFiles(personaDir) {
|
|
98
|
+
await fsp.mkdir(personaDir, { recursive: true });
|
|
99
|
+
let state = await readState(personaDir);
|
|
100
|
+
const now = new Date().toISOString();
|
|
101
|
+
// 自动补检测:如果 persona 文件已被填写(内容 ≠ 模板)但 state 文件未反映
|
|
102
|
+
//(例如 markBootstrapComplete 因格式验证过严而失败),
|
|
103
|
+
// 在重建 BOOTSTRAP.md 之前标记为完成。这是修复"每次启动都重新引导"的 bug。
|
|
104
|
+
if (!state.setupCompletedAt) {
|
|
105
|
+
try {
|
|
106
|
+
const identityPath = path.join(personaDir, 'IDENTITY.md');
|
|
107
|
+
const userPath = path.join(personaDir, 'USER.md');
|
|
108
|
+
const identityTemplate = loadTemplateContent('IDENTITY.md');
|
|
109
|
+
const userTemplate = loadTemplateContent('USER.md');
|
|
110
|
+
const identityChanged = await fileContentDiffersFromTemplate(identityPath, identityTemplate);
|
|
111
|
+
const userChanged = await fileContentDiffersFromTemplate(userPath, userTemplate);
|
|
112
|
+
if (identityChanged || userChanged) {
|
|
113
|
+
state = { ...state, setupCompletedAt: now };
|
|
114
|
+
logger.info('Persona setup auto-detected as complete (files already filled)');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// 文件可能尚未创建 — 正常继续
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const alreadyComplete = !!state.setupCompletedAt;
|
|
122
|
+
const filesCreated = [];
|
|
123
|
+
for (const fileName of PERSONA_FILE_NAMES) {
|
|
124
|
+
if (alreadyComplete && fileName === 'BOOTSTRAP.md')
|
|
125
|
+
continue;
|
|
126
|
+
const filePath = path.join(personaDir, fileName);
|
|
127
|
+
const template = loadTemplateContent(fileName);
|
|
128
|
+
const created = await writeFileIfMissing(filePath, template);
|
|
129
|
+
if (created) {
|
|
130
|
+
filesCreated.push(fileName);
|
|
131
|
+
logger.info('Created persona file', { file: fileName, dir: personaDir });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const bootstrapPath = path.join(personaDir, 'BOOTSTRAP.md');
|
|
135
|
+
let bootstrapExists = true;
|
|
136
|
+
try {
|
|
137
|
+
await fsp.access(bootstrapPath);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
bootstrapExists = false;
|
|
141
|
+
}
|
|
142
|
+
if (bootstrapExists && !state.bootstrapSeededAt) {
|
|
143
|
+
state = { ...state, bootstrapSeededAt: now };
|
|
144
|
+
}
|
|
145
|
+
if (!state.setupCompletedAt) {
|
|
146
|
+
const identityPath = path.join(personaDir, 'IDENTITY.md');
|
|
147
|
+
const userPath = path.join(personaDir, 'USER.md');
|
|
148
|
+
const identityTemplate = loadTemplateContent('IDENTITY.md');
|
|
149
|
+
const userTemplate = loadTemplateContent('USER.md');
|
|
150
|
+
const identityChanged = await fileContentDiffersFromTemplate(identityPath, identityTemplate);
|
|
151
|
+
const userChanged = await fileContentDiffersFromTemplate(userPath, userTemplate);
|
|
152
|
+
if ((identityChanged || userChanged) && !bootstrapExists) {
|
|
153
|
+
state = { ...state, setupCompletedAt: now };
|
|
154
|
+
logger.info('Persona setup detected as complete (user-modified files)');
|
|
155
|
+
}
|
|
156
|
+
else if (!bootstrapExists && state.bootstrapSeededAt && !state.setupCompletedAt) {
|
|
157
|
+
if (identityChanged || userChanged) {
|
|
158
|
+
state = { ...state, setupCompletedAt: now };
|
|
159
|
+
logger.info('Persona setup auto-completed (seeded + files modified + bootstrap deleted)');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
await writeState(personaDir, state);
|
|
164
|
+
const status = state.setupCompletedAt ? 'complete' : 'pending';
|
|
165
|
+
return { status, filesCreated, state };
|
|
166
|
+
}
|
|
167
|
+
export async function ensureGlobalPersonaFiles(configHome) {
|
|
168
|
+
const personaDir = getGlobalPersonaDir(configHome);
|
|
169
|
+
const result = await ensurePersonaFiles(personaDir);
|
|
170
|
+
return { ...result, personaDir };
|
|
171
|
+
}
|
|
172
|
+
export async function validatePersonaFiles(personaDir) {
|
|
173
|
+
const missing = [];
|
|
174
|
+
const templateFiles = [];
|
|
175
|
+
for (const fileName of ['SOUL.md', 'IDENTITY.md', 'USER.md']) {
|
|
176
|
+
const filePath = path.join(personaDir, fileName);
|
|
177
|
+
let content;
|
|
178
|
+
try {
|
|
179
|
+
content = await fsp.readFile(filePath, 'utf-8');
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
const code = err.code;
|
|
183
|
+
if (code === 'ENOENT') {
|
|
184
|
+
missing.push(fileName);
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
throw err;
|
|
188
|
+
}
|
|
189
|
+
const template = loadTemplateContent(fileName);
|
|
190
|
+
if (content === template) {
|
|
191
|
+
templateFiles.push(fileName);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
// 内容 ≠ 模板 → 视为已填写。不要求特定字段格式(如"名字:"等),
|
|
195
|
+
// 因为 bootstrap 对话中模型可能用不同格式书写,不应因此阻塞完成标记。
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
complete: missing.length === 0 && templateFiles.length === 0,
|
|
199
|
+
missing,
|
|
200
|
+
templateFiles,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
export function validatePersonaFilesSync(personaDir) {
|
|
204
|
+
const missing = [];
|
|
205
|
+
const templateFiles = [];
|
|
206
|
+
for (const fileName of ['SOUL.md', 'IDENTITY.md', 'USER.md']) {
|
|
207
|
+
const filePath = path.join(personaDir, fileName);
|
|
208
|
+
let content;
|
|
209
|
+
try {
|
|
210
|
+
content = fs.readFileSync(filePath, 'utf-8');
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
const code = err.code;
|
|
214
|
+
if (code === 'ENOENT') {
|
|
215
|
+
missing.push(fileName);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
throw err;
|
|
219
|
+
}
|
|
220
|
+
const template = loadTemplateContent(fileName);
|
|
221
|
+
if (content === template) {
|
|
222
|
+
templateFiles.push(fileName);
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
complete: missing.length === 0 && templateFiles.length === 0,
|
|
228
|
+
missing,
|
|
229
|
+
templateFiles,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
export async function isBootstrapComplete(personaDir) {
|
|
233
|
+
const state = await readState(personaDir);
|
|
234
|
+
if (!state.setupCompletedAt)
|
|
235
|
+
return false;
|
|
236
|
+
const validation = await validatePersonaFiles(personaDir);
|
|
237
|
+
return validation.complete;
|
|
238
|
+
}
|
|
239
|
+
export async function getBootstrapStatus(personaDir) {
|
|
240
|
+
const state = await readState(personaDir);
|
|
241
|
+
if (state.setupCompletedAt) {
|
|
242
|
+
const validation = await validatePersonaFiles(personaDir);
|
|
243
|
+
return validation.complete ? 'complete' : 'pending';
|
|
244
|
+
}
|
|
245
|
+
const bootstrapPath = path.join(personaDir, 'BOOTSTRAP.md');
|
|
246
|
+
try {
|
|
247
|
+
await fsp.access(bootstrapPath);
|
|
248
|
+
return 'pending';
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return 'complete';
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
export async function markBootstrapComplete(personaDir) {
|
|
255
|
+
const validation = await validatePersonaFiles(personaDir);
|
|
256
|
+
if (!validation.complete) {
|
|
257
|
+
const details = [
|
|
258
|
+
validation.missing.length > 0 ? `missing: ${validation.missing.join(', ')}` : '',
|
|
259
|
+
validation.templateFiles.length > 0 ? `templates: ${validation.templateFiles.join(', ')}` : '',
|
|
260
|
+
].filter(Boolean).join('; ');
|
|
261
|
+
throw new Error(`Persona bootstrap is incomplete${details ? ` (${details})` : ''}.`);
|
|
262
|
+
}
|
|
263
|
+
const bootstrapPath = path.join(personaDir, 'BOOTSTRAP.md');
|
|
264
|
+
try {
|
|
265
|
+
await fsp.unlink(bootstrapPath);
|
|
266
|
+
logger.info('Deleted BOOTSTRAP.md');
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
const code = err.code;
|
|
270
|
+
if (code !== 'ENOENT')
|
|
271
|
+
throw err;
|
|
272
|
+
}
|
|
273
|
+
const state = await readState(personaDir);
|
|
274
|
+
state.setupCompletedAt = new Date().toISOString();
|
|
275
|
+
await writeState(personaDir, state);
|
|
276
|
+
logger.info('Bootstrap marked as complete');
|
|
277
|
+
}
|
|
278
|
+
export function markBootstrapCompleteSync(personaDir) {
|
|
279
|
+
const validation = validatePersonaFilesSync(personaDir);
|
|
280
|
+
if (!validation.complete) {
|
|
281
|
+
const details = [
|
|
282
|
+
validation.missing.length > 0 ? `missing: ${validation.missing.join(', ')}` : '',
|
|
283
|
+
validation.templateFiles.length > 0 ? `templates: ${validation.templateFiles.join(', ')}` : '',
|
|
284
|
+
].filter(Boolean).join('; ');
|
|
285
|
+
throw new Error(`Persona bootstrap is incomplete${details ? ` (${details})` : ''}.`);
|
|
286
|
+
}
|
|
287
|
+
const bootstrapPath = path.join(personaDir, 'BOOTSTRAP.md');
|
|
288
|
+
try {
|
|
289
|
+
fs.unlinkSync(bootstrapPath);
|
|
290
|
+
logger.info('Deleted BOOTSTRAP.md');
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
const code = err.code;
|
|
294
|
+
if (code !== 'ENOENT')
|
|
295
|
+
throw err;
|
|
296
|
+
}
|
|
297
|
+
const state = readStateSync(personaDir);
|
|
298
|
+
state.setupCompletedAt = new Date().toISOString();
|
|
299
|
+
writeStateSync(personaDir, state);
|
|
300
|
+
logger.info('Bootstrap marked as complete');
|
|
301
|
+
}
|
|
302
|
+
function readStateSync(personaDir) {
|
|
303
|
+
const statePath = resolveStatePath(personaDir);
|
|
304
|
+
try {
|
|
305
|
+
const raw = fs.readFileSync(statePath, 'utf-8');
|
|
306
|
+
const parsed = JSON.parse(raw);
|
|
307
|
+
if (parsed && typeof parsed === 'object' && parsed.version === PERSONA_STATE_VERSION) {
|
|
308
|
+
return parsed;
|
|
309
|
+
}
|
|
310
|
+
return { version: PERSONA_STATE_VERSION };
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
const code = err.code;
|
|
314
|
+
if (code === 'ENOENT')
|
|
315
|
+
return { version: PERSONA_STATE_VERSION };
|
|
316
|
+
throw err;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
function writeStateSync(personaDir, state) {
|
|
320
|
+
const stateDir = path.join(personaDir, PERSONA_STATE_DIR);
|
|
321
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
322
|
+
fs.writeFileSync(resolveStatePath(personaDir), JSON.stringify(state, null, 2) + '\n', 'utf-8');
|
|
323
|
+
}
|
|
324
|
+
export async function loadPersonaFiles(personaDir, cwdFallback) {
|
|
325
|
+
const files = [];
|
|
326
|
+
for (const fileName of PERSONA_FILE_NAMES) {
|
|
327
|
+
const filePath = path.join(personaDir, fileName);
|
|
328
|
+
try {
|
|
329
|
+
const content = await fsp.readFile(filePath, 'utf-8');
|
|
330
|
+
files.push({ name: fileName, path: filePath, content, missing: false });
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
const code = err.code;
|
|
334
|
+
if (code === 'ENOENT') {
|
|
335
|
+
if (cwdFallback) {
|
|
336
|
+
const cwdPath = path.join(cwdFallback, fileName);
|
|
337
|
+
try {
|
|
338
|
+
const cwdContent = await fsp.readFile(cwdPath, 'utf-8');
|
|
339
|
+
files.push({ name: fileName, path: cwdPath, content: cwdContent, missing: false });
|
|
340
|
+
}
|
|
341
|
+
catch {
|
|
342
|
+
files.push({ name: fileName, path: filePath, content: undefined, missing: true });
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
files.push({ name: fileName, path: filePath, content: undefined, missing: true });
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
throw err;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
if (cwdFallback) {
|
|
355
|
+
for (let i = 0; i < files.length; i++) {
|
|
356
|
+
const f = files[i];
|
|
357
|
+
if (f.name === 'BOOTSTRAP.md')
|
|
358
|
+
continue;
|
|
359
|
+
const template = loadTemplateContent(f.name);
|
|
360
|
+
if (f.content === template || !f.content) {
|
|
361
|
+
const cwdPath = path.join(cwdFallback, f.name);
|
|
362
|
+
try {
|
|
363
|
+
const cwdContent = await fsp.readFile(cwdPath, 'utf-8');
|
|
364
|
+
if (cwdContent !== template) {
|
|
365
|
+
files[i] = { name: f.name, path: cwdPath, content: cwdContent, missing: false };
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
// cwd version doesn't exist either — keep persona version
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return files;
|
|
375
|
+
}
|
|
376
|
+
export async function getPersonaState(personaDir) {
|
|
377
|
+
return readState(personaDir);
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=persona-bootstrap.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type AgentConfig } from './config.js';
|
|
2
|
+
export interface SetupResult {
|
|
3
|
+
config: AgentConfig;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
/** 用户是否选择完成后进入 TUI */
|
|
6
|
+
enterTui: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare class SetupWizard {
|
|
9
|
+
private configManager;
|
|
10
|
+
constructor();
|
|
11
|
+
/** 运行完整向导 */
|
|
12
|
+
run(existingConfig?: AgentConfig): Promise<SetupResult>;
|
|
13
|
+
/** Step 1: Provider */
|
|
14
|
+
private stepProvider;
|
|
15
|
+
/** Step 2: API Key */
|
|
16
|
+
private stepApiKey;
|
|
17
|
+
/** Step 3: Model */
|
|
18
|
+
private stepModel;
|
|
19
|
+
/** Step 4: maxContext — 自动根据模型推荐,允许修改 */
|
|
20
|
+
private stepMaxContext;
|
|
21
|
+
/** Step 5: Confirm */
|
|
22
|
+
private stepConfirm;
|
|
23
|
+
/** Step 2.5: llama.cpp setup (local provider) */
|
|
24
|
+
private stepLlamaCpp;
|
|
25
|
+
/** 执行 setup-llamacpp.ps1 并实时展示输出 */
|
|
26
|
+
private runSetupLlamaCpp;
|
|
27
|
+
/** Step 2.6: 模型文件下载引导 */
|
|
28
|
+
private stepModelDownload;
|
|
29
|
+
/** 用户取消时的处理 */
|
|
30
|
+
private cancel;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=wizard.d.ts.map
|