@qjp88995/agent-runtime 0.0.0-stage → 0.1.1

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 (477) hide show
  1. package/dist/agent-extensions.d.ts +30 -0
  2. package/dist/agent-extensions.d.ts.map +1 -0
  3. package/dist/agent-extensions.js +4 -0
  4. package/dist/agent-extensions.js.map +1 -0
  5. package/dist/builtins/ask-outcome.d.ts +49 -0
  6. package/dist/builtins/ask-outcome.d.ts.map +1 -0
  7. package/dist/builtins/ask-outcome.js +128 -0
  8. package/dist/builtins/ask-outcome.js.map +1 -0
  9. package/dist/builtins/ask-schema.d.ts +110 -0
  10. package/dist/builtins/ask-schema.d.ts.map +1 -0
  11. package/dist/builtins/ask-schema.js +124 -0
  12. package/dist/builtins/ask-schema.js.map +1 -0
  13. package/dist/builtins/ask.service.d.ts +210 -0
  14. package/dist/builtins/ask.service.d.ts.map +1 -0
  15. package/dist/builtins/ask.service.js +373 -0
  16. package/dist/builtins/ask.service.js.map +1 -0
  17. package/dist/builtins/ask.tool.d.ts +49 -0
  18. package/dist/builtins/ask.tool.d.ts.map +1 -0
  19. package/dist/builtins/ask.tool.js +109 -0
  20. package/dist/builtins/ask.tool.js.map +1 -0
  21. package/dist/builtins/index.d.ts +8 -0
  22. package/dist/builtins/index.d.ts.map +1 -0
  23. package/dist/builtins/index.js +8 -0
  24. package/dist/builtins/index.js.map +1 -0
  25. package/dist/builtins/todo-schema.d.ts +90 -0
  26. package/dist/builtins/todo-schema.d.ts.map +1 -0
  27. package/dist/builtins/todo-schema.js +97 -0
  28. package/dist/builtins/todo-schema.js.map +1 -0
  29. package/dist/builtins/todo-settle.hook.d.ts +110 -0
  30. package/dist/builtins/todo-settle.hook.d.ts.map +1 -0
  31. package/dist/builtins/todo-settle.hook.js +174 -0
  32. package/dist/builtins/todo-settle.hook.js.map +1 -0
  33. package/dist/builtins/todo.tool.d.ts +59 -0
  34. package/dist/builtins/todo.tool.d.ts.map +1 -0
  35. package/dist/builtins/todo.tool.js +107 -0
  36. package/dist/builtins/todo.tool.js.map +1 -0
  37. package/dist/context/context-budget-tracker.d.ts +185 -0
  38. package/dist/context/context-budget-tracker.d.ts.map +1 -0
  39. package/dist/context/context-budget-tracker.js +400 -0
  40. package/dist/context/context-budget-tracker.js.map +1 -0
  41. package/dist/context/context-budget.d.ts +48 -0
  42. package/dist/context/context-budget.d.ts.map +1 -0
  43. package/dist/context/context-budget.js +89 -0
  44. package/dist/context/context-budget.js.map +1 -0
  45. package/dist/context/index.d.ts +3 -0
  46. package/dist/context/index.d.ts.map +1 -0
  47. package/dist/context/index.js +3 -0
  48. package/dist/context/index.js.map +1 -0
  49. package/dist/extensions/repeat-call.hook.d.ts +32 -0
  50. package/dist/extensions/repeat-call.hook.d.ts.map +1 -0
  51. package/dist/extensions/repeat-call.hook.js +54 -0
  52. package/dist/extensions/repeat-call.hook.js.map +1 -0
  53. package/dist/hooks/index.d.ts +3 -0
  54. package/dist/hooks/index.d.ts.map +1 -0
  55. package/dist/hooks/index.js +3 -0
  56. package/dist/hooks/index.js.map +1 -0
  57. package/dist/hooks/turn-hook.registry.d.ts +51 -0
  58. package/dist/hooks/turn-hook.registry.d.ts.map +1 -0
  59. package/dist/hooks/turn-hook.registry.js +233 -0
  60. package/dist/hooks/turn-hook.registry.js.map +1 -0
  61. package/dist/hooks/turn-hook.types.d.ts +179 -0
  62. package/dist/hooks/turn-hook.types.d.ts.map +1 -0
  63. package/dist/hooks/turn-hook.types.js +48 -0
  64. package/dist/hooks/turn-hook.types.js.map +1 -0
  65. package/dist/images/byte-cache.d.ts +24 -0
  66. package/dist/images/byte-cache.d.ts.map +1 -0
  67. package/dist/images/byte-cache.js +51 -0
  68. package/dist/images/byte-cache.js.map +1 -0
  69. package/dist/images/delivery.d.ts +115 -0
  70. package/dist/images/delivery.d.ts.map +1 -0
  71. package/dist/images/delivery.js +321 -0
  72. package/dist/images/delivery.js.map +1 -0
  73. package/dist/images/index.d.ts +5 -0
  74. package/dist/images/index.d.ts.map +1 -0
  75. package/dist/images/index.js +5 -0
  76. package/dist/images/index.js.map +1 -0
  77. package/dist/images/prompt.d.ts +151 -0
  78. package/dist/images/prompt.d.ts.map +1 -0
  79. package/dist/images/prompt.js +172 -0
  80. package/dist/images/prompt.js.map +1 -0
  81. package/dist/images/vendor-files.d.ts +93 -0
  82. package/dist/images/vendor-files.d.ts.map +1 -0
  83. package/dist/images/vendor-files.js +156 -0
  84. package/dist/images/vendor-files.js.map +1 -0
  85. package/dist/in-process/conversation-store.d.ts +64 -0
  86. package/dist/in-process/conversation-store.d.ts.map +1 -0
  87. package/dist/in-process/conversation-store.js +222 -0
  88. package/dist/in-process/conversation-store.js.map +1 -0
  89. package/dist/in-process/coordination.d.ts +54 -0
  90. package/dist/in-process/coordination.d.ts.map +1 -0
  91. package/dist/in-process/coordination.js +137 -0
  92. package/dist/in-process/coordination.js.map +1 -0
  93. package/dist/in-process/image-source.d.ts +15 -0
  94. package/dist/in-process/image-source.d.ts.map +1 -0
  95. package/dist/in-process/image-source.js +27 -0
  96. package/dist/in-process/image-source.js.map +1 -0
  97. package/dist/in-process/index.d.ts +36 -0
  98. package/dist/in-process/index.d.ts.map +1 -0
  99. package/dist/in-process/index.js +37 -0
  100. package/dist/in-process/index.js.map +1 -0
  101. package/dist/in-process/question-store.d.ts +28 -0
  102. package/dist/in-process/question-store.d.ts.map +1 -0
  103. package/dist/in-process/question-store.js +122 -0
  104. package/dist/in-process/question-store.js.map +1 -0
  105. package/dist/in-process/run-store.d.ts +36 -0
  106. package/dist/in-process/run-store.d.ts.map +1 -0
  107. package/dist/in-process/run-store.js +81 -0
  108. package/dist/in-process/run-store.js.map +1 -0
  109. package/dist/in-process/session-store.d.ts +33 -0
  110. package/dist/in-process/session-store.d.ts.map +1 -0
  111. package/dist/in-process/session-store.js +93 -0
  112. package/dist/in-process/session-store.js.map +1 -0
  113. package/dist/in-process/stream-bus.d.ts +52 -0
  114. package/dist/in-process/stream-bus.d.ts.map +1 -0
  115. package/dist/in-process/stream-bus.js +200 -0
  116. package/dist/in-process/stream-bus.js.map +1 -0
  117. package/dist/in-process/vendor-file-cache.d.ts +11 -0
  118. package/dist/in-process/vendor-file-cache.d.ts.map +1 -0
  119. package/dist/in-process/vendor-file-cache.js +47 -0
  120. package/dist/in-process/vendor-file-cache.js.map +1 -0
  121. package/dist/index.d.ts +21 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +21 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/loop/active-tick.registry.d.ts +31 -0
  126. package/dist/loop/active-tick.registry.d.ts.map +1 -0
  127. package/dist/loop/active-tick.registry.js +45 -0
  128. package/dist/loop/active-tick.registry.js.map +1 -0
  129. package/dist/loop/index.d.ts +6 -0
  130. package/dist/loop/index.d.ts.map +1 -0
  131. package/dist/loop/index.js +6 -0
  132. package/dist/loop/index.js.map +1 -0
  133. package/dist/loop/loop-driver.d.ts +127 -0
  134. package/dist/loop/loop-driver.d.ts.map +1 -0
  135. package/dist/loop/loop-driver.js +199 -0
  136. package/dist/loop/loop-driver.js.map +1 -0
  137. package/dist/loop/message-hub.d.ts +236 -0
  138. package/dist/loop/message-hub.d.ts.map +1 -0
  139. package/dist/loop/message-hub.js +439 -0
  140. package/dist/loop/message-hub.js.map +1 -0
  141. package/dist/loop/orphan-run.sweeper.d.ts +79 -0
  142. package/dist/loop/orphan-run.sweeper.d.ts.map +1 -0
  143. package/dist/loop/orphan-run.sweeper.js +145 -0
  144. package/dist/loop/orphan-run.sweeper.js.map +1 -0
  145. package/dist/loop/root-host.d.ts +51 -0
  146. package/dist/loop/root-host.d.ts.map +1 -0
  147. package/dist/loop/root-host.js +65 -0
  148. package/dist/loop/root-host.js.map +1 -0
  149. package/dist/ports/context-store.d.ts +69 -0
  150. package/dist/ports/context-store.d.ts.map +1 -0
  151. package/dist/ports/context-store.js +2 -0
  152. package/dist/ports/context-store.js.map +1 -0
  153. package/dist/ports/conversation-store.d.ts +144 -0
  154. package/dist/ports/conversation-store.d.ts.map +1 -0
  155. package/dist/ports/conversation-store.js +2 -0
  156. package/dist/ports/conversation-store.js.map +1 -0
  157. package/dist/ports/coordination.d.ts +76 -0
  158. package/dist/ports/coordination.d.ts.map +1 -0
  159. package/dist/ports/coordination.js +12 -0
  160. package/dist/ports/coordination.js.map +1 -0
  161. package/dist/ports/image-source.d.ts +26 -0
  162. package/dist/ports/image-source.d.ts.map +1 -0
  163. package/dist/ports/image-source.js +2 -0
  164. package/dist/ports/image-source.js.map +1 -0
  165. package/dist/ports/index.d.ts +11 -0
  166. package/dist/ports/index.d.ts.map +1 -0
  167. package/dist/ports/index.js +4 -0
  168. package/dist/ports/index.js.map +1 -0
  169. package/dist/ports/logger.d.ts +14 -0
  170. package/dist/ports/logger.d.ts.map +1 -0
  171. package/dist/ports/logger.js +23 -0
  172. package/dist/ports/logger.js.map +1 -0
  173. package/dist/ports/question-store.d.ts +91 -0
  174. package/dist/ports/question-store.d.ts.map +1 -0
  175. package/dist/ports/question-store.js +8 -0
  176. package/dist/ports/question-store.js.map +1 -0
  177. package/dist/ports/run-store.d.ts +66 -0
  178. package/dist/ports/run-store.d.ts.map +1 -0
  179. package/dist/ports/run-store.js +2 -0
  180. package/dist/ports/run-store.js.map +1 -0
  181. package/dist/ports/session-store.d.ts +72 -0
  182. package/dist/ports/session-store.d.ts.map +1 -0
  183. package/dist/ports/session-store.js +9 -0
  184. package/dist/ports/session-store.js.map +1 -0
  185. package/dist/ports/stream-bus.d.ts +52 -0
  186. package/dist/ports/stream-bus.d.ts.map +1 -0
  187. package/dist/ports/stream-bus.js +2 -0
  188. package/dist/ports/stream-bus.js.map +1 -0
  189. package/dist/ports/vendor-file-cache.d.ts +46 -0
  190. package/dist/ports/vendor-file-cache.d.ts.map +1 -0
  191. package/dist/ports/vendor-file-cache.js +2 -0
  192. package/dist/ports/vendor-file-cache.js.map +1 -0
  193. package/dist/schema/agent-event.d.ts +35 -0
  194. package/dist/schema/agent-event.d.ts.map +1 -0
  195. package/dist/schema/agent-event.js +46 -0
  196. package/dist/schema/agent-event.js.map +1 -0
  197. package/dist/schema/agent-run.d.ts +23 -0
  198. package/dist/schema/agent-run.d.ts.map +1 -0
  199. package/dist/schema/agent-run.js +37 -0
  200. package/dist/schema/agent-run.js.map +1 -0
  201. package/dist/schema/index.d.ts +4 -0
  202. package/dist/schema/index.d.ts.map +1 -0
  203. package/dist/schema/index.js +4 -0
  204. package/dist/schema/index.js.map +1 -0
  205. package/dist/schema/message-part.d.ts +73 -0
  206. package/dist/schema/message-part.d.ts.map +1 -0
  207. package/dist/schema/message-part.js +90 -0
  208. package/dist/schema/message-part.js.map +1 -0
  209. package/dist/subagent/delegate.tool.d.ts +145 -0
  210. package/dist/subagent/delegate.tool.d.ts.map +1 -0
  211. package/dist/subagent/delegate.tool.js +329 -0
  212. package/dist/subagent/delegate.tool.js.map +1 -0
  213. package/dist/subagent/index.d.ts +10 -0
  214. package/dist/subagent/index.d.ts.map +1 -0
  215. package/dist/subagent/index.js +10 -0
  216. package/dist/subagent/index.js.map +1 -0
  217. package/dist/subagent/milestone-body.d.ts +82 -0
  218. package/dist/subagent/milestone-body.d.ts.map +1 -0
  219. package/dist/subagent/milestone-body.js +112 -0
  220. package/dist/subagent/milestone-body.js.map +1 -0
  221. package/dist/subagent/output-scan.d.ts +14 -0
  222. package/dist/subagent/output-scan.d.ts.map +1 -0
  223. package/dist/subagent/output-scan.js +41 -0
  224. package/dist/subagent/output-scan.js.map +1 -0
  225. package/dist/subagent/registry-spawn-policy.d.ts +32 -0
  226. package/dist/subagent/registry-spawn-policy.d.ts.map +1 -0
  227. package/dist/subagent/registry-spawn-policy.js +48 -0
  228. package/dist/subagent/registry-spawn-policy.js.map +1 -0
  229. package/dist/subagent/roster-block.d.ts +45 -0
  230. package/dist/subagent/roster-block.d.ts.map +1 -0
  231. package/dist/subagent/roster-block.js +69 -0
  232. package/dist/subagent/roster-block.js.map +1 -0
  233. package/dist/subagent/situation-block.d.ts +16 -0
  234. package/dist/subagent/situation-block.d.ts.map +1 -0
  235. package/dist/subagent/situation-block.js +71 -0
  236. package/dist/subagent/situation-block.js.map +1 -0
  237. package/dist/subagent/spawn-guards.d.ts +32 -0
  238. package/dist/subagent/spawn-guards.d.ts.map +1 -0
  239. package/dist/subagent/spawn-guards.js +39 -0
  240. package/dist/subagent/spawn-guards.js.map +1 -0
  241. package/dist/subagent/subagent-registry.d.ts +150 -0
  242. package/dist/subagent/subagent-registry.d.ts.map +1 -0
  243. package/dist/subagent/subagent-registry.js +167 -0
  244. package/dist/subagent/subagent-registry.js.map +1 -0
  245. package/dist/subagent/subagent-sessions.d.ts +213 -0
  246. package/dist/subagent/subagent-sessions.d.ts.map +1 -0
  247. package/dist/subagent/subagent-sessions.js +295 -0
  248. package/dist/subagent/subagent-sessions.js.map +1 -0
  249. package/dist/testing/contracts.d.ts +37 -0
  250. package/dist/testing/contracts.d.ts.map +1 -0
  251. package/dist/testing/contracts.js +607 -0
  252. package/dist/testing/contracts.js.map +1 -0
  253. package/dist/testing/index.d.ts +5 -0
  254. package/dist/testing/index.d.ts.map +1 -0
  255. package/dist/testing/index.js +5 -0
  256. package/dist/testing/index.js.map +1 -0
  257. package/dist/testing/stub.d.ts +28 -0
  258. package/dist/testing/stub.d.ts.map +1 -0
  259. package/dist/testing/stub.js +3 -0
  260. package/dist/testing/stub.js.map +1 -0
  261. package/dist/tools/agent-tool.base.d.ts +186 -0
  262. package/dist/tools/agent-tool.base.d.ts.map +1 -0
  263. package/dist/tools/agent-tool.base.js +243 -0
  264. package/dist/tools/agent-tool.base.js.map +1 -0
  265. package/dist/tools/agent-tool.interface.d.ts +95 -0
  266. package/dist/tools/agent-tool.interface.d.ts.map +1 -0
  267. package/dist/tools/agent-tool.interface.js +2 -0
  268. package/dist/tools/agent-tool.interface.js.map +1 -0
  269. package/dist/tools/builtin-names.d.ts +18 -0
  270. package/dist/tools/builtin-names.d.ts.map +1 -0
  271. package/dist/tools/builtin-names.js +20 -0
  272. package/dist/tools/builtin-names.js.map +1 -0
  273. package/dist/tools/index.d.ts +9 -0
  274. package/dist/tools/index.d.ts.map +1 -0
  275. package/dist/tools/index.js +6 -0
  276. package/dist/tools/index.js.map +1 -0
  277. package/dist/tools/tool-definition.d.ts +18 -0
  278. package/dist/tools/tool-definition.d.ts.map +1 -0
  279. package/dist/tools/tool-definition.js +77 -0
  280. package/dist/tools/tool-definition.js.map +1 -0
  281. package/dist/tools/tool-meta.d.ts +55 -0
  282. package/dist/tools/tool-meta.d.ts.map +1 -0
  283. package/dist/tools/tool-meta.js +2 -0
  284. package/dist/tools/tool-meta.js.map +1 -0
  285. package/dist/tools/tool-registry.d.ts +190 -0
  286. package/dist/tools/tool-registry.d.ts.map +1 -0
  287. package/dist/tools/tool-registry.js +379 -0
  288. package/dist/tools/tool-registry.js.map +1 -0
  289. package/dist/tools/tool-result.d.ts +41 -0
  290. package/dist/tools/tool-result.d.ts.map +1 -0
  291. package/dist/tools/tool-result.js +19 -0
  292. package/dist/tools/tool-result.js.map +1 -0
  293. package/dist/tools/tool-wire.d.ts +24 -0
  294. package/dist/tools/tool-wire.d.ts.map +1 -0
  295. package/dist/tools/tool-wire.js +2 -0
  296. package/dist/tools/tool-wire.js.map +1 -0
  297. package/dist/turn/agent-runtime.d.ts +31 -0
  298. package/dist/turn/agent-runtime.d.ts.map +1 -0
  299. package/dist/turn/agent-runtime.js +30 -0
  300. package/dist/turn/agent-runtime.js.map +1 -0
  301. package/dist/turn/chunk-projection.d.ts +32 -0
  302. package/dist/turn/chunk-projection.d.ts.map +1 -0
  303. package/dist/turn/chunk-projection.js +62 -0
  304. package/dist/turn/chunk-projection.js.map +1 -0
  305. package/dist/turn/compaction.d.ts +48 -0
  306. package/dist/turn/compaction.d.ts.map +1 -0
  307. package/dist/turn/compaction.js +89 -0
  308. package/dist/turn/compaction.js.map +1 -0
  309. package/dist/turn/context-overflow.d.ts +11 -0
  310. package/dist/turn/context-overflow.d.ts.map +1 -0
  311. package/dist/turn/context-overflow.js +53 -0
  312. package/dist/turn/context-overflow.js.map +1 -0
  313. package/dist/turn/context-pressure.d.ts +100 -0
  314. package/dist/turn/context-pressure.d.ts.map +1 -0
  315. package/dist/turn/context-pressure.js +21 -0
  316. package/dist/turn/context-pressure.js.map +1 -0
  317. package/dist/turn/events-to-steps.d.ts +8 -0
  318. package/dist/turn/events-to-steps.d.ts.map +1 -0
  319. package/dist/turn/events-to-steps.js +64 -0
  320. package/dist/turn/events-to-steps.js.map +1 -0
  321. package/dist/turn/index.d.ts +17 -0
  322. package/dist/turn/index.d.ts.map +1 -0
  323. package/dist/turn/index.js +16 -0
  324. package/dist/turn/index.js.map +1 -0
  325. package/dist/turn/json-preview.d.ts +22 -0
  326. package/dist/turn/json-preview.d.ts.map +1 -0
  327. package/dist/turn/json-preview.js +34 -0
  328. package/dist/turn/json-preview.js.map +1 -0
  329. package/dist/turn/json-string-field.d.ts +30 -0
  330. package/dist/turn/json-string-field.d.ts.map +1 -0
  331. package/dist/turn/json-string-field.js +125 -0
  332. package/dist/turn/json-string-field.js.map +1 -0
  333. package/dist/turn/loop-reminder.d.ts +79 -0
  334. package/dist/turn/loop-reminder.d.ts.map +1 -0
  335. package/dist/turn/loop-reminder.js +0 -0
  336. package/dist/turn/loop-reminder.js.map +1 -0
  337. package/dist/turn/nul-safe.d.ts +21 -0
  338. package/dist/turn/nul-safe.d.ts.map +1 -0
  339. package/dist/turn/nul-safe.js +23 -0
  340. package/dist/turn/nul-safe.js.map +1 -0
  341. package/dist/turn/parts-from-events.d.ts +71 -0
  342. package/dist/turn/parts-from-events.d.ts.map +1 -0
  343. package/dist/turn/parts-from-events.js +217 -0
  344. package/dist/turn/parts-from-events.js.map +1 -0
  345. package/dist/turn/parts-to-model-messages.d.ts +158 -0
  346. package/dist/turn/parts-to-model-messages.d.ts.map +1 -0
  347. package/dist/turn/parts-to-model-messages.js +334 -0
  348. package/dist/turn/parts-to-model-messages.js.map +1 -0
  349. package/dist/turn/pending-work.d.ts +10 -0
  350. package/dist/turn/pending-work.d.ts.map +1 -0
  351. package/dist/turn/pending-work.js +14 -0
  352. package/dist/turn/pending-work.js.map +1 -0
  353. package/dist/turn/provider-error.d.ts +45 -0
  354. package/dist/turn/provider-error.d.ts.map +1 -0
  355. package/dist/turn/provider-error.js +154 -0
  356. package/dist/turn/provider-error.js.map +1 -0
  357. package/dist/turn/tool-input-preview.d.ts +94 -0
  358. package/dist/turn/tool-input-preview.d.ts.map +1 -0
  359. package/dist/turn/tool-input-preview.js +143 -0
  360. package/dist/turn/tool-input-preview.js.map +1 -0
  361. package/dist/turn/tool-input-progress.d.ts +47 -0
  362. package/dist/turn/tool-input-progress.d.ts.map +1 -0
  363. package/dist/turn/tool-input-progress.js +50 -0
  364. package/dist/turn/tool-input-progress.js.map +1 -0
  365. package/dist/turn/turn-envelope.d.ts +184 -0
  366. package/dist/turn/turn-envelope.d.ts.map +1 -0
  367. package/dist/turn/turn-envelope.js +2 -0
  368. package/dist/turn/turn-envelope.js.map +1 -0
  369. package/dist/turn/turn-journal.d.ts +49 -0
  370. package/dist/turn/turn-journal.d.ts.map +1 -0
  371. package/dist/turn/turn-journal.js +51 -0
  372. package/dist/turn/turn-journal.js.map +1 -0
  373. package/dist/turn/turn-run.d.ts +487 -0
  374. package/dist/turn/turn-run.d.ts.map +1 -0
  375. package/dist/turn/turn-run.js +1167 -0
  376. package/dist/turn/turn-run.js.map +1 -0
  377. package/dist/turn/usage.d.ts +27 -0
  378. package/dist/turn/usage.d.ts.map +1 -0
  379. package/dist/turn/usage.js +51 -0
  380. package/dist/turn/usage.js.map +1 -0
  381. package/package.json +59 -3
  382. package/src/agent-extensions.ts +33 -0
  383. package/src/builtins/ask-outcome.ts +168 -0
  384. package/src/builtins/ask-schema.ts +186 -0
  385. package/src/builtins/ask.service.ts +482 -0
  386. package/src/builtins/ask.tool.ts +138 -0
  387. package/src/builtins/index.ts +25 -0
  388. package/src/builtins/todo-schema.ts +108 -0
  389. package/src/builtins/todo-settle.hook.ts +221 -0
  390. package/src/builtins/todo.tool.ts +134 -0
  391. package/src/context/context-budget-tracker.ts +519 -0
  392. package/src/context/context-budget.ts +124 -0
  393. package/src/context/index.ts +17 -0
  394. package/src/extensions/repeat-call.hook.ts +77 -0
  395. package/src/hooks/index.ts +19 -0
  396. package/src/hooks/turn-hook.registry.ts +307 -0
  397. package/src/hooks/turn-hook.types.ts +210 -0
  398. package/src/images/byte-cache.ts +61 -0
  399. package/src/images/delivery.ts +508 -0
  400. package/src/images/index.ts +35 -0
  401. package/src/images/prompt.ts +289 -0
  402. package/src/images/vendor-files.ts +235 -0
  403. package/src/in-process/conversation-store.ts +304 -0
  404. package/src/in-process/coordination.ts +177 -0
  405. package/src/in-process/image-source.ts +29 -0
  406. package/src/in-process/index.ts +52 -0
  407. package/src/in-process/question-store.ts +155 -0
  408. package/src/in-process/run-store.ts +115 -0
  409. package/src/in-process/session-store.ts +118 -0
  410. package/src/in-process/stream-bus.ts +244 -0
  411. package/src/in-process/vendor-file-cache.ts +67 -0
  412. package/src/index.ts +28 -0
  413. package/src/loop/active-tick.registry.ts +49 -0
  414. package/src/loop/index.ts +25 -0
  415. package/src/loop/loop-driver.ts +275 -0
  416. package/src/loop/message-hub.ts +532 -0
  417. package/src/loop/orphan-run.sweeper.ts +204 -0
  418. package/src/loop/root-host.ts +119 -0
  419. package/src/ports/context-store.ts +71 -0
  420. package/src/ports/conversation-store.ts +165 -0
  421. package/src/ports/coordination.ts +81 -0
  422. package/src/ports/image-source.ts +26 -0
  423. package/src/ports/index.ts +56 -0
  424. package/src/ports/logger.ts +34 -0
  425. package/src/ports/question-store.ts +117 -0
  426. package/src/ports/run-store.ts +69 -0
  427. package/src/ports/session-store.ts +80 -0
  428. package/src/ports/stream-bus.ts +59 -0
  429. package/src/ports/vendor-file-cache.ts +54 -0
  430. package/src/schema/agent-event.ts +69 -0
  431. package/src/schema/agent-run.ts +44 -0
  432. package/src/schema/index.ts +25 -0
  433. package/src/schema/message-part.ts +100 -0
  434. package/src/subagent/delegate.tool.ts +476 -0
  435. package/src/subagent/index.ts +63 -0
  436. package/src/subagent/milestone-body.ts +144 -0
  437. package/src/subagent/output-scan.ts +56 -0
  438. package/src/subagent/registry-spawn-policy.ts +85 -0
  439. package/src/subagent/roster-block.ts +103 -0
  440. package/src/subagent/situation-block.ts +83 -0
  441. package/src/subagent/spawn-guards.ts +54 -0
  442. package/src/subagent/subagent-registry.ts +283 -0
  443. package/src/subagent/subagent-sessions.ts +496 -0
  444. package/src/testing/contracts.ts +882 -0
  445. package/src/testing/index.ts +14 -0
  446. package/src/testing/stub.ts +28 -0
  447. package/src/tools/agent-tool.base.ts +361 -0
  448. package/src/tools/agent-tool.interface.ts +101 -0
  449. package/src/tools/builtin-names.ts +26 -0
  450. package/src/tools/index.ts +39 -0
  451. package/src/tools/tool-definition.ts +93 -0
  452. package/src/tools/tool-meta.ts +60 -0
  453. package/src/tools/tool-registry.ts +513 -0
  454. package/src/tools/tool-result.ts +45 -0
  455. package/src/tools/tool-wire.ts +24 -0
  456. package/src/turn/agent-runtime.ts +43 -0
  457. package/src/turn/chunk-projection.ts +81 -0
  458. package/src/turn/compaction.ts +103 -0
  459. package/src/turn/context-overflow.ts +54 -0
  460. package/src/turn/context-pressure.ts +114 -0
  461. package/src/turn/events-to-steps.ts +73 -0
  462. package/src/turn/index.ts +71 -0
  463. package/src/turn/json-preview.ts +36 -0
  464. package/src/turn/json-string-field.ts +134 -0
  465. package/src/turn/loop-reminder.ts +0 -0
  466. package/src/turn/nul-safe.ts +22 -0
  467. package/src/turn/parts-from-events.ts +248 -0
  468. package/src/turn/parts-to-model-messages.ts +428 -0
  469. package/src/turn/pending-work.ts +14 -0
  470. package/src/turn/provider-error.ts +160 -0
  471. package/src/turn/tool-input-preview.ts +223 -0
  472. package/src/turn/tool-input-progress.ts +76 -0
  473. package/src/turn/turn-envelope.ts +185 -0
  474. package/src/turn/turn-journal.ts +102 -0
  475. package/src/turn/turn-run.ts +1479 -0
  476. package/src/turn/usage.ts +56 -0
  477. package/README.md +0 -3
@@ -0,0 +1,199 @@
1
+ import { silentLogger } from '../ports/logger.js';
2
+ import { ActiveTickRegistry } from './active-tick.registry.js';
3
+ /** 锁 TTL 60s(`LOCK_TTL_MS`),20s 续租留足冗余。 */
4
+ export const LOCK_RENEW_INTERVAL_MS = 20_000;
5
+ /**
6
+ * 停机时留给在跑的 tick 自行收尾的预算。`docker stop` 默认 SIGTERM 之后 10s
7
+ * 才 SIGKILL,取 7s 留出余量给宿主其余的关闭钩子。
8
+ *
9
+ * 超时**不是**故障:`OrphanRunSweeper` 仍然兜底,只是用户要多等一会儿。故这里
10
+ * 宁可早点放手,也不能赌满 10s——被 SIGKILL 打断的话,连锁的主动释放都没做成。
11
+ */
12
+ export const SHUTDOWN_DRAIN_MS = 7_000;
13
+ const SHUTDOWN_POLL_MS = 50;
14
+ /**
15
+ * inbox 驱动的 agent loop 调度器。`wake` 经 `WakeChannel` 广播(多实例时跨实例);
16
+ * 每个实例的订阅者收到即 `onWake` —— 试抢会话锁,只有抢到的那个实例跑一个 tick
17
+ * (一次 `runTurn` 自驱 loop,drain-first)。tick 收尾释放锁后再查一次 inbox:
18
+ * 若期间又有新消息进来(插话 / 子 Agent 回投),重新 wake,闭合「刚 drain 完又来
19
+ * 一条、锁还没放」的丢唤醒窗口。
20
+ *
21
+ * 流的生命周期(open / close)完全落在 tick 内,与任何 HTTP 连接解耦。
22
+ */
23
+ export class LoopDriver {
24
+ deps;
25
+ active;
26
+ logger;
27
+ unsubscribe;
28
+ constructor(deps) {
29
+ this.deps = deps;
30
+ this.active = new ActiveTickRegistry(deps.bus);
31
+ this.logger = deps.logger ?? silentLogger('');
32
+ }
33
+ /** 订阅唤醒。返回退订函数(`shutdown` 也会退订)。 */
34
+ start() {
35
+ this.unsubscribe ??= this.deps.wake.onWake(sessionId => {
36
+ void this.onWake(sessionId).catch(err => this.logger.error(`onWake(${sessionId}) failed: ${String(err)}`));
37
+ });
38
+ return () => this.stopListening();
39
+ }
40
+ stopListening() {
41
+ this.unsubscribe?.();
42
+ this.unsubscribe = undefined;
43
+ }
44
+ /**
45
+ * 投递一条消息并唤醒(**post-first**:先写 inbox 再 wake)。宿主的准入检查
46
+ * (会话能不能发言等)在调它之前自己做。
47
+ */
48
+ async post(input) {
49
+ const out = await this.deps.hub.post(input);
50
+ await this.deps.wake.wake(input.sessionId);
51
+ return out;
52
+ }
53
+ /** 该会话此刻在本进程跑着的流,没有则 null。 */
54
+ activeStreamOf(sessionId) {
55
+ return this.active.streamOf(sessionId);
56
+ }
57
+ /**
58
+ * 会话级中断:解析该会话当前活跃 tick 的流 → abort。跨实例 best-effort(tick 跑在
59
+ * 别的实例上时这里查不到)。返回是否真的中断了一条流。宿主挂着的同步等待(提问
60
+ * 面板等)自己作废。
61
+ */
62
+ stopSession(sessionId) {
63
+ const streamId = this.active.streamOf(sessionId);
64
+ if (!streamId)
65
+ return false;
66
+ this.deps.bus.abort(streamId);
67
+ return true;
68
+ }
69
+ /**
70
+ * 停机前把本进程正在跑的 tick 全部 abort 掉,并**等它们收完尾**。
71
+ *
72
+ * 不做的话,那些轮次的终态就随进程一起没了:跑次停在 running、消息没盖终态。
73
+ * sweeper 能修,但代价是至少一个锁 TTL(进程被杀时锁不会主动释放)。主动重启
74
+ * 占了重启的绝大多数,这条路让它们几乎瞬时收尾,sweeper 退回去只兜底真正的崩溃。
75
+ *
76
+ * **走的是内核既有的 abort 路径**:`bus.abort` → `runTurn` 照常以 aborted 收尾 →
77
+ * `host.persist` 盖终态、发 `run-finish`,等价于用户点了停止。
78
+ *
79
+ * **必须等**:abort 只是置了标记,立刻返回就等于没做。等到登记簿清空为准,超时
80
+ * 则放手交给 sweeper。返回是否在预算内清空。
81
+ */
82
+ async shutdown(budgetMs = SHUTDOWN_DRAIN_MS) {
83
+ this.stopListening();
84
+ const streams = this.active.streamIds();
85
+ if (streams.length === 0)
86
+ return true;
87
+ this.logger.warn(`shutdown: aborting ${streams.length} in-flight tick(s) so they land a terminal state`);
88
+ for (const streamId of streams)
89
+ this.deps.bus.abort(streamId);
90
+ const deadline = Date.now() + budgetMs;
91
+ while (this.active.size > 0) {
92
+ if (Date.now() >= deadline) {
93
+ this.logger.warn(`shutdown: ${this.active.size} tick(s) still running after ${budgetMs}ms; OrphanRunSweeper will finish them`);
94
+ return false;
95
+ }
96
+ await new Promise(resolve => setTimeout(resolve, SHUTDOWN_POLL_MS));
97
+ }
98
+ return true;
99
+ }
100
+ async onWake(sessionId) {
101
+ const { lock, hub, wake } = this.deps;
102
+ const token = await lock.acquire(sessionId);
103
+ if (!token)
104
+ return; // 已有 loop 在跑,它会 re-drain
105
+ const renew = setInterval(() => void lock.renew(sessionId, token).catch(() => undefined), this.deps.renewIntervalMs ?? LOCK_RENEW_INTERVAL_MS);
106
+ try {
107
+ // 抢到锁之后再确认一次真有货。每一个投递方都是 post-first,另外两个唤醒源
108
+ // (下面的 re-wake、启动时的 `wakePendingInboxes`)本就以 `hasPending` 为
109
+ // 条件——所以「持锁而 inbox 空」只有一个成因:这批货在 wake 与抢锁之间没了
110
+ // (被上一个 tick 领走或被用户撤回)。空跑一趟会开流、开跑次、发 run-start /
111
+ // run-finish,前端建一个空气泡再收起来。
112
+ //
113
+ // **不能直接 return**:跳过的只是 tick,下面的 release 与重新自查必须照走,
114
+ // 否则一次 wake 落在「查完到释放锁」之间就丢了。
115
+ if (await hub.hasPending(sessionId)) {
116
+ await this.runTick(sessionId);
117
+ }
118
+ }
119
+ finally {
120
+ clearInterval(renew);
121
+ await lock.release(sessionId, token);
122
+ }
123
+ // 必须排在 re-wake 之前,判据见 `LoopHost.afterTick`。
124
+ await this.deps.host.afterTick?.(sessionId);
125
+ // 关丢唤醒:释放后再查一次,非空则重新广播(锁此刻空闲,可被重新抢到)。
126
+ if (await hub.hasPending(sessionId)) {
127
+ await wake.wake(sessionId);
128
+ }
129
+ else {
130
+ // idle 广播:tick 跑完且 inbox 已空。尽力而为——发不出去只记日志,消费方
131
+ // 各自有兜底。
132
+ await wake
133
+ .idle(sessionId)
134
+ .catch(err => this.logger.warn(`publish idle(${sessionId}) failed: ${String(err)}`));
135
+ }
136
+ }
137
+ async runTick(sessionId) {
138
+ const { bus, hub, host, runtime } = this.deps;
139
+ const setup = await this.resolveSetup(sessionId);
140
+ // 三位一体的 id 由消息中心铸,**别在这里各生成各的**。recorder 的生命周期
141
+ // 正好是这个 tick。
142
+ const recorder = hub.openTurn(sessionId);
143
+ const { runId, streamId } = recorder;
144
+ const { nextSeq } = bus.open(streamId);
145
+ this.active.open(sessionId, streamId);
146
+ try {
147
+ // **不给兜底信号**——`open` 之后 `signalOf` 必然有值,拿不到是接线坏了;拿
148
+ // 一个永不 abort 的空信号顶上去,会把「停止按钮按了没反应」变成一个不报错的
149
+ // 静默症状。
150
+ const abortSignal = bus.signalOf(streamId);
151
+ if (!abortSignal) {
152
+ throw new Error(`stream ${streamId} opened without an abort signal`);
153
+ }
154
+ const args = await host.buildTurn(setup, {
155
+ sessionId,
156
+ runId,
157
+ streamId,
158
+ recorder,
159
+ });
160
+ await runtime.runTurn({
161
+ ...args,
162
+ nextSeq,
163
+ // 事件的去向:本轮的 recorder(消息中心)。内核只认识一个同步投递口。
164
+ sink: e => recorder.emit(e),
165
+ abortSignal,
166
+ });
167
+ }
168
+ catch (err) {
169
+ this.logger.error(`tick ${streamId} crashed: ${String(err)}`);
170
+ }
171
+ finally {
172
+ bus.close(streamId);
173
+ this.active.close(sessionId, streamId);
174
+ }
175
+ }
176
+ /**
177
+ * setup 阶段:任一步都可能抛(agent 已停用、模型已删除……)。流此时还没开,唯一
178
+ * 能让用户看到「发生了什么」的办法是补一条可见占位。落占位失败只记日志(不能
179
+ * 反过来吞掉 / 替换原始 setup 错误),随后原样重新抛出,交由 `onWake` 的 finally
180
+ * 照常 release 锁。
181
+ */
182
+ async resolveSetup(sessionId) {
183
+ try {
184
+ return await this.deps.host.setupTick(sessionId);
185
+ }
186
+ catch (err) {
187
+ const text = this.deps.host.describeSetupError?.(err) ??
188
+ `本轮无法启动:${err instanceof Error ? err.message : String(err)}`;
189
+ try {
190
+ await this.deps.hub.appendSetupError(sessionId, text);
191
+ }
192
+ catch (persistErr) {
193
+ this.logger.error(`appendSetupError(${sessionId}) failed: ${String(persistErr)}`);
194
+ }
195
+ throw err;
196
+ }
197
+ }
198
+ }
199
+ //# sourceMappingURL=loop-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop-driver.js","sourceRoot":"","sources":["../../src/loop/loop-driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,236 @@
1
+ import type { ConversationMessage, ConversationStore, InboxItem, InboxMessageKind, InboxSourceKind } from '../ports/conversation-store.js';
2
+ import type { StreamBus } from '../ports/stream-bus.js';
3
+ import type { AgentEvent } from '../schema/agent-event.js';
4
+ import type { MessagePart } from '../schema/index.js';
5
+ import type { DrainedTurnMessage } from '../turn/turn-envelope.js';
6
+ /**
7
+ * 一次投递。**没有 `messageId` 字段是有意的**:落库主键由中心自己铸,投递方只交
8
+ * 「这条消息是什么」。
9
+ */
10
+ export interface PostInput {
11
+ sessionId: string;
12
+ kind: InboxMessageKind;
13
+ sourceKind: InboxSourceKind;
14
+ /** 谁发的(系统触发为 null)。撤回按它判归属。 */
15
+ sourceUserId?: string | null;
16
+ /**
17
+ * 结构化来源(子 Agent 回执的 handle/status/stopReason;`system_reminder` 则必须
18
+ * 带 `{ kind }`——落库 `metadata.kind` 与投影层的围栏读的都是它,漏了这条行会以
19
+ * 裸 user 文本进上下文)。
20
+ */
21
+ source?: Record<string, unknown> | null;
22
+ parts: MessagePart[];
23
+ }
24
+ /**
25
+ * 一轮的终态,交给 `TurnRecorder.close`。
26
+ *
27
+ * **`status` 与 `metadata` 分开收**:前者是中心自己要用的判据(空转轮闸门、
28
+ * 占位文案的措辞),后者是宿主追加的那几个数(上下文预算的 contextTokens /
29
+ * contextWindow / contextThreshold)——中心不解释它们,只负责跟终态一起落进
30
+ * 同一个 metadata 对象。
31
+ */
32
+ export interface TurnTerminal {
33
+ status: 'completed' | 'aborted' | 'rejected' | 'failed';
34
+ stopReason?: string;
35
+ error?: string;
36
+ usage?: Record<string, number>;
37
+ /** 宿主追加的终态字段(键由宿主定义,中心原样合并)。 */
38
+ metadata?: Record<string, unknown>;
39
+ }
40
+ /**
41
+ * 一轮的记录器 —— `openTurn` 造,`close` 收,**一轮一个**。
42
+ *
43
+ * 它存在的理由是「这一轮落过什么」需要一个家:那两笔记账(领到过消息没有、
44
+ * 落过 assistant 段没有)过去是 `buildRootHost` 里的两个闭包变量,中心这边则
45
+ * 只有 `openTurn` 没有收尾点。**刻意不做成中心里的 `Map<runId, …>`**:那张表
46
+ * 要在三条终态路径上都记得删,漏一条漏一类会话,症状是内存慢慢涨(同
47
+ * `TurnContext.turnState` 那条判据)。生命周期跟着对象走,结构上不可能泄漏。
48
+ *
49
+ * **三位一体的 id 在这里**:`runId` = `streamId` = 本轮 assistant `chat_message`
50
+ * 行的主键 = `AgentEvent.messageId`。前端靠 `messageId` 把流式增量路由到气泡
51
+ * (`chunk.id`),而「`messageId` 恒等于 `runId`」是「换轮」那一轮的产物——在那
52
+ * 之前它们是两个东西,靠一族分段判据互相对应。拆开来各生成各的,等于把那族
53
+ * 判据原样请回来。
54
+ */
55
+ export declare class TurnRecorder {
56
+ private readonly hub;
57
+ readonly sessionId: string;
58
+ readonly runId: string;
59
+ readonly streamId: string;
60
+ /**
61
+ * 这一轮有没有从 inbox 领到过东西。与 `wrote` 一起把两件在收尾时长得一模一样
62
+ * 的事分开:「模型被问了话但一个字没说」(该留一条可见占位)与「压根没有输入
63
+ * 可跑」(该一行都不落)。两者的终态都是 completed、都没落过任何 step。
64
+ */
65
+ private drained;
66
+ /** 这一轮有没有真的落过 assistant 段(`close` 拿它决定要不要补一条)。 */
67
+ private wrote;
68
+ /** 最近一次落库覆盖到的事件 seq(`metadata.flushedSeq`),收尾时原样保留。 */
69
+ private flushedSeq;
70
+ /**
71
+ * 本轮「开跑」事件的服务端时刻(ms),落进 `metadata.runStartedAt`。
72
+ *
73
+ * 前端运行状态行的「已跑 N 秒」靠它:开跑事件在第一次落库后就从会话流里
74
+ * 退役了,刷新之后流里再也找不到这一轮从什么时候开始——没有这一列就只能按
75
+ * 前端本地计时,刷新一次数字就从零重来。取**事件的 `ts`** 而不是在这里
76
+ * `Date.now()`:与流里那条开跑事件是同一个数,刷新前后显示不跳。
77
+ */
78
+ private runStartedAt;
79
+ constructor(hub: MessageHub, sessionId: string, runId: string, streamId: string);
80
+ /**
81
+ * 本轮的一条事件出去(`RunTurnArgs.sink` 接的就是这里)。
82
+ *
83
+ * **这是两条通道汇合的那一点**:同一个对象既往 `chat_message` 写,也往流上
84
+ * 发。此前 SSE 是内核直连总线(`sink: e => bus.publish(e)` 写在 loop 的
85
+ * `runTick` 里)、落库绕回会话层,两条路从来没在同一个地方碰过头——而「同一次
86
+ * 工具调用在流里和库里长得不一样」正是从那里长出来的(那次分叉已经由「落库
87
+ * 只从事件账本重建」修掉,这一步是把结构本身补齐:`bus.publish` 全仓只剩这
88
+ * 一个调用点,`TurnRecorder` 是「这一轮怎么到达外面」的完整答案)。
89
+ *
90
+ * **内核仍然不认识总线**:它只知道一个同步投递口(判据见 `RunTurnArgs.sink`),
91
+ * 这里是那个口的下游。**同步**:账本 `append` 是同步可回读的,投递不能反过来
92
+ * 要求它等(判据见 `TurnJournal`)。
93
+ *
94
+ * 抛错怎么办由账本那一侧管(记 warn、事件照常进账本——观测非承重,绝不能把
95
+ * 一轮成功的生成变成 failed)。
96
+ *
97
+ * **会话级事件不走这里**(`publishSessionEvent`:自动命名、孤儿 sweep 的补发
98
+ * run-finish):它们没有正在跑的这一轮,也就没有 recorder;它们自己会话面
99
+ * 分配游标,见 `StreamBus.publishSessionEvent`。
100
+ */
101
+ emit(event: AgentEvent): void;
102
+ /** 取出本轮要处理的消息(落库在同一事务里,见 `MessageHub.take`)。 */
103
+ take(): Promise<DrainedTurnMessage[]>;
104
+ /** 探一眼本会话的 inbox 还有没有排队的(换轮判据,只探不取)。 */
105
+ hasPending(): Promise<boolean>;
106
+ /**
107
+ * 本轮又产出了这一截 parts —— 增量落进 `runId` 那一行(首次 INSERT,之后
108
+ * jsonb 追加)。全空的一步直接跳过,不留一条空气泡、也不翻「落过」的账。
109
+ */
110
+ record(parts: MessagePart[], uptoSeq?: number | null): Promise<void>;
111
+ /**
112
+ * 收尾:盖终态 metadata 与整轮 usage。
113
+ *
114
+ * 三条路,**判据全在这一个方法里**(过去分散在宿主的 `persist` 与内核的
115
+ * `TurnResult.parts` 之间):
116
+ *
117
+ * 1. **空转轮**(没领到、没落过、且 completed)→ **一行都不落**。占位文案说的
118
+ * 是「模型本轮没有返回任何内容」,而这一轮模型压根没被问过话;落下去就是
119
+ * 一条凭空出现的助手气泡,更要命的是子会话的 `finalizeIfIdle` 会把它当成
120
+ * 这一轮的新产出回投给父。成因是 wake 与真正 drain 之间那段窗口里那批货
121
+ * 没了(最常见的是用户在 QueueBar 上撤回)。
122
+ * **限定 completed**:failed / aborted / rejected 即使零产出也必须留下可见
123
+ * 痕迹,那才是占位文案存在的理由。
124
+ * 2. **一个字都没落过**(但被问过话,或终态不是 completed)→ 补一条可见占位。
125
+ * 3. **落过** → 只盖终态,不再追加任何 parts。
126
+ *
127
+ * @returns 这一轮在对话流里留下东西了没有。宿主据此决定要不要安排自动命名
128
+ * (空转轮没有任何新消息,命名的材料都不存在)。
129
+ */
130
+ close(terminal: TurnTerminal): Promise<boolean>;
131
+ }
132
+ /** 进程被杀、一个字都没落库就中断的那一轮补的可见正文(会随历史喂回模型,故写的是事实)。 */
133
+ export declare const INTERRUPTED_PLACEHOLDER = "\u672C\u8F6E\u5DF2\u4E2D\u65AD\uFF08\u670D\u52A1\u91CD\u542F\uFF09\uFF0C\u672A\u4EA7\u751F\u4EFB\u4F55\u5185\u5BB9\u3002";
134
+ /**
135
+ * 消息中心:会话里「一条消息」的产生、排队、落库与寻址,只此一处。
136
+ *
137
+ * ## 边界
138
+ *
139
+ * **中心是 `ConversationStore` 写方法的唯一调用方**(`ContextStore` 那三样除外:
140
+ * 上下文预算的 tracker 直接用,那是 agent-base 里就有的分工——决策归预算,
141
+ * checkpoint 落库在那边也经中心,这里由端口的原子契约代替)。宿主要投递消息走
142
+ * `post`,别直接 `store.enqueue`:消息主键的铸造、取出时的形态换算都在这里。
143
+ *
144
+ * **不归中心的**:tick 调度 / 会话锁 / 续租是 loop(`LoopDriver`)的活;跑次归
145
+ * `RunStore`;上下文预算的决策归 `ContextBudgetTracker`;内核的工作内存与事件
146
+ * 账本归 `TurnRun`(账本要被内核同步回读,中心只可能是它的下游 sink)。
147
+ */
148
+ export declare class MessageHub {
149
+ readonly store: ConversationStore;
150
+ private readonly bus;
151
+ constructor(store: ConversationStore, bus: StreamBus);
152
+ /** run 级事件投递。只有 `TurnRecorder.emit` 调它,公开只为让它能被替身观测。 */
153
+ publish(event: AgentEvent): void;
154
+ /**
155
+ * 投递。**所有入口唯一的一个**(用户发言、派生子 Agent 的首个 prompt、追加任务、
156
+ * 里程碑回投)。落库用的 id 在这里产生并返回:前端拿它做气泡收敛,必须与库里
157
+ * 那一行同源。
158
+ *
159
+ * **不负责唤醒**:投递方紧接着自己 `wake`(或用 `LoopDriver.post`,两步一起)。
160
+ */
161
+ post(input: PostInput): Promise<{
162
+ messageId: string;
163
+ }>;
164
+ /**
165
+ * 取出本会话待处理的全部消息,**并在同一个事务里落库**(判据在
166
+ * `ConversationStore.takeInbox`),返回内核要的形态。
167
+ *
168
+ * **一轮只被调一次**(内核的第一次迭代,模型开口之前):轮内后来进来的消息由
169
+ * `hasPending` 探到后换轮,留给下一个 tick 的这同一个点。所以这里刚落库的
170
+ * user 行永远早于本轮的任何 assistant 输出。
171
+ */
172
+ take(sessionId: string): Promise<DrainedTurnMessage[]>;
173
+ /**
174
+ * 只探不取。换轮判据(内核每次调模型前探一下,见 `TurnHost.hasPendingInbox`),
175
+ * 以及 loop / sweep 判「这个会话还有没有货」的同一个问题。
176
+ */
177
+ hasPending(sessionId: string): Promise<boolean>;
178
+ /** 撤回:只删「自己的」「还没被取走的」那一项。 */
179
+ withdraw(id: string, userId: string): Promise<InboxItem | null>;
180
+ /** 本会话的待处理队列。 */
181
+ listPending(sessionId: string): Promise<InboxItem[]>;
182
+ /** 此刻还有待处理项的全部会话 id。供启动时补唤醒(wake 是瞬时广播,inbox 是持久的)。 */
183
+ listSessionIdsWithPending(): Promise<string[]>;
184
+ /**
185
+ * 一轮开张:铸那个**三位一体**的 id(`runId` = `streamId` = 本轮 assistant 行主键
186
+ * = `AgentEvent.messageId`),返回本轮的记录器。值本身只是一个 uuid,这个方法的
187
+ * 意义是**只有一处会铸它**。
188
+ */
189
+ openTurn(sessionId: string): TurnRecorder;
190
+ /** 落一条消息(按 id 幂等,见 `ConversationStore.appendMessage`)。 */
191
+ appendMessage(message: Parameters<ConversationStore['appendMessage']>[0]): Promise<ConversationMessage>;
192
+ /**
193
+ * setup 阶段失败的可见占位(会话 / agent / 模型解析就抛错,流从未开、`runTurn`
194
+ * 根本没跑)——不补这条用户会看到彻底的沉默:消息已经进了 inbox,界面上什么都
195
+ * 不会发生。文案由调用方定(`LoopHost.describeSetupError`)。
196
+ */
197
+ appendSetupError(sessionId: string, text: string): Promise<void>;
198
+ /**
199
+ * assistant 段落的落库原语(`TurnRecorder.record` 用)。首次建行、之后追加。
200
+ *
201
+ * `flushedSeq`:这批 parts 覆盖到的最后一个事件的 seq,**与 parts 同一次写入**
202
+ * `metadata.flushedSeq`,写成功后才让会话流退役 seq ≤ 它的事件——分开写的话会
203
+ * 出现「流里已经删了、库里的边界还是旧的」,刷新后前端按旧边界去重,把不该丢的
204
+ * 尾巴当成重放丢掉。
205
+ */
206
+ appendAssistantStep(opts: {
207
+ messageId: string;
208
+ runId: string;
209
+ sessionId: string;
210
+ parts: MessagePart[];
211
+ flushedSeq?: number | null;
212
+ /** 本轮开跑时刻(ms,见 `TurnRecorder.runStartedAt`)。 */
213
+ runStartedAt?: number | null;
214
+ }): Promise<void>;
215
+ /** 一轮收尾:在 `messageId`(= runId)那一行上盖终态 metadata 与整轮 usage。 */
216
+ finalizeAssistantTurn(opts: {
217
+ messageId: string;
218
+ runId: string;
219
+ metadata: Record<string, unknown>;
220
+ usage?: Record<string, number>;
221
+ }): Promise<void>;
222
+ /**
223
+ * 收尾一轮被进程死亡打断的轮次在对话流里的痕迹(`OrphanRunSweeper` 用),返回受
224
+ * 影响的行 id。
225
+ *
226
+ * 两条路,判据是「有没有落过库的 assistant 段」:
227
+ * - **产出过** → 只给还没盖终态的段盖上。已产出的正文原样保留,不追加任何
228
+ * 解释性文字——那会把模型没说过的话写进它的历史。
229
+ * - **一个字都没落库**(run 刚 open 就被杀)→ 补一条可见占位。不补的话用户
230
+ * 那句话孤零零挂着、下面什么都没有,看起来像系统把消息吃了。
231
+ *
232
+ * 会话已删(`sessionId` 为 null)时补不了占位,也没必要。
233
+ */
234
+ closeInterruptedTurn(runId: string, sessionId: string | null): Promise<string[]>;
235
+ }
236
+ //# sourceMappingURL=message-hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-hub.d.ts","sourceRoot":"","sources":["../../src/loop/message-hub.ts"],"names":[],"mappings":"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"}