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.
Files changed (422) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +216 -0
  3. package/cordis.patch.yml +14 -0
  4. package/lib/adapters/model-gateway.d.ts +4 -0
  5. package/lib/adapters/model-gateway.d.ts.map +1 -0
  6. package/lib/adapters/model-gateway.js +3 -0
  7. package/lib/adapters/model-gateway.js.map +1 -0
  8. package/lib/adapters/prestep-spike.d.ts +16 -0
  9. package/lib/adapters/prestep-spike.d.ts.map +1 -0
  10. package/lib/adapters/prestep-spike.js +114 -0
  11. package/lib/adapters/prestep-spike.js.map +1 -0
  12. package/lib/adapters/runtime-probe.d.ts +67 -0
  13. package/lib/adapters/runtime-probe.d.ts.map +1 -0
  14. package/lib/adapters/runtime-probe.js +106 -0
  15. package/lib/adapters/runtime-probe.js.map +1 -0
  16. package/lib/adapters/session-agent-provider.d.ts +3 -0
  17. package/lib/adapters/session-agent-provider.d.ts.map +1 -0
  18. package/lib/adapters/session-agent-provider.js +3 -0
  19. package/lib/adapters/session-agent-provider.js.map +1 -0
  20. package/lib/adapters/subagent-gateway.d.ts +3 -0
  21. package/lib/adapters/subagent-gateway.d.ts.map +1 -0
  22. package/lib/adapters/subagent-gateway.js +3 -0
  23. package/lib/adapters/subagent-gateway.js.map +1 -0
  24. package/lib/application/chat/chat-application-service.d.ts +94 -0
  25. package/lib/application/chat/chat-application-service.d.ts.map +1 -0
  26. package/lib/application/chat/chat-application-service.js +291 -0
  27. package/lib/application/chat/chat-application-service.js.map +1 -0
  28. package/lib/application/companion/agent-orchestrator.d.ts +91 -0
  29. package/lib/application/companion/agent-orchestrator.d.ts.map +1 -0
  30. package/lib/application/companion/agent-orchestrator.js +298 -0
  31. package/lib/application/companion/agent-orchestrator.js.map +1 -0
  32. package/lib/application/companion/companion-child-service.d.ts +47 -0
  33. package/lib/application/companion/companion-child-service.d.ts.map +1 -0
  34. package/lib/application/companion/companion-child-service.js +30 -0
  35. package/lib/application/companion/companion-child-service.js.map +1 -0
  36. package/lib/application/companion/companion-invocation-service.d.ts +42 -0
  37. package/lib/application/companion/companion-invocation-service.d.ts.map +1 -0
  38. package/lib/application/companion/companion-invocation-service.js +50 -0
  39. package/lib/application/companion/companion-invocation-service.js.map +1 -0
  40. package/lib/application/companion/companion-profile-service.d.ts +32 -0
  41. package/lib/application/companion/companion-profile-service.d.ts.map +1 -0
  42. package/lib/application/companion/companion-profile-service.js +112 -0
  43. package/lib/application/companion/companion-profile-service.js.map +1 -0
  44. package/lib/application/companion/companion-promotion-service.d.ts +69 -0
  45. package/lib/application/companion/companion-promotion-service.d.ts.map +1 -0
  46. package/lib/application/companion/companion-promotion-service.js +129 -0
  47. package/lib/application/companion/companion-promotion-service.js.map +1 -0
  48. package/lib/application/group-chat/group-chat-execution-service.d.ts +22 -0
  49. package/lib/application/group-chat/group-chat-execution-service.d.ts.map +1 -0
  50. package/lib/application/group-chat/group-chat-execution-service.js +110 -0
  51. package/lib/application/group-chat/group-chat-execution-service.js.map +1 -0
  52. package/lib/application/group-chat/group-chat-orchestrator.d.ts +51 -0
  53. package/lib/application/group-chat/group-chat-orchestrator.d.ts.map +1 -0
  54. package/lib/application/group-chat/group-chat-orchestrator.js +57 -0
  55. package/lib/application/group-chat/group-chat-orchestrator.js.map +1 -0
  56. package/lib/application/memory/memory-retriever.d.ts +37 -0
  57. package/lib/application/memory/memory-retriever.d.ts.map +1 -0
  58. package/lib/application/memory/memory-retriever.js +91 -0
  59. package/lib/application/memory/memory-retriever.js.map +1 -0
  60. package/lib/application/memory/memory-service.d.ts +128 -0
  61. package/lib/application/memory/memory-service.d.ts.map +1 -0
  62. package/lib/application/memory/memory-service.js +346 -0
  63. package/lib/application/memory/memory-service.js.map +1 -0
  64. package/lib/application/ports/companion-runtime-port.d.ts +72 -0
  65. package/lib/application/ports/companion-runtime-port.d.ts.map +1 -0
  66. package/lib/application/ports/companion-runtime-port.js +2 -0
  67. package/lib/application/ports/companion-runtime-port.js.map +1 -0
  68. package/lib/application/ports/llm-port.d.ts +7 -0
  69. package/lib/application/ports/llm-port.d.ts.map +1 -0
  70. package/lib/application/ports/llm-port.js +2 -0
  71. package/lib/application/ports/llm-port.js.map +1 -0
  72. package/lib/application/ports/message-source.d.ts +4 -0
  73. package/lib/application/ports/message-source.d.ts.map +1 -0
  74. package/lib/application/ports/message-source.js +5 -0
  75. package/lib/application/ports/message-source.js.map +1 -0
  76. package/lib/application/ports/session-context-port.d.ts +13 -0
  77. package/lib/application/ports/session-context-port.d.ts.map +1 -0
  78. package/lib/application/ports/session-context-port.js +2 -0
  79. package/lib/application/ports/session-context-port.js.map +1 -0
  80. package/lib/application/ports/subagent-port.d.ts +31 -0
  81. package/lib/application/ports/subagent-port.d.ts.map +1 -0
  82. package/lib/application/ports/subagent-port.js +2 -0
  83. package/lib/application/ports/subagent-port.js.map +1 -0
  84. package/lib/application/ports/user-resolver-port.d.ts +5 -0
  85. package/lib/application/ports/user-resolver-port.d.ts.map +1 -0
  86. package/lib/application/ports/user-resolver-port.js +2 -0
  87. package/lib/application/ports/user-resolver-port.js.map +1 -0
  88. package/lib/application/relationship/relationship-event-service.d.ts +31 -0
  89. package/lib/application/relationship/relationship-event-service.d.ts.map +1 -0
  90. package/lib/application/relationship/relationship-event-service.js +43 -0
  91. package/lib/application/relationship/relationship-event-service.js.map +1 -0
  92. package/lib/application/relationship/relationship-policy.d.ts +20 -0
  93. package/lib/application/relationship/relationship-policy.d.ts.map +1 -0
  94. package/lib/application/relationship/relationship-policy.js +24 -0
  95. package/lib/application/relationship/relationship-policy.js.map +1 -0
  96. package/lib/application/relationship/relationship-projection.d.ts +14 -0
  97. package/lib/application/relationship/relationship-projection.d.ts.map +1 -0
  98. package/lib/application/relationship/relationship-projection.js +25 -0
  99. package/lib/application/relationship/relationship-projection.js.map +1 -0
  100. package/lib/application/relationship/relationship-service.d.ts +95 -0
  101. package/lib/application/relationship/relationship-service.d.ts.map +1 -0
  102. package/lib/application/relationship/relationship-service.js +254 -0
  103. package/lib/application/relationship/relationship-service.js.map +1 -0
  104. package/lib/application/workspace/workspace-service.d.ts +106 -0
  105. package/lib/application/workspace/workspace-service.d.ts.map +1 -0
  106. package/lib/application/workspace/workspace-service.js +44 -0
  107. package/lib/application/workspace/workspace-service.js.map +1 -0
  108. package/lib/bootstrap/create-domain.d.ts +5 -0
  109. package/lib/bootstrap/create-domain.d.ts.map +1 -0
  110. package/lib/bootstrap/create-domain.js +14 -0
  111. package/lib/bootstrap/create-domain.js.map +1 -0
  112. package/lib/bootstrap/create-repositories.d.ts +403 -0
  113. package/lib/bootstrap/create-repositories.d.ts.map +1 -0
  114. package/lib/bootstrap/create-repositories.js +39 -0
  115. package/lib/bootstrap/create-repositories.js.map +1 -0
  116. package/lib/bootstrap/create-runtime.d.ts +8 -0
  117. package/lib/bootstrap/create-runtime.d.ts.map +1 -0
  118. package/lib/bootstrap/create-runtime.js +10 -0
  119. package/lib/bootstrap/create-runtime.js.map +1 -0
  120. package/lib/bootstrap/create-services.d.ts +52 -0
  121. package/lib/bootstrap/create-services.d.ts.map +1 -0
  122. package/lib/bootstrap/create-services.js +79 -0
  123. package/lib/bootstrap/create-services.js.map +1 -0
  124. package/lib/bootstrap/install-commands.d.ts +4 -0
  125. package/lib/bootstrap/install-commands.d.ts.map +1 -0
  126. package/lib/bootstrap/install-commands.js +322 -0
  127. package/lib/bootstrap/install-commands.js.map +1 -0
  128. package/lib/bootstrap/install-http.d.ts +7 -0
  129. package/lib/bootstrap/install-http.d.ts.map +1 -0
  130. package/lib/bootstrap/install-http.js +265 -0
  131. package/lib/bootstrap/install-http.js.map +1 -0
  132. package/lib/bootstrap/lifecycle.d.ts +14 -0
  133. package/lib/bootstrap/lifecycle.d.ts.map +1 -0
  134. package/lib/bootstrap/lifecycle.js +56 -0
  135. package/lib/bootstrap/lifecycle.js.map +1 -0
  136. package/lib/bootstrap/types.d.ts +9 -0
  137. package/lib/bootstrap/types.d.ts.map +1 -0
  138. package/lib/bootstrap/types.js +2 -0
  139. package/lib/bootstrap/types.js.map +1 -0
  140. package/lib/client.js +6 -0
  141. package/lib/client.js.map +1 -0
  142. package/lib/core/audit-service.d.ts +43 -0
  143. package/lib/core/audit-service.d.ts.map +1 -0
  144. package/lib/core/audit-service.js +75 -0
  145. package/lib/core/audit-service.js.map +1 -0
  146. package/lib/core/candidate-extractor.d.ts +31 -0
  147. package/lib/core/candidate-extractor.d.ts.map +1 -0
  148. package/lib/core/candidate-extractor.js +83 -0
  149. package/lib/core/candidate-extractor.js.map +1 -0
  150. package/lib/core/candidate-service.d.ts +72 -0
  151. package/lib/core/candidate-service.d.ts.map +1 -0
  152. package/lib/core/candidate-service.js +283 -0
  153. package/lib/core/candidate-service.js.map +1 -0
  154. package/lib/core/character-service.d.ts +26 -0
  155. package/lib/core/character-service.d.ts.map +1 -0
  156. package/lib/core/character-service.js +68 -0
  157. package/lib/core/character-service.js.map +1 -0
  158. package/lib/core/chat-file-io.d.ts +28 -0
  159. package/lib/core/chat-file-io.d.ts.map +1 -0
  160. package/lib/core/chat-file-io.js +114 -0
  161. package/lib/core/chat-file-io.js.map +1 -0
  162. package/lib/core/chat-service.d.ts +4 -0
  163. package/lib/core/chat-service.d.ts.map +1 -0
  164. package/lib/core/chat-service.js +3 -0
  165. package/lib/core/chat-service.js.map +1 -0
  166. package/lib/core/command-arguments.d.ts +2 -0
  167. package/lib/core/command-arguments.d.ts.map +1 -0
  168. package/lib/core/command-arguments.js +42 -0
  169. package/lib/core/command-arguments.js.map +1 -0
  170. package/lib/core/companion-child-agent-service.d.ts +3 -0
  171. package/lib/core/companion-child-agent-service.d.ts.map +1 -0
  172. package/lib/core/companion-child-agent-service.js +3 -0
  173. package/lib/core/companion-child-agent-service.js.map +1 -0
  174. package/lib/core/companion-invocation-service.d.ts +3 -0
  175. package/lib/core/companion-invocation-service.d.ts.map +1 -0
  176. package/lib/core/companion-invocation-service.js +3 -0
  177. package/lib/core/companion-invocation-service.js.map +1 -0
  178. package/lib/core/companion-profile-service.d.ts +3 -0
  179. package/lib/core/companion-profile-service.d.ts.map +1 -0
  180. package/lib/core/companion-profile-service.js +3 -0
  181. package/lib/core/companion-profile-service.js.map +1 -0
  182. package/lib/core/companion-promotion-service.d.ts +3 -0
  183. package/lib/core/companion-promotion-service.d.ts.map +1 -0
  184. package/lib/core/companion-promotion-service.js +3 -0
  185. package/lib/core/companion-promotion-service.js.map +1 -0
  186. package/lib/core/context-assembler.d.ts +92 -0
  187. package/lib/core/context-assembler.d.ts.map +1 -0
  188. package/lib/core/context-assembler.js +185 -0
  189. package/lib/core/context-assembler.js.map +1 -0
  190. package/lib/core/conversation-repository.d.ts +42 -0
  191. package/lib/core/conversation-repository.d.ts.map +1 -0
  192. package/lib/core/conversation-repository.js +94 -0
  193. package/lib/core/conversation-repository.js.map +1 -0
  194. package/lib/core/group-chat-execution-service.d.ts +3 -0
  195. package/lib/core/group-chat-execution-service.d.ts.map +1 -0
  196. package/lib/core/group-chat-execution-service.js +3 -0
  197. package/lib/core/group-chat-execution-service.js.map +1 -0
  198. package/lib/core/group-chat-orchestrator.d.ts +3 -0
  199. package/lib/core/group-chat-orchestrator.d.ts.map +1 -0
  200. package/lib/core/group-chat-orchestrator.js +3 -0
  201. package/lib/core/group-chat-orchestrator.js.map +1 -0
  202. package/lib/core/memory-retriever.d.ts +3 -0
  203. package/lib/core/memory-retriever.d.ts.map +1 -0
  204. package/lib/core/memory-retriever.js +3 -0
  205. package/lib/core/memory-retriever.js.map +1 -0
  206. package/lib/core/memory-service.d.ts +3 -0
  207. package/lib/core/memory-service.d.ts.map +1 -0
  208. package/lib/core/memory-service.js +3 -0
  209. package/lib/core/memory-service.js.map +1 -0
  210. package/lib/core/personality-candidate-service.d.ts +46 -0
  211. package/lib/core/personality-candidate-service.d.ts.map +1 -0
  212. package/lib/core/personality-candidate-service.js +65 -0
  213. package/lib/core/personality-candidate-service.js.map +1 -0
  214. package/lib/core/prompt-assembler.d.ts +43 -0
  215. package/lib/core/prompt-assembler.d.ts.map +1 -0
  216. package/lib/core/prompt-assembler.js +67 -0
  217. package/lib/core/prompt-assembler.js.map +1 -0
  218. package/lib/core/relationship-event-service.d.ts +3 -0
  219. package/lib/core/relationship-event-service.d.ts.map +1 -0
  220. package/lib/core/relationship-event-service.js +3 -0
  221. package/lib/core/relationship-event-service.js.map +1 -0
  222. package/lib/core/relationship-policy.d.ts +3 -0
  223. package/lib/core/relationship-policy.d.ts.map +1 -0
  224. package/lib/core/relationship-policy.js +3 -0
  225. package/lib/core/relationship-policy.js.map +1 -0
  226. package/lib/core/relationship-projection.d.ts +3 -0
  227. package/lib/core/relationship-projection.d.ts.map +1 -0
  228. package/lib/core/relationship-projection.js +3 -0
  229. package/lib/core/relationship-projection.js.map +1 -0
  230. package/lib/core/relationship-service.d.ts +3 -0
  231. package/lib/core/relationship-service.d.ts.map +1 -0
  232. package/lib/core/relationship-service.js +3 -0
  233. package/lib/core/relationship-service.js.map +1 -0
  234. package/lib/core/roleplay-contract.d.ts +11 -0
  235. package/lib/core/roleplay-contract.d.ts.map +1 -0
  236. package/lib/core/roleplay-contract.js +27 -0
  237. package/lib/core/roleplay-contract.js.map +1 -0
  238. package/lib/core/runtime-binding-service.d.ts +19 -0
  239. package/lib/core/runtime-binding-service.d.ts.map +1 -0
  240. package/lib/core/runtime-binding-service.js +66 -0
  241. package/lib/core/runtime-binding-service.js.map +1 -0
  242. package/lib/core/scene-service.d.ts +60 -0
  243. package/lib/core/scene-service.d.ts.map +1 -0
  244. package/lib/core/scene-service.js +212 -0
  245. package/lib/core/scene-service.js.map +1 -0
  246. package/lib/core/session-binding-service.d.ts +51 -0
  247. package/lib/core/session-binding-service.d.ts.map +1 -0
  248. package/lib/core/session-binding-service.js +106 -0
  249. package/lib/core/session-binding-service.js.map +1 -0
  250. package/lib/core/skill-service.d.ts +82 -0
  251. package/lib/core/skill-service.d.ts.map +1 -0
  252. package/lib/core/skill-service.js +45 -0
  253. package/lib/core/skill-service.js.map +1 -0
  254. package/lib/core/tavern-session-bridge.d.ts +3 -0
  255. package/lib/core/tavern-session-bridge.d.ts.map +1 -0
  256. package/lib/core/tavern-session-bridge.js +3 -0
  257. package/lib/core/tavern-session-bridge.js.map +1 -0
  258. package/lib/core/user-resolver.d.ts +15 -0
  259. package/lib/core/user-resolver.d.ts.map +1 -0
  260. package/lib/core/user-resolver.js +17 -0
  261. package/lib/core/user-resolver.js.map +1 -0
  262. package/lib/core/workspace-service.d.ts +3 -0
  263. package/lib/core/workspace-service.d.ts.map +1 -0
  264. package/lib/core/workspace-service.js +3 -0
  265. package/lib/core/workspace-service.js.map +1 -0
  266. package/lib/core/workspace-session-service.d.ts +11 -0
  267. package/lib/core/workspace-session-service.d.ts.map +1 -0
  268. package/lib/core/workspace-session-service.js +14 -0
  269. package/lib/core/workspace-session-service.js.map +1 -0
  270. package/lib/domain/schemas.d.ts +1173 -0
  271. package/lib/domain/schemas.d.ts.map +1 -0
  272. package/lib/domain/schemas.js +590 -0
  273. package/lib/domain/schemas.js.map +1 -0
  274. package/lib/domain/spec.d.ts +494 -0
  275. package/lib/domain/spec.d.ts.map +1 -0
  276. package/lib/domain/spec.js +63 -0
  277. package/lib/domain/spec.js.map +1 -0
  278. package/lib/import/artifact-service.d.ts +33 -0
  279. package/lib/import/artifact-service.d.ts.map +1 -0
  280. package/lib/import/artifact-service.js +67 -0
  281. package/lib/import/artifact-service.js.map +1 -0
  282. package/lib/import/import-service.d.ts +30 -0
  283. package/lib/import/import-service.d.ts.map +1 -0
  284. package/lib/import/import-service.js +154 -0
  285. package/lib/import/import-service.js.map +1 -0
  286. package/lib/import/parser.d.ts +81 -0
  287. package/lib/import/parser.d.ts.map +1 -0
  288. package/lib/import/parser.js +423 -0
  289. package/lib/import/parser.js.map +1 -0
  290. package/lib/index.d.ts +60 -0
  291. package/lib/index.d.ts.map +1 -0
  292. package/lib/index.js +111 -0
  293. package/lib/index.js.map +1 -0
  294. package/lib/infrastructure/dsh/llm/llm-port.d.ts +3 -0
  295. package/lib/infrastructure/dsh/llm/llm-port.d.ts.map +1 -0
  296. package/lib/infrastructure/dsh/llm/llm-port.js +2 -0
  297. package/lib/infrastructure/dsh/llm/llm-port.js.map +1 -0
  298. package/lib/infrastructure/dsh/llm/model-gateway.d.ts +10 -0
  299. package/lib/infrastructure/dsh/llm/model-gateway.d.ts.map +1 -0
  300. package/lib/infrastructure/dsh/llm/model-gateway.js +21 -0
  301. package/lib/infrastructure/dsh/llm/model-gateway.js.map +1 -0
  302. package/lib/infrastructure/dsh/session/session-agent-provider.d.ts +28 -0
  303. package/lib/infrastructure/dsh/session/session-agent-provider.d.ts.map +1 -0
  304. package/lib/infrastructure/dsh/session/session-agent-provider.js +40 -0
  305. package/lib/infrastructure/dsh/session/session-agent-provider.js.map +1 -0
  306. package/lib/infrastructure/dsh/session/tavern-session-bridge.d.ts +142 -0
  307. package/lib/infrastructure/dsh/session/tavern-session-bridge.d.ts.map +1 -0
  308. package/lib/infrastructure/dsh/session/tavern-session-bridge.js +544 -0
  309. package/lib/infrastructure/dsh/session/tavern-session-bridge.js.map +1 -0
  310. package/lib/infrastructure/dsh/subagent/subagent-gateway.d.ts +63 -0
  311. package/lib/infrastructure/dsh/subagent/subagent-gateway.d.ts.map +1 -0
  312. package/lib/infrastructure/dsh/subagent/subagent-gateway.js +70 -0
  313. package/lib/infrastructure/dsh/subagent/subagent-gateway.js.map +1 -0
  314. package/lib/infrastructure/runtime/companion-runtime.d.ts +128 -0
  315. package/lib/infrastructure/runtime/companion-runtime.d.ts.map +1 -0
  316. package/lib/infrastructure/runtime/companion-runtime.js +127 -0
  317. package/lib/infrastructure/runtime/companion-runtime.js.map +1 -0
  318. package/lib/infrastructure/runtime/runtime-factory.d.ts +10 -0
  319. package/lib/infrastructure/runtime/runtime-factory.d.ts.map +1 -0
  320. package/lib/infrastructure/runtime/runtime-factory.js +14 -0
  321. package/lib/infrastructure/runtime/runtime-factory.js.map +1 -0
  322. package/lib/interfaces/http/chat/chat-http.d.ts +23 -0
  323. package/lib/interfaces/http/chat/chat-http.d.ts.map +1 -0
  324. package/lib/interfaces/http/chat/chat-http.js +310 -0
  325. package/lib/interfaces/http/chat/chat-http.js.map +1 -0
  326. package/lib/interfaces/http/companion/companion-http.d.ts +8 -0
  327. package/lib/interfaces/http/companion/companion-http.d.ts.map +1 -0
  328. package/lib/interfaces/http/companion/companion-http.js +76 -0
  329. package/lib/interfaces/http/companion/companion-http.js.map +1 -0
  330. package/lib/interfaces/http/companion/promotion-http.d.ts +6 -0
  331. package/lib/interfaces/http/companion/promotion-http.d.ts.map +1 -0
  332. package/lib/interfaces/http/companion/promotion-http.js +25 -0
  333. package/lib/interfaces/http/companion/promotion-http.js.map +1 -0
  334. package/lib/interfaces/http/companion/runtime-http.d.ts +13 -0
  335. package/lib/interfaces/http/companion/runtime-http.d.ts.map +1 -0
  336. package/lib/interfaces/http/companion/runtime-http.js +51 -0
  337. package/lib/interfaces/http/companion/runtime-http.js.map +1 -0
  338. package/lib/interfaces/http/companion/stage4-companion-http.d.ts +30 -0
  339. package/lib/interfaces/http/companion/stage4-companion-http.d.ts.map +1 -0
  340. package/lib/interfaces/http/companion/stage4-companion-http.js +149 -0
  341. package/lib/interfaces/http/companion/stage4-companion-http.js.map +1 -0
  342. package/lib/interfaces/http/group/group-http.d.ts +11 -0
  343. package/lib/interfaces/http/group/group-http.d.ts.map +1 -0
  344. package/lib/interfaces/http/group/group-http.js +77 -0
  345. package/lib/interfaces/http/group/group-http.js.map +1 -0
  346. package/lib/interfaces/http/memory/candidate-http.d.ts +8 -0
  347. package/lib/interfaces/http/memory/candidate-http.d.ts.map +1 -0
  348. package/lib/interfaces/http/memory/candidate-http.js +86 -0
  349. package/lib/interfaces/http/memory/candidate-http.js.map +1 -0
  350. package/lib/interfaces/http/relationship/companion-relationship-http.d.ts +7 -0
  351. package/lib/interfaces/http/relationship/companion-relationship-http.d.ts.map +1 -0
  352. package/lib/interfaces/http/relationship/companion-relationship-http.js +30 -0
  353. package/lib/interfaces/http/relationship/companion-relationship-http.js.map +1 -0
  354. package/lib/interfaces/http/workspace/workspace-http.d.ts +19 -0
  355. package/lib/interfaces/http/workspace/workspace-http.d.ts.map +1 -0
  356. package/lib/interfaces/http/workspace/workspace-http.js +78 -0
  357. package/lib/interfaces/http/workspace/workspace-http.js.map +1 -0
  358. package/lib/interfaces/read-model/tavern-read-api.d.ts +44 -0
  359. package/lib/interfaces/read-model/tavern-read-api.d.ts.map +1 -0
  360. package/lib/interfaces/read-model/tavern-read-api.js +189 -0
  361. package/lib/interfaces/read-model/tavern-read-api.js.map +1 -0
  362. package/lib/remote/candidate-api.d.ts +3 -0
  363. package/lib/remote/candidate-api.d.ts.map +1 -0
  364. package/lib/remote/candidate-api.js +3 -0
  365. package/lib/remote/candidate-api.js.map +1 -0
  366. package/lib/remote/chat-api.d.ts +3 -0
  367. package/lib/remote/chat-api.d.ts.map +1 -0
  368. package/lib/remote/chat-api.js +3 -0
  369. package/lib/remote/chat-api.js.map +1 -0
  370. package/lib/remote/companion-api.d.ts +3 -0
  371. package/lib/remote/companion-api.d.ts.map +1 -0
  372. package/lib/remote/companion-api.js +3 -0
  373. package/lib/remote/companion-api.js.map +1 -0
  374. package/lib/remote/companion-promotion-api.d.ts +3 -0
  375. package/lib/remote/companion-promotion-api.d.ts.map +1 -0
  376. package/lib/remote/companion-promotion-api.js +3 -0
  377. package/lib/remote/companion-promotion-api.js.map +1 -0
  378. package/lib/remote/import-http.d.ts +29 -0
  379. package/lib/remote/import-http.d.ts.map +1 -0
  380. package/lib/remote/import-http.js +106 -0
  381. package/lib/remote/import-http.js.map +1 -0
  382. package/lib/remote/stage4-api.d.ts +6 -0
  383. package/lib/remote/stage4-api.d.ts.map +1 -0
  384. package/lib/remote/stage4-api.js +4 -0
  385. package/lib/remote/stage4-api.js.map +1 -0
  386. package/lib/remote/stage5-runtime-api.d.ts +4 -0
  387. package/lib/remote/stage5-runtime-api.d.ts.map +1 -0
  388. package/lib/remote/stage5-runtime-api.js +2 -0
  389. package/lib/remote/stage5-runtime-api.js.map +1 -0
  390. package/lib/remote/stage6-group-api.d.ts +4 -0
  391. package/lib/remote/stage6-group-api.d.ts.map +1 -0
  392. package/lib/remote/stage6-group-api.js +2 -0
  393. package/lib/remote/stage6-group-api.js.map +1 -0
  394. package/lib/remote/tavern-api.d.ts +3 -0
  395. package/lib/remote/tavern-api.d.ts.map +1 -0
  396. package/lib/remote/tavern-api.js +3 -0
  397. package/lib/remote/tavern-api.js.map +1 -0
  398. package/lib/runtime/agent-orchestrator.d.ts +3 -0
  399. package/lib/runtime/agent-orchestrator.d.ts.map +1 -0
  400. package/lib/runtime/agent-orchestrator.js +3 -0
  401. package/lib/runtime/agent-orchestrator.js.map +1 -0
  402. package/lib/runtime/companion-runtime.d.ts +3 -0
  403. package/lib/runtime/companion-runtime.d.ts.map +1 -0
  404. package/lib/runtime/companion-runtime.js +3 -0
  405. package/lib/runtime/companion-runtime.js.map +1 -0
  406. package/lib/runtime/langgraph-graph.d.ts +32 -0
  407. package/lib/runtime/langgraph-graph.d.ts.map +1 -0
  408. package/lib/runtime/langgraph-graph.js +32 -0
  409. package/lib/runtime/langgraph-graph.js.map +1 -0
  410. package/lib/runtime/state.d.ts +38 -0
  411. package/lib/runtime/state.d.ts.map +1 -0
  412. package/lib/runtime/state.js +16 -0
  413. package/lib/runtime/state.js.map +1 -0
  414. package/lib/seed/elaine.d.ts +9 -0
  415. package/lib/seed/elaine.d.ts.map +1 -0
  416. package/lib/seed/elaine.js +27 -0
  417. package/lib/seed/elaine.js.map +1 -0
  418. package/lib/tools/import-character.d.ts +16 -0
  419. package/lib/tools/import-character.d.ts.map +1 -0
  420. package/lib/tools/import-character.js +98 -0
  421. package/lib/tools/import-character.js.map +1 -0
  422. 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,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;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAMN,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAEvD,mBAAmB;AACnB,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAA;AASvC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACxD,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACvC,CAAC,CAAA;AAkBF,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,MAAoB;IAC5D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;QACjD,OAAM;IACR,CAAC;IAED,sCAAsC;IACtC,cAAc,CAAC,GAAG,CAAC,CAAA;IACnB,kDAAkD;IAClD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACpF,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,6BAA6B,CAAC,CAAA;IAErE,MAAM,YAAY,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAA;IACzC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,qCAAqC,CAAC,CAAA;IAClF,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,YAAY,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAA;IAC9F,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAA;IAErJ,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAEpC,yDAAyD;IACzD,MAAM,aAAa,GAAkB;QACnC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7C,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjD,aAAa,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE;QACjD,aAAa,EAAE,mBAAmB;QAClC,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,YAAY;QACnB,kBAAkB,EAAE,wBAAwB;KAC7C,CAAA;IACD,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAEpC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IAErG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;QACd,4CAA4C;QAC5C,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC3B,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;IACxF,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1B,uDAAuD;QACvD,OAAO,CAAC,GAAG,CACT,sDAAsD,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;cAC9F,4PAA4P,CAC/P,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAA;QAEpG,0CAA0C;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAqC,CAAA;YAC9D,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,CAAA;YAC1B,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAA;YACzF,MAAM,eAAe,GAAG,0BAA0B,EAAE,CAAA;YACpD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC1D,mBAAmB,EAAE,GAAG,KAAK,SAAS;gBACtC,aAAa,EAAE,OAAO,MAAM;gBAC5B,mBAAmB,EAAE,GAAG,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,UAAU;gBACtE,UAAU,EAAE,oCAAoC;gBAChD,qBAAqB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;aACjE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9G,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,GAAG,CAAC,CAAA;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,+CAA+C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACtH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** @deprecated Application services should import LlmPort from application/ports. */
2
+ export type { LlmPort } from '../../../application/ports/llm-port.js';
3
+ //# sourceMappingURL=llm-port.d.ts.map
@@ -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"}