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,33 @@
1
+ /**
2
+ * ArtifactService —— 原始导入资产的持久化(内容寻址 + SHA-256 去重)。
3
+ *
4
+ * artifacts 表(tavern domain)以内容哈希为 id:同一字节内容只存一份。
5
+ * 导入内容是不可信数据:仅保存原始字节的哈希引用与元数据,不解析、不执行。
6
+ */
7
+ import type { KvTable } from '@deepseek-ai/dsh-storage-domain';
8
+ import type { Artifact, ArtifactKind } from '../domain/schemas.js';
9
+ export interface ArtifactMetadata {
10
+ readonly fileName?: string;
11
+ readonly cardVersion?: number;
12
+ readonly characterId?: string;
13
+ readonly unsupportedFields?: readonly string[];
14
+ }
15
+ export interface StoredArtifactResult {
16
+ /** 内容哈希(= artifact id)。 */
17
+ readonly hash: string;
18
+ /** 是否已存在(去重命中)。 */
19
+ readonly existed: boolean;
20
+ readonly artifact: Artifact;
21
+ }
22
+ export declare class ArtifactService {
23
+ #private;
24
+ constructor(artifacts: KvTable<string, Artifact>);
25
+ /** 按内容哈希读取资产;不存在返回 null。 */
26
+ getArtifact(hash: string): Artifact | null;
27
+ /**
28
+ * 保存原始资产(幂等):同 hash 已存在则直接返回(去重),
29
+ * 否则写入并返回。metadata 变更时合并更新(例如绑定 characterId)。
30
+ */
31
+ storeArtifact(bytes: Uint8Array, kind: ArtifactKind, metadata: ArtifactMetadata): Promise<StoredArtifactResult>;
32
+ }
33
+ //# sourceMappingURL=artifact-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-service.d.ts","sourceRoot":"","sources":["../../src/import/artifact-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAElE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,mBAAmB;IACnB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAC5B;AAED,qBAAa,eAAe;;gBAGd,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIhD,4BAA4B;IAC5B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAI1C;;;OAGG;IACG,aAAa,CACjB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,oBAAoB,CAAC;CAuCjC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * ArtifactService —— 原始导入资产的持久化(内容寻址 + SHA-256 去重)。
3
+ *
4
+ * artifacts 表(tavern domain)以内容哈希为 id:同一字节内容只存一份。
5
+ * 导入内容是不可信数据:仅保存原始字节的哈希引用与元数据,不解析、不执行。
6
+ */
7
+ import { sha256 } from './parser.js';
8
+ export class ArtifactService {
9
+ #artifacts;
10
+ constructor(artifacts) {
11
+ this.#artifacts = artifacts;
12
+ }
13
+ /** 按内容哈希读取资产;不存在返回 null。 */
14
+ getArtifact(hash) {
15
+ return this.#artifacts.get(hash) ?? null;
16
+ }
17
+ /**
18
+ * 保存原始资产(幂等):同 hash 已存在则直接返回(去重),
19
+ * 否则写入并返回。metadata 变更时合并更新(例如绑定 characterId)。
20
+ */
21
+ async storeArtifact(bytes, kind, metadata) {
22
+ const hash = sha256(bytes);
23
+ const existing = this.getArtifact(hash);
24
+ if (existing !== null) {
25
+ const merged = this.#mergeMetadata(existing, metadata);
26
+ if (merged !== existing)
27
+ await this.#artifacts.put(hash, merged);
28
+ return { hash, existed: true, artifact: merged };
29
+ }
30
+ const artifact = {
31
+ id: hash,
32
+ kind,
33
+ hash,
34
+ size: bytes.byteLength,
35
+ metadata: this.#plainMetadata(metadata),
36
+ storedAt: new Date().toISOString(),
37
+ };
38
+ await this.#artifacts.put(hash, artifact);
39
+ return { hash, existed: false, artifact };
40
+ }
41
+ #mergeMetadata(existing, metadata) {
42
+ const merged = { ...existing.metadata };
43
+ if (metadata.fileName !== undefined && typeof merged.fileName !== 'string')
44
+ merged.fileName = metadata.fileName;
45
+ if (metadata.cardVersion !== undefined && typeof merged.cardVersion !== 'number')
46
+ merged.cardVersion = metadata.cardVersion;
47
+ if (metadata.characterId !== undefined)
48
+ merged.characterId = metadata.characterId;
49
+ if (metadata.unsupportedFields !== undefined && !Array.isArray(merged.unsupportedFields)) {
50
+ merged.unsupportedFields = [...metadata.unsupportedFields];
51
+ }
52
+ return { ...existing, metadata: merged };
53
+ }
54
+ #plainMetadata(metadata) {
55
+ const result = {};
56
+ if (metadata.fileName !== undefined)
57
+ result.fileName = metadata.fileName;
58
+ if (metadata.cardVersion !== undefined)
59
+ result.cardVersion = metadata.cardVersion;
60
+ if (metadata.characterId !== undefined)
61
+ result.characterId = metadata.characterId;
62
+ if (metadata.unsupportedFields !== undefined)
63
+ result.unsupportedFields = [...metadata.unsupportedFields];
64
+ return result;
65
+ }
66
+ }
67
+ //# sourceMappingURL=artifact-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-service.js","sourceRoot":"","sources":["../../src/import/artifact-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * ImportService —— 角色卡导入流水线编排。
3
+ *
4
+ * 上传 artifact → 类型检测 → 解析提取 → 规范化(补全/降级/诊断)→
5
+ * 内容哈希去重并保存原始 artifact → 创建 CharacterDefinition(revision=1,
6
+ * capabilityProfileId 固定 companion,不可提升)→ 返回导入诊断。
7
+ *
8
+ * 安全:导入内容不可信,全部解析在 parser.ts 的边界内完成;本服务不执行
9
+ * 任何卡内代码,正则/脚本/HTML 等字段仅保留元数据并标记 unsupported。
10
+ */
11
+ import type { KvTable } from '@deepseek-ai/dsh-storage-domain';
12
+ import type { Artifact, CharacterDefinition, ImportDiagnostic, LorebookDefinition } from '../domain/schemas.js';
13
+ /** 导入角色固定使用的 CapabilityProfile(角色卡无法提升权限)。 */
14
+ export declare const IMPORT_CAPABILITY_PROFILE_ID = "companion";
15
+ export interface CharacterImportResult {
16
+ readonly characterId: string;
17
+ readonly name: string;
18
+ readonly revision: number;
19
+ /** 内容哈希去重命中(同内容重复导入)。 */
20
+ readonly deduplicated: boolean;
21
+ readonly artifactHash: string;
22
+ readonly diagnostics: readonly ImportDiagnostic[];
23
+ }
24
+ export declare class ImportService {
25
+ #private;
26
+ constructor(characters: KvTable<string, CharacterDefinition>, artifacts: KvTable<string, Artifact>, lorebooks: KvTable<string, LorebookDefinition>);
27
+ /** 编排一次导入。解析失败抛错(带明确信息),成功返回诊断。 */
28
+ importCharacter(bytes: Uint8Array, fileName?: string): Promise<CharacterImportResult>;
29
+ }
30
+ //# sourceMappingURL=import-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-service.d.ts","sourceRoot":"","sources":["../../src/import/import-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,gBAAgB,EAEhB,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AAI7B,8CAA8C;AAC9C,eAAO,MAAM,4BAA4B,cAAc,CAAA;AAEvD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,yBAAyB;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAClD;AAUD,qBAAa,aAAa;;gBAMtB,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAChD,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAOhD,mCAAmC;IAC7B,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA4H5F"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * ImportService —— 角色卡导入流水线编排。
3
+ *
4
+ * 上传 artifact → 类型检测 → 解析提取 → 规范化(补全/降级/诊断)→
5
+ * 内容哈希去重并保存原始 artifact → 创建 CharacterDefinition(revision=1,
6
+ * capabilityProfileId 固定 companion,不可提升)→ 返回导入诊断。
7
+ *
8
+ * 安全:导入内容不可信,全部解析在 parser.ts 的边界内完成;本服务不执行
9
+ * 任何卡内代码,正则/脚本/HTML 等字段仅保留元数据并标记 unsupported。
10
+ */
11
+ import { ArtifactService } from './artifact-service.js';
12
+ import { detectCardKind, parseCard } from './parser.js';
13
+ /** 导入角色固定使用的 CapabilityProfile(角色卡无法提升权限)。 */
14
+ export const IMPORT_CAPABILITY_PROFILE_ID = 'companion';
15
+ function info(field, message) {
16
+ return { level: 'info', field, message };
17
+ }
18
+ function warning(field, message) {
19
+ return { level: 'warning', field, message };
20
+ }
21
+ export class ImportService {
22
+ #characters;
23
+ #artifacts;
24
+ #lorebooks;
25
+ constructor(characters, artifacts, lorebooks) {
26
+ this.#characters = characters;
27
+ this.#artifacts = new ArtifactService(artifacts);
28
+ this.#lorebooks = lorebooks;
29
+ }
30
+ /** 编排一次导入。解析失败抛错(带明确信息),成功返回诊断。 */
31
+ async importCharacter(bytes, fileName) {
32
+ const kind = detectCardKind(fileName, bytes);
33
+ const card = parseCard(bytes, kind);
34
+ const diagnostics = [];
35
+ // 字段映射诊断
36
+ diagnostics.push(info('name', `name -> ${card.name}`));
37
+ if (card.persona.trim() === '') {
38
+ diagnostics.push(warning('persona', 'description/personality/system_prompt/constant 世界书全为空:角色将无人设,仅按系统默认行为运行'));
39
+ }
40
+ else {
41
+ diagnostics.push(info('persona', `persona 已组合(${card.persona.length} 字符;含 description/personality/system_prompt 与 constant 世界书条目)`));
42
+ }
43
+ if (card.constantLoreCount > 0) {
44
+ diagnostics.push(info('character_book', `${card.constantLoreCount} 条 constant 世界书条目已并入 persona(始终激活)`));
45
+ }
46
+ if (card.scenario !== undefined)
47
+ diagnostics.push(info('scenario', 'scenario 已映射'));
48
+ else
49
+ diagnostics.push(warning('scenario', '缺少 scenario,留空'));
50
+ if (card.exampleDialogue !== undefined)
51
+ diagnostics.push(info('exampleDialogue', 'mes_example -> exampleDialogue 已映射'));
52
+ else
53
+ diagnostics.push(warning('exampleDialogue', '缺少 mes_example,留空'));
54
+ if (card.firstMessage !== undefined)
55
+ diagnostics.push(info('firstMessage', 'first_mes -> firstMessage 已映射'));
56
+ else
57
+ diagnostics.push(warning('firstMessage', '缺少 first_mes,开场白留空'));
58
+ diagnostics.push(info('alternateGreetings', `alternate_greetings ${card.alternateGreetings.length} 条`));
59
+ if (card.lorebook !== undefined) {
60
+ diagnostics.push(info('lorebook', '内嵌世界书已保留在 artifact 元数据,阶段 4 规范化'));
61
+ }
62
+ for (const item of card.unsupported) {
63
+ diagnostics.push(warning(item.field, `${item.detail}(仅保留元数据)`));
64
+ }
65
+ if (card.unknownFields.length > 0) {
66
+ diagnostics.push(warning('unknown', `未知字段忽略:${card.unknownFields.slice(0, 8).join('、')}${card.unknownFields.length > 8 ? '…' : ''}`));
67
+ }
68
+ // 内容哈希去重 + 保存原始 artifact
69
+ const unsupportedFields = card.unsupported.map(item => `${item.field}: ${item.detail}`);
70
+ const stored = await this.#artifacts.storeArtifact(bytes, kind, {
71
+ ...(fileName === undefined ? {} : { fileName }),
72
+ cardVersion: card.version,
73
+ unsupportedFields,
74
+ });
75
+ diagnostics.push(info('artifact', `原始资产已保存(kind=${kind} hash=${stored.hash.slice(0, 12)}… ${stored.existed ? '去重命中' : '新建'})`));
76
+ // 去重:同 hash 已关联角色则复用
77
+ const existingCharacterId = stored.artifact.metadata.characterId;
78
+ if (typeof existingCharacterId === 'string' && this.#characters.get(existingCharacterId) !== undefined) {
79
+ const existing = this.#characters.get(existingCharacterId);
80
+ diagnostics.push(warning('deduplicate', `同内容已导入过(characterId=${existingCharacterId} revision=${existing.revision}),复用`));
81
+ return {
82
+ characterId: existingCharacterId,
83
+ name: existing.name,
84
+ revision: existing.revision,
85
+ deduplicated: true,
86
+ artifactHash: stored.hash,
87
+ diagnostics,
88
+ };
89
+ }
90
+ // 创建 CharacterDefinition(revision=1,固定 companion)
91
+ const now = new Date().toISOString();
92
+ const characterId = `card-${stored.hash.slice(0, 16)}`;
93
+ // 内嵌世界书 → LorebookDefinition(绑定到角色;constant 条目已并入 persona
94
+ // 且带标记,ContextAssembler 检索时跳过,避免重复注入)。
95
+ let lorebookIds = [];
96
+ if (card.lorebook !== undefined && card.lorebook.entries.length > 0) {
97
+ const lorebookId = `lore-${characterId}`;
98
+ const entries = card.lorebook.entries.map(entry => ({
99
+ id: entry.id,
100
+ keys: [...entry.keys],
101
+ content: entry.content,
102
+ priority: entry.priority,
103
+ enabled: entry.enabled,
104
+ constant: entry.constant,
105
+ caseSensitive: entry.caseSensitive,
106
+ matchMode: entry.matchMode,
107
+ }));
108
+ await this.#lorebooks.put(lorebookId, {
109
+ id: lorebookId,
110
+ name: card.lorebook.name,
111
+ entries,
112
+ createdAt: now,
113
+ updatedAt: now,
114
+ });
115
+ lorebookIds = [lorebookId];
116
+ diagnostics.push(info('lorebook', `世界书已创建(id=${lorebookId},${entries.length} 条,其中 ${card.lorebook.constantCount} 条 constant 已并入 persona,其余按关键词触发注入)`));
117
+ }
118
+ const definition = {
119
+ id: characterId,
120
+ revision: 1,
121
+ name: card.name,
122
+ persona: card.persona,
123
+ ...(card.scenario === undefined ? {} : { scenario: card.scenario }),
124
+ ...(card.exampleDialogue === undefined ? {} : { exampleDialogue: card.exampleDialogue }),
125
+ ...(card.firstMessage === undefined ? {} : { firstMessage: card.firstMessage }),
126
+ alternateGreetings: [...card.alternateGreetings],
127
+ capabilityProfileId: IMPORT_CAPABILITY_PROFILE_ID,
128
+ lorebookIds,
129
+ importRecordId: stored.hash,
130
+ status: 'active',
131
+ createdAt: now,
132
+ updatedAt: now,
133
+ };
134
+ await this.#characters.put(characterId, definition);
135
+ // 绑定 artifact → characterId(去重可复用)
136
+ await this.#artifacts.storeArtifact(bytes, kind, {
137
+ ...(fileName === undefined ? {} : { fileName }),
138
+ cardVersion: card.version,
139
+ characterId,
140
+ unsupportedFields,
141
+ });
142
+ diagnostics.push(info('capabilityProfileId', `导入角色固定 ${IMPORT_CAPABILITY_PROFILE_ID}(角色卡无法提升权限)`));
143
+ diagnostics.push(info('created', `CharacterDefinition 已创建(id=${characterId} revision=1)`));
144
+ return {
145
+ characterId,
146
+ name: card.name,
147
+ revision: 1,
148
+ deduplicated: false,
149
+ artifactHash: stored.hash,
150
+ diagnostics,
151
+ };
152
+ }
153
+ }
154
+ //# sourceMappingURL=import-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-service.js","sourceRoot":"","sources":["../../src/import/import-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
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 type { LoreMatchMode } from '../domain/schemas.js';
15
+ /** 单个角色卡 JSON(解码后)的最大字节数。 */
16
+ export declare const MAX_CARD_JSON_BYTES: number;
17
+ /** 单个导入文件(压缩前)的最大字节数。 */
18
+ export declare const MAX_IMPORT_BYTES: number;
19
+ /** CHARX 解压总字节上限。 */
20
+ export declare const MAX_CHARX_UNCOMPRESSED_BYTES: number;
21
+ /** CHARX 条目数上限。 */
22
+ export declare const MAX_CHARX_ENTRIES = 512;
23
+ export type CardKind = 'character-card-json' | 'character-card-png' | 'charx';
24
+ /** 规范化的世界书(角色卡内嵌 character_book):constant 条目并入 persona,
25
+ * 全部条目保留供存储与溯源;检索注入仅针对非 constant 条目(阶段 4 修复)。 */
26
+ export interface ParsedLorebook {
27
+ readonly name: string;
28
+ readonly entries: readonly {
29
+ readonly id: string;
30
+ readonly keys: readonly string[];
31
+ readonly content: string;
32
+ readonly priority: number;
33
+ readonly enabled: boolean;
34
+ /** constant(始终激活):已并入 persona,检索阶段跳过。 */
35
+ readonly constant: boolean;
36
+ readonly caseSensitive: boolean;
37
+ readonly matchMode: LoreMatchMode;
38
+ }[];
39
+ /** constant(始终激活)条目数——这些已并入 persona,不参与检索。 */
40
+ readonly constantCount: number;
41
+ }
42
+ export interface ParsedCharacterCard {
43
+ readonly version: 1 | 2 | 3;
44
+ readonly specVersion: string;
45
+ readonly name: string;
46
+ readonly persona: string;
47
+ /** 并入 persona 的 constant 世界书条目数(始终激活)。 */
48
+ readonly constantLoreCount: number;
49
+ readonly scenario?: string;
50
+ readonly exampleDialogue?: string;
51
+ readonly firstMessage?: string;
52
+ readonly alternateGreetings: readonly string[];
53
+ /** 规范化后的内嵌世界书(无则 undefined)。 */
54
+ readonly lorebook?: ParsedLorebook;
55
+ /** 降级项:保留元数据、不执行的字段。 */
56
+ readonly unsupported: readonly {
57
+ readonly field: string;
58
+ readonly detail: string;
59
+ }[];
60
+ /** 被忽略的未知字段。 */
61
+ readonly unknownFields: readonly string[];
62
+ /** 解析后的原始 JSON(用于 artifact 溯源)。 */
63
+ readonly raw: unknown;
64
+ }
65
+ /** 检测文件种类:文件名扩展名优先,magic bytes 兜底。 */
66
+ export declare function detectCardKind(fileName: string | undefined, bytes: Uint8Array): CardKind;
67
+ /** 宽容解析一张卡 JSON;仅 name 缺失时报错,其余字段缺失给空值由调用方诊断。 */
68
+ export declare function parseCardJson(parsed: unknown): ParsedCharacterCard;
69
+ /** 解析 JSON 角色卡字节(V1/V2/V3)。 */
70
+ export declare function parseJSONCard(bytes: Uint8Array): ParsedCharacterCard;
71
+ /** 解析 PNG 角色卡(chara / ccv3 元数据)。 */
72
+ export declare function parsePNGCard(bytes: Uint8Array): ParsedCharacterCard;
73
+ /** 规范化 CHARX 条目路径:防穿越、防绝对路径、防重复。 */
74
+ export declare function normalizeCharxPath(value: string): string;
75
+ /** 解析 CHARX 压缩包:card.json 必须位于根且为 V3。 */
76
+ export declare function parseCHARXCard(bytes: Uint8Array): ParsedCharacterCard;
77
+ /** 内容哈希(SHA-256 hex)——导入去重与 artifact 内容寻址。 */
78
+ export declare function sha256(bytes: Uint8Array): string;
79
+ /** 统一入口:按检测出的类型解析。 */
80
+ export declare function parseCard(bytes: Uint8Array, kind: CardKind): ParsedCharacterCard;
81
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/import/parser.ts"],"names":[],"mappings":"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"}