@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,56 @@
1
+ export type {
2
+ ContextInputs,
3
+ ContextRow,
4
+ ContextStore,
5
+ } from './context-store.js';
6
+ export type {
7
+ ConversationMessage,
8
+ ConversationStore,
9
+ InboxItem,
10
+ InboxMessageKind,
11
+ InboxSourceKind,
12
+ ListMessagesFilter,
13
+ NewConversationMessage,
14
+ } from './conversation-store.js';
15
+ export {
16
+ AWAIT_LEASE_TTL_MS,
17
+ AWAIT_RENEW_INTERVAL_MS,
18
+ LOCK_TTL_MS,
19
+ type SessionLock,
20
+ type SubagentAwaitLease,
21
+ type TreeBudget,
22
+ type WakeChannel,
23
+ } from './coordination.js';
24
+ export type { ImageBytes, ImageSource } from './image-source.js';
25
+ export {
26
+ consoleLogger,
27
+ type Logger,
28
+ type LoggerFactory,
29
+ silentLogger,
30
+ } from './logger.js';
31
+ export {
32
+ type NewQuestion,
33
+ QuestionConflictError,
34
+ type QuestionProbe,
35
+ type QuestionRecord,
36
+ type QuestionStore,
37
+ type SettledQuestionStatus,
38
+ } from './question-store.js';
39
+ export type {
40
+ RunFinishInput,
41
+ RunOpenInput,
42
+ RunStore,
43
+ StaleRun,
44
+ } from './run-store.js';
45
+ export type {
46
+ NewSubSession,
47
+ SessionKind,
48
+ SessionRecord,
49
+ SessionStore,
50
+ } from './session-store.js';
51
+ export type { SessionStreamEntry, StreamBus } from './stream-bus.js';
52
+ export type {
53
+ VendorFileCache,
54
+ VendorFileKey,
55
+ VendorFileRecord,
56
+ } from './vendor-file-cache.js';
@@ -0,0 +1,34 @@
1
+ /** 日志端口。runtime 不依赖任何日志框架;Nest 适配把它接到 Nest 的 Logger。 */
2
+ export interface Logger {
3
+ debug(message: string): void;
4
+ log(message: string): void;
5
+ warn(message: string): void;
6
+ error(message: string, stack?: string): void;
7
+ }
8
+
9
+ /** 按作用域取一个 logger(对应 Nest 的 `new Logger(Class.name)`)。 */
10
+ export type LoggerFactory = (scope: string) => Logger;
11
+
12
+ /** 缺省实现:写 console,带作用域前缀;debug 只在 `AGENT_RUNTIME_DEBUG` 设置时输出。 */
13
+ export const consoleLogger: LoggerFactory = scope => {
14
+ const tag = `[${scope}]`;
15
+ return {
16
+ debug: message => {
17
+ if (process.env.AGENT_RUNTIME_DEBUG) console.debug(tag, message);
18
+ },
19
+ log: message => console.log(tag, message),
20
+ warn: message => console.warn(tag, message),
21
+ error: (message, stack) =>
22
+ stack
23
+ ? console.error(tag, message, '\n', stack)
24
+ : console.error(tag, message),
25
+ };
26
+ };
27
+
28
+ /** 什么都不输出(单测用)。 */
29
+ export const silentLogger: LoggerFactory = () => ({
30
+ debug: () => {},
31
+ log: () => {},
32
+ warn: () => {},
33
+ error: () => {},
34
+ });
@@ -0,0 +1,117 @@
1
+ import type {
2
+ AgentQuestionAnswer,
3
+ AgentQuestionStatus,
4
+ AskQuestionItem,
5
+ } from '../builtins/ask-schema.js';
6
+
7
+ /**
8
+ * `Ask` 工具的问题行。搬自 agent-base 的 `agent_question` 表:每一次提问一行,
9
+ * `pending` 的那一行就是「这一轮正在等用户」。
10
+ *
11
+ * **时间一律按存储自己的时钟**(数据库实现里是 `now()`):期限在落行时由存储算出,
12
+ * 「到点没有」也由存储判——等待方、回答接口可能在不同实例上,各自的挂钟比出来的
13
+ * 结果不可信(容器的挂钟还会回拨)。
14
+ */
15
+ export interface QuestionRecord {
16
+ id: string;
17
+ sessionId: string;
18
+ userId: string;
19
+ /** 提问的那一轮。 */
20
+ runId: string;
21
+ /** 那次 `Ask` 调用;界面按它把这一行对到工具卡上。 */
22
+ toolCallId: string;
23
+ questions: AskQuestionItem[];
24
+ status: AgentQuestionStatus;
25
+ /** null = 不限时(或已经停表,见 `hold`)。 */
26
+ deadlineAt: Date | null;
27
+ /** `answered` 是用户选的,`expired` 是默认项,其余为 null。 */
28
+ answers: AgentQuestionAnswer[] | null;
29
+ createdAt: Date;
30
+ resolvedAt: Date | null;
31
+ }
32
+
33
+ export type SettledQuestionStatus = Exclude<AgentQuestionStatus, 'pending'>;
34
+
35
+ export interface NewQuestion {
36
+ sessionId: string;
37
+ userId: string;
38
+ runId: string;
39
+ toolCallId: string;
40
+ questions: AskQuestionItem[];
41
+ /** 从落行起多少秒到期;缺省不限时。 */
42
+ timeoutSeconds?: number;
43
+ }
44
+
45
+ /** `probe` 的读数:那一行,加上按存储时钟判出的两个标志。 */
46
+ export interface QuestionProbe {
47
+ question: QuestionRecord;
48
+ /** 有期限且已到。 */
49
+ due: boolean;
50
+ /** 从落行起已经过了 `maxWaitSeconds`。 */
51
+ overdue: boolean;
52
+ }
53
+
54
+ /** 同一个会话里同一轮已有一个问题在等(`open` 抛它)。 */
55
+ export class QuestionConflictError extends Error {
56
+ constructor(sessionId: string) {
57
+ super(`session ${sessionId} already has a pending question`);
58
+ this.name = 'QuestionConflictError';
59
+ }
60
+ }
61
+
62
+ /**
63
+ * 问题行的存储。
64
+ *
65
+ * **一个会话同时至多一个 pending**(数据库实现:`sessionId` 上 `status = 'pending'`
66
+ * 的部分唯一索引)。所有「给结局」的写法都带 `status = 'pending'` 谓词——回答、到点、
67
+ * 改为打字、停止抢的是同一句原子更新,只有一个生效。
68
+ */
69
+ export interface QuestionStore {
70
+ /**
71
+ * 落一个新问题,**一个原子步骤**里先把这个会话里**别的轮次**留下的 pending 作废
72
+ * (那只可能是残骸:等它的那一轮已经死了),再插入。同一轮已有 pending 时抛
73
+ * `QuestionConflictError`(同一步里的第二次调用,让模型合并)。
74
+ *
75
+ * 返回新行与被作废的残骸(调用方要把它们也广播出去)。
76
+ */
77
+ open(
78
+ input: NewQuestion
79
+ ): Promise<{ question: QuestionRecord; swept: QuestionRecord[] }>;
80
+
81
+ /** 读一行并按存储时钟判到期;行不存在(会话被删)返回 null。 */
82
+ probe(id: string, maxWaitSeconds: number): Promise<QuestionProbe | null>;
83
+
84
+ /** 读一行;限定会话时,不属于它的当不存在。 */
85
+ get(id: string, sessionId?: string): Promise<QuestionRecord | null>;
86
+
87
+ /**
88
+ * 给一个 pending 的问题一个结局(CAS:仅当仍是 pending)。没抢到返回 null。
89
+ * 同时写 `resolvedAt`。
90
+ */
91
+ settle(
92
+ id: string,
93
+ status: SettledQuestionStatus,
94
+ answers: AgentQuestionAnswer[] | null
95
+ ): Promise<QuestionRecord | null>;
96
+
97
+ /**
98
+ * 这个会话所有 pending(或仅 `onlyId` 那一个)一律记为 `status`,返回被改的行。
99
+ */
100
+ settleSession(
101
+ sessionId: string,
102
+ status: Extract<SettledQuestionStatus, 'superseded' | 'cancelled'>,
103
+ onlyId?: string
104
+ ): Promise<QuestionRecord[]>;
105
+
106
+ /**
107
+ * 停表:仅当仍是 pending **且**还有期限时把期限摘掉,返回改后的行;条件不满足
108
+ * 返回 null(调用方自己读当前行)。与到点互斥靠同一个 pending 谓词。
109
+ */
110
+ hold(id: string, sessionId: string): Promise<QuestionRecord | null>;
111
+
112
+ /** 这个会话问过的全部问题,按落行时间正序。 */
113
+ list(sessionId: string): Promise<QuestionRecord[]>;
114
+
115
+ /** 存储时钟(算 `remainingMs` 用)。 */
116
+ now(): Promise<Date>;
117
+ }
@@ -0,0 +1,69 @@
1
+ import type {
2
+ AgentRunStatus,
3
+ AgentRunStepEntry,
4
+ StopReason,
5
+ } from '../schema/agent-run.js';
6
+
7
+ /**
8
+ * 开一个跑次要记的东西。
9
+ *
10
+ * `attrs` 是宿主的不透明附加列:跑的是哪个 agent(agent-base 是 `agent_id` / `builtin_agent`
11
+ * 两列二选一)、发布版号、账本序号……runtime 不解释,只从 turn 的入参原样转交给存储。
12
+ */
13
+ export interface RunOpenInput {
14
+ id: string;
15
+ streamId: string;
16
+ parentRunId: string | null;
17
+ depth: number;
18
+ sessionId: string | null;
19
+ /** 父写给子的任务;根跑次为 null。 */
20
+ prompt: string | null;
21
+ /** 本轮实际用的模型与推理档位。 */
22
+ model: { modelId: string; label: string; reasoningEffort: string };
23
+ attrs?: Readonly<Record<string, unknown>>;
24
+ }
25
+
26
+ export interface RunFinishInput {
27
+ id: string;
28
+ status: AgentRunStatus;
29
+ stopReason: StopReason | null;
30
+ text: string;
31
+ steps: AgentRunStepEntry[];
32
+ usage?: Record<string, number>;
33
+ error?: string;
34
+ }
35
+
36
+ /** 孤儿收尾的候选(仍是 running 且开跑已久)。 */
37
+ export interface StaleRun {
38
+ id: string;
39
+ streamId: string;
40
+ sessionId: string | null;
41
+ /** 补发会话事件要按根会话定位;会话已删时为 null。 */
42
+ rootSessionId: string | null;
43
+ parentRunId: string | null;
44
+ depth: number;
45
+ }
46
+
47
+ /**
48
+ * 跑次记录。搬自 agent-base `agent-core/runtime/agent-run.service.ts`,只留 runtime 要用的;
49
+ * 给界面用的读接口(调用树、按 agent 显示名)留在宿主。
50
+ */
51
+ export interface RunStore {
52
+ /** 跑次开始即建记录(status = running)。 */
53
+ open(input: RunOpenInput): Promise<void>;
54
+ finish(input: RunFinishInput): Promise<void>;
55
+ /**
56
+ * 仍是 running、且开跑已超过 `olderThanMs` 的跑次——只出候选,是不是孤儿由调用方
57
+ * 问会话锁。时间下限挡住「刚 open、锁还没抢上」的窗口。
58
+ */
59
+ findStaleRunning(olderThanMs: number): Promise<StaleRun[]>;
60
+ /**
61
+ * 把一条孤儿收成 aborted。**只在它仍是 running 时生效**,返回是否由本次调用翻的牌
62
+ * (并发下只可能成功一次;调用方据此决定要不要再去改消息、发事件)。
63
+ */
64
+ markInterrupted(id: string, error: string): Promise<boolean>;
65
+ /** 跑次所属会话;缺记录返回 null。 */
66
+ getSessionId(runId: string): Promise<string | null>;
67
+ /** 跑次深度;缺记录返回 0。 */
68
+ getDepth(runId: string): Promise<number>;
69
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * 会话行:loop 与子 Agent 要读写的那几个字段。搬自 agent-base `chat_session` 被
3
+ * `subagent-session.service` / `loop-driver` 读写的部分;会话的其余一切(标题怎么改、
4
+ * 谁看得见、列表、删除)归宿主。
5
+ *
6
+ * **根会话由宿主建**(用户开对话是宿主的事),runtime 只建子会话。
7
+ */
8
+
9
+ export type SessionKind = 'root' | 'subagent';
10
+
11
+ export interface SessionRecord {
12
+ id: string;
13
+ kind: SessionKind;
14
+ /** 根会话 id;根会话等于自己的 id。 */
15
+ rootSessionId: string;
16
+ /** 子会话:派它的那一轮(父的跑次 id)。父会话经 `RunStore.getSessionId` 由它找到。根会话 null。 */
17
+ parentRunId: string | null;
18
+ /**
19
+ * 子会话钉住的子 Agent 名(派生时给的名字,可能是改名前的旧名——查定义要认
20
+ * `formerNames`)。根会话 null。
21
+ */
22
+ subagentName: string | null;
23
+ title: string | null;
24
+ userId: string | null;
25
+ /**
26
+ * 里程碑游标:上次回投覆盖到的子会话消息 `seq`。**null = 从未到达过 idle 终态**
27
+ * (=「存活」,占着树的名额)。只经 `advanceMilestone` 的 CAS 推进。根会话恒 null。
28
+ */
29
+ lastMilestoneSeq: number | null;
30
+ /** 会话上的不透明附加信息(`ToolContext.sessionMetadata`);子会话照抄父的。 */
31
+ metadata: Readonly<Record<string, unknown>>;
32
+ /** 宿主的不透明附加列(agent-base:跑哪个 agent、哪一版)。runtime 不解释。 */
33
+ attrs: Readonly<Record<string, unknown>>;
34
+ }
35
+
36
+ export interface NewSubSession {
37
+ rootSessionId: string;
38
+ parentRunId: string;
39
+ subagentName: string;
40
+ userId: string | null;
41
+ title: string;
42
+ metadata?: Readonly<Record<string, unknown>>;
43
+ attrs?: Readonly<Record<string, unknown>>;
44
+ }
45
+
46
+ export interface SessionStore {
47
+ /** 建一个子会话(`kind = 'subagent'`、游标 null)。 */
48
+ createSubSession(input: NewSubSession): Promise<SessionRecord>;
49
+
50
+ /** 会话行;不存在(或已删)返回 null。 */
51
+ getSession(id: string): Promise<SessionRecord | null>;
52
+
53
+ /**
54
+ * 里程碑游标的**乐观 CAS**:仅当游标仍等于 `expected`(null 即「仍为空」)时写成
55
+ * `next`,返回是否写成。
56
+ *
57
+ * 子会话的收尾可能并发进来两次(两次抢锁成功的唤醒),都读到同一个旧游标;恰有一个
58
+ * 能从它推进——回投、唤醒父、还名额这些副作用全收在这一步之后,所以恰好发生一次。
59
+ * 游标是整数,写回读出不丢精度(时间戳版本靠「两边都截到毫秒」才成立,一环换成
60
+ * 微秒就静默失配)。
61
+ */
62
+ advanceMilestone(
63
+ id: string,
64
+ expected: number | null,
65
+ next: number
66
+ ): Promise<boolean>;
67
+
68
+ /**
69
+ * 兜底扫描的候选:子会话、`idleForMs` 内没有新动静(`ConversationStore` 记的那个
70
+ * 「更新时间」)、且有 `seq > coalesce(游标, 0)` 的 assistant 消息——收尾可能在回投之前
71
+ * 崩掉,这些是「跑完了却没人通知父」的嫌疑。是不是真的漏了由收尾自己判(它是幂等的)。
72
+ */
73
+ listSubagentSessionsForSweep(idleForMs: number): Promise<SessionRecord[]>;
74
+
75
+ /**
76
+ * 每棵树此刻「存活」的子会话数(`kind = 'subagent'` 且游标为 null)。零存活的树
77
+ * 可以不出现,调用方自己补 0。兜底扫描据此校正 `TreeBudget`。
78
+ */
79
+ countAliveSubsByRoot(): Promise<{ rootSessionId: string; count: number }[]>;
80
+ }
@@ -0,0 +1,59 @@
1
+ import type { AgentEvent } from '../schema/agent-event.js';
2
+
3
+ /** 会话级订阅的一条:游标(断线续订用,实现自定格式)+ 领域事件。 */
4
+ export interface SessionStreamEntry {
5
+ id: string;
6
+ event: AgentEvent;
7
+ }
8
+
9
+ /**
10
+ * 事件总线。搬自 agent-base `agent-core/events/stream-bus.interface.ts`。
11
+ *
12
+ * 两个面:
13
+ * - **per-stream 面**(`open` / `publish` / `subscribe` / `close` / `abort`):一轮一条流,
14
+ * 带 seq 分配与中断信号。
15
+ * - **会话面**(`subscribeSession`):按根会话聚合整棵树的事件,跨轮、跨子会话;前端走这个。
16
+ *
17
+ * 默认实现 `InProcessStreamBus` 只在单进程里成立(POST 落 A 实例、SSE 落 B 实例就收不到);
18
+ * 多实例换 Redis 适配。
19
+ */
20
+ export interface StreamBus {
21
+ /** 开一条流;返回该流的 seq 分配器。重复 open 同一 id 抛错。 */
22
+ open(streamId: string): { nextSeq: () => number };
23
+ /** 发布事件(seq 由调用方用 open 返回的分配器取)。流未 open / 已 close 时丢弃。 */
24
+ publish(event: AgentEvent): void;
25
+ /**
26
+ * 发布一条**不属于任何 run** 的会话级事件,直接进会话面。
27
+ * `event` 的 `seq` / `streamId` / `runId` 对本方法无意义(填 0 / 会话 id),消费方不得读。
28
+ */
29
+ publishSessionEvent(event: AgentEvent): void;
30
+ /**
31
+ * 订阅一条流。`fromSeq` 给出时先补发 seq >= fromSeq 的历史,再接活流;流已结束则补完即止。
32
+ * `signal` abort 时等待中的迭代立即结束并摘掉监听(否则 `.return()` 会卡在未 settle 的
33
+ * promise 上,订阅者变僵尸)。
34
+ */
35
+ subscribe(
36
+ streamId: string,
37
+ fromSeq?: number,
38
+ signal?: AbortSignal
39
+ ): AsyncIterable<AgentEvent>;
40
+ /** 按根会话树订阅。`fromId` 给出时从该游标之后补发;缺省从最旧保留项起。 */
41
+ subscribeSession(
42
+ rootSessionId: string,
43
+ fromId: string | undefined,
44
+ signal: AbortSignal
45
+ ): AsyncIterable<SessionStreamEntry>;
46
+ /**
47
+ * 这一轮 seq ≤ `uptoSeq` 的事件已完整落库,会话面可以让它们退役(刷新重建时由库里的行顶替)。
48
+ * 实现可以留宽限期再删,也可以是 no-op。
49
+ */
50
+ retireUpTo(runId: string, uptoSeq: number): void;
51
+ /** 标记流结束,唤醒所有订阅者收尾。buffer 保留一段时间供重连补发。 */
52
+ close(streamId: string): void;
53
+ /** 请求取消:触发该流的 AbortSignal。 */
54
+ abort(streamId: string): void;
55
+ /** 该流是否仍在生成中(未 close)。 */
56
+ isActive(streamId: string): boolean;
57
+ /** 取该流的 AbortSignal,喂给模型调用。 */
58
+ signalOf(streamId: string): AbortSignal | undefined;
59
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * 厂商文件按「哪家、哪个账号、哪份字节」定位:同一份字节传到不同账号是不同的文件,
3
+ * 一个账号传上去的 file id 别的账号用不了。
4
+ */
5
+ export interface VendorFileKey {
6
+ /** 厂商 slug(`ModelRef.vendor`)。 */
7
+ vendor: string;
8
+ /**
9
+ * 文件落在哪个账号上:中心模式是上传结果的 `credentialRef`(之后引用它要 pin 这把),
10
+ * 直连模式是 `DIRECT_ACCOUNT`。
11
+ */
12
+ account: string;
13
+ /** 上传字节的 sha256 hex。 */
14
+ contentHash: string;
15
+ }
16
+
17
+ export interface VendorFileRecord extends VendorFileKey {
18
+ fileId: string;
19
+ /** 来自哪张图(只做关联、排查用)。 */
20
+ src: string | null;
21
+ mediaType: string;
22
+ bytes: number;
23
+ /** 厂商侧到期时间;null = 永久。 */
24
+ expiresAt: Date | null;
25
+ lastUsedAt: Date;
26
+ }
27
+
28
+ /**
29
+ * 厂商 Files API 的上传缓存(agent-base 的 `llm_vendor_file` 表)。只是存储:
30
+ * 新鲜度判据(到期前留余量)、上传合流、失效重传都在 `VendorFiles` 里。
31
+ *
32
+ * 多实例共用一份时,宿主用自己的库实现(唯一约束 `(vendor, account, contentHash)`);
33
+ * 进程内实现只保证单实例——两个实例同时首传同一张图会各传一份,后写的覆盖前写的,
34
+ * 前一份成为厂商侧的孤儿直到它自己到期,代价只是厂商配额里多一份副本。
35
+ */
36
+ export interface VendorFileCache {
37
+ /** 这家厂商下,这些字节在**任一账号**上的记录(含已到期的,判据归调用方)。 */
38
+ find(
39
+ vendor: string,
40
+ contentHashes: readonly string[]
41
+ ): Promise<VendorFileRecord[]>;
42
+ /** 按 `(vendor, account, contentHash)` 插入或覆盖。 */
43
+ put(record: VendorFileRecord): Promise<void>;
44
+ /** 更新 `lastUsedAt`(调用方已节流)。记录不在就什么都不做。 */
45
+ touch(key: VendorFileKey, at: Date): Promise<void>;
46
+ /** 删掉这个账号下这些 file id 的记录(厂商说它们不存在了 / 已到期重传)。 */
47
+ forget(
48
+ vendor: string,
49
+ account: string,
50
+ fileIds: readonly string[]
51
+ ): Promise<void>;
52
+ /** 删掉 `expiresAt < now` 的记录,返回删了几条。 */
53
+ sweepExpired(now: Date): Promise<number>;
54
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 内层领域事件。搬自 agent-base `agent-core/events/agent-event.ts`(2026-11-11)。
3
+ *
4
+ * 刻意不用 AI SDK 的 UIMessageChunk:① 会把内核钉死在 SDK 版本的内部形状上;
5
+ * ② 子 Agent 的 runId / parentRunId / depth 在里面无处安放。
6
+ *
7
+ * 只列 runtime 自己产生的类型。宿主的**会话级**事件(自动标题、追问、确认面板……)
8
+ * 经 `StreamBus.publishSessionEvent` 发,类型名由宿主定——所以 `AgentEvent.type`
9
+ * 也接受任意字符串;runtime 只对下面这些分支。
10
+ */
11
+ export const AGENT_EVENT_TYPES = [
12
+ 'run-start',
13
+ 'step-start',
14
+ 'text-delta',
15
+ 'text-end',
16
+ 'reasoning-delta',
17
+ 'tool-input-start',
18
+ 'tool-input-delta',
19
+ /** 入参流式构建的进度(`{toolCallId, toolName, chars}`),节流后发出,只服务界面。 */
20
+ 'tool-input-progress',
21
+ /** 入参的内容预览(白名单工具),只服务界面、不落库、不进模型。 */
22
+ 'tool-input-preview',
23
+ 'tool-call',
24
+ 'tool-result',
25
+ 'step-finish',
26
+ /**
27
+ * 这一步在响应中途断连、内核把已经播出去的半截产出作废并原地重发
28
+ * (`{afterSeq, textChars, reasoningChars, attempt, maxAttempts, message}`)。
29
+ * 账本那边这些事件已物理删除,本事件只服务界面。
30
+ */
31
+ 'step-retract',
32
+ /** 一步的真实用量(`{usage, runUsage}`,后者是本轮累计)。只服务界面。 */
33
+ 'step-usage',
34
+ 'run-finish',
35
+ 'error',
36
+ /** loop 从 inbox 取走 ≥1 条待处理项后发出,供前端失效待处理队列。 */
37
+ 'inbox-drained',
38
+ /** 向用户提问的会话级事件(问题落库或状态变了),载荷是整行 `{question}`。 */
39
+ 'agent-question',
40
+ ] as const;
41
+
42
+ export type AgentEventType = (typeof AGENT_EVENT_TYPES)[number];
43
+
44
+ export interface AgentEvent {
45
+ /** 每个 streamId 内单调递增,从 1 开始。断线补发的基础。 */
46
+ seq: number;
47
+ /** 根 turn 的 id。子 Agent 事件共享父的 streamId 与 seq 序列。 */
48
+ streamId: string;
49
+ /** 根会话 id(树级作用域键)。 */
50
+ rootSessionId: string;
51
+ /** 产生该事件的会话 id(根或子)。 */
52
+ sessionId: string;
53
+ /** 产生该事件的跑次(根或子)。 */
54
+ runId: string;
55
+ /** 输出归属哪一条 assistant 消息(恒等于 `runId`);会话级事件没有。 */
56
+ messageId?: string;
57
+ parentRunId: string | null;
58
+ depth: number;
59
+ ts: number;
60
+ /** runtime 的类型见 `AGENT_EVENT_TYPES`;宿主的会话级事件用自己的名字。 */
61
+ type: AgentEventType | (string & {});
62
+ payload: unknown;
63
+ }
64
+
65
+ /** 每个 stream 一个自增计数器。 */
66
+ export function createSeqCounter(): () => number {
67
+ let seq = 0;
68
+ return () => ++seq;
69
+ }
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+
3
+ /** 跑次(一次 agent 执行,根或子)的状态。 */
4
+ export const AGENT_RUN_STATUSES = [
5
+ 'running',
6
+ 'completed',
7
+ 'aborted',
8
+ 'rejected',
9
+ 'failed',
10
+ ] as const;
11
+ export type AgentRunStatus = (typeof AGENT_RUN_STATUSES)[number];
12
+
13
+ /** 一轮为什么停下。 */
14
+ export const STOP_REASONS = [
15
+ 'stop',
16
+ 'max-steps',
17
+ 'timeout',
18
+ 'aborted',
19
+ 'api-error',
20
+ 'rejected-by-hook',
21
+ 'blocked-by-hook',
22
+ 'error',
23
+ ] as const;
24
+ export type StopReason = (typeof STOP_REASONS)[number];
25
+
26
+ /** 步级明细(随跑次一起存,不另开子表)。 */
27
+ export const AgentRunStepEntrySchema = z.object({
28
+ index: z.number().int(),
29
+ text: z.string().optional(),
30
+ toolCalls: z
31
+ .array(
32
+ z.object({
33
+ toolCallId: z.string(),
34
+ toolName: z.string(),
35
+ input: z.unknown(),
36
+ output: z.unknown().optional(),
37
+ ok: z.boolean().optional(),
38
+ durationMs: z.number().optional(),
39
+ })
40
+ )
41
+ .default([]),
42
+ usage: z.record(z.string(), z.number()).optional(),
43
+ });
44
+ export type AgentRunStepEntry = z.infer<typeof AgentRunStepEntrySchema>;
@@ -0,0 +1,25 @@
1
+ export {
2
+ AGENT_EVENT_TYPES,
3
+ type AgentEvent,
4
+ type AgentEventType,
5
+ createSeqCounter,
6
+ } from './agent-event.js';
7
+ export {
8
+ AGENT_RUN_STATUSES,
9
+ type AgentRunStatus,
10
+ type AgentRunStepEntry,
11
+ AgentRunStepEntrySchema,
12
+ STOP_REASONS,
13
+ type StopReason,
14
+ } from './agent-run.js';
15
+ export {
16
+ COMPACTION_CHECKPOINT_KIND,
17
+ LOOP_REMINDER_KIND,
18
+ type MessagePart,
19
+ MessagePartSchema,
20
+ type PartProviderMetadata,
21
+ PartProviderMetadataSchema,
22
+ TODO_REMINDER_KIND,
23
+ type ToolResultImage,
24
+ ToolResultImageSchema,
25
+ } from './message-part.js';