dsh-tavern-bundle 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +216 -0
- package/cordis.patch.yml +14 -0
- package/lib/adapters/model-gateway.d.ts +4 -0
- package/lib/adapters/model-gateway.d.ts.map +1 -0
- package/lib/adapters/model-gateway.js +3 -0
- package/lib/adapters/model-gateway.js.map +1 -0
- package/lib/adapters/prestep-spike.d.ts +16 -0
- package/lib/adapters/prestep-spike.d.ts.map +1 -0
- package/lib/adapters/prestep-spike.js +114 -0
- package/lib/adapters/prestep-spike.js.map +1 -0
- package/lib/adapters/runtime-probe.d.ts +67 -0
- package/lib/adapters/runtime-probe.d.ts.map +1 -0
- package/lib/adapters/runtime-probe.js +106 -0
- package/lib/adapters/runtime-probe.js.map +1 -0
- package/lib/adapters/session-agent-provider.d.ts +3 -0
- package/lib/adapters/session-agent-provider.d.ts.map +1 -0
- package/lib/adapters/session-agent-provider.js +3 -0
- package/lib/adapters/session-agent-provider.js.map +1 -0
- package/lib/adapters/subagent-gateway.d.ts +3 -0
- package/lib/adapters/subagent-gateway.d.ts.map +1 -0
- package/lib/adapters/subagent-gateway.js +3 -0
- package/lib/adapters/subagent-gateway.js.map +1 -0
- package/lib/application/chat/chat-application-service.d.ts +94 -0
- package/lib/application/chat/chat-application-service.d.ts.map +1 -0
- package/lib/application/chat/chat-application-service.js +291 -0
- package/lib/application/chat/chat-application-service.js.map +1 -0
- package/lib/application/companion/agent-orchestrator.d.ts +91 -0
- package/lib/application/companion/agent-orchestrator.d.ts.map +1 -0
- package/lib/application/companion/agent-orchestrator.js +298 -0
- package/lib/application/companion/agent-orchestrator.js.map +1 -0
- package/lib/application/companion/companion-child-service.d.ts +47 -0
- package/lib/application/companion/companion-child-service.d.ts.map +1 -0
- package/lib/application/companion/companion-child-service.js +30 -0
- package/lib/application/companion/companion-child-service.js.map +1 -0
- package/lib/application/companion/companion-invocation-service.d.ts +42 -0
- package/lib/application/companion/companion-invocation-service.d.ts.map +1 -0
- package/lib/application/companion/companion-invocation-service.js +50 -0
- package/lib/application/companion/companion-invocation-service.js.map +1 -0
- package/lib/application/companion/companion-profile-service.d.ts +32 -0
- package/lib/application/companion/companion-profile-service.d.ts.map +1 -0
- package/lib/application/companion/companion-profile-service.js +112 -0
- package/lib/application/companion/companion-profile-service.js.map +1 -0
- package/lib/application/companion/companion-promotion-service.d.ts +69 -0
- package/lib/application/companion/companion-promotion-service.d.ts.map +1 -0
- package/lib/application/companion/companion-promotion-service.js +129 -0
- package/lib/application/companion/companion-promotion-service.js.map +1 -0
- package/lib/application/group-chat/group-chat-execution-service.d.ts +22 -0
- package/lib/application/group-chat/group-chat-execution-service.d.ts.map +1 -0
- package/lib/application/group-chat/group-chat-execution-service.js +110 -0
- package/lib/application/group-chat/group-chat-execution-service.js.map +1 -0
- package/lib/application/group-chat/group-chat-orchestrator.d.ts +51 -0
- package/lib/application/group-chat/group-chat-orchestrator.d.ts.map +1 -0
- package/lib/application/group-chat/group-chat-orchestrator.js +57 -0
- package/lib/application/group-chat/group-chat-orchestrator.js.map +1 -0
- package/lib/application/memory/memory-retriever.d.ts +37 -0
- package/lib/application/memory/memory-retriever.d.ts.map +1 -0
- package/lib/application/memory/memory-retriever.js +91 -0
- package/lib/application/memory/memory-retriever.js.map +1 -0
- package/lib/application/memory/memory-service.d.ts +128 -0
- package/lib/application/memory/memory-service.d.ts.map +1 -0
- package/lib/application/memory/memory-service.js +346 -0
- package/lib/application/memory/memory-service.js.map +1 -0
- package/lib/application/ports/companion-runtime-port.d.ts +72 -0
- package/lib/application/ports/companion-runtime-port.d.ts.map +1 -0
- package/lib/application/ports/companion-runtime-port.js +2 -0
- package/lib/application/ports/companion-runtime-port.js.map +1 -0
- package/lib/application/ports/llm-port.d.ts +7 -0
- package/lib/application/ports/llm-port.d.ts.map +1 -0
- package/lib/application/ports/llm-port.js +2 -0
- package/lib/application/ports/llm-port.js.map +1 -0
- package/lib/application/ports/message-source.d.ts +4 -0
- package/lib/application/ports/message-source.d.ts.map +1 -0
- package/lib/application/ports/message-source.js +5 -0
- package/lib/application/ports/message-source.js.map +1 -0
- package/lib/application/ports/session-context-port.d.ts +13 -0
- package/lib/application/ports/session-context-port.d.ts.map +1 -0
- package/lib/application/ports/session-context-port.js +2 -0
- package/lib/application/ports/session-context-port.js.map +1 -0
- package/lib/application/ports/subagent-port.d.ts +31 -0
- package/lib/application/ports/subagent-port.d.ts.map +1 -0
- package/lib/application/ports/subagent-port.js +2 -0
- package/lib/application/ports/subagent-port.js.map +1 -0
- package/lib/application/ports/user-resolver-port.d.ts +5 -0
- package/lib/application/ports/user-resolver-port.d.ts.map +1 -0
- package/lib/application/ports/user-resolver-port.js +2 -0
- package/lib/application/ports/user-resolver-port.js.map +1 -0
- package/lib/application/relationship/relationship-event-service.d.ts +31 -0
- package/lib/application/relationship/relationship-event-service.d.ts.map +1 -0
- package/lib/application/relationship/relationship-event-service.js +43 -0
- package/lib/application/relationship/relationship-event-service.js.map +1 -0
- package/lib/application/relationship/relationship-policy.d.ts +20 -0
- package/lib/application/relationship/relationship-policy.d.ts.map +1 -0
- package/lib/application/relationship/relationship-policy.js +24 -0
- package/lib/application/relationship/relationship-policy.js.map +1 -0
- package/lib/application/relationship/relationship-projection.d.ts +14 -0
- package/lib/application/relationship/relationship-projection.d.ts.map +1 -0
- package/lib/application/relationship/relationship-projection.js +25 -0
- package/lib/application/relationship/relationship-projection.js.map +1 -0
- package/lib/application/relationship/relationship-service.d.ts +95 -0
- package/lib/application/relationship/relationship-service.d.ts.map +1 -0
- package/lib/application/relationship/relationship-service.js +254 -0
- package/lib/application/relationship/relationship-service.js.map +1 -0
- package/lib/application/workspace/workspace-service.d.ts +106 -0
- package/lib/application/workspace/workspace-service.d.ts.map +1 -0
- package/lib/application/workspace/workspace-service.js +44 -0
- package/lib/application/workspace/workspace-service.js.map +1 -0
- package/lib/bootstrap/create-domain.d.ts +5 -0
- package/lib/bootstrap/create-domain.d.ts.map +1 -0
- package/lib/bootstrap/create-domain.js +14 -0
- package/lib/bootstrap/create-domain.js.map +1 -0
- package/lib/bootstrap/create-repositories.d.ts +403 -0
- package/lib/bootstrap/create-repositories.d.ts.map +1 -0
- package/lib/bootstrap/create-repositories.js +39 -0
- package/lib/bootstrap/create-repositories.js.map +1 -0
- package/lib/bootstrap/create-runtime.d.ts +8 -0
- package/lib/bootstrap/create-runtime.d.ts.map +1 -0
- package/lib/bootstrap/create-runtime.js +10 -0
- package/lib/bootstrap/create-runtime.js.map +1 -0
- package/lib/bootstrap/create-services.d.ts +52 -0
- package/lib/bootstrap/create-services.d.ts.map +1 -0
- package/lib/bootstrap/create-services.js +79 -0
- package/lib/bootstrap/create-services.js.map +1 -0
- package/lib/bootstrap/install-commands.d.ts +4 -0
- package/lib/bootstrap/install-commands.d.ts.map +1 -0
- package/lib/bootstrap/install-commands.js +322 -0
- package/lib/bootstrap/install-commands.js.map +1 -0
- package/lib/bootstrap/install-http.d.ts +7 -0
- package/lib/bootstrap/install-http.d.ts.map +1 -0
- package/lib/bootstrap/install-http.js +265 -0
- package/lib/bootstrap/install-http.js.map +1 -0
- package/lib/bootstrap/lifecycle.d.ts +14 -0
- package/lib/bootstrap/lifecycle.d.ts.map +1 -0
- package/lib/bootstrap/lifecycle.js +56 -0
- package/lib/bootstrap/lifecycle.js.map +1 -0
- package/lib/bootstrap/types.d.ts +9 -0
- package/lib/bootstrap/types.d.ts.map +1 -0
- package/lib/bootstrap/types.js +2 -0
- package/lib/bootstrap/types.js.map +1 -0
- package/lib/client.js +6 -0
- package/lib/client.js.map +1 -0
- package/lib/core/audit-service.d.ts +43 -0
- package/lib/core/audit-service.d.ts.map +1 -0
- package/lib/core/audit-service.js +75 -0
- package/lib/core/audit-service.js.map +1 -0
- package/lib/core/candidate-extractor.d.ts +31 -0
- package/lib/core/candidate-extractor.d.ts.map +1 -0
- package/lib/core/candidate-extractor.js +83 -0
- package/lib/core/candidate-extractor.js.map +1 -0
- package/lib/core/candidate-service.d.ts +72 -0
- package/lib/core/candidate-service.d.ts.map +1 -0
- package/lib/core/candidate-service.js +283 -0
- package/lib/core/candidate-service.js.map +1 -0
- package/lib/core/character-service.d.ts +26 -0
- package/lib/core/character-service.d.ts.map +1 -0
- package/lib/core/character-service.js +68 -0
- package/lib/core/character-service.js.map +1 -0
- package/lib/core/chat-file-io.d.ts +28 -0
- package/lib/core/chat-file-io.d.ts.map +1 -0
- package/lib/core/chat-file-io.js +114 -0
- package/lib/core/chat-file-io.js.map +1 -0
- package/lib/core/chat-service.d.ts +4 -0
- package/lib/core/chat-service.d.ts.map +1 -0
- package/lib/core/chat-service.js +3 -0
- package/lib/core/chat-service.js.map +1 -0
- package/lib/core/command-arguments.d.ts +2 -0
- package/lib/core/command-arguments.d.ts.map +1 -0
- package/lib/core/command-arguments.js +42 -0
- package/lib/core/command-arguments.js.map +1 -0
- package/lib/core/companion-child-agent-service.d.ts +3 -0
- package/lib/core/companion-child-agent-service.d.ts.map +1 -0
- package/lib/core/companion-child-agent-service.js +3 -0
- package/lib/core/companion-child-agent-service.js.map +1 -0
- package/lib/core/companion-invocation-service.d.ts +3 -0
- package/lib/core/companion-invocation-service.d.ts.map +1 -0
- package/lib/core/companion-invocation-service.js +3 -0
- package/lib/core/companion-invocation-service.js.map +1 -0
- package/lib/core/companion-profile-service.d.ts +3 -0
- package/lib/core/companion-profile-service.d.ts.map +1 -0
- package/lib/core/companion-profile-service.js +3 -0
- package/lib/core/companion-profile-service.js.map +1 -0
- package/lib/core/companion-promotion-service.d.ts +3 -0
- package/lib/core/companion-promotion-service.d.ts.map +1 -0
- package/lib/core/companion-promotion-service.js +3 -0
- package/lib/core/companion-promotion-service.js.map +1 -0
- package/lib/core/context-assembler.d.ts +92 -0
- package/lib/core/context-assembler.d.ts.map +1 -0
- package/lib/core/context-assembler.js +185 -0
- package/lib/core/context-assembler.js.map +1 -0
- package/lib/core/conversation-repository.d.ts +42 -0
- package/lib/core/conversation-repository.d.ts.map +1 -0
- package/lib/core/conversation-repository.js +94 -0
- package/lib/core/conversation-repository.js.map +1 -0
- package/lib/core/group-chat-execution-service.d.ts +3 -0
- package/lib/core/group-chat-execution-service.d.ts.map +1 -0
- package/lib/core/group-chat-execution-service.js +3 -0
- package/lib/core/group-chat-execution-service.js.map +1 -0
- package/lib/core/group-chat-orchestrator.d.ts +3 -0
- package/lib/core/group-chat-orchestrator.d.ts.map +1 -0
- package/lib/core/group-chat-orchestrator.js +3 -0
- package/lib/core/group-chat-orchestrator.js.map +1 -0
- package/lib/core/memory-retriever.d.ts +3 -0
- package/lib/core/memory-retriever.d.ts.map +1 -0
- package/lib/core/memory-retriever.js +3 -0
- package/lib/core/memory-retriever.js.map +1 -0
- package/lib/core/memory-service.d.ts +3 -0
- package/lib/core/memory-service.d.ts.map +1 -0
- package/lib/core/memory-service.js +3 -0
- package/lib/core/memory-service.js.map +1 -0
- package/lib/core/personality-candidate-service.d.ts +46 -0
- package/lib/core/personality-candidate-service.d.ts.map +1 -0
- package/lib/core/personality-candidate-service.js +65 -0
- package/lib/core/personality-candidate-service.js.map +1 -0
- package/lib/core/prompt-assembler.d.ts +43 -0
- package/lib/core/prompt-assembler.d.ts.map +1 -0
- package/lib/core/prompt-assembler.js +67 -0
- package/lib/core/prompt-assembler.js.map +1 -0
- package/lib/core/relationship-event-service.d.ts +3 -0
- package/lib/core/relationship-event-service.d.ts.map +1 -0
- package/lib/core/relationship-event-service.js +3 -0
- package/lib/core/relationship-event-service.js.map +1 -0
- package/lib/core/relationship-policy.d.ts +3 -0
- package/lib/core/relationship-policy.d.ts.map +1 -0
- package/lib/core/relationship-policy.js +3 -0
- package/lib/core/relationship-policy.js.map +1 -0
- package/lib/core/relationship-projection.d.ts +3 -0
- package/lib/core/relationship-projection.d.ts.map +1 -0
- package/lib/core/relationship-projection.js +3 -0
- package/lib/core/relationship-projection.js.map +1 -0
- package/lib/core/relationship-service.d.ts +3 -0
- package/lib/core/relationship-service.d.ts.map +1 -0
- package/lib/core/relationship-service.js +3 -0
- package/lib/core/relationship-service.js.map +1 -0
- package/lib/core/roleplay-contract.d.ts +11 -0
- package/lib/core/roleplay-contract.d.ts.map +1 -0
- package/lib/core/roleplay-contract.js +27 -0
- package/lib/core/roleplay-contract.js.map +1 -0
- package/lib/core/runtime-binding-service.d.ts +19 -0
- package/lib/core/runtime-binding-service.d.ts.map +1 -0
- package/lib/core/runtime-binding-service.js +66 -0
- package/lib/core/runtime-binding-service.js.map +1 -0
- package/lib/core/scene-service.d.ts +60 -0
- package/lib/core/scene-service.d.ts.map +1 -0
- package/lib/core/scene-service.js +212 -0
- package/lib/core/scene-service.js.map +1 -0
- package/lib/core/session-binding-service.d.ts +51 -0
- package/lib/core/session-binding-service.d.ts.map +1 -0
- package/lib/core/session-binding-service.js +106 -0
- package/lib/core/session-binding-service.js.map +1 -0
- package/lib/core/skill-service.d.ts +82 -0
- package/lib/core/skill-service.d.ts.map +1 -0
- package/lib/core/skill-service.js +45 -0
- package/lib/core/skill-service.js.map +1 -0
- package/lib/core/tavern-session-bridge.d.ts +3 -0
- package/lib/core/tavern-session-bridge.d.ts.map +1 -0
- package/lib/core/tavern-session-bridge.js +3 -0
- package/lib/core/tavern-session-bridge.js.map +1 -0
- package/lib/core/user-resolver.d.ts +15 -0
- package/lib/core/user-resolver.d.ts.map +1 -0
- package/lib/core/user-resolver.js +17 -0
- package/lib/core/user-resolver.js.map +1 -0
- package/lib/core/workspace-service.d.ts +3 -0
- package/lib/core/workspace-service.d.ts.map +1 -0
- package/lib/core/workspace-service.js +3 -0
- package/lib/core/workspace-service.js.map +1 -0
- package/lib/core/workspace-session-service.d.ts +11 -0
- package/lib/core/workspace-session-service.d.ts.map +1 -0
- package/lib/core/workspace-session-service.js +14 -0
- package/lib/core/workspace-session-service.js.map +1 -0
- package/lib/domain/schemas.d.ts +1173 -0
- package/lib/domain/schemas.d.ts.map +1 -0
- package/lib/domain/schemas.js +590 -0
- package/lib/domain/schemas.js.map +1 -0
- package/lib/domain/spec.d.ts +494 -0
- package/lib/domain/spec.d.ts.map +1 -0
- package/lib/domain/spec.js +63 -0
- package/lib/domain/spec.js.map +1 -0
- package/lib/import/artifact-service.d.ts +33 -0
- package/lib/import/artifact-service.d.ts.map +1 -0
- package/lib/import/artifact-service.js +67 -0
- package/lib/import/artifact-service.js.map +1 -0
- package/lib/import/import-service.d.ts +30 -0
- package/lib/import/import-service.d.ts.map +1 -0
- package/lib/import/import-service.js +154 -0
- package/lib/import/import-service.js.map +1 -0
- package/lib/import/parser.d.ts +81 -0
- package/lib/import/parser.d.ts.map +1 -0
- package/lib/import/parser.js +423 -0
- package/lib/import/parser.js.map +1 -0
- package/lib/index.d.ts +60 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +111 -0
- package/lib/index.js.map +1 -0
- package/lib/infrastructure/dsh/llm/llm-port.d.ts +3 -0
- package/lib/infrastructure/dsh/llm/llm-port.d.ts.map +1 -0
- package/lib/infrastructure/dsh/llm/llm-port.js +2 -0
- package/lib/infrastructure/dsh/llm/llm-port.js.map +1 -0
- package/lib/infrastructure/dsh/llm/model-gateway.d.ts +10 -0
- package/lib/infrastructure/dsh/llm/model-gateway.d.ts.map +1 -0
- package/lib/infrastructure/dsh/llm/model-gateway.js +21 -0
- package/lib/infrastructure/dsh/llm/model-gateway.js.map +1 -0
- package/lib/infrastructure/dsh/session/session-agent-provider.d.ts +28 -0
- package/lib/infrastructure/dsh/session/session-agent-provider.d.ts.map +1 -0
- package/lib/infrastructure/dsh/session/session-agent-provider.js +40 -0
- package/lib/infrastructure/dsh/session/session-agent-provider.js.map +1 -0
- package/lib/infrastructure/dsh/session/tavern-session-bridge.d.ts +142 -0
- package/lib/infrastructure/dsh/session/tavern-session-bridge.d.ts.map +1 -0
- package/lib/infrastructure/dsh/session/tavern-session-bridge.js +544 -0
- package/lib/infrastructure/dsh/session/tavern-session-bridge.js.map +1 -0
- package/lib/infrastructure/dsh/subagent/subagent-gateway.d.ts +63 -0
- package/lib/infrastructure/dsh/subagent/subagent-gateway.d.ts.map +1 -0
- package/lib/infrastructure/dsh/subagent/subagent-gateway.js +70 -0
- package/lib/infrastructure/dsh/subagent/subagent-gateway.js.map +1 -0
- package/lib/infrastructure/runtime/companion-runtime.d.ts +128 -0
- package/lib/infrastructure/runtime/companion-runtime.d.ts.map +1 -0
- package/lib/infrastructure/runtime/companion-runtime.js +127 -0
- package/lib/infrastructure/runtime/companion-runtime.js.map +1 -0
- package/lib/infrastructure/runtime/runtime-factory.d.ts +10 -0
- package/lib/infrastructure/runtime/runtime-factory.d.ts.map +1 -0
- package/lib/infrastructure/runtime/runtime-factory.js +14 -0
- package/lib/infrastructure/runtime/runtime-factory.js.map +1 -0
- package/lib/interfaces/http/chat/chat-http.d.ts +23 -0
- package/lib/interfaces/http/chat/chat-http.d.ts.map +1 -0
- package/lib/interfaces/http/chat/chat-http.js +310 -0
- package/lib/interfaces/http/chat/chat-http.js.map +1 -0
- package/lib/interfaces/http/companion/companion-http.d.ts +8 -0
- package/lib/interfaces/http/companion/companion-http.d.ts.map +1 -0
- package/lib/interfaces/http/companion/companion-http.js +76 -0
- package/lib/interfaces/http/companion/companion-http.js.map +1 -0
- package/lib/interfaces/http/companion/promotion-http.d.ts +6 -0
- package/lib/interfaces/http/companion/promotion-http.d.ts.map +1 -0
- package/lib/interfaces/http/companion/promotion-http.js +25 -0
- package/lib/interfaces/http/companion/promotion-http.js.map +1 -0
- package/lib/interfaces/http/companion/runtime-http.d.ts +13 -0
- package/lib/interfaces/http/companion/runtime-http.d.ts.map +1 -0
- package/lib/interfaces/http/companion/runtime-http.js +51 -0
- package/lib/interfaces/http/companion/runtime-http.js.map +1 -0
- package/lib/interfaces/http/companion/stage4-companion-http.d.ts +30 -0
- package/lib/interfaces/http/companion/stage4-companion-http.d.ts.map +1 -0
- package/lib/interfaces/http/companion/stage4-companion-http.js +149 -0
- package/lib/interfaces/http/companion/stage4-companion-http.js.map +1 -0
- package/lib/interfaces/http/group/group-http.d.ts +11 -0
- package/lib/interfaces/http/group/group-http.d.ts.map +1 -0
- package/lib/interfaces/http/group/group-http.js +77 -0
- package/lib/interfaces/http/group/group-http.js.map +1 -0
- package/lib/interfaces/http/memory/candidate-http.d.ts +8 -0
- package/lib/interfaces/http/memory/candidate-http.d.ts.map +1 -0
- package/lib/interfaces/http/memory/candidate-http.js +86 -0
- package/lib/interfaces/http/memory/candidate-http.js.map +1 -0
- package/lib/interfaces/http/relationship/companion-relationship-http.d.ts +7 -0
- package/lib/interfaces/http/relationship/companion-relationship-http.d.ts.map +1 -0
- package/lib/interfaces/http/relationship/companion-relationship-http.js +30 -0
- package/lib/interfaces/http/relationship/companion-relationship-http.js.map +1 -0
- package/lib/interfaces/http/workspace/workspace-http.d.ts +19 -0
- package/lib/interfaces/http/workspace/workspace-http.d.ts.map +1 -0
- package/lib/interfaces/http/workspace/workspace-http.js +78 -0
- package/lib/interfaces/http/workspace/workspace-http.js.map +1 -0
- package/lib/interfaces/read-model/tavern-read-api.d.ts +44 -0
- package/lib/interfaces/read-model/tavern-read-api.d.ts.map +1 -0
- package/lib/interfaces/read-model/tavern-read-api.js +189 -0
- package/lib/interfaces/read-model/tavern-read-api.js.map +1 -0
- package/lib/remote/candidate-api.d.ts +3 -0
- package/lib/remote/candidate-api.d.ts.map +1 -0
- package/lib/remote/candidate-api.js +3 -0
- package/lib/remote/candidate-api.js.map +1 -0
- package/lib/remote/chat-api.d.ts +3 -0
- package/lib/remote/chat-api.d.ts.map +1 -0
- package/lib/remote/chat-api.js +3 -0
- package/lib/remote/chat-api.js.map +1 -0
- package/lib/remote/companion-api.d.ts +3 -0
- package/lib/remote/companion-api.d.ts.map +1 -0
- package/lib/remote/companion-api.js +3 -0
- package/lib/remote/companion-api.js.map +1 -0
- package/lib/remote/companion-promotion-api.d.ts +3 -0
- package/lib/remote/companion-promotion-api.d.ts.map +1 -0
- package/lib/remote/companion-promotion-api.js +3 -0
- package/lib/remote/companion-promotion-api.js.map +1 -0
- package/lib/remote/import-http.d.ts +29 -0
- package/lib/remote/import-http.d.ts.map +1 -0
- package/lib/remote/import-http.js +106 -0
- package/lib/remote/import-http.js.map +1 -0
- package/lib/remote/stage4-api.d.ts +6 -0
- package/lib/remote/stage4-api.d.ts.map +1 -0
- package/lib/remote/stage4-api.js +4 -0
- package/lib/remote/stage4-api.js.map +1 -0
- package/lib/remote/stage5-runtime-api.d.ts +4 -0
- package/lib/remote/stage5-runtime-api.d.ts.map +1 -0
- package/lib/remote/stage5-runtime-api.js +2 -0
- package/lib/remote/stage5-runtime-api.js.map +1 -0
- package/lib/remote/stage6-group-api.d.ts +4 -0
- package/lib/remote/stage6-group-api.d.ts.map +1 -0
- package/lib/remote/stage6-group-api.js +2 -0
- package/lib/remote/stage6-group-api.js.map +1 -0
- package/lib/remote/tavern-api.d.ts +3 -0
- package/lib/remote/tavern-api.d.ts.map +1 -0
- package/lib/remote/tavern-api.js +3 -0
- package/lib/remote/tavern-api.js.map +1 -0
- package/lib/runtime/agent-orchestrator.d.ts +3 -0
- package/lib/runtime/agent-orchestrator.d.ts.map +1 -0
- package/lib/runtime/agent-orchestrator.js +3 -0
- package/lib/runtime/agent-orchestrator.js.map +1 -0
- package/lib/runtime/companion-runtime.d.ts +3 -0
- package/lib/runtime/companion-runtime.d.ts.map +1 -0
- package/lib/runtime/companion-runtime.js +3 -0
- package/lib/runtime/companion-runtime.js.map +1 -0
- package/lib/runtime/langgraph-graph.d.ts +32 -0
- package/lib/runtime/langgraph-graph.d.ts.map +1 -0
- package/lib/runtime/langgraph-graph.js +32 -0
- package/lib/runtime/langgraph-graph.js.map +1 -0
- package/lib/runtime/state.d.ts +38 -0
- package/lib/runtime/state.d.ts.map +1 -0
- package/lib/runtime/state.js +16 -0
- package/lib/runtime/state.js.map +1 -0
- package/lib/seed/elaine.d.ts +9 -0
- package/lib/seed/elaine.d.ts.map +1 -0
- package/lib/seed/elaine.js +27 -0
- package/lib/seed/elaine.js.map +1 -0
- package/lib/tools/import-character.d.ts +16 -0
- package/lib/tools/import-character.d.ts.map +1 -0
- package/lib/tools/import-character.js +98 -0
- package/lib/tools/import-character.js.map +1 -0
- package/package.json +108 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 角色卡解析器(Tavern Character Card V1/V2/V3)。
|
|
3
|
+
*
|
|
4
|
+
* 安全模型:导入内容一律视为不可信数据——
|
|
5
|
+
* - 只解析,不执行任何代码(无 eval、无动态 import、无脚本宿主);
|
|
6
|
+
* - JSON / PNG 元数据 / CHARX 解压全部有字节与条目上限;
|
|
7
|
+
* - UTF-8 fatal 解码(拒绝非法编码,不做替换字符猜测);
|
|
8
|
+
* - base64 规范校验(canonicality);
|
|
9
|
+
* - CHARX 路径穿越防护(normalizeCharxPath)。
|
|
10
|
+
*
|
|
11
|
+
* 降级规则:regex / Tavern Helper / HTML / 远程代码等字段仅保留原始
|
|
12
|
+
* 元数据并标记 unsupported,绝不执行。
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
import { unzipSync } from 'fflate';
|
|
16
|
+
/** 单个角色卡 JSON(解码后)的最大字节数。 */
|
|
17
|
+
export const MAX_CARD_JSON_BYTES = 2 * 1024 * 1024;
|
|
18
|
+
/** 单个导入文件(压缩前)的最大字节数。 */
|
|
19
|
+
export const MAX_IMPORT_BYTES = 64 * 1024 * 1024;
|
|
20
|
+
/** CHARX 解压总字节上限。 */
|
|
21
|
+
export const MAX_CHARX_UNCOMPRESSED_BYTES = 128 * 1024 * 1024;
|
|
22
|
+
/** CHARX 条目数上限。 */
|
|
23
|
+
export const MAX_CHARX_ENTRIES = 512;
|
|
24
|
+
const PNG_SIGNATURE = Uint8Array.of(137, 80, 78, 71, 13, 10, 26, 10);
|
|
25
|
+
function utf8Fatal(bytes, what) {
|
|
26
|
+
try {
|
|
27
|
+
return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw new Error(`${what} 不是合法的 UTF-8`, { cause: error });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** 检测文件种类:文件名扩展名优先,magic bytes 兜底。 */
|
|
34
|
+
export function detectCardKind(fileName, bytes) {
|
|
35
|
+
const name = fileName?.toLocaleLowerCase() ?? '';
|
|
36
|
+
if (name.endsWith('.json'))
|
|
37
|
+
return 'character-card-json';
|
|
38
|
+
if (name.endsWith('.png'))
|
|
39
|
+
return 'character-card-png';
|
|
40
|
+
if (name.endsWith('.charx'))
|
|
41
|
+
return 'charx';
|
|
42
|
+
// magic bytes 兜底
|
|
43
|
+
if (bytes.byteLength >= PNG_SIGNATURE.byteLength
|
|
44
|
+
&& bytes.subarray(0, PNG_SIGNATURE.byteLength).every((value, index) => value === PNG_SIGNATURE[index])) {
|
|
45
|
+
return 'character-card-png';
|
|
46
|
+
}
|
|
47
|
+
if (bytes.byteLength >= 4 && bytes[0] === 0x50 && bytes[1] === 0x4b
|
|
48
|
+
&& bytes[2] === 0x03 && bytes[3] === 0x04) {
|
|
49
|
+
return 'charx';
|
|
50
|
+
}
|
|
51
|
+
// JSON 判定直接查字节(跳过空白后是否 { 或 [),不做 UTF-8 解码——
|
|
52
|
+
// 截断切片可能切断多字节字符,fatal 解码会误报。
|
|
53
|
+
let index = 0;
|
|
54
|
+
while (index < bytes.byteLength
|
|
55
|
+
&& (bytes[index] === 0x20 || bytes[index] === 0x09 || bytes[index] === 0x0a || bytes[index] === 0x0d)) {
|
|
56
|
+
index += 1;
|
|
57
|
+
}
|
|
58
|
+
if (index < bytes.byteLength && (bytes[index] === 0x7b || bytes[index] === 0x5b))
|
|
59
|
+
return 'character-card-json';
|
|
60
|
+
throw new Error(`无法识别角色卡格式(支持 .json / .png / .charx):${fileName ?? '<无文件名>'}`);
|
|
61
|
+
}
|
|
62
|
+
function asObject(value, path) {
|
|
63
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
64
|
+
throw new Error(`${path} 必须是对象`);
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
function optionalString(value, path) {
|
|
69
|
+
if (value === undefined)
|
|
70
|
+
return undefined;
|
|
71
|
+
if (typeof value !== 'string')
|
|
72
|
+
throw new Error(`${path} 必须是字符串`);
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
function stringArray(value, path) {
|
|
76
|
+
if (value === undefined)
|
|
77
|
+
return [];
|
|
78
|
+
if (!Array.isArray(value) || value.some(item => typeof item !== 'string')) {
|
|
79
|
+
throw new Error(`${path} 必须是字符串数组`);
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
/** 检测卡版本:spec 字段 → V2/V3,否则 V1。 */
|
|
84
|
+
function cardRoot(parsed) {
|
|
85
|
+
const root = asObject(parsed, '角色卡');
|
|
86
|
+
const spec = root.spec;
|
|
87
|
+
if (spec === 'chara_card_v3') {
|
|
88
|
+
const specVersion = optionalString(root.spec_version, 'spec_version');
|
|
89
|
+
if (specVersion === undefined)
|
|
90
|
+
throw new Error('V3 角色卡缺少 spec_version');
|
|
91
|
+
return { version: 3, specVersion, data: asObject(root.data, 'data') };
|
|
92
|
+
}
|
|
93
|
+
if (spec === 'chara_card_v2') {
|
|
94
|
+
const specVersion = optionalString(root.spec_version, 'spec_version');
|
|
95
|
+
if (specVersion === undefined)
|
|
96
|
+
throw new Error('V2 角色卡缺少 spec_version');
|
|
97
|
+
return { version: 2, specVersion, data: asObject(root.data, 'data') };
|
|
98
|
+
}
|
|
99
|
+
if (spec !== undefined) {
|
|
100
|
+
throw new Error(`不支持的卡片 spec:${JSON.stringify(spec)}`);
|
|
101
|
+
}
|
|
102
|
+
return { version: 1, specVersion: '1.0', data: root };
|
|
103
|
+
}
|
|
104
|
+
/** 需要降级标记(保留元数据、不执行)的字段及其说明。 */
|
|
105
|
+
/** 世界书 constant 条目(始终激活)的正文列表;宽容解析,按 insertion_order 稳定排序。 */
|
|
106
|
+
function constantLoreContents(value) {
|
|
107
|
+
const entries = loreEntriesOf(value);
|
|
108
|
+
return entries
|
|
109
|
+
.filter(entry => entry.constant && entry.content !== undefined)
|
|
110
|
+
.sort((a, b) => a.order - b.order)
|
|
111
|
+
.map(entry => entry.content);
|
|
112
|
+
}
|
|
113
|
+
function loreEntriesOf(value) {
|
|
114
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value))
|
|
115
|
+
return [];
|
|
116
|
+
const entries = value.entries;
|
|
117
|
+
if (!Array.isArray(entries))
|
|
118
|
+
return [];
|
|
119
|
+
const result = [];
|
|
120
|
+
for (const entry of entries) {
|
|
121
|
+
if (typeof entry !== 'object' || entry === null || Array.isArray(entry))
|
|
122
|
+
continue;
|
|
123
|
+
const record = entry;
|
|
124
|
+
const keys = Array.isArray(record.keys)
|
|
125
|
+
? record.keys.filter((key) => typeof key === 'string' && key.trim() !== '')
|
|
126
|
+
: [];
|
|
127
|
+
const content = typeof record.content === 'string' ? record.content.trim() : '';
|
|
128
|
+
if (keys.length === 0 || content === '')
|
|
129
|
+
continue;
|
|
130
|
+
const order = typeof record.insertion_order === 'number' && Number.isFinite(record.insertion_order)
|
|
131
|
+
? record.insertion_order
|
|
132
|
+
: 0;
|
|
133
|
+
result.push({
|
|
134
|
+
constant: record.constant === true,
|
|
135
|
+
order,
|
|
136
|
+
content,
|
|
137
|
+
id: String(record.id ?? result.length),
|
|
138
|
+
keys,
|
|
139
|
+
priority: typeof record.priority === 'number' && Number.isFinite(record.priority)
|
|
140
|
+
? record.priority
|
|
141
|
+
: order,
|
|
142
|
+
enabled: record.enabled !== false,
|
|
143
|
+
caseSensitive: record.case_sensitive === true,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
/** 规范化内嵌世界书:全部条目(含 constant)供存储;constant 计数供诊断。 */
|
|
149
|
+
function parseLorebook(value) {
|
|
150
|
+
const raw = loreEntriesOf(value);
|
|
151
|
+
if (raw.length === 0)
|
|
152
|
+
return undefined;
|
|
153
|
+
const name = typeof value?.name === 'string'
|
|
154
|
+
? value.name.trim()
|
|
155
|
+
: '世界书';
|
|
156
|
+
return {
|
|
157
|
+
name: name === '' ? '世界书' : name,
|
|
158
|
+
entries: raw.sort((a, b) => a.order - b.order).map((entry, index) => ({
|
|
159
|
+
id: `${entry.id}-${index}`,
|
|
160
|
+
keys: entry.keys,
|
|
161
|
+
content: entry.content,
|
|
162
|
+
priority: entry.priority,
|
|
163
|
+
enabled: entry.enabled,
|
|
164
|
+
constant: entry.constant,
|
|
165
|
+
caseSensitive: entry.caseSensitive,
|
|
166
|
+
matchMode: 'contains',
|
|
167
|
+
})),
|
|
168
|
+
constantCount: raw.filter(entry => entry.constant).length,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function unsupportedOf(data) {
|
|
172
|
+
const result = [];
|
|
173
|
+
const extensions = data.extensions;
|
|
174
|
+
if (typeof extensions === 'object' && extensions !== null && !Array.isArray(extensions)) {
|
|
175
|
+
const ext = extensions;
|
|
176
|
+
if (ext.regex_scripts !== undefined) {
|
|
177
|
+
result.push({ field: 'data.extensions.regex_scripts', detail: '正则脚本:保留元数据,标记 unsupported,不执行' });
|
|
178
|
+
}
|
|
179
|
+
if (ext.tavern_helper !== undefined) {
|
|
180
|
+
result.push({ field: 'data.extensions.tavern_helper', detail: 'Tavern Helper 脚本:保留元数据,标记 unsupported,不执行' });
|
|
181
|
+
}
|
|
182
|
+
const remoteCode = Object.keys(ext).filter(key => /script|code|js|html|remote/iu.test(key));
|
|
183
|
+
for (const key of remoteCode) {
|
|
184
|
+
result.push({ field: `data.extensions.${key}`, detail: '可执行/远程内容:保留元数据,标记 unsupported,不执行' });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
/** 宽容解析一张卡 JSON;仅 name 缺失时报错,其余字段缺失给空值由调用方诊断。 */
|
|
190
|
+
export function parseCardJson(parsed) {
|
|
191
|
+
const { version, specVersion, data } = cardRoot(parsed);
|
|
192
|
+
const name = optionalString(data.name, 'data.name');
|
|
193
|
+
if (name === undefined || name.trim() === '')
|
|
194
|
+
throw new Error('角色卡缺少 name');
|
|
195
|
+
const description = optionalString(data.description, 'data.description') ?? '';
|
|
196
|
+
const personality = optionalString(data.personality, 'data.personality') ?? '';
|
|
197
|
+
const systemPrompt = optionalString(data.system_prompt, 'data.system_prompt');
|
|
198
|
+
// 世界书 constant 条目(Tavern 语义 = 始终激活):
|
|
199
|
+
// 很多卡把人设放在这里(如 description 全空的人设卡),作为 persona 的永久部分。
|
|
200
|
+
const constantLore = constantLoreContents(data.character_book);
|
|
201
|
+
// persona = description 主体 + personality + V3 system_prompt + constant 世界书条目
|
|
202
|
+
const persona = [description, personality, systemPrompt, ...constantLore]
|
|
203
|
+
.filter((part) => part !== undefined && part.trim() !== '')
|
|
204
|
+
.join('\n\n');
|
|
205
|
+
const scenario = optionalString(data.scenario, 'data.scenario');
|
|
206
|
+
const exampleDialogue = optionalString(data.mes_example, 'data.mes_example');
|
|
207
|
+
const firstMessage = optionalString(data.first_mes, 'data.first_mes');
|
|
208
|
+
const alternateGreetings = stringArray(data.alternate_greetings, 'data.alternate_greetings');
|
|
209
|
+
const lorebook = parseLorebook(data.character_book);
|
|
210
|
+
const unsupported = unsupportedOf(data);
|
|
211
|
+
// 未知字段:报告未识别的键(V1 键在根层,V2/V3 在 data 层)。
|
|
212
|
+
const consumedData = new Set([
|
|
213
|
+
'name', 'description', 'personality', 'scenario', 'first_mes', 'mes_example',
|
|
214
|
+
'alternate_greetings', 'character_book', 'extensions', 'system_prompt',
|
|
215
|
+
'post_history_instructions', 'nickname', 'creator', 'character_version',
|
|
216
|
+
'creator_notes', 'tags', 'assets', 'group_only_greetings',
|
|
217
|
+
]);
|
|
218
|
+
const unknownFields = Object.keys(data)
|
|
219
|
+
.filter(key => !consumedData.has(key))
|
|
220
|
+
.map(key => version === 1 ? key : `data.${key}`);
|
|
221
|
+
return {
|
|
222
|
+
version,
|
|
223
|
+
specVersion,
|
|
224
|
+
name: name.trim(),
|
|
225
|
+
persona,
|
|
226
|
+
constantLoreCount: constantLore.length,
|
|
227
|
+
...(scenario === undefined || scenario.trim() === '' ? {} : { scenario }),
|
|
228
|
+
...(exampleDialogue === undefined || exampleDialogue.trim() === '' ? {} : { exampleDialogue }),
|
|
229
|
+
...(firstMessage === undefined || firstMessage.trim() === '' ? {} : { firstMessage }),
|
|
230
|
+
alternateGreetings,
|
|
231
|
+
...(lorebook === undefined ? {} : { lorebook }),
|
|
232
|
+
unsupported,
|
|
233
|
+
unknownFields: [...new Set(unknownFields)],
|
|
234
|
+
raw: parsed,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/** 解析 JSON 角色卡字节(V1/V2/V3)。 */
|
|
238
|
+
export function parseJSONCard(bytes) {
|
|
239
|
+
if (bytes.byteLength > MAX_IMPORT_BYTES)
|
|
240
|
+
throw new Error(`JSON 角色卡超过 ${MAX_IMPORT_BYTES} 字节`);
|
|
241
|
+
const text = utf8Fatal(bytes, '角色卡 JSON').replace(/^\uFEFF/u, '');
|
|
242
|
+
if (Buffer.byteLength(text, 'utf8') > MAX_CARD_JSON_BYTES) {
|
|
243
|
+
throw new Error(`角色卡 JSON 超过 ${MAX_CARD_JSON_BYTES} 字节`);
|
|
244
|
+
}
|
|
245
|
+
let parsed;
|
|
246
|
+
try {
|
|
247
|
+
parsed = JSON.parse(text);
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
throw new Error('角色卡不是合法的 JSON', { cause: error });
|
|
251
|
+
}
|
|
252
|
+
return parseCardJson(parsed);
|
|
253
|
+
}
|
|
254
|
+
/** 校验 PNG chunk 结构(长度与 IEND),不解析图像数据。 */
|
|
255
|
+
function preflightPngChunks(bytes) {
|
|
256
|
+
let offset = PNG_SIGNATURE.byteLength;
|
|
257
|
+
let ended = false;
|
|
258
|
+
while (offset < bytes.byteLength) {
|
|
259
|
+
if (bytes.byteLength - offset < 12)
|
|
260
|
+
throw new Error('PNG 存在截断的 chunk');
|
|
261
|
+
const length = (bytes[offset] << 24) | (bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3];
|
|
262
|
+
const end = offset + 12 + length;
|
|
263
|
+
if (!Number.isSafeInteger(end) || end > bytes.byteLength)
|
|
264
|
+
throw new Error('PNG 存在非法 chunk 长度');
|
|
265
|
+
const name = String.fromCharCode(bytes[offset + 4], bytes[offset + 5], bytes[offset + 6], bytes[offset + 7]);
|
|
266
|
+
offset = end;
|
|
267
|
+
if (name === 'IEND') {
|
|
268
|
+
ended = true;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (!ended)
|
|
273
|
+
throw new Error('PNG 缺少 IEND chunk');
|
|
274
|
+
}
|
|
275
|
+
function decodeCanonicalBase64(value, what) {
|
|
276
|
+
if (value.length === 0 || value.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/u.test(value)) {
|
|
277
|
+
throw new Error(`${what} 不是规范的 base64`);
|
|
278
|
+
}
|
|
279
|
+
const bytes = Buffer.from(value, 'base64');
|
|
280
|
+
if (bytes.byteLength > MAX_CARD_JSON_BYTES) {
|
|
281
|
+
throw new Error(`${what} 解码后超过 ${MAX_CARD_JSON_BYTES} 字节`);
|
|
282
|
+
}
|
|
283
|
+
if (bytes.toString('base64') !== value)
|
|
284
|
+
throw new Error(`${what} 不是规范的 base64`);
|
|
285
|
+
return utf8Fatal(bytes, what);
|
|
286
|
+
}
|
|
287
|
+
/** 提取 PNG tEXt 块中的 chara(base64)或 ccv3 元数据,提取卡 JSON 文本。 */
|
|
288
|
+
function pngCardJsonText(bytes) {
|
|
289
|
+
if (bytes.byteLength < PNG_SIGNATURE.byteLength
|
|
290
|
+
|| !bytes.subarray(0, PNG_SIGNATURE.byteLength).every((value, index) => value === PNG_SIGNATURE[index])) {
|
|
291
|
+
throw new Error('文件不是 PNG');
|
|
292
|
+
}
|
|
293
|
+
preflightPngChunks(bytes);
|
|
294
|
+
const payloads = new Map();
|
|
295
|
+
let offset = PNG_SIGNATURE.byteLength;
|
|
296
|
+
while (offset < bytes.byteLength) {
|
|
297
|
+
const length = (bytes[offset] << 24) | (bytes[offset + 1] << 16) | (bytes[offset + 2] << 8) | bytes[offset + 3];
|
|
298
|
+
const name = String.fromCharCode(bytes[offset + 4], bytes[offset + 5], bytes[offset + 6], bytes[offset + 7]);
|
|
299
|
+
const dataStart = offset + 8;
|
|
300
|
+
const dataEnd = dataStart + length;
|
|
301
|
+
if (name === 'tEXt') {
|
|
302
|
+
// tEXt: keyword\0text(keyword 按 ASCII/Latin-1 读;text 按 UTF-8 fatal 读,
|
|
303
|
+
// 兼容 base64 载荷与旧版裸 JSON 的中文内容)
|
|
304
|
+
const nul = bytes.indexOf(0, dataStart);
|
|
305
|
+
if (nul >= dataStart && nul < dataEnd) {
|
|
306
|
+
const keyword = Buffer.from(bytes.subarray(dataStart, nul)).toString('latin1').toLocaleLowerCase();
|
|
307
|
+
const text = utf8Fatal(bytes.subarray(nul + 1, dataEnd), `PNG ${keyword} 元数据`);
|
|
308
|
+
if ((keyword === 'ccv3' || keyword === 'chara') && !payloads.has(keyword)) {
|
|
309
|
+
payloads.set(keyword, text);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
offset = dataEnd + 4;
|
|
314
|
+
if (name === 'IEND')
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
for (const keyword of ['ccv3', 'chara']) {
|
|
318
|
+
const payload = payloads.get(keyword);
|
|
319
|
+
if (payload === undefined)
|
|
320
|
+
continue;
|
|
321
|
+
try {
|
|
322
|
+
return { keyword, json: decodeCanonicalBase64(payload, keyword) };
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
// 旧版 ccv3 可能是裸 JSON:宽容回退(仅 ccv3),失败则继续报错。
|
|
326
|
+
if (keyword === 'ccv3') {
|
|
327
|
+
try {
|
|
328
|
+
JSON.parse(payload);
|
|
329
|
+
return { keyword, json: payload };
|
|
330
|
+
}
|
|
331
|
+
catch {
|
|
332
|
+
// fallthrough to throw
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
throw new Error(`PNG ${keyword} 元数据不是规范的 base64 且不是裸 JSON`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
throw new Error('PNG 中不包含 ccv3 或 chara 角色卡元数据');
|
|
339
|
+
}
|
|
340
|
+
/** 解析 PNG 角色卡(chara / ccv3 元数据)。 */
|
|
341
|
+
export function parsePNGCard(bytes) {
|
|
342
|
+
if (bytes.byteLength > MAX_IMPORT_BYTES)
|
|
343
|
+
throw new Error(`PNG 超过 ${MAX_IMPORT_BYTES} 字节`);
|
|
344
|
+
const { json } = pngCardJsonText(bytes);
|
|
345
|
+
let parsed;
|
|
346
|
+
try {
|
|
347
|
+
parsed = JSON.parse(json);
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
throw new Error('PNG 元数据不是合法的 JSON', { cause: error });
|
|
351
|
+
}
|
|
352
|
+
return parseCardJson(parsed);
|
|
353
|
+
}
|
|
354
|
+
/** 规范化 CHARX 条目路径:防穿越、防绝对路径、防重复。 */
|
|
355
|
+
export function normalizeCharxPath(value) {
|
|
356
|
+
const normalized = value.replace(/\\/gu, '/');
|
|
357
|
+
if (normalized.startsWith('/') || /^[a-z]:/iu.test(normalized)) {
|
|
358
|
+
throw new Error('CHARX 包含非法归档路径');
|
|
359
|
+
}
|
|
360
|
+
const path = normalized.replace(/\/+$/gu, '');
|
|
361
|
+
if (path === '' || path.includes('\0'))
|
|
362
|
+
throw new Error('CHARX 包含非法归档路径');
|
|
363
|
+
const segments = path.split('/');
|
|
364
|
+
if (segments.some(segment => segment === '' || segment === '.' || segment === '..')) {
|
|
365
|
+
throw new Error('CHARX 包含不安全的归档路径');
|
|
366
|
+
}
|
|
367
|
+
return segments.join('/');
|
|
368
|
+
}
|
|
369
|
+
/** 解析 CHARX 压缩包:card.json 必须位于根且为 V3。 */
|
|
370
|
+
export function parseCHARXCard(bytes) {
|
|
371
|
+
if (bytes.byteLength > MAX_IMPORT_BYTES)
|
|
372
|
+
throw new Error(`CHARX 超过 ${MAX_IMPORT_BYTES} 字节`);
|
|
373
|
+
const seen = new Set();
|
|
374
|
+
const totals = { entries: 0, bytes: 0 };
|
|
375
|
+
const filter = (file) => {
|
|
376
|
+
const path = normalizeCharxPath(file.name);
|
|
377
|
+
totals.entries += 1;
|
|
378
|
+
totals.bytes += file.originalSize;
|
|
379
|
+
if (totals.entries > MAX_CHARX_ENTRIES)
|
|
380
|
+
throw new Error(`CHARX 条目超过 ${MAX_CHARX_ENTRIES} 个`);
|
|
381
|
+
if (!Number.isSafeInteger(file.originalSize) || file.originalSize < 0
|
|
382
|
+
|| totals.bytes > MAX_CHARX_UNCOMPRESSED_BYTES) {
|
|
383
|
+
throw new Error(`CHARX 解压超过 ${MAX_CHARX_UNCOMPRESSED_BYTES} 字节`);
|
|
384
|
+
}
|
|
385
|
+
if (seen.has(path))
|
|
386
|
+
throw new Error(`CHARX 包含重复路径 ${JSON.stringify(path)}`);
|
|
387
|
+
seen.add(path);
|
|
388
|
+
return true;
|
|
389
|
+
};
|
|
390
|
+
let extracted;
|
|
391
|
+
try {
|
|
392
|
+
extracted = unzipSync(bytes, { filter });
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
if (error instanceof Error && error.message.startsWith('CHARX '))
|
|
396
|
+
throw error;
|
|
397
|
+
throw new Error('CHARX 不是受支持的 ZIP 归档', { cause: error });
|
|
398
|
+
}
|
|
399
|
+
const entries = new Map();
|
|
400
|
+
for (const [sourcePath, data] of Object.entries(extracted)) {
|
|
401
|
+
entries.set(normalizeCharxPath(sourcePath), data);
|
|
402
|
+
}
|
|
403
|
+
const cardBytes = entries.get('card.json');
|
|
404
|
+
if (cardBytes === undefined)
|
|
405
|
+
throw new Error('CHARX 根目录必须包含 card.json');
|
|
406
|
+
const card = parseJSONCard(cardBytes);
|
|
407
|
+
if (card.version !== 3)
|
|
408
|
+
throw new Error('CHARX 的 card.json 必须是 Character Card V3');
|
|
409
|
+
return card;
|
|
410
|
+
}
|
|
411
|
+
/** 内容哈希(SHA-256 hex)——导入去重与 artifact 内容寻址。 */
|
|
412
|
+
export function sha256(bytes) {
|
|
413
|
+
return createHash('sha256').update(bytes).digest('hex');
|
|
414
|
+
}
|
|
415
|
+
/** 统一入口:按检测出的类型解析。 */
|
|
416
|
+
export function parseCard(bytes, kind) {
|
|
417
|
+
if (kind === 'character-card-json')
|
|
418
|
+
return parseJSONCard(bytes);
|
|
419
|
+
if (kind === 'character-card-png')
|
|
420
|
+
return parsePNGCard(bytes);
|
|
421
|
+
return parseCHARXCard(bytes);
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/import/parser.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSH-Tavern 静态 Bundle 主入口(composition root)。
|
|
3
|
+
*
|
|
4
|
+
* 阶段 1(含 parentAgent 修复)职责:
|
|
5
|
+
* 1. 启动探测三个 DSH 服务(缺失即抛错,fail loud);
|
|
6
|
+
* 2. 打开 tavern Storage Domain(defineDomain + domainTable +
|
|
7
|
+
* ctx.storageDomain.open,禁止 ctx.storage.namespace),关闭由
|
|
8
|
+
* ctx.effect disposer 负责;
|
|
9
|
+
* 3. 种子艾琳(幂等);注册 roll_dice(经 ToolGateway);
|
|
10
|
+
* 4. SessionAgentProvider 解析当前会话 Agent(无需调用方传 parentAgent):
|
|
11
|
+
* - `/tavern.summon` / `/tavern.followup` 命令入口(ctx.commands 是
|
|
12
|
+
* TypertRemoteService,浏览器/UI 可调用;handler 自动携带
|
|
13
|
+
* `invocation.agent` = 当前会话 Agent);
|
|
14
|
+
* - ctx.provide('tavern', …) 宿主服务(同一无 parentAgent 签名)。
|
|
15
|
+
* 5. probe=true 时把真实 API 签名与就绪信息写到 stdout(探针模式)。
|
|
16
|
+
*
|
|
17
|
+
* 关于 RPC:harness.handle 在 0.1.0-rc.6 中不存在(已核实);阶段 1 的
|
|
18
|
+
* 临时 RPC 用 Cordis 命令系统 + ctx.provide;产品化路径是 Phase 5 的
|
|
19
|
+
* Remote/API(exports["./client"] + dsh.client)。
|
|
20
|
+
*/
|
|
21
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
22
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
23
|
+
import { RelationshipService } from './application/relationship/relationship-service.js';
|
|
24
|
+
import { RelationshipEventService } from './application/relationship/relationship-event-service.js';
|
|
25
|
+
import { MemoryService } from './application/memory/memory-service.js';
|
|
26
|
+
import { SceneService } from './core/scene-service.js';
|
|
27
|
+
import { AuditService } from './core/audit-service.js';
|
|
28
|
+
import { type FollowupParams, type FollowupResult, type SummonParams, type SummonResult, type TavernInstance } from './runtime/agent-orchestrator.js';
|
|
29
|
+
/** Cordis 插件标识。 */
|
|
30
|
+
export declare const name = "dsh-tavern-bundle";
|
|
31
|
+
/** 插件配置:mode=host 时执行宿主初始化;disabled 时跳过。probe=true 时把
|
|
32
|
+
* 真实 API 签名报告额外写到 process.stdout(无 console exporter 时可见)。 */
|
|
33
|
+
export interface TavernConfig {
|
|
34
|
+
readonly mode: 'host' | 'disabled';
|
|
35
|
+
readonly probe?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare const Config: Schema<Schemastery.ObjectS<{
|
|
38
|
+
mode: Schema<"disabled" | "host", "disabled" | "host">;
|
|
39
|
+
probe: Schema<boolean, boolean>;
|
|
40
|
+
}>, Schemastery.ObjectT<{
|
|
41
|
+
mode: Schema<"disabled" | "host", "disabled" | "host">;
|
|
42
|
+
probe: Schema<boolean, boolean>;
|
|
43
|
+
}>>;
|
|
44
|
+
/** ctx.provide('tavern', …) 暴露的宿主服务面(无需 parentAgent)。 */
|
|
45
|
+
export interface TavernService {
|
|
46
|
+
summon(params: SummonParams): Promise<SummonResult>;
|
|
47
|
+
followup(params: FollowupParams): Promise<FollowupResult>;
|
|
48
|
+
listInstances(): readonly TavernInstance[];
|
|
49
|
+
/** 阶段 5.1:关系图谱服务(骨架;写入口由后续子阶段接入)。 */
|
|
50
|
+
relationships: RelationshipService;
|
|
51
|
+
/** 阶段 5.2:独立记忆服务(remember/recall/supersede/forget)。 */
|
|
52
|
+
memory: MemoryService;
|
|
53
|
+
/** 阶段 5.3:场景服务(场景生命周期与参与者)。 */
|
|
54
|
+
scenes: SceneService;
|
|
55
|
+
/** 阶段 5.4:审计服务(状态变更可溯源)。 */
|
|
56
|
+
audit: AuditService;
|
|
57
|
+
relationshipEvents: RelationshipEventService;
|
|
58
|
+
}
|
|
59
|
+
export declare function apply(ctx: Context, config: TavernConfig): Promise<void>;
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAA;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAA;AASxC,mBAAmB;AACnB,eAAO,MAAM,IAAI,sBAAsB,CAAA;AAEvC;6DAC6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,eAAO,MAAM,MAAM;;;;;;GAGjB,CAAA;AAEF,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACzD,aAAa,IAAI,SAAS,cAAc,EAAE,CAAA;IAC1C,qCAAqC;IACrC,aAAa,EAAE,mBAAmB,CAAA;IAClC,uDAAuD;IACvD,MAAM,EAAE,aAAa,CAAA;IACrB,+BAA+B;IAC/B,MAAM,EAAE,YAAY,CAAA;IACpB,4BAA4B;IAC5B,KAAK,EAAE,YAAY,CAAA;IACnB,kBAAkB,EAAE,wBAAwB,CAAA;CAC7C;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4E7E"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSH-Tavern 静态 Bundle 主入口(composition root)。
|
|
3
|
+
*
|
|
4
|
+
* 阶段 1(含 parentAgent 修复)职责:
|
|
5
|
+
* 1. 启动探测三个 DSH 服务(缺失即抛错,fail loud);
|
|
6
|
+
* 2. 打开 tavern Storage Domain(defineDomain + domainTable +
|
|
7
|
+
* ctx.storageDomain.open,禁止 ctx.storage.namespace),关闭由
|
|
8
|
+
* ctx.effect disposer 负责;
|
|
9
|
+
* 3. 种子艾琳(幂等);注册 roll_dice(经 ToolGateway);
|
|
10
|
+
* 4. SessionAgentProvider 解析当前会话 Agent(无需调用方传 parentAgent):
|
|
11
|
+
* - `/tavern.summon` / `/tavern.followup` 命令入口(ctx.commands 是
|
|
12
|
+
* TypertRemoteService,浏览器/UI 可调用;handler 自动携带
|
|
13
|
+
* `invocation.agent` = 当前会话 Agent);
|
|
14
|
+
* - ctx.provide('tavern', …) 宿主服务(同一无 parentAgent 签名)。
|
|
15
|
+
* 5. probe=true 时把真实 API 签名与就绪信息写到 stdout(探针模式)。
|
|
16
|
+
*
|
|
17
|
+
* 关于 RPC:harness.handle 在 0.1.0-rc.6 中不存在(已核实);阶段 1 的
|
|
18
|
+
* 临时 RPC 用 Cordis 命令系统 + ctx.provide;产品化路径是 Phase 5 的
|
|
19
|
+
* Remote/API(exports["./client"] + dsh.client)。
|
|
20
|
+
*/
|
|
21
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
22
|
+
import { probeSubagents } from './adapters/runtime-probe.js';
|
|
23
|
+
import { RelationshipService } from './application/relationship/relationship-service.js';
|
|
24
|
+
import { RelationshipEventService } from './application/relationship/relationship-event-service.js';
|
|
25
|
+
import { MemoryService } from './application/memory/memory-service.js';
|
|
26
|
+
import { SceneService } from './core/scene-service.js';
|
|
27
|
+
import { AuditService } from './core/audit-service.js';
|
|
28
|
+
import { runPrestepSpike } from './adapters/prestep-spike.js';
|
|
29
|
+
import {} from './runtime/agent-orchestrator.js';
|
|
30
|
+
import { createTavernDomain } from './bootstrap/create-domain.js';
|
|
31
|
+
import { createTavernRepositories } from './bootstrap/create-repositories.js';
|
|
32
|
+
import { createTavernServices } from './bootstrap/create-services.js';
|
|
33
|
+
import { installTavernCommands } from './bootstrap/install-commands.js';
|
|
34
|
+
import { installTavernHttp } from './bootstrap/install-http.js';
|
|
35
|
+
import { createTavernLifecycle } from './bootstrap/lifecycle.js';
|
|
36
|
+
import { ELAINE_ID } from './core/character-service.js';
|
|
37
|
+
/** Cordis 插件标识。 */
|
|
38
|
+
export const name = 'dsh-tavern-bundle';
|
|
39
|
+
export const Config = Schema.object({
|
|
40
|
+
mode: Schema.union(['host', 'disabled']).default('host'),
|
|
41
|
+
probe: Schema.boolean().default(false),
|
|
42
|
+
});
|
|
43
|
+
export async function apply(ctx, config) {
|
|
44
|
+
if (config.mode !== 'host') {
|
|
45
|
+
ctx.logger.info('[Tavern] mode=disabled,跳过宿主初始化');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// 阶段 0 验收:启动时逐一探测三个 DSH 服务,缺失则抛出明确错误。
|
|
49
|
+
probeSubagents(ctx);
|
|
50
|
+
// Storage 与宿主工作区由 bootstrap 统一创建;调用方仍负责关闭 domain。
|
|
51
|
+
const { domain, workspacePath: tavernWorkspacePath } = await createTavernDomain(ctx);
|
|
52
|
+
ctx.effect(() => () => domain.close(), 'tavern: close tavern domain');
|
|
53
|
+
const repositories = createTavernRepositories(domain);
|
|
54
|
+
const lifecycle = createTavernLifecycle();
|
|
55
|
+
ctx.effect(() => () => lifecycle.dispose(), 'tavern: dispose bootstrap lifecycle');
|
|
56
|
+
const services = await createTavernServices(ctx, repositories, tavernWorkspacePath, lifecycle);
|
|
57
|
+
const { characterService, auditService, relationshipService, relationshipEventService, memoryService, sceneService, orchestrator, logger } = services;
|
|
58
|
+
installTavernCommands(ctx, services);
|
|
59
|
+
// 宿主服务(同一无 parentAgent 签名;host 调用方需在命令上下文或显式 sessionId)。
|
|
60
|
+
const tavernService = {
|
|
61
|
+
summon: params => orchestrator.summon(params),
|
|
62
|
+
followup: params => orchestrator.followup(params),
|
|
63
|
+
listInstances: () => orchestrator.listInstances(),
|
|
64
|
+
relationships: relationshipService,
|
|
65
|
+
memory: memoryService,
|
|
66
|
+
scenes: sceneService,
|
|
67
|
+
audit: auditService,
|
|
68
|
+
relationshipEvents: relationshipEventService,
|
|
69
|
+
};
|
|
70
|
+
ctx.provide('tavern', tavernService);
|
|
71
|
+
installTavernHttp(ctx, services, repositories, tavernService, tavernWorkspacePath, config, lifecycle);
|
|
72
|
+
ctx.effect(() => {
|
|
73
|
+
// 阶段 2+ 在此注册 DeliveryQueue / 恢复器等 disposer。
|
|
74
|
+
return () => {
|
|
75
|
+
logger.info('卸载:释放运行时资源');
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
logger.info('✅ Tavern 服务已就绪(subagents / storageDomain;伙伴工具继承当前 DSH 会话,Tavern 不注册或授权工具)');
|
|
79
|
+
if (config.probe === true) {
|
|
80
|
+
// 真实 Host 探针输出:Cordis 默认 logger 只缓冲不落盘,探针模式直接写 stdout。
|
|
81
|
+
console.log(`[Tavern-PROBE] tavern domain opened; elaine seeded=${characterService.get(ELAINE_ID) !== null}`
|
|
82
|
+
+ `;17 张表就绪(characters/instances/artifacts/lorebooks/relationship_nodes/relationship_edges/memories/scenes/scene_participants/audit_logs/schema_migrations/users/conversations/conversation_messages/session_bindings/insight_candidates/relationship_events)`);
|
|
83
|
+
console.log('[Tavern-PROBE] no Tavern tools registered; summon/followup/import commands registered');
|
|
84
|
+
// 阶段 0 探针:ChatService / 用户身份可行性(签名级,零成本)。
|
|
85
|
+
try {
|
|
86
|
+
const llm = ctx.get('llm');
|
|
87
|
+
const stream = llm?.stream;
|
|
88
|
+
const { getOrCreateAnonymousUserId } = await import('@deepseek-ai/dsh-anonymous-user-id');
|
|
89
|
+
const anonymousUserId = getOrCreateAnonymousUserId();
|
|
90
|
+
console.log('[Tavern-PROBE] stage0 probes:', JSON.stringify({
|
|
91
|
+
llmServiceAvailable: llm !== undefined,
|
|
92
|
+
llmStreamType: typeof stream,
|
|
93
|
+
chatServiceFeasible: llm !== undefined && typeof stream === 'function',
|
|
94
|
+
userSource: '@deepseek-ai/dsh-anonymous-user-id',
|
|
95
|
+
anonymousUserIdPrefix: String(anonymousUserId).slice(0, 8) + '…',
|
|
96
|
+
}, null, 2));
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
console.log(`[Tavern-PROBE] stage0 probe failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
100
|
+
}
|
|
101
|
+
// 阶段 2 spike(选项 B):agent/pre-step 拦截可行性。
|
|
102
|
+
try {
|
|
103
|
+
await runPrestepSpike(ctx);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.log(`[Tavern-PROBE] stage2 prestep spike failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
107
|
+
}
|
|
108
|
+
console.log('[Tavern-PROBE] done');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-port.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/dsh/llm/llm-port.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,YAAY,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAA"}
|