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 @@
1
+ {"version":3,"file":"group-chat-orchestrator.js","sourceRoot":"","sources":["../../../src/application/group-chat/group-chat-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { KvTable } from '@deepseek-ai/dsh-storage-domain';
2
+ import type { MemoryCategory, MemoryEntry } from '../../domain/schemas.js';
3
+ export interface MemoryQuery {
4
+ readonly characterId: string;
5
+ /** 本轮用户消息;空查询时相关项退化为 salience/recency 排序。 */
6
+ readonly query?: string;
7
+ readonly sceneId?: string;
8
+ readonly instanceId?: string;
9
+ readonly ownerUserId?: string;
10
+ readonly category?: MemoryCategory;
11
+ readonly limit?: number;
12
+ readonly minConfidence?: number;
13
+ readonly updateAccess?: boolean;
14
+ }
15
+ export interface MemoryHit {
16
+ readonly memory: MemoryEntry;
17
+ readonly score: number;
18
+ readonly relevance: number;
19
+ readonly recency: number;
20
+ readonly reasons: readonly string[];
21
+ }
22
+ /** 关键词相关性:完整 query 命中得 1;否则按非字母数字 token 的命中比例。 */
23
+ export declare function relevanceScore(fact: string, query: string): number;
24
+ /** 时间衰减:updatedAt 距 now 的天数,越大越旧,得分趋近 0。 */
25
+ export declare function recencyScore(updatedAt: string, now?: Date): number;
26
+ export declare function scoreMemory(memory: MemoryEntry, query: string, now?: Date): {
27
+ readonly score: number;
28
+ readonly relevance: number;
29
+ readonly recency: number;
30
+ readonly reasons: readonly string[];
31
+ };
32
+ export declare class MemoryRetriever {
33
+ #private;
34
+ constructor(memories: KvTable<string, MemoryEntry>);
35
+ retrieve(query: MemoryQuery): Promise<MemoryHit[]>;
36
+ }
37
+ //# sourceMappingURL=memory-retriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-retriever.d.ts","sourceRoot":"","sources":["../../../src/application/memory/memory-retriever.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE1E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAMD,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUlE;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAKlE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC,CAMA;AAED,qBAAa,eAAe;;gBAGd,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC;IAI5C,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAuCzD"}
@@ -0,0 +1,91 @@
1
+ const DEFAULT_MIN_CONFIDENCE = 0.3;
2
+ const DEFAULT_LIMIT = 5;
3
+ const CATEGORY_QUOTA = { player: 2, world: 2, npc: 2, general: 2, 'shared-experience': 3, 'relationship-milestone': 2 };
4
+ /** 关键词相关性:完整 query 命中得 1;否则按非字母数字 token 的命中比例。 */
5
+ export function relevanceScore(fact, query) {
6
+ const q = query.trim().toLocaleLowerCase();
7
+ if (q === '')
8
+ return 0;
9
+ const f = fact.toLocaleLowerCase();
10
+ if (f.includes(q))
11
+ return 1;
12
+ const tokens = q.split(/[^\p{L}\p{N}]+/u).filter(Boolean);
13
+ if (tokens.length === 0)
14
+ return 0;
15
+ let hits = 0;
16
+ for (const token of tokens)
17
+ if (f.includes(token))
18
+ hits += 1;
19
+ return hits / tokens.length;
20
+ }
21
+ /** 时间衰减:updatedAt 距 now 的天数,越大越旧,得分趋近 0。 */
22
+ export function recencyScore(updatedAt, now) {
23
+ const updated = Date.parse(updatedAt);
24
+ if (!Number.isFinite(updated))
25
+ return 0;
26
+ const ageDays = Math.max(0, (now?.getTime() ?? Date.now()) - updated) / 86_400_000;
27
+ return 1 / (1 + ageDays);
28
+ }
29
+ export function scoreMemory(memory, query, now) {
30
+ const relevance = relevanceScore(memory.fact, query);
31
+ const recency = recencyScore(memory.updatedAt, now);
32
+ const salience = memory.salience;
33
+ const score = relevance * 0.5 + salience * 0.3 + recency * 0.2;
34
+ return { score, relevance, recency, reasons: [`rel=${relevance.toFixed(2)}`, `sal=${salience.toFixed(2)}`, `rec=${recency.toFixed(2)}`] };
35
+ }
36
+ export class MemoryRetriever {
37
+ #memories;
38
+ constructor(memories) {
39
+ this.#memories = memories;
40
+ }
41
+ async retrieve(query) {
42
+ const limit = query.limit ?? DEFAULT_LIMIT;
43
+ const minConfidence = query.minConfidence ?? DEFAULT_MIN_CONFIDENCE;
44
+ const text = query.query ?? '';
45
+ const hits = [];
46
+ for (const [, memory] of this.#memories.entries()) {
47
+ if (memory.characterId !== query.characterId)
48
+ continue;
49
+ if (memory.status !== 'active')
50
+ continue;
51
+ // 伙伴升格记忆属于个人 Agent 关系,不进入普通角色卡聊天上下文。
52
+ if (memory.sourceEventId?.startsWith('promotion:'))
53
+ continue;
54
+ if (query.sceneId !== undefined && memory.sceneId !== query.sceneId)
55
+ continue;
56
+ if (query.instanceId !== undefined && memory.instanceId !== query.instanceId)
57
+ continue;
58
+ if (query.category !== undefined && memory.category !== query.category)
59
+ continue;
60
+ if (query.ownerUserId !== undefined && memory.ownerUserId !== query.ownerUserId)
61
+ continue;
62
+ if (memory.confidence < minConfidence)
63
+ continue;
64
+ const scored = scoreMemory(memory, text);
65
+ hits.push({ memory, score: scored.score, relevance: scored.relevance, recency: scored.recency, reasons: scored.reasons });
66
+ }
67
+ hits.sort((a, b) => (b.score - a.score)
68
+ || (b.memory.salience - a.memory.salience)
69
+ || (a.memory.updatedAt < b.memory.updatedAt ? 1 : a.memory.updatedAt > b.memory.updatedAt ? -1 : 0)
70
+ || (a.memory.id < b.memory.id ? -1 : a.memory.id > b.memory.id ? 1 : 0));
71
+ const selected = [];
72
+ const quota = {};
73
+ for (const hit of hits) {
74
+ if (selected.length >= limit)
75
+ break;
76
+ const used = quota[hit.memory.category] ?? 0;
77
+ if (used >= CATEGORY_QUOTA[hit.memory.category])
78
+ continue;
79
+ quota[hit.memory.category] = used + 1;
80
+ selected.push(hit);
81
+ }
82
+ if (query.updateAccess === true && selected.length > 0) {
83
+ const accessedAt = new Date().toISOString();
84
+ for (const hit of selected) {
85
+ await this.#memories.put(hit.memory.id, { ...hit.memory, lastAccessedAt: accessedAt });
86
+ }
87
+ }
88
+ return selected;
89
+ }
90
+ }
91
+ //# sourceMappingURL=memory-retriever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-retriever.js","sourceRoot":"","sources":["../../../src/application/memory/memory-retriever.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * MemoryService —— 独立记忆系统(阶段 5.2)。
3
+ *
4
+ * 数据模型(memories 表):characterId 必填(跨角色隔离);来源可追溯
5
+ * (source + sourceEventId);更正不删历史(supersedes 标记);遗忘标记
6
+ * forgotten。
7
+ *
8
+ * 约束(产品文档 §5.2):
9
+ * - 模型不得自行写入记忆:只有通过 remember 工具(或明确来源的系统/
10
+ * user/game-rule 调用方)才能写入;
11
+ * - 记忆不跨角色混淆:characterId 是必填字段;
12
+ * - 召回按 salience 排序(重要记忆优先),tie-break 最新优先。
13
+ *
14
+ * 关系图谱联动(由调用方提供 userNodeId 触发;character-instance 节点在
15
+ * summon 时由 orchestrator 登记):
16
+ * - remember 写入新记忆 → familiarity +1(上限 100);
17
+ * - remember 携带 category='player'(用户信任声明)→ trust +5;
18
+ * - supersede 更正同一事实 → trust +1;
19
+ * - recall 命中 → familiarity +0.5(每轮)。
20
+ * ContextAssembler 的检索路径暂不传 userNodeId(无用户上下文),联动留待
21
+ * 后续子阶段在投递链路接入。
22
+ */
23
+ import type { KvTable } from '@deepseek-ai/dsh-storage-domain';
24
+ import type { MemoryCategory, MemoryEntry, MemorySource } from '../../domain/schemas.js';
25
+ import type { AuditService } from '../../core/audit-service.js';
26
+ import { RelationshipService } from '../relationship/relationship-service.js';
27
+ import type { RelationshipEventService } from '../relationship/relationship-event-service.js';
28
+ import type { RelationshipProjection } from '../relationship/relationship-projection.js';
29
+ export declare const DEFAULT_MEMORY_LIMIT = 5;
30
+ export declare const DEFAULT_MIN_CONFIDENCE = 0.3;
31
+ export declare const DEFAULT_CONFIDENCE = 0.8;
32
+ export declare const DEFAULT_SALIENCE = 0.5;
33
+ /** 关系值上限(0-100 语义约定)。 */
34
+ export declare const MAX_RELATIONSHIP_VALUE = 100;
35
+ /** 关系联动规则(单位 delta)。 */
36
+ export declare const FAMILIARITY_PER_REMEMBER = 1;
37
+ export declare const FAMILIARITY_PER_RECALL_HIT = 0.5;
38
+ export declare const TRUST_PER_PLAYER_DECLARATION = 5;
39
+ export declare const TRUST_PER_SUPERSEDE = 1;
40
+ export interface RememberParams {
41
+ readonly characterId: string;
42
+ readonly instanceId?: string;
43
+ readonly sceneId?: string;
44
+ /** 幂等键:同 id 更新(不新建)。缺省生成新 id。 */
45
+ readonly id?: string;
46
+ readonly fact: string;
47
+ readonly category?: MemoryCategory;
48
+ readonly source?: MemorySource;
49
+ /** 稳定用户与消息证据仅由受信调用方提供(阶段 3)。 */
50
+ readonly ownerUserId?: string;
51
+ readonly sourceMessageIds?: readonly string[];
52
+ readonly candidateId?: string;
53
+ readonly sourceEventId?: string;
54
+ readonly confidence?: number;
55
+ readonly salience?: number;
56
+ /** 联动:提供时 familiarity +1;category='player' 额外 trust +5。 */
57
+ readonly userNodeId?: string;
58
+ }
59
+ export interface RecallParams {
60
+ readonly characterId: string;
61
+ readonly instanceId?: string;
62
+ readonly sceneId?: string;
63
+ /** 在 fact 中模糊匹配(大小写不敏感)。 */
64
+ readonly keyword?: string;
65
+ readonly category?: MemoryCategory;
66
+ readonly limit?: number;
67
+ readonly minConfidence?: number;
68
+ /** 联动:命中时 familiarity +0.5。 */
69
+ readonly userNodeId?: string;
70
+ /** 是否更新命中记忆的 lastAccessedAt(默认 true)。 */
71
+ readonly updateAccess?: boolean;
72
+ }
73
+ export interface SupersedeParams {
74
+ readonly oldId: string;
75
+ readonly newFact: string;
76
+ readonly category?: MemoryCategory;
77
+ readonly source?: MemorySource;
78
+ readonly sourceEventId?: string;
79
+ readonly confidence?: number;
80
+ readonly salience?: number;
81
+ /** 联动:更正后 trust +1。 */
82
+ readonly userNodeId?: string;
83
+ }
84
+ export declare class MemoryService {
85
+ #private;
86
+ constructor(memoryTable: KvTable<string, MemoryEntry>, _relationshipService: RelationshipService, audit: AuditService, events?: RelationshipEventService, projection?: RelationshipProjection);
87
+ /** 读一条记忆;不存在返回 null。 */
88
+ get(memoryId: string): MemoryEntry | null;
89
+ /**
90
+ * 写入记忆(幂等:同 id 更新)。写入后按规则联动关系图谱
91
+ * (提供 userNodeId 时:familiarity +1;category='player' 额外 trust +5)。
92
+ */
93
+ remember(params: RememberParams): Promise<MemoryEntry>;
94
+ /**
95
+ * 检索记忆:按 characterId(必填)+ 可选 instanceId/sceneId/category/
96
+ * keyword/minConfidence 过滤,salience DESC → updatedAt DESC 排序,
97
+ * 取 limit 条(默认 5)。命中时更新 lastAccessedAt(updateAccess=true),
98
+ * 提供 userNodeId 时联动 familiarity +0.5。
99
+ */
100
+ recall(params: RecallParams): Promise<MemoryEntry[]>;
101
+ /**
102
+ * 更正记忆:旧记忆标记 superseded(不删除,保留审计链路),创建新记忆
103
+ * (supersedes 指向旧 id)。提供 userNodeId 时联动 trust +1。
104
+ */
105
+ supersede(params: SupersedeParams): Promise<MemoryEntry>;
106
+ /**
107
+ * 标记正式记忆的聊天证据已失效。用户已经审阅接受的内容不会被自动删除,
108
+ * 但后续 UI/检索策略可据此提示或降权;重复标记不产生额外审计。
109
+ */
110
+ markEvidenceInvalidated(memoryId: string): Promise<MemoryEntry | null>;
111
+ /** 遗忘记忆:标记 forgotten(幂等;不存在或已非 active 时不写)。记录审计。 */
112
+ forget(memoryId: string): Promise<void>;
113
+ /** 遗忘某个来源事件下的全部 active 记忆;返回处理条数。 */
114
+ forgetBySourceEvent(sourceEventId: string, characterId?: string): Promise<number>;
115
+ /** 遗忘 sourceEventId 以指定前缀开头的全部 active 记忆;返回处理条数。 */
116
+ forgetBySourceEventPrefix(prefix: string, characterId?: string): Promise<number>;
117
+ /** 指定角色(可再按场景)的全部 active 记忆;供候选冲突检测等只读扫描使用。 */
118
+ listActiveByCharacter(characterId: string, sceneId?: string): MemoryEntry[];
119
+ /**
120
+ * 场景内全部记忆(UI 数据面;含 superseded/forgotten 历史)。
121
+ * filter 支持 category / status;salience DESC → updatedAt DESC 排序。
122
+ */
123
+ listByScene(sceneId: string, filter?: {
124
+ category?: MemoryCategory;
125
+ status?: 'active' | 'superseded' | 'forgotten';
126
+ }): Promise<MemoryEntry[]>;
127
+ }
128
+ //# sourceMappingURL=memory-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-service.d.ts","sourceRoot":"","sources":["../../../src/application/memory/memory-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAC7E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+CAA+C,CAAA;AAC7F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAA;AAExF,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,eAAO,MAAM,sBAAsB,MAAM,CAAA;AACzC,eAAO,MAAM,kBAAkB,MAAM,CAAA;AACrC,eAAO,MAAM,gBAAgB,MAAM,CAAA;AACnC,yBAAyB;AACzB,eAAO,MAAM,sBAAsB,MAAM,CAAA;AACzC,wBAAwB;AACxB,eAAO,MAAM,wBAAwB,IAAI,CAAA;AACzC,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAC7C,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAC7C,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAOpC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,uBAAuB;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,qBAAa,aAAa;;gBAOtB,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,EACzC,oBAAoB,EAAE,mBAAmB,EACzC,KAAK,EAAE,YAAY,EACnB,MAAM,CAAC,EAAE,wBAAwB,EACjC,UAAU,CAAC,EAAE,sBAAsB;IAQrC,wBAAwB;IACxB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAiEzC;;;OAGG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAmB5D;;;;;OAKG;IACG,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8B1D;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IA+C9D;;;OAGG;IACG,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAc5E,oDAAoD;IAC9C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,qCAAqC;IAC/B,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBvF,oDAAoD;IAC9C,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBtF,+CAA+C;IAC/C,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAW3E;;;OAGG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAA;KAAE,GACrF,OAAO,CAAC,WAAW,EAAE,CAAC;CAa1B"}
@@ -0,0 +1,346 @@
1
+ /**
2
+ * MemoryService —— 独立记忆系统(阶段 5.2)。
3
+ *
4
+ * 数据模型(memories 表):characterId 必填(跨角色隔离);来源可追溯
5
+ * (source + sourceEventId);更正不删历史(supersedes 标记);遗忘标记
6
+ * forgotten。
7
+ *
8
+ * 约束(产品文档 §5.2):
9
+ * - 模型不得自行写入记忆:只有通过 remember 工具(或明确来源的系统/
10
+ * user/game-rule 调用方)才能写入;
11
+ * - 记忆不跨角色混淆:characterId 是必填字段;
12
+ * - 召回按 salience 排序(重要记忆优先),tie-break 最新优先。
13
+ *
14
+ * 关系图谱联动(由调用方提供 userNodeId 触发;character-instance 节点在
15
+ * summon 时由 orchestrator 登记):
16
+ * - remember 写入新记忆 → familiarity +1(上限 100);
17
+ * - remember 携带 category='player'(用户信任声明)→ trust +5;
18
+ * - supersede 更正同一事实 → trust +1;
19
+ * - recall 命中 → familiarity +0.5(每轮)。
20
+ * ContextAssembler 的检索路径暂不传 userNodeId(无用户上下文),联动留待
21
+ * 后续子阶段在投递链路接入。
22
+ */
23
+ import { randomUUID } from 'node:crypto';
24
+ import { RelationshipService } from '../relationship/relationship-service.js';
25
+ export const DEFAULT_MEMORY_LIMIT = 5;
26
+ export const DEFAULT_MIN_CONFIDENCE = 0.3;
27
+ export const DEFAULT_CONFIDENCE = 0.8;
28
+ export const DEFAULT_SALIENCE = 0.5;
29
+ /** 关系值上限(0-100 语义约定)。 */
30
+ export const MAX_RELATIONSHIP_VALUE = 100;
31
+ /** 关系联动规则(单位 delta)。 */
32
+ export const FAMILIARITY_PER_REMEMBER = 1;
33
+ export const FAMILIARITY_PER_RECALL_HIT = 0.5;
34
+ export const TRUST_PER_PLAYER_DECLARATION = 5;
35
+ export const TRUST_PER_SUPERSEDE = 1;
36
+ function clamp01(value) {
37
+ return Math.min(1, Math.max(0, value));
38
+ }
39
+ export class MemoryService {
40
+ #memories;
41
+ #audit;
42
+ #events;
43
+ #projection;
44
+ constructor(memoryTable, _relationshipService, audit, events, projection) {
45
+ this.#memories = memoryTable;
46
+ this.#audit = audit;
47
+ this.#events = events;
48
+ this.#projection = projection;
49
+ }
50
+ /** 读一条记忆;不存在返回 null。 */
51
+ get(memoryId) {
52
+ return this.#memories.get(memoryId) ?? null;
53
+ }
54
+ /** 记忆关键字段快照(审计用)。 */
55
+ #snapshotOf(memory) {
56
+ return {
57
+ id: memory.id,
58
+ characterId: memory.characterId,
59
+ fact: memory.fact,
60
+ category: memory.category,
61
+ status: memory.status,
62
+ ...(memory.sceneId === undefined ? {} : { sceneId: memory.sceneId }),
63
+ ...(memory.supersedes === undefined ? {} : { supersedes: memory.supersedes }),
64
+ };
65
+ }
66
+ /** 内部纯写入(幂等:同 id 更新,保留 characterId/createdAt)。返回是否新建与更新前状态。 */
67
+ async #write(params) {
68
+ const now = new Date().toISOString();
69
+ const existing = this.#memories.get(params.id);
70
+ if (existing !== undefined) {
71
+ const updated = {
72
+ ...existing,
73
+ fact: params.fact,
74
+ category: params.category ?? existing.category,
75
+ source: params.source ?? existing.source,
76
+ ...(params.ownerUserId === undefined ? {} : { ownerUserId: params.ownerUserId }),
77
+ ...(params.sourceMessageIds === undefined ? {} : { sourceMessageIds: [...params.sourceMessageIds] }),
78
+ ...(params.candidateId === undefined ? {} : { candidateId: params.candidateId }),
79
+ ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }),
80
+ confidence: clamp01(params.confidence ?? existing.confidence),
81
+ salience: clamp01(params.salience ?? existing.salience),
82
+ updatedAt: now,
83
+ };
84
+ await this.#memories.put(params.id, updated);
85
+ return { entry: updated, created: false, previous: existing };
86
+ }
87
+ const entry = {
88
+ id: params.id,
89
+ characterId: params.characterId,
90
+ ...(params.instanceId === undefined ? {} : { instanceId: params.instanceId }),
91
+ ...(params.sceneId === undefined ? {} : { sceneId: params.sceneId }),
92
+ fact: params.fact,
93
+ category: params.category ?? 'general',
94
+ status: 'active',
95
+ ...(params.supersedes === undefined ? {} : { supersedes: params.supersedes }),
96
+ source: params.source ?? 'tool',
97
+ ...(params.ownerUserId === undefined ? {} : { ownerUserId: params.ownerUserId }),
98
+ ...(params.sourceMessageIds === undefined ? {} : { sourceMessageIds: [...params.sourceMessageIds] }),
99
+ ...(params.candidateId === undefined ? {} : { candidateId: params.candidateId }),
100
+ ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }),
101
+ confidence: clamp01(params.confidence ?? DEFAULT_CONFIDENCE),
102
+ salience: clamp01(params.salience ?? DEFAULT_SALIENCE),
103
+ createdAt: now,
104
+ updatedAt: now,
105
+ };
106
+ await this.#memories.put(params.id, entry);
107
+ return { entry, created: true };
108
+ }
109
+ /**
110
+ * 写入记忆(幂等:同 id 更新)。写入后按规则联动关系图谱
111
+ * (提供 userNodeId 时:familiarity +1;category='player' 额外 trust +5)。
112
+ */
113
+ async remember(params) {
114
+ const { entry, created, previous } = await this.#write({ ...params, id: params.id ?? randomUUID() });
115
+ await this.#audit.log({
116
+ entityType: 'memory',
117
+ entityId: entry.id,
118
+ action: created ? 'create' : 'update',
119
+ ...(previous === undefined ? {} : { before: this.#snapshotOf(previous) }),
120
+ after: this.#snapshotOf(entry),
121
+ source: params.source ?? 'tool',
122
+ ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }),
123
+ ...(params.sceneId === undefined ? {} : { sceneId: params.sceneId }),
124
+ });
125
+ if (created && params.source !== 'tool' && this.#events !== undefined && params.ownerUserId !== undefined && params.userNodeId !== undefined && params.instanceId !== undefined) {
126
+ await this.#events.appendEvent({ ownerUserId: params.ownerUserId, characterId: params.characterId, ...(params.sceneId === undefined ? {} : { sceneId: params.sceneId }), fromNodeId: `character-instance:${params.instanceId}`, toNodeId: params.userNodeId, type: 'familiarity', delta: 1, source: params.source ?? 'system', idempotencyKey: `memory:${entry.id}:familiarity`, ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }) });
127
+ if (this.#projection !== undefined)
128
+ await this.#projection.recompute({ ownerUserId: params.ownerUserId, characterId: params.characterId, ...(params.sceneId === undefined ? {} : { sceneId: params.sceneId }) });
129
+ }
130
+ return entry;
131
+ }
132
+ /**
133
+ * 检索记忆:按 characterId(必填)+ 可选 instanceId/sceneId/category/
134
+ * keyword/minConfidence 过滤,salience DESC → updatedAt DESC 排序,
135
+ * 取 limit 条(默认 5)。命中时更新 lastAccessedAt(updateAccess=true),
136
+ * 提供 userNodeId 时联动 familiarity +0.5。
137
+ */
138
+ async recall(params) {
139
+ const limit = params.limit ?? DEFAULT_MEMORY_LIMIT;
140
+ const minConfidence = params.minConfidence ?? DEFAULT_MIN_CONFIDENCE;
141
+ const keyword = params.keyword?.trim().toLocaleLowerCase();
142
+ const hits = [];
143
+ for (const [, memory] of this.#memories.entries()) {
144
+ if (memory.characterId !== params.characterId)
145
+ continue;
146
+ if (memory.status !== 'active')
147
+ continue;
148
+ if (params.instanceId !== undefined && memory.instanceId !== params.instanceId)
149
+ continue;
150
+ if (params.sceneId !== undefined && memory.sceneId !== params.sceneId)
151
+ continue;
152
+ if (params.category !== undefined && memory.category !== params.category)
153
+ continue;
154
+ if (memory.confidence < minConfidence)
155
+ continue;
156
+ if (keyword !== undefined && keyword !== '' && !memory.fact.toLocaleLowerCase().includes(keyword))
157
+ continue;
158
+ hits.push(memory);
159
+ }
160
+ hits.sort((a, b) => (b.salience - a.salience)
161
+ || (a.updatedAt < b.updatedAt ? 1 : a.updatedAt > b.updatedAt ? -1 : 0));
162
+ const kept = hits.slice(0, limit);
163
+ if (kept.length === 0)
164
+ return kept;
165
+ // 访问日志:更新 lastAccessedAt(不改 updatedAt,避免污染排序)。
166
+ if (params.updateAccess !== false) {
167
+ const accessedAt = new Date().toISOString();
168
+ for (const memory of kept) {
169
+ await this.#memories.put(memory.id, { ...memory, lastAccessedAt: accessedAt });
170
+ }
171
+ }
172
+ // 联动:recall 命中 → familiarity +0.5。
173
+ return kept;
174
+ }
175
+ /**
176
+ * 更正记忆:旧记忆标记 superseded(不删除,保留审计链路),创建新记忆
177
+ * (supersedes 指向旧 id)。提供 userNodeId 时联动 trust +1。
178
+ */
179
+ async supersede(params) {
180
+ const oldEntry = this.#memories.get(params.oldId);
181
+ if (oldEntry === undefined)
182
+ throw new Error(`[Tavern] 记忆不存在:${params.oldId}`);
183
+ const now = new Date().toISOString();
184
+ if (oldEntry.status === 'active') {
185
+ await this.#memories.put(oldEntry.id, { ...oldEntry, status: 'superseded', updatedAt: now });
186
+ await this.#audit.log({
187
+ entityType: 'memory',
188
+ entityId: oldEntry.id,
189
+ action: 'supersede',
190
+ before: this.#snapshotOf(oldEntry),
191
+ after: { ...this.#snapshotOf(oldEntry), status: 'superseded' },
192
+ source: params.source ?? oldEntry.source,
193
+ ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }),
194
+ ...(oldEntry.sceneId === undefined ? {} : { sceneId: oldEntry.sceneId }),
195
+ });
196
+ }
197
+ const { entry: fresh } = await this.#write({
198
+ id: randomUUID(),
199
+ characterId: oldEntry.characterId,
200
+ ...(oldEntry.instanceId === undefined ? {} : { instanceId: oldEntry.instanceId }),
201
+ ...(oldEntry.sceneId === undefined ? {} : { sceneId: oldEntry.sceneId }),
202
+ fact: params.newFact,
203
+ category: params.category ?? oldEntry.category,
204
+ source: params.source ?? oldEntry.source,
205
+ ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }),
206
+ confidence: params.confidence ?? oldEntry.confidence,
207
+ salience: params.salience ?? oldEntry.salience,
208
+ supersedes: oldEntry.id,
209
+ });
210
+ await this.#audit.log({
211
+ entityType: 'memory',
212
+ entityId: fresh.id,
213
+ action: 'create',
214
+ after: this.#snapshotOf(fresh),
215
+ source: params.source ?? oldEntry.source,
216
+ ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }),
217
+ ...(oldEntry.sceneId === undefined ? {} : { sceneId: oldEntry.sceneId }),
218
+ });
219
+ const oldOwnerUserId = oldEntry.ownerUserId;
220
+ if (params.source !== 'tool' && this.#events !== undefined && oldOwnerUserId !== undefined && params.userNodeId !== undefined && oldEntry.instanceId !== undefined) {
221
+ await this.#events.appendEvent({ ownerUserId: oldOwnerUserId, characterId: oldEntry.characterId, ...(oldEntry.sceneId === undefined ? {} : { sceneId: oldEntry.sceneId }), fromNodeId: `character-instance:${oldEntry.instanceId}`, toNodeId: params.userNodeId, type: 'trust', delta: 1, source: params.source ?? 'system', idempotencyKey: `memory-supersede:${oldEntry.id}:${fresh.id}`, ...(params.sourceEventId === undefined ? {} : { sourceEventId: params.sourceEventId }) });
222
+ if (this.#projection !== undefined)
223
+ await this.#projection.recompute({ ownerUserId: oldOwnerUserId, characterId: oldEntry.characterId, ...(oldEntry.sceneId === undefined ? {} : { sceneId: oldEntry.sceneId }) });
224
+ }
225
+ return fresh;
226
+ }
227
+ /**
228
+ * 标记正式记忆的聊天证据已失效。用户已经审阅接受的内容不会被自动删除,
229
+ * 但后续 UI/检索策略可据此提示或降权;重复标记不产生额外审计。
230
+ */
231
+ async markEvidenceInvalidated(memoryId) {
232
+ const memory = this.#memories.get(memoryId);
233
+ if (memory === undefined)
234
+ return null;
235
+ if (memory.evidenceInvalidatedAt !== undefined)
236
+ return memory;
237
+ const next = { ...memory, evidenceInvalidatedAt: new Date().toISOString(), updatedAt: new Date().toISOString() };
238
+ await this.#memories.put(memoryId, next);
239
+ await this.#audit.log({
240
+ entityType: 'memory', entityId: memoryId, action: 'update',
241
+ before: this.#snapshotOf(memory), after: this.#snapshotOf(next), source: 'system',
242
+ ...(next.sceneId === undefined ? {} : { sceneId: next.sceneId }),
243
+ });
244
+ return next;
245
+ }
246
+ /** 遗忘记忆:标记 forgotten(幂等;不存在或已非 active 时不写)。记录审计。 */
247
+ async forget(memoryId) {
248
+ const memory = this.#memories.get(memoryId);
249
+ if (memory === undefined || memory.status !== 'active')
250
+ return;
251
+ await this.#memories.put(memoryId, { ...memory, status: 'forgotten', updatedAt: new Date().toISOString() });
252
+ await this.#audit.log({
253
+ entityType: 'memory',
254
+ entityId: memoryId,
255
+ action: 'forget',
256
+ before: this.#snapshotOf(memory),
257
+ after: { ...this.#snapshotOf(memory), status: 'forgotten' },
258
+ source: memory.source,
259
+ ...(memory.sceneId === undefined ? {} : { sceneId: memory.sceneId }),
260
+ });
261
+ }
262
+ /** 遗忘某个来源事件下的全部 active 记忆;返回处理条数。 */
263
+ async forgetBySourceEvent(sourceEventId, characterId) {
264
+ let forgotten = 0;
265
+ const now = new Date().toISOString();
266
+ for (const [, memory] of this.#memories.entries()) {
267
+ if (memory.status !== 'active')
268
+ continue;
269
+ if (memory.sourceEventId !== sourceEventId)
270
+ continue;
271
+ if (characterId !== undefined && memory.characterId !== characterId)
272
+ continue;
273
+ await this.#memories.put(memory.id, { ...memory, status: 'forgotten', updatedAt: now });
274
+ await this.#audit.log({
275
+ entityType: 'memory',
276
+ entityId: memory.id,
277
+ action: 'forget',
278
+ before: this.#snapshotOf(memory),
279
+ after: { ...this.#snapshotOf(memory), status: 'forgotten' },
280
+ source: memory.source,
281
+ ...(memory.sceneId === undefined ? {} : { sceneId: memory.sceneId }),
282
+ });
283
+ forgotten += 1;
284
+ }
285
+ return forgotten;
286
+ }
287
+ /** 遗忘 sourceEventId 以指定前缀开头的全部 active 记忆;返回处理条数。 */
288
+ async forgetBySourceEventPrefix(prefix, characterId) {
289
+ let forgotten = 0;
290
+ const now = new Date().toISOString();
291
+ for (const [, memory] of this.#memories.entries()) {
292
+ if (memory.status !== 'active')
293
+ continue;
294
+ if (memory.sourceEventId === undefined || !memory.sourceEventId.startsWith(prefix))
295
+ continue;
296
+ if (characterId !== undefined && memory.characterId !== characterId)
297
+ continue;
298
+ await this.#memories.put(memory.id, { ...memory, status: 'forgotten', updatedAt: now });
299
+ await this.#audit.log({
300
+ entityType: 'memory',
301
+ entityId: memory.id,
302
+ action: 'forget',
303
+ before: this.#snapshotOf(memory),
304
+ after: { ...this.#snapshotOf(memory), status: 'forgotten' },
305
+ source: memory.source,
306
+ ...(memory.sceneId === undefined ? {} : { sceneId: memory.sceneId }),
307
+ });
308
+ forgotten += 1;
309
+ }
310
+ return forgotten;
311
+ }
312
+ /** 指定角色(可再按场景)的全部 active 记忆;供候选冲突检测等只读扫描使用。 */
313
+ listActiveByCharacter(characterId, sceneId) {
314
+ const result = [];
315
+ for (const [, memory] of this.#memories.entries()) {
316
+ if (memory.characterId !== characterId)
317
+ continue;
318
+ if (memory.status !== 'active')
319
+ continue;
320
+ if (sceneId !== undefined && memory.sceneId !== sceneId)
321
+ continue;
322
+ result.push(memory);
323
+ }
324
+ return result;
325
+ }
326
+ /**
327
+ * 场景内全部记忆(UI 数据面;含 superseded/forgotten 历史)。
328
+ * filter 支持 category / status;salience DESC → updatedAt DESC 排序。
329
+ */
330
+ async listByScene(sceneId, filter) {
331
+ const result = [];
332
+ for (const [, memory] of this.#memories.entries()) {
333
+ if (memory.sceneId !== sceneId)
334
+ continue;
335
+ if (filter?.category !== undefined && memory.category !== filter.category)
336
+ continue;
337
+ if (filter?.status !== undefined && memory.status !== filter.status)
338
+ continue;
339
+ result.push(memory);
340
+ }
341
+ result.sort((a, b) => (b.salience - a.salience)
342
+ || (a.updatedAt < b.updatedAt ? 1 : a.updatedAt > b.updatedAt ? -1 : 0));
343
+ return result;
344
+ }
345
+ }
346
+ //# sourceMappingURL=memory-service.js.map