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,544 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TavernSessionBridge —— DSH 原生会话 ↔ ChatService 桥(阶段 2,ADR-008;呈现方案 v2)。
|
|
3
|
+
*
|
|
4
|
+
* 架构(选项 B,spike 已验证):
|
|
5
|
+
* 角色卡会话 = DSH Session + agent(原生输入/呈现/持久化全复用;每角色一行),
|
|
6
|
+
* 聊天文件 = Tavern Conversation(一个角色多个),activeConversationId 为当前文件;
|
|
7
|
+
* 我们在 agent 的 `agent/pre-step`(waterfall)拦截 LLM 调用:
|
|
8
|
+
* 1. 补写 user/message(消息已从 inbox 移出,agent 不再写);
|
|
9
|
+
* 2. 转 ChatService.stream(写当前聊天文件 + 返回流);
|
|
10
|
+
* 3. 回复以 assistant/chunk(流式)+ assistant/message 注入同一 turn/step;
|
|
11
|
+
* 4. 返回 { kind: 'reject' } → agent 不调 LLM,turn 以 blocked 干净结束。
|
|
12
|
+
*
|
|
13
|
+
* 切换聊天文件:更新 activeConversationId + reproject(surface replace 把旧投影
|
|
14
|
+
* 替换为新聊天文件消息)。
|
|
15
|
+
* 恢复:进程启动时对 binding 表全部 sessionId 调 agents.resume 并重挂拦截器。
|
|
16
|
+
*/
|
|
17
|
+
import { randomUUID } from 'node:crypto';
|
|
18
|
+
import { createAssistantMessage, createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
19
|
+
function textOf(message) {
|
|
20
|
+
return message.content
|
|
21
|
+
.filter(block => block.type === 'text')
|
|
22
|
+
.map(block => block.text)
|
|
23
|
+
.join('');
|
|
24
|
+
}
|
|
25
|
+
/** 绑定行当前打开的聊天文件:旧 1:1 行无 activeConversationId → 回退 sessionId(旧语义 sessionId === conversationId)。 */
|
|
26
|
+
function conversationOf(binding) {
|
|
27
|
+
// 兼容最早的 1:1 binding:当时 sessionId 即 conversationId。
|
|
28
|
+
return binding.conversationId ?? binding.activeConversationId ?? binding.sessionId;
|
|
29
|
+
}
|
|
30
|
+
export class TavernSessionBridge {
|
|
31
|
+
#userResolver;
|
|
32
|
+
#characters;
|
|
33
|
+
#bindingService;
|
|
34
|
+
#chatService;
|
|
35
|
+
#modelSelection;
|
|
36
|
+
/** Tavern 工作区目录(会话 header.cwd 必须等于它才能 attach,ADR-008)。 */
|
|
37
|
+
#tavernWorkspacePath;
|
|
38
|
+
#workspaceAttachResults = new Map();
|
|
39
|
+
#companions;
|
|
40
|
+
/** Host-owned parent sessions for HTTP-driven entertainment batches. */
|
|
41
|
+
#entertainmentSessions = new Map();
|
|
42
|
+
#nativeHandlers = new Map();
|
|
43
|
+
/** sessionId → pre-step 监听 disposer:复用/重建时先移除旧监听再挂新 binding。 */
|
|
44
|
+
#interceptors = new Map();
|
|
45
|
+
/** attach 失败的会话(workspaceRegistry 未就绪等)——registry 就绪后重试补挂。 */
|
|
46
|
+
#pendingAttach = new Set();
|
|
47
|
+
/** 最近一次 reconcile 统计(diag 可观测)。 */
|
|
48
|
+
#reconcileSummary = {
|
|
49
|
+
restored: 0, rebuilt: 0, created: 0, failed: [],
|
|
50
|
+
};
|
|
51
|
+
constructor(userResolver, characters, bindingService, chatService, modelSelection, tavernWorkspacePath, companions) {
|
|
52
|
+
this.#userResolver = userResolver;
|
|
53
|
+
this.#characters = characters;
|
|
54
|
+
this.#bindingService = bindingService;
|
|
55
|
+
this.#chatService = chatService;
|
|
56
|
+
this.#modelSelection = modelSelection;
|
|
57
|
+
this.#tavernWorkspacePath = tavernWorkspacePath;
|
|
58
|
+
this.#companions = companions;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 新建聊天文件(呈现方案 v2):
|
|
62
|
+
* - 角色首次:创建角色会话(DSH Session/agent/binding,sessionId = conversationId);
|
|
63
|
+
* - 角色已有会话:复用角色会话,仅新建聊天文件并切换 active(重投影到该会话)。
|
|
64
|
+
* 返回 { sessionId(角色会话), conversationId(新聊天文件), workspace }。
|
|
65
|
+
*/
|
|
66
|
+
async bindNew(ctx, params) {
|
|
67
|
+
const { conversationId } = await this.#chatService.startConversation({
|
|
68
|
+
characterId: params.characterId,
|
|
69
|
+
...(params.greetingIndex === undefined ? {} : { greetingIndex: params.greetingIndex }),
|
|
70
|
+
...(params.sceneId === undefined ? {} : { sceneId: params.sceneId }),
|
|
71
|
+
});
|
|
72
|
+
return this.openConversation(ctx, conversationId);
|
|
73
|
+
}
|
|
74
|
+
/** 伙伴 Agent 会话:创建或恢复以伙伴档案为 persona 的个人 Agent 聊天。 */
|
|
75
|
+
async bindCompanionAgent(ctx, profile) {
|
|
76
|
+
const ownerUserId = await this.#userResolver.getCurrentUserId();
|
|
77
|
+
const existing = await this.#bindingService.getByCompanion(ownerUserId, profile.id);
|
|
78
|
+
if (existing !== null) {
|
|
79
|
+
const conversationId = conversationOf(existing);
|
|
80
|
+
const opened = await this.openConversation(ctx, conversationId, profile.id);
|
|
81
|
+
return { ...opened, restored: true };
|
|
82
|
+
}
|
|
83
|
+
const created = await this.#chatService.startConversation({ characterId: profile.characterId });
|
|
84
|
+
const opened = await this.openConversation(ctx, created.conversationId, profile.id);
|
|
85
|
+
return { ...opened, restored: false };
|
|
86
|
+
}
|
|
87
|
+
/** Creates a native DSH session for an entertainment workspace. No Tavern Conversation is attached. */
|
|
88
|
+
async openEntertainmentSpace(ctx, title, key = title, handler) {
|
|
89
|
+
const agents = ctx.get('agents');
|
|
90
|
+
if (agents === undefined)
|
|
91
|
+
throw new Error('[Tavern] agents 服务不可用(无 dsh-agent)');
|
|
92
|
+
const existingId = this.#entertainmentSessions.get(key);
|
|
93
|
+
if (existingId !== undefined && agents.get(existingId) !== undefined) {
|
|
94
|
+
if (handler !== undefined) {
|
|
95
|
+
const existing = agents.get(existingId);
|
|
96
|
+
existing.ctx.on('agent/pre-step', (payload, _next) => handler(existing.session, payload));
|
|
97
|
+
}
|
|
98
|
+
return { sessionId: existingId, workspace: await this.attachToTavernWorkspace(ctx, existingId) };
|
|
99
|
+
}
|
|
100
|
+
const sessionId = randomUUID();
|
|
101
|
+
const selection = this.#modelSelection();
|
|
102
|
+
const handle = await agents.create({
|
|
103
|
+
sessionId,
|
|
104
|
+
agentOptions: { provider: selection.provider, model: selection.model },
|
|
105
|
+
meta: { cwd: this.#tavernWorkspacePath },
|
|
106
|
+
});
|
|
107
|
+
const nativeHandler = handler;
|
|
108
|
+
if (nativeHandler !== undefined) {
|
|
109
|
+
handle.agent.ctx.on('agent/pre-step', (payload, next) => {
|
|
110
|
+
if (handle.agent.id !== sessionId)
|
|
111
|
+
return next();
|
|
112
|
+
return nativeHandler(handle.agent.session, payload);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
this.#entertainmentSessions.set(key, sessionId);
|
|
116
|
+
if (handler !== undefined)
|
|
117
|
+
this.#nativeHandlers.set(sessionId, handler);
|
|
118
|
+
await this.renameSession(ctx, handle.agent.session, `娱乐空间 · ${title}`);
|
|
119
|
+
return { sessionId, workspace: await this.attachToTavernWorkspace(ctx, sessionId) };
|
|
120
|
+
}
|
|
121
|
+
/** 将既有聊天文件载入它独有的原生 DSH Session;companionProfileId 存在时标记为伙伴 Agent 会话。 */
|
|
122
|
+
async openConversation(ctx, conversationId, companionProfileId) {
|
|
123
|
+
const ownerUserId = await this.#userResolver.getCurrentUserId();
|
|
124
|
+
const conversation = await this.#chatService.getConversation(conversationId);
|
|
125
|
+
if (conversation === null)
|
|
126
|
+
throw new Error(`[Tavern] 聊天文件不存在:${conversationId}`);
|
|
127
|
+
if (conversation.status !== 'active')
|
|
128
|
+
throw new Error('[Tavern] 该聊天文件不可打开');
|
|
129
|
+
const agents = ctx.get('agents');
|
|
130
|
+
if (agents === undefined)
|
|
131
|
+
throw new Error('[Tavern] agents 服务不可用(无 dsh-agent)');
|
|
132
|
+
const existing = await this.#bindingService.getByConversation(ownerUserId, conversationId);
|
|
133
|
+
if (existing !== null) {
|
|
134
|
+
const agent = agents.get(existing.sessionId);
|
|
135
|
+
// DSH 原生归档保留 session 日志却把它从 workspace 隐藏。此时不可直接
|
|
136
|
+
// open 旧 session,否则客户端会打开一个归档的空视图;解除绑定并以 Tavern
|
|
137
|
+
// Conversation 为事实源创建新呈现 session,历史会重新投影。
|
|
138
|
+
const archived = await this.isSessionArchived(ctx, existing.sessionId);
|
|
139
|
+
if (!archived && agent !== undefined && agent.session.header.cwd === this.#tavernWorkspacePath) {
|
|
140
|
+
this.attachInterceptor(agent, existing);
|
|
141
|
+
const workspace = await this.attachToTavernWorkspace(ctx, existing.sessionId);
|
|
142
|
+
return { sessionId: existing.sessionId, conversationId, workspace };
|
|
143
|
+
}
|
|
144
|
+
await this.#bindingService.remove(existing.sessionId);
|
|
145
|
+
}
|
|
146
|
+
const sessionId = randomUUID();
|
|
147
|
+
const selection = this.#modelSelection();
|
|
148
|
+
const handle = await agents.create({
|
|
149
|
+
sessionId,
|
|
150
|
+
agentOptions: { provider: selection.provider, model: selection.model },
|
|
151
|
+
meta: { cwd: this.#tavernWorkspacePath },
|
|
152
|
+
});
|
|
153
|
+
const binding = await this.#bindingService.upsert({
|
|
154
|
+
sessionId,
|
|
155
|
+
conversationId,
|
|
156
|
+
characterId: conversation.characterId,
|
|
157
|
+
ownerUserId,
|
|
158
|
+
...(companionProfileId === undefined ? {} : { companionProfileId }),
|
|
159
|
+
});
|
|
160
|
+
this.attachInterceptor(handle.agent, binding);
|
|
161
|
+
await this.projectHistory(handle.agent.session, conversationId);
|
|
162
|
+
const character = this.#characters.get(conversation.characterId);
|
|
163
|
+
if (character !== null) {
|
|
164
|
+
const label = conversation.title?.trim() || new Date(conversation.createdAt).toLocaleDateString('zh-CN');
|
|
165
|
+
await this.renameSession(ctx, handle.agent.session, `${character.name} · ${label}`);
|
|
166
|
+
}
|
|
167
|
+
const workspace = await this.attachToTavernWorkspace(ctx, sessionId);
|
|
168
|
+
return { sessionId, conversationId, workspace };
|
|
169
|
+
}
|
|
170
|
+
/** 检查 DSH 原生归档状态;无 workspaceRegistry 时保持可用的 false 降级。 */
|
|
171
|
+
async isSessionArchived(ctx, sessionId) {
|
|
172
|
+
return new Promise(resolve => {
|
|
173
|
+
let settled = false;
|
|
174
|
+
const done = (value) => { if (!settled) {
|
|
175
|
+
settled = true;
|
|
176
|
+
resolve(value);
|
|
177
|
+
} };
|
|
178
|
+
const timer = setTimeout(() => done(false), 500);
|
|
179
|
+
void Promise.resolve(ctx.inject(['workspaceRegistry'], async (wsCtx) => {
|
|
180
|
+
const registry = wsCtx.get('workspaceRegistry');
|
|
181
|
+
clearTimeout(timer);
|
|
182
|
+
done(registry?.archivedSessionIds?.includes(sessionId) ?? false);
|
|
183
|
+
})).catch(() => { clearTimeout(timer); done(false); });
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/** 会话标题 = 角色名(sessionTitle 服务,超时保护;失败不影响聊天)。 */
|
|
187
|
+
async renameSession(ctx, session, title) {
|
|
188
|
+
await Promise.race([
|
|
189
|
+
Promise.resolve(ctx.inject(['sessionTitle'], async (stCtx) => {
|
|
190
|
+
const titles = stCtx.get('sessionTitle');
|
|
191
|
+
if (titles !== undefined) {
|
|
192
|
+
titles.rename(session, title);
|
|
193
|
+
}
|
|
194
|
+
})).catch(() => { }),
|
|
195
|
+
new Promise(resolve => setTimeout(resolve, 2000)),
|
|
196
|
+
]);
|
|
197
|
+
}
|
|
198
|
+
/** 把会话计入 Tavern 工作区(Host 端 workspaceRegistry + attachSession)。 */
|
|
199
|
+
async attachToTavernWorkspace(ctx, sessionId) {
|
|
200
|
+
const unavailable = (status, error) => {
|
|
201
|
+
ctx.logger.warn(`[Tavern] workspace attach ${status}: session=${sessionId} path=${this.#tavernWorkspacePath} error=${error}`);
|
|
202
|
+
return { status, sessionId, error };
|
|
203
|
+
};
|
|
204
|
+
let timer;
|
|
205
|
+
try {
|
|
206
|
+
const outcome = await Promise.race([
|
|
207
|
+
new Promise(resolve => {
|
|
208
|
+
void Promise.resolve(ctx.inject(['workspaceRegistry'], async (wsCtx) => {
|
|
209
|
+
const registry = wsCtx.get('workspaceRegistry');
|
|
210
|
+
if (registry === undefined) {
|
|
211
|
+
resolve(unavailable('registry-unavailable', 'workspaceRegistry 服务未注入'));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const workspace = await registry.create(this.#tavernWorkspacePath, '🍷 Tavern');
|
|
216
|
+
ctx.logger.info(`[Tavern] workspace ready: session=${sessionId} path=${workspace.path ?? this.#tavernWorkspacePath}`);
|
|
217
|
+
await workspace.attachSession(sessionId);
|
|
218
|
+
ctx.logger.info(`[Tavern] workspace attached: session=${sessionId} path=${workspace.path ?? this.#tavernWorkspacePath}`);
|
|
219
|
+
resolve({ status: 'attached', sessionId });
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
223
|
+
const status = message.includes('create') ? 'workspace-create-failed' : 'attach-failed';
|
|
224
|
+
resolve(unavailable(status, message));
|
|
225
|
+
}
|
|
226
|
+
})).catch(error => {
|
|
227
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
228
|
+
resolve(unavailable('registry-unavailable', message));
|
|
229
|
+
});
|
|
230
|
+
}),
|
|
231
|
+
new Promise(resolve => {
|
|
232
|
+
timer = setTimeout(() => resolve(unavailable('injection-timeout', '等待 workspaceRegistry 注入超过 2000ms')), 2000);
|
|
233
|
+
}),
|
|
234
|
+
]);
|
|
235
|
+
this.#workspaceAttachResults.set(sessionId, outcome);
|
|
236
|
+
if (outcome.status === 'attached') {
|
|
237
|
+
this.#pendingAttach.delete(sessionId);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// registry 未就绪/超时等:登记重试队列,就绪后由 retryPendingAttach 补挂。
|
|
241
|
+
this.#pendingAttach.add(sessionId);
|
|
242
|
+
}
|
|
243
|
+
return outcome;
|
|
244
|
+
}
|
|
245
|
+
finally {
|
|
246
|
+
if (timer !== undefined)
|
|
247
|
+
clearTimeout(timer);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/** 重试挂起的 attach(workspaceRegistry 就绪后调用;幂等)。返回本次成功数。 */
|
|
251
|
+
async retryPendingAttach(ctx) {
|
|
252
|
+
let attached = 0;
|
|
253
|
+
for (const sessionId of [...this.#pendingAttach]) {
|
|
254
|
+
const result = await this.attachToTavernWorkspace(ctx, sessionId);
|
|
255
|
+
if (result.status === 'attached')
|
|
256
|
+
attached += 1;
|
|
257
|
+
}
|
|
258
|
+
return attached;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* 把 Conversation 消息树投影到 DSH Session(原生 UI 呈现层)。
|
|
262
|
+
* 幂等:session 已有消息(持久化恢复/已投影)时不重复写入。
|
|
263
|
+
* 每条消息以 user/message 或 assistant/message + surfaceOp 'append' 追加,
|
|
264
|
+
* 与 pre-step 拦截注入共用同一 surface 通道(ADR-008)。
|
|
265
|
+
*/
|
|
266
|
+
async projectHistory(session, conversationId) {
|
|
267
|
+
// 空会话可能仍带有非消息 surface 节点;只有已经存在聊天消息时才视为已投影,
|
|
268
|
+
// 否则重新载入聊天文件会错误显示为空白。
|
|
269
|
+
if (session.events.some(event => event.type === 'user/message' || event.type === 'assistant/message'))
|
|
270
|
+
return 0;
|
|
271
|
+
const messages = await this.#chatService.listMessages(conversationId);
|
|
272
|
+
const selection = this.#modelSelection();
|
|
273
|
+
let projected = 0;
|
|
274
|
+
let step = 0;
|
|
275
|
+
for (const message of messages) {
|
|
276
|
+
if (message.role === 'assistant') {
|
|
277
|
+
step += 1;
|
|
278
|
+
const assistant = createAssistantMessage({
|
|
279
|
+
content: [{ type: 'text', text: message.content }],
|
|
280
|
+
source: { provider: selection.provider, model: selection.model },
|
|
281
|
+
});
|
|
282
|
+
session.append('assistant/message', { turn: 1, step, message: assistant }, { surfaceOp: 'append' });
|
|
283
|
+
projected += 1;
|
|
284
|
+
}
|
|
285
|
+
else if (message.role === 'user') {
|
|
286
|
+
// 历史聊天的用户发言必须用 DSH 原生 user source。plugin/relay 事件虽能
|
|
287
|
+
// 写入 session,却会被 Web 原生聊天视图视为插件上下文而折叠或隐藏。
|
|
288
|
+
const user = createUserMessage({
|
|
289
|
+
content: [{ type: 'text', text: message.content }],
|
|
290
|
+
source: { kind: 'user' },
|
|
291
|
+
});
|
|
292
|
+
session.append('user/message', user, { surfaceOp: 'append' });
|
|
293
|
+
projected += 1;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return projected;
|
|
297
|
+
}
|
|
298
|
+
workspaceDiagnostic(sessionId) {
|
|
299
|
+
return {
|
|
300
|
+
tavernWorkspacePath: this.#tavernWorkspacePath,
|
|
301
|
+
attach: sessionId === undefined ? undefined : this.#workspaceAttachResults.get(sessionId),
|
|
302
|
+
reconcile: this.#reconcileSummary,
|
|
303
|
+
pendingAttach: [...this.#pendingAttach],
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
/** 将伙伴档案组装为个人 Agent 会话 system 提示词。 */
|
|
307
|
+
async #companionSystemFor(companionProfileId) {
|
|
308
|
+
if (this.#companions === undefined)
|
|
309
|
+
return undefined;
|
|
310
|
+
const ownerUserId = await this.#userResolver.getCurrentUserId();
|
|
311
|
+
const profile = this.#companions.getForUser(ownerUserId, companionProfileId);
|
|
312
|
+
if (profile === null)
|
|
313
|
+
return undefined;
|
|
314
|
+
const character = this.#characters.get(profile.characterId);
|
|
315
|
+
const blocks = [];
|
|
316
|
+
blocks.push(`你是「${profile.displayName ?? profile.identitySummary ?? character?.name ?? '伙伴'}」,已经从角色卡《${character?.name ?? profile.characterId}》的原本世界升格为用户身边的个人 Agent 与长期伙伴。保留角色性格、说话方式、背景与记忆,以活生生的角色扮演伙伴身份和用户相处;不要继续假装自己还困在原剧情里。`);
|
|
317
|
+
if (profile.identitySummary?.trim())
|
|
318
|
+
blocks.push(`基本信息与背景:${profile.identitySummary.trim()}`);
|
|
319
|
+
if (profile.personalitySummary?.trim())
|
|
320
|
+
blocks.push(`性格:${profile.personalitySummary.trim()}`);
|
|
321
|
+
if (profile.userRelationshipSummary?.trim())
|
|
322
|
+
blocks.push(`你和用户的关系:${profile.userRelationshipSummary.trim()}`);
|
|
323
|
+
if (profile.sharedHistorySummary?.trim())
|
|
324
|
+
blocks.push(`共同经历:${profile.sharedHistorySummary.trim()}`);
|
|
325
|
+
if (profile.communicationPreferences?.trim())
|
|
326
|
+
blocks.push(`交流偏好:${profile.communicationPreferences.trim()}`);
|
|
327
|
+
if (profile.boundaries.length > 0)
|
|
328
|
+
blocks.push(`行为边界:${profile.boundaries.join(';')}`);
|
|
329
|
+
if (profile.goals.length > 0)
|
|
330
|
+
blocks.push(`长期目标:${profile.goals.join(';')}`);
|
|
331
|
+
if (character?.persona.trim())
|
|
332
|
+
blocks.push(`角色卡原始设定(仅作人物底色):${character.persona.trim()}`);
|
|
333
|
+
return blocks.join('\n\n');
|
|
334
|
+
}
|
|
335
|
+
/** 聊天文件移入回收站时,仅解除其 Tavern binding;消息事实源不受影响。 */
|
|
336
|
+
async closeConversationSession(ctx, conversationId) {
|
|
337
|
+
const ownerUserId = await this.#userResolver.getCurrentUserId();
|
|
338
|
+
const binding = await this.#bindingService.getByConversation(ownerUserId, conversationId);
|
|
339
|
+
if (binding === null)
|
|
340
|
+
return false;
|
|
341
|
+
const agents = ctx.get('agents');
|
|
342
|
+
const agent = agents?.get(binding.sessionId);
|
|
343
|
+
if (agent !== undefined) {
|
|
344
|
+
this.#interceptors.get(agent.id)?.();
|
|
345
|
+
this.#interceptors.delete(agent.id);
|
|
346
|
+
}
|
|
347
|
+
await this.#bindingService.remove(binding.sessionId);
|
|
348
|
+
this.#workspaceAttachResults.delete(binding.sessionId);
|
|
349
|
+
this.#pendingAttach.delete(binding.sessionId);
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
/** 角色进入 Tavern 回收站时,解除其所有原生会话呈现租约。 */
|
|
353
|
+
async closeCharacterSessions(ctx, characterId) {
|
|
354
|
+
const ownerUserId = await this.#userResolver.getCurrentUserId();
|
|
355
|
+
const bindings = await this.#bindingService.listByCharacter(ownerUserId, characterId);
|
|
356
|
+
const agents = ctx.get('agents');
|
|
357
|
+
for (const binding of bindings) {
|
|
358
|
+
const agent = agents?.get(binding.sessionId);
|
|
359
|
+
if (agent !== undefined) {
|
|
360
|
+
const disposer = this.#interceptors.get(agent.id);
|
|
361
|
+
disposer?.();
|
|
362
|
+
this.#interceptors.delete(agent.id);
|
|
363
|
+
// DSH 原生 session 归档/移除由其自身实现;Tavern 只释放绑定,防止后续输入继续写入已删除角色。
|
|
364
|
+
}
|
|
365
|
+
await this.#bindingService.remove(binding.sessionId);
|
|
366
|
+
this.#workspaceAttachResults.delete(binding.sessionId);
|
|
367
|
+
this.#pendingAttach.delete(binding.sessionId);
|
|
368
|
+
}
|
|
369
|
+
void ctx;
|
|
370
|
+
return bindings.length;
|
|
371
|
+
}
|
|
372
|
+
/** 当前用户的绑定会话列表(工作区/管理 tab 的数据面)。 */
|
|
373
|
+
async listBindings() {
|
|
374
|
+
const ownerUserId = await this.#userResolver.getCurrentUserId();
|
|
375
|
+
const bindings = await this.#bindingService.listByUser(ownerUserId);
|
|
376
|
+
return bindings.map(binding => ({
|
|
377
|
+
sessionId: binding.sessionId,
|
|
378
|
+
conversationId: conversationOf(binding),
|
|
379
|
+
characterId: binding.characterId,
|
|
380
|
+
updatedAt: binding.updatedAt,
|
|
381
|
+
}));
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* 启动恢复 + 工作区归组(方案 A):
|
|
385
|
+
* 1. 现有绑定:resume → header.cwd 校验——无 cwd / 不匹配 → 重建角色会话
|
|
386
|
+
* (meta.cwd = 工作区路径,attach 必需)→ attach + 投影;旧会话 retire;
|
|
387
|
+
* 2. 无绑定角色:自动补建角色会话(工作区 = 全部角色卡,呈现方案 v2)。
|
|
388
|
+
* 返回 { restored, rebuilt, created, failed }。
|
|
389
|
+
*/
|
|
390
|
+
async resumeAll(ctx) {
|
|
391
|
+
const agents = ctx.get('agents');
|
|
392
|
+
const bindings = await this.#bindingService.listAll();
|
|
393
|
+
const failed = [];
|
|
394
|
+
let restored = 0;
|
|
395
|
+
let rebuilt = 0;
|
|
396
|
+
let created = 0;
|
|
397
|
+
// 1. 现有绑定:resume → cwd 校验 → 保留或重建。
|
|
398
|
+
if (agents !== undefined) {
|
|
399
|
+
for (const binding of bindings) {
|
|
400
|
+
try {
|
|
401
|
+
const selection = this.#modelSelection();
|
|
402
|
+
const handle = await agents.resume({
|
|
403
|
+
resumeSessionId: binding.sessionId,
|
|
404
|
+
agentOptions: { provider: selection.provider, model: selection.model },
|
|
405
|
+
});
|
|
406
|
+
const cwd = handle.agent.session.header.cwd;
|
|
407
|
+
if (cwd !== this.#tavernWorkspacePath) {
|
|
408
|
+
// 旧会话(M1 前无 cwd / cwd 不匹配):attachSession 会拒绝
|
|
409
|
+
// ("stored header carries no cwd to validate against")→ 重建角色会话。
|
|
410
|
+
const newSessionId = randomUUID();
|
|
411
|
+
const newHandle = await agents.create({
|
|
412
|
+
sessionId: newSessionId,
|
|
413
|
+
agentOptions: { provider: selection.provider, model: selection.model },
|
|
414
|
+
meta: { cwd: this.#tavernWorkspacePath },
|
|
415
|
+
});
|
|
416
|
+
const newBinding = await this.#bindingService.upsert({
|
|
417
|
+
sessionId: newSessionId,
|
|
418
|
+
characterId: binding.characterId,
|
|
419
|
+
ownerUserId: binding.ownerUserId,
|
|
420
|
+
conversationId: conversationOf(binding),
|
|
421
|
+
...(binding.companionProfileId === undefined ? {} : { companionProfileId: binding.companionProfileId }),
|
|
422
|
+
});
|
|
423
|
+
this.attachInterceptor(newHandle.agent, newBinding);
|
|
424
|
+
// 会话标题 = 角色名(重建会话默认标题 = cwd basename "tavern-workspace")。
|
|
425
|
+
const character = this.#characters.get(binding.characterId);
|
|
426
|
+
if (character !== null) {
|
|
427
|
+
const conversation = await this.#chatService.getConversation(conversationOf(binding));
|
|
428
|
+
const label = conversation?.title?.trim() || (conversation === null ? '' : new Date(conversation.createdAt).toLocaleDateString('zh-CN'));
|
|
429
|
+
await this.renameSession(ctx, newHandle.agent.session, label === '' ? character.name : `${character.name} · ${label}`);
|
|
430
|
+
}
|
|
431
|
+
await this.attachToTavernWorkspace(ctx, newSessionId);
|
|
432
|
+
await this.projectHistory(newHandle.agent.session, conversationOf(binding));
|
|
433
|
+
await handle.dispose(); // 旧会话 retire(store 移除;持久化 log 保留可审计)
|
|
434
|
+
rebuilt += 1;
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
this.attachInterceptor(handle.agent, binding);
|
|
438
|
+
await this.projectHistory(handle.agent.session, conversationOf(binding));
|
|
439
|
+
await this.attachToTavernWorkspace(ctx, binding.sessionId);
|
|
440
|
+
restored += 1;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
catch (error) {
|
|
444
|
+
failed.push(`${binding.sessionId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
// 不为无绑定角色或聊天文件自动创建会话:Tavern 工作区只展示用户明确打开的聊天。
|
|
449
|
+
void created;
|
|
450
|
+
this.#reconcileSummary = { restored, rebuilt, created, failed };
|
|
451
|
+
return { restored, rebuilt, created, failed };
|
|
452
|
+
}
|
|
453
|
+
/** 挂 pre-step 拦截器(agent 创建/恢复后调用;agent-scoped 监听)。
|
|
454
|
+
* 同一 agent 重复挂载(复用/重建)会先移除旧监听——旧闭包持有过期 binding。 */
|
|
455
|
+
attachInterceptor(agent, binding) {
|
|
456
|
+
const existing = this.#interceptors.get(agent.id);
|
|
457
|
+
if (existing !== undefined) {
|
|
458
|
+
existing();
|
|
459
|
+
this.#interceptors.delete(agent.id);
|
|
460
|
+
}
|
|
461
|
+
const session = agent.session;
|
|
462
|
+
const bridge = this;
|
|
463
|
+
const disposer = agent.ctx.on('agent/pre-step', async (payload, next) => {
|
|
464
|
+
// 只处理本绑定会话(agent-scoped 已限定本 agent,双保险校验 id)。
|
|
465
|
+
if (agent.id !== binding.sessionId)
|
|
466
|
+
return next();
|
|
467
|
+
return bridge.handlePreStep(session, binding, payload);
|
|
468
|
+
});
|
|
469
|
+
this.#interceptors.set(agent.id, disposer);
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* 拦截一个 step(可测核心,不依赖真实 Agent):
|
|
473
|
+
* 补写 user/message → ChatService.stream → 注入 assistant 流 + 终态 → reject。
|
|
474
|
+
*/
|
|
475
|
+
async handlePreStep(session, binding, payload) {
|
|
476
|
+
const user = payload.messages[0];
|
|
477
|
+
if (user !== undefined) {
|
|
478
|
+
// 消息已从 inbox 移出且 step 被拒绝,agent 不会写 user/message——由我们补写。
|
|
479
|
+
session.append('user/message', user, { surfaceOp: 'append' });
|
|
480
|
+
}
|
|
481
|
+
const userText = user === undefined ? '' : textOf(user);
|
|
482
|
+
const { turn } = payload;
|
|
483
|
+
// step 避开投影历史已占用的编号:projectHistory 投影的开场白与 agent 首个
|
|
484
|
+
// 回合都落在 turn=1(agent 内部 phase 计数),若都用 step=1,原生 UI 会把
|
|
485
|
+
// 同 (turn, step) 的两条 assistant 消息折叠为一条(开场白消失)。
|
|
486
|
+
const usedSteps = new Set();
|
|
487
|
+
for (const event of session.events) {
|
|
488
|
+
if (event.type === 'assistant/message' && event.data.turn === turn) {
|
|
489
|
+
usedSteps.add(event.data.step);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
let step = payload.step;
|
|
493
|
+
while (usedSteps.has(step))
|
|
494
|
+
step += 1;
|
|
495
|
+
try {
|
|
496
|
+
const systemOverride = binding.companionProfileId === undefined
|
|
497
|
+
? undefined
|
|
498
|
+
: await this.#companionSystemFor(binding.companionProfileId);
|
|
499
|
+
const result = await this.#chatService.stream({
|
|
500
|
+
characterId: binding.characterId,
|
|
501
|
+
message: userText,
|
|
502
|
+
conversationId: conversationOf(binding),
|
|
503
|
+
...(systemOverride === undefined ? {} : { systemOverride }),
|
|
504
|
+
});
|
|
505
|
+
let text = '';
|
|
506
|
+
session.append('assistant/chunk', {
|
|
507
|
+
turn,
|
|
508
|
+
step,
|
|
509
|
+
chunk: { type: 'block-start', index: 0, blockType: 'text' },
|
|
510
|
+
});
|
|
511
|
+
for await (const delta of result.stream) {
|
|
512
|
+
if (payload.signal.aborted)
|
|
513
|
+
break;
|
|
514
|
+
text += delta;
|
|
515
|
+
session.append('assistant/chunk', {
|
|
516
|
+
turn,
|
|
517
|
+
step,
|
|
518
|
+
chunk: { type: 'text-delta', index: 0, text: delta },
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
if (text !== '') {
|
|
522
|
+
session.append('assistant/chunk', {
|
|
523
|
+
turn,
|
|
524
|
+
step,
|
|
525
|
+
chunk: { type: 'block-end', index: 0, block: { type: 'text', text } },
|
|
526
|
+
});
|
|
527
|
+
const selection = this.#modelSelection();
|
|
528
|
+
const message = createAssistantMessage({
|
|
529
|
+
content: [{ type: 'text', text }],
|
|
530
|
+
source: { provider: selection.provider, model: selection.model },
|
|
531
|
+
});
|
|
532
|
+
session.append('assistant/message', { turn, step, message }, { surfaceOp: 'append' });
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
catch (error) {
|
|
536
|
+
// 生成失败:turn 以 blocked 结束,UI 显示无回复(错误已入 Conversation 审计面?暂无)。
|
|
537
|
+
// 保留日志线索:不向 session 注入失败文本,避免把错误当角色回复。
|
|
538
|
+
void error;
|
|
539
|
+
}
|
|
540
|
+
// 不调用 next():拒绝该 step(agent 永不调 LLM)。
|
|
541
|
+
return { kind: 'reject' };
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
//# sourceMappingURL=tavern-session-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tavern-session-bridge.js","sourceRoot":"","sources":["../../../../src/infrastructure/dsh/session/tavern-session-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SubagentGateway —— 对 ctx.subagents 的窄适配器。
|
|
3
|
+
* 所有 continuable 子代理的创建、续推和中断均通过此适配器。
|
|
4
|
+
*/
|
|
5
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
6
|
+
import type { Agent, AgentOptions } from '@deepseek-ai/dsh-agent';
|
|
7
|
+
import type { ContentBlock, MessageId, MessageSource } from '@deepseek-ai/dsh-llm';
|
|
8
|
+
import type { SessionId } from '@deepseek-ai/dsh-session';
|
|
9
|
+
import type { ToolRestriction } from '@deepseek-ai/dsh-tools';
|
|
10
|
+
import type { SubagentPort, SubagentStartPortInput, SubagentStartPortResult, SubagentFollowupPortInput } from '../../../application/ports/subagent-port.js';
|
|
11
|
+
/** 启动一个 continuable 子 Agent 的适配器输入(= ContinuableStartSpec 的业务字段)。 */
|
|
12
|
+
export interface SubagentStartInput {
|
|
13
|
+
/** 提供方名称,例如 'spawn'。 */
|
|
14
|
+
readonly provider: string;
|
|
15
|
+
/** 初始委派的短描述,持久化为子 Agent 的创建标签。 */
|
|
16
|
+
readonly label: string;
|
|
17
|
+
/** 创建该子 Agent 的直接父 Agent(权限边界)。 */
|
|
18
|
+
readonly parent: Agent;
|
|
19
|
+
/** 作为子 Agent 首条 user 消息的 ContentBlock[]。 */
|
|
20
|
+
readonly prompt: ContentBlock[];
|
|
21
|
+
/** 可选的每子 Agent persona(要求 provider 具备 persona 能力)。 */
|
|
22
|
+
readonly persona?: string;
|
|
23
|
+
/** 可选的子 Agent 工具收敛(要求 provider 具备 toolFilter 能力)。 */
|
|
24
|
+
readonly toolFilter?: ToolRestriction;
|
|
25
|
+
/** Optional child provider/model override, resolved by DSH. */
|
|
26
|
+
readonly agentOptions?: AgentOptions;
|
|
27
|
+
/** 调用方取消信号;缺省时使用一个不会自动触发的 AbortController。 */
|
|
28
|
+
readonly signal?: AbortSignal;
|
|
29
|
+
}
|
|
30
|
+
/** startContinuable 成功结果:持久化子 Agent id 与已接受初始消息的 inbox id。 */
|
|
31
|
+
export interface SubagentStartResult {
|
|
32
|
+
readonly childId: SessionId;
|
|
33
|
+
readonly messageId: MessageId;
|
|
34
|
+
}
|
|
35
|
+
/** 向既有 continuable 子 Agent 投递一条后续消息的适配器输入。 */
|
|
36
|
+
export interface SubagentFollowupInput {
|
|
37
|
+
/** 必须是对应 child 的直接父 Agent(否则宿主拒绝)。 */
|
|
38
|
+
readonly parent: Agent;
|
|
39
|
+
/** startContinuable 返回的持久化子 Agent session id。 */
|
|
40
|
+
readonly childId: SessionId;
|
|
41
|
+
/** 用户角色内容,必须是 ContentBlock[] 而非纯字符串。 */
|
|
42
|
+
readonly content: ContentBlock[];
|
|
43
|
+
/** 消息来源(MessageSource),仅作持久化归属,不授予权限。 */
|
|
44
|
+
readonly source: MessageSource;
|
|
45
|
+
/** 调用方取消信号;只拥有到 inbox 接受为止。 */
|
|
46
|
+
readonly signal?: AbortSignal;
|
|
47
|
+
}
|
|
48
|
+
/** 本 bundle 编排投递使用的 MessageSource:plugin 来源、relay 形式。 */
|
|
49
|
+
export declare function tavernMessageSource(): MessageSource;
|
|
50
|
+
export declare class SubagentGateway implements SubagentPort {
|
|
51
|
+
#private;
|
|
52
|
+
constructor(ctx: Context);
|
|
53
|
+
/** 建立持久 continuable 子 Agent 并投递初始消息。 */
|
|
54
|
+
startContinuable(input: SubagentStartPortInput): Promise<SubagentStartPortResult>;
|
|
55
|
+
/**
|
|
56
|
+
* 向子 Agent 投递后续消息。注意:返回只代表 inbox 已接受(accepted),
|
|
57
|
+
* 不表示模型已回复或已完成(completed)。
|
|
58
|
+
*/
|
|
59
|
+
followup(input: SubagentFollowupPortInput): Promise<MessageId>;
|
|
60
|
+
}
|
|
61
|
+
/** 中断一个仍在执行中的 continuable 子 Agent;中断后可再次召唤。 */
|
|
62
|
+
export declare function interruptContinuableChild(ctx: Context, childId: SessionId, parent: Agent): void;
|
|
63
|
+
//# sourceMappingURL=subagent-gateway.d.ts.map
|