@qjp88995/agent-runtime 0.0.0-stage → 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 (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 +55 -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,95 @@
1
+ import type { z } from 'zod';
2
+ import type { AgentExtensions } from '../agent-extensions.js';
3
+ import type { MessagePart } from '../schema/index.js';
4
+ /** 工具执行上下文。刻意不含任何渠道概念(本项目单渠道)。 */
5
+ export interface ToolContext {
6
+ /** 当前 agent_run 的 id。 */
7
+ runId: string;
8
+ /** 根 turn 的 id,跨父子共享。 */
9
+ streamId: string;
10
+ /** 根会话 id —— agent 产物库的树级作用域键(pre-1b:= sessionId)。 */
11
+ rootSessionId: string;
12
+ /** 当前 loop 的会话 id —— 产物 writer 审计。 */
13
+ sessionId: string;
14
+ /** 发起者,可空(系统触发时)。 */
15
+ userId: string | null;
16
+ /**
17
+ * 跑的是哪个 agent:`id` 与模型能力之外,全是宿主经 `AgentExtensions` 加的字段
18
+ * (随本轮所跑的那一版配置下来,工具不必再查库)。
19
+ */
20
+ agent: ToolAgentContext;
21
+ /**
22
+ * 会话上的不透明附加信息(宿主写、宿主的工具读,内核不解释;派子 Agent 时子会话继承)。
23
+ * 缺省空对象。
24
+ */
25
+ sessionMetadata: Readonly<Record<string, unknown>>;
26
+ /** subagent 深度,根为 0。 */
27
+ depth: number;
28
+ /**
29
+ * 本轮发起人此刻的权限点(`Initiator.permissions`)。**可选、缺省按空**:只给「派不派得出
30
+ * 要权限点的内置子 Agent」这类判据用——**不是工具权限的门**,要权限的工具各自现查。
31
+ */
32
+ initiatorPermissions?: ReadonlySet<string>;
33
+ /** 同一轮内可变:前一个工具的修改对后续工具可见。 */
34
+ metadata: Record<string, unknown>;
35
+ abortSignal: AbortSignal;
36
+ toolCallId: string;
37
+ /**
38
+ * 异步工具的回投通道:绑定到**当前会话**(`sessionId`),由宿主实现
39
+ * (投进 inbox + 唤醒会话)。
40
+ * 供 async 工具的后台段(execute 返回受理占位后 fire-and-forget 的部分)
41
+ * 把真结果投回 inbox,由下一轮 drain 拾取。
42
+ */
43
+ postToInbox?: (input: {
44
+ kind: 'user_message' | 'tool_result';
45
+ source?: Record<string, unknown>;
46
+ parts: MessagePart[];
47
+ }) => Promise<void>;
48
+ }
49
+ /** `ToolContext.agent`:agent id、本轮模型能力,加上宿主的扩展字段。 */
50
+ export type ToolAgentContext = {
51
+ /** agent 的 id(宿主定义;内置形式可以是名字)。 */
52
+ id: string;
53
+ /**
54
+ * 本轮模型标了哪些能力(模型目录里的能力名)。`Delegate` 据此拒绝派一个替「自己已有的
55
+ * 能力」顶替的子 Agent。缺省空数组。
56
+ */
57
+ modelCapabilities: readonly string[];
58
+ } & AgentExtensions;
59
+ /** `AgentToolProvider.isAvailable` / `describe` 看得到的那份 agent 配置(宿主的扩展字段)。 */
60
+ export type ToolAvailabilityView = AgentExtensions;
61
+ /**
62
+ * 工具实现契约。Provider 永不 import 'ai' —— 由 ToolRegistry
63
+ * 负责包成 AI SDK 的 tool()。这个解耦让工具层不受 SDK 版本影响。
64
+ */
65
+ export interface AgentToolProvider<TInput = unknown, TOutput = unknown> {
66
+ readonly inputSchema: z.ZodType<TInput>;
67
+ execute(input: TInput, ctx: ToolContext): Promise<TOutput>;
68
+ /**
69
+ * 结构化结果 → 喂模型的文本。缺省直接序列化整个结果。
70
+ * 双轨的落点:结构化那份落库/发 SSE,只有这里返回的进模型上下文。
71
+ */
72
+ toModelOutput?(output: TOutput): string;
73
+ /**
74
+ * 这一轮能不能用(缺省 = 能)。不能用就从本轮工具集摘掉(`unavailableToolNames`
75
+ * → loop 的摘除清单),而不是端上桌让模型调一次、收回一句「未配置」,还在自述
76
+ * 能力时承诺做不到的事。判据写在工具自己身上:部署级开关(取数账号配没配)、
77
+ * agent 级配置(联网服务选没选)都由工具回答,loop 一个具体工具名都不必认识。
78
+ *
79
+ * **这不是门**:工具里的判空 / 拒绝照留,这里只决定端不端上桌。每轮现问,不在
80
+ * 启动时快照——开关由别的 provider 的 `onModuleInit` 决定。可以是异步的(WebFetch
81
+ * 要查一次联网服务是哪家:有的家没有读网页接口),但答案必须在相邻两轮之间稳定——
82
+ * 工具表一变,前缀缓存整段 miss。
83
+ */
84
+ isAvailable?(agent: ToolAvailabilityView): boolean | Promise<boolean>;
85
+ /**
86
+ * 这份 agent 配置下的工具说明(缺省或返回 `null` = 装饰器里的 `description`)。给「说明要跟着
87
+ * 配置走」的工具用:WebSearch / WebFetch 的说明由所选联网服务的适配器追加或替换。每轮现问,
88
+ * 与 `isAvailable` 同时机;loop 与「下一轮预览」用同一份(`ToolRegistry.descriptionsFor`)。
89
+ *
90
+ * 答案进工具表:**只许随配置变**(管理员改了配置,相邻两轮才可以不同),别掺按「现在」算的东西——
91
+ * 工具表一变,前缀缓存整段 miss。
92
+ */
93
+ describe?(agent: ToolAvailabilityView): string | null | Promise<string | null>;
94
+ }
95
+ //# sourceMappingURL=agent-tool.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-tool.interface.d.ts","sourceRoot":"","sources":["../../src/tools/agent-tool.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;OAGG;IACH,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QACpB,IAAI,EAAE,cAAc,GAAG,aAAa,CAAC;QACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,KAAK,EAAE,WAAW,EAAE,CAAC;KACtB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,qDAAqD;AACrD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX;;;OAGG;IACH,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC,GAAG,eAAe,CAAC;AAEpB,6EAA6E;AAC7E,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACpE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D;;;OAGG;IACH,aAAa,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACxC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE;;;;;;;OAOG;IACH,QAAQ,CAAC,CACP,KAAK,EAAE,oBAAoB,GAC1B,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-tool.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-tool.interface.js","sourceRoot":"","sources":["../../src/tools/agent-tool.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * runtime 自带的三个通用工具的名字。**前后端、宿主都从这里取,别各写各的字面量**——
3
+ * 名字对不上时不报错也不告警,只是界面上某块静默空着(待办面板、提问卡片、子 Agent 卡)。
4
+ *
5
+ * 2026-11-11 改成单个动词(原名是 agent-base 的 `SpawnAgent` / `TodoWrite` /
6
+ * `AskUserQuestion`)。旧名登记为 `formerNames`:库里的旧历史照常以现名投影给模型
7
+ * (`ToolRegistry.toolNameAliases`),宿主前端从历史里认这几个工具时也要认旧名
8
+ * (`isToolNamed`)。
9
+ */
10
+ export declare const DELEGATE_TOOL_NAME = "Delegate";
11
+ export declare const DELEGATE_FORMER_NAMES: readonly ["SpawnAgent"];
12
+ export declare const TODO_TOOL_NAME = "Todo";
13
+ export declare const TODO_FORMER_NAMES: readonly ["TodoWrite"];
14
+ export declare const ASK_TOOL_NAME = "Ask";
15
+ export declare const ASK_FORMER_NAMES: readonly ["AskUserQuestion"];
16
+ /** `name` 是不是这个工具(现名或任一旧名)。前端从历史里认工具用。 */
17
+ export declare function isToolNamed(name: string, current: string, former: readonly string[]): boolean;
18
+ //# sourceMappingURL=builtin-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-names.d.ts","sourceRoot":"","sources":["../../src/tools/builtin-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,eAAO,MAAM,qBAAqB,yBAA0B,CAAC;AAE7D,eAAO,MAAM,cAAc,SAAS,CAAC;AACrC,eAAO,MAAM,iBAAiB,wBAAyB,CAAC;AAExD,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,gBAAgB,8BAA+B,CAAC;AAE7D,0CAA0C;AAC1C,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAET"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * runtime 自带的三个通用工具的名字。**前后端、宿主都从这里取,别各写各的字面量**——
3
+ * 名字对不上时不报错也不告警,只是界面上某块静默空着(待办面板、提问卡片、子 Agent 卡)。
4
+ *
5
+ * 2026-11-11 改成单个动词(原名是 agent-base 的 `SpawnAgent` / `TodoWrite` /
6
+ * `AskUserQuestion`)。旧名登记为 `formerNames`:库里的旧历史照常以现名投影给模型
7
+ * (`ToolRegistry.toolNameAliases`),宿主前端从历史里认这几个工具时也要认旧名
8
+ * (`isToolNamed`)。
9
+ */
10
+ export const DELEGATE_TOOL_NAME = 'Delegate';
11
+ export const DELEGATE_FORMER_NAMES = ['SpawnAgent'];
12
+ export const TODO_TOOL_NAME = 'Todo';
13
+ export const TODO_FORMER_NAMES = ['TodoWrite'];
14
+ export const ASK_TOOL_NAME = 'Ask';
15
+ export const ASK_FORMER_NAMES = ['AskUserQuestion'];
16
+ /** `name` 是不是这个工具(现名或任一旧名)。前端从历史里认工具用。 */
17
+ export function isToolNamed(name, current, former) {
18
+ return name === current || former.includes(name);
19
+ }
20
+ //# sourceMappingURL=builtin-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-names.js","sourceRoot":"","sources":["../../src/tools/builtin-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,YAAY,CAAU,CAAC;AAE7D,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAW,CAAU,CAAC;AAExD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,iBAAiB,CAAU,CAAC;AAE7D,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,OAAe,EACf,MAAyB;IAEzB,OAAO,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { AgentTool, type RetryPolicy, type ToolAccepted, toolAccepted, type ToolCapabilities, } from './agent-tool.base.js';
2
+ export type { AgentToolProvider, ToolAgentContext, ToolAvailabilityView, ToolContext, } from './agent-tool.interface.js';
3
+ export { ASK_FORMER_NAMES, ASK_TOOL_NAME, DELEGATE_FORMER_NAMES, DELEGATE_TOOL_NAME, isToolNamed, TODO_FORMER_NAMES, TODO_TOOL_NAME, } from './builtin-names.js';
4
+ export { digestInputSchema, type SchemaDigest } from './tool-definition.js';
5
+ export type { ToolMeta } from './tool-meta.js';
6
+ export { type ToolAgentView, ToolRegistry, type ToolRegistryOptions, type ToolSetOptions, } from './tool-registry.js';
7
+ export { fail, ok, safe, toolError, type ToolOut, type ToolResult, } from './tool-result.js';
8
+ export type { ToolDefinitionWire, ToolParamWire } from './tool-wire.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,YAAY,EACZ,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5E,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,KAAK,aAAa,EAClB,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { AgentTool, toolAccepted, } from './agent-tool.base.js';
2
+ export { ASK_FORMER_NAMES, ASK_TOOL_NAME, DELEGATE_FORMER_NAMES, DELEGATE_TOOL_NAME, isToolNamed, TODO_FORMER_NAMES, TODO_TOOL_NAME, } from './builtin-names.js';
3
+ export { digestInputSchema } from './tool-definition.js';
4
+ export { ToolRegistry, } from './tool-registry.js';
5
+ export { fail, ok, safe, toolError, } from './tool-result.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,YAAY,GAEb,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAqB,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAEL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,SAAS,GAGV,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ import type { ToolParamWire } from './tool-wire.js';
3
+ /** `digestInputSchema` 的产物:参数表 + 摊不平时的说明。 */
4
+ export interface SchemaDigest {
5
+ params: ToolParamWire[];
6
+ schemaNote: string | null;
7
+ }
8
+ /**
9
+ * 把工具的 zod inputSchema 摊平成后台「工具列表」页的参数表。
10
+ *
11
+ * 走 `z.toJSONSchema`(`unrepresentable: 'any'`——遇到表示不了的类型退化成
12
+ * any,不抛)再取顶层 properties。工具入参在本仓约定就是 `z.object`,非对象
13
+ * 结构(如测试 stub 的 `z.unknown()`)不硬摊,如实给一句说明。
14
+ *
15
+ * **绝不抛**:这是展示路径,一个工具的 schema 转不动不该拖垮整张列表。
16
+ */
17
+ export declare function digestInputSchema(schema: z.ZodType): SchemaDigest;
18
+ //# sourceMappingURL=tool-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-definition.d.ts","sourceRoot":"","sources":["../../src/tools/tool-definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,YAAY,CAsCjE"}
@@ -0,0 +1,77 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * 把工具的 zod inputSchema 摊平成后台「工具列表」页的参数表。
4
+ *
5
+ * 走 `z.toJSONSchema`(`unrepresentable: 'any'`——遇到表示不了的类型退化成
6
+ * any,不抛)再取顶层 properties。工具入参在本仓约定就是 `z.object`,非对象
7
+ * 结构(如测试 stub 的 `z.unknown()`)不硬摊,如实给一句说明。
8
+ *
9
+ * **绝不抛**:这是展示路径,一个工具的 schema 转不动不该拖垮整张列表。
10
+ */
11
+ export function digestInputSchema(schema) {
12
+ let json;
13
+ try {
14
+ json = z.toJSONSchema(schema, {
15
+ unrepresentable: 'any',
16
+ io: 'input',
17
+ });
18
+ }
19
+ catch (err) {
20
+ return {
21
+ params: [],
22
+ schemaNote: `schema 转换失败:${err instanceof Error ? err.message : String(err)}`,
23
+ };
24
+ }
25
+ const properties = json.properties;
26
+ if (json.type !== 'object' ||
27
+ typeof properties !== 'object' ||
28
+ properties === null) {
29
+ return {
30
+ params: [],
31
+ schemaNote: `入参不是对象结构:${JSON.stringify(json)}`,
32
+ };
33
+ }
34
+ const required = new Set(Array.isArray(json.required) ? json.required : []);
35
+ const params = Object.entries(properties).map(([key, prop]) => ({
36
+ key,
37
+ type: typeLabel(prop),
38
+ required: required.has(key),
39
+ description: descriptionOf(prop),
40
+ }));
41
+ return { params, schemaNote: null };
42
+ }
43
+ function descriptionOf(prop) {
44
+ if (typeof prop !== 'object' || prop === null)
45
+ return null;
46
+ const d = prop.description;
47
+ return typeof d === 'string' ? d : null;
48
+ }
49
+ /**
50
+ * JSON schema 片段 → 人读的类型标签。尽力而为:认不出的形状退化成 JSON 原文
51
+ * ——比一个笼统的 any 有信息量(那正是要审阅的东西)。
52
+ */
53
+ function typeLabel(prop) {
54
+ if (typeof prop !== 'object' || prop === null)
55
+ return 'any';
56
+ const p = prop;
57
+ if (Array.isArray(p.enum)) {
58
+ return p.enum.map(v => JSON.stringify(v)).join(' | ');
59
+ }
60
+ if (Array.isArray(p.anyOf)) {
61
+ return p.anyOf.map(typeLabel).join(' | ');
62
+ }
63
+ if (p.type === 'array') {
64
+ return `${typeLabel(p.items)}[]`;
65
+ }
66
+ if (Array.isArray(p.type)) {
67
+ return p.type.join(' | ');
68
+ }
69
+ if (typeof p.type === 'string') {
70
+ return p.format === 'uuid' ? `${p.type}(uuid)` : p.type;
71
+ }
72
+ // 空对象 = 任意值(z.unknown / unrepresentable 退化);其余原样亮出来。
73
+ return Object.keys(p).filter(k => k !== 'description').length === 0
74
+ ? 'any'
75
+ : JSON.stringify(p);
76
+ }
77
+ //# sourceMappingURL=tool-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-definition.js","sourceRoot":"","sources":["../../src/tools/tool-definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /** 工具的静态登记信息(注册时给,`ToolRegistry.register(meta, provider)`)。 */
2
+ export interface ToolMeta {
3
+ /** 全局唯一,对应 agent.enabled_tools[]。 */
4
+ name: string;
5
+ /** 面向 LLM,也在后台 UI 展示。 */
6
+ description: string;
7
+ /**
8
+ * 分组,宿主自定的字符串。两个值有内核语义(见 `ToolRegistryOptions`):
9
+ * `alwaysOnCategories`(缺省 `['system']`)里的不看 agent 的工具白名单、恒上桌。
10
+ */
11
+ category: string;
12
+ /**
13
+ * 发起人要有这个权限点,工具才上桌(`Initiator.permissions`,宿主每轮现读)。
14
+ * `ToolRegistryOptions.permissionRequiredCategories` 里的分组必填(注册期校验)。
15
+ * **这不是门**:工具的 `run` 里还要用同一个 key 现查一次——它只决定端不端上桌,不决定做不做。
16
+ */
17
+ permission?: string;
18
+ /**
19
+ * 这个工具是**纯记账**吗(把模型脑子里已有的东西写下来,零副作用)。
20
+ *
21
+ * 唯一的消费方是重复调用提醒(`runtime/loop-reminder.ts`):记账类工具对那条
22
+ * 链是「透明」的,夹在两次相同调用中间**不打断计数**——否则一个卡在
23
+ * `Grep X` 上的模型,只要每次重试前顺手更新一下待办,就再也收不到任何提醒。
24
+ *
25
+ * **判据是「纯记账、零副作用」,不是「只读」**:`Read` 一个别的文件是真的换了
26
+ * 方向,它该打断计数。
27
+ *
28
+ * 加在这里而不是在内核里写一张工具名清单:那样内核就得认识具体工具名,
29
+ * 加一个新的记账工具要同时改两个地方,漏了不报错、只是提醒莫名其妙不出声。
30
+ * (与下面被拒掉的 `async?: true` 的区别正在于此——这个字段有真实消费方。)
31
+ */
32
+ accounting?: boolean;
33
+ /**
34
+ * 这个工具会不会往工作空间里写文件(新建、改写、覆盖,经沙箱的任何一条路)。
35
+ *
36
+ * 消费方是工具调用的文件变化记账(`extensions/tool-file-changes.hook.ts`):
37
+ * 只有它为真的工具,前后才按 ctime 扫一次工作目录、把这次调用期间变过的文件
38
+ * 记下来。轮末「本轮产出」在共用目录(角色 / 助手)里只认这本账——
39
+ * **漏标的症状是这个工具的产出在那些目录里静默不列**,所以凡是注入了
40
+ * `SandboxClient` 的工具都必须显式写出 true 或 false(`tool-writes-workspace.spec.ts`
41
+ * 钉着)。只读工具不标会白扫一次,标错方向才是真问题。
42
+ */
43
+ writesWorkspace?: boolean;
44
+ /**
45
+ * 改名前用过的名字。库里的旧历史还记着旧名(tool-call / tool-result part 的 `toolName`),
46
+ * 投影层据 `ToolRegistry.toolNameAliases()` 把它们换成现名再喂给模型
47
+ * (`ProjectionOptions.toolNameAliases`)——否则模型在同一段上下文里看到两个名字,
48
+ * 一个在工具表里、一个不在,会去调那个已经不存在的。
49
+ *
50
+ * **只认旧历史**:模型这一轮要是照着旧名调用,照常报「没有这个工具」。注册期校验:
51
+ * 旧名不许与任何现名撞、不许被两个工具认领。
52
+ */
53
+ formerNames?: readonly string[];
54
+ }
55
+ //# sourceMappingURL=tool-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-meta.d.ts","sourceRoot":"","sources":["../../src/tools/tool-meta.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAOjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tool-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-meta.js","sourceRoot":"","sources":["../../src/tools/tool-meta.ts"],"names":[],"mappings":""}
@@ -0,0 +1,190 @@
1
+ import { type ToolSet } from 'ai';
2
+ import { type Initiator } from '../agent-extensions.js';
3
+ import { type LoggerFactory } from '../ports/logger.js';
4
+ import type { ToolResultImage } from '../schema/index.js';
5
+ import type { AgentToolProvider, ToolAvailabilityView, ToolContext } from './agent-tool.interface.js';
6
+ import type { ToolMeta } from './tool-meta.js';
7
+ import { type ToolResult } from './tool-result.js';
8
+ import type { ToolDefinitionWire } from './tool-wire.js';
9
+ /** 本轮工具集的三项调整:摘掉哪些、发起人有哪些权限点、哪些说明换成按配置算的那份。 */
10
+ export interface ToolSetOptions {
11
+ exclude?: string[];
12
+ /** 缺省 `NO_INITIATOR`(fail-closed):漏传等于不给要权限的工具,而不是给。 */
13
+ initiator?: Initiator;
14
+ /** `descriptionsFor` 的结果;没列的工具用装饰器里的说明。 */
15
+ descriptions?: Readonly<Record<string, string>>;
16
+ }
17
+ /** agent 定义里 buildToolSchemasFor 需要的最小切面。 */
18
+ export interface ToolAgentView {
19
+ /** 这个 agent 勾了哪些工具(`alwaysOnCategories` 里的不看它)。 */
20
+ enabledTools: readonly string[];
21
+ }
22
+ export interface ToolRegistryOptions {
23
+ logger?: LoggerFactory;
24
+ /**
25
+ * 这些分组的工具不看 agent 的工具白名单、恒上桌(基础设施类)。缺省 `['system']`。
26
+ * 也不出现在 `listConfigurable`(后台勾选面板)里。
27
+ */
28
+ alwaysOnCategories?: readonly string[];
29
+ /**
30
+ * 这些分组的工具**必须**声明 `ToolMeta.permission`(注册期校验)。往「每个工具都要求发起人
31
+ * 有某个权限点」的分组里加新工具时最容易忘的就是那道门——让注册期拒绝,比让它静默上桌好。
32
+ * 缺省空。
33
+ */
34
+ permissionRequiredCategories?: readonly string[];
35
+ /** 这些分组不出现在 `listConfigurable`(只经内置形式的显式工具表上桌)。缺省空。 */
36
+ hiddenCategories?: readonly string[];
37
+ /**
38
+ * 失败输出进模型前的净化(如把第三方服务名换成中性说法)。**只过失败**:成功的结果是内容,
39
+ * 替换就是改资料。缺省原样。
40
+ */
41
+ sanitizeError?: (text: string) => string;
42
+ }
43
+ /**
44
+ * 工具注册表。搬自 agent-base `ToolRegistry`:去掉 Nest 的扫描(宿主显式 `register`,
45
+ * Nest 适配包负责把装饰器接过来),分组语义改为选项。
46
+ *
47
+ * **工具表顺序 = 注册顺序**。工具表一变,前缀缓存整段 miss,所以宿主要按固定顺序注册
48
+ * (agent-base 以前靠 Nest 模块的导入顺序,隐式且容易被无关改动打乱)。
49
+ */
50
+ export declare class ToolRegistry {
51
+ private readonly logger;
52
+ private readonly entries;
53
+ /** 旧名 → 现名(`ToolMeta.formerNames`)。 */
54
+ private readonly aliases;
55
+ private readonly alwaysOn;
56
+ private readonly permissionRequired;
57
+ private readonly hidden;
58
+ private readonly sanitize;
59
+ constructor(options?: ToolRegistryOptions);
60
+ /** 登记一个工具。名字重复、缺 execute / inputSchema、该声明权限没声明 → 抛。 */
61
+ register(meta: ToolMeta, provider: AgentToolProvider): void;
62
+ private add;
63
+ /**
64
+ * 对外暴露的 schema —— 后台工具在这里被注入 `run_in_background`。
65
+ *
66
+ * 注入而非让工具自己写,是为了让这个参数只有一个定义处:它的语义(缺省
67
+ * 同步、true 返回 handle)对所有工具必须逐字一致,模型才不用逐个工具去猜。
68
+ */
69
+ private schemaFor;
70
+ /**
71
+ * 注册表侧的兜底超时。基类工具以它自己声明的值为准(见常量注释);非基类
72
+ * provider 只剩测试 stub,一律给默认值。
73
+ */
74
+ private timeoutFor;
75
+ listMeta(): ToolMeta[];
76
+ /**
77
+ * 后台 UI 勾选用:恒上桌的分组是基础设施,运营不能关;`hiddenCategories`
78
+ * 里的不给勾。
79
+ */
80
+ listConfigurable(): ToolMeta[];
81
+ /**
82
+ * 后台「工具列表」页用:全部工具(含 system)的完整定义。
83
+ *
84
+ * 参数表由 `schemaFor(entry)` 摊平——即**喂给模型的那份** schema(后台工具
85
+ * 注入的 `run_in_background` 一并在内),审阅页与模型看到的定义同源,不另拼
86
+ * 第二份事实(同 system prompt 审查页的地基约定)。
87
+ */
88
+ listDefinitions(): ToolDefinitionWire[];
89
+ /**
90
+ * 后台「会话下一轮预览」用:**这一轮真正端上桌的**那几件的完整定义。过滤判据与
91
+ * `buildToolSchemasFor` 是同一个 `isAllowed`,参数表同 `listDefinitions`——预览与
92
+ * 喂给模型的工具集不可能分叉。
93
+ */
94
+ definitionsFor(agent: Pick<ToolAgentView, 'enabledTools'>, opts?: ToolSetOptions): ToolDefinitionWire[];
95
+ private definitionOf;
96
+ /** 写入路径严格校验(运行时读取则宽松静默跳过)。 */
97
+ validateNames(names: string[]): void;
98
+ /**
99
+ * 这个工具这一轮对该 agent 可见吗。
100
+ *
101
+ * 这里曾经还有一个 `availableToolNames()`,供 system prompt 的引用清单渲染
102
+ * 「用某某工具取内容」那半句、并按授权过滤工具名。**2026-08-05 随那半句
103
+ * 一起删除**:工具能做什么,工具描述自己说了,而工具清单本来就在模型手上
104
+ * (API 请求的 `tools` 字段)——提示词再点一遍名是第二份事实,改个工具名就
105
+ * 开始说假话。
106
+ */
107
+ private isAllowed;
108
+ /**
109
+ * 旧工具名 → 现名(`ToolMeta.formerNames`)。交给投影(`ProjectionOptions.toolNameAliases`),
110
+ * 让旧历史里的调用以现名出现在模型面前。
111
+ */
112
+ toolNameAliases(): ReadonlyMap<string, string>;
113
+ /** 声明了权限点的工具名 → 那个权限点(`ToolMeta.permission`)。 */
114
+ permissionGatedTools(): ReadonlyMap<string, string>;
115
+ /**
116
+ * 自称「纯记账」的工具名(`ToolMeta.accounting`)。
117
+ *
118
+ * 消费方是重复调用链(`runtime/loop-reminder.ts`):这些工具对链透明,夹在
119
+ * 两次相同调用之间不打断计数。**判据由工具自己声明**,内核因此一个具体工具名
120
+ * 都不必认识——加一个新的记账工具零内核改动。
121
+ *
122
+ * 每轮现算一遍(工具总数是几十量级,且注册表在 bootstrap 后就不再变):
123
+ * 缓存要额外处理注册之后的失效,换来的收益是噪音。
124
+ */
125
+ accountingToolNames(): ReadonlySet<string>;
126
+ /**
127
+ * 自称此刻不可用的工具名(`AgentToolProvider.isAvailable`)。消费方是 loop 的
128
+ * 本轮摘除清单——走清单而不是在 `isAllowed` 里过滤,后台「下一轮预览」才列得出
129
+ * 「本轮摘掉了哪些」。
130
+ */
131
+ unavailableToolNames(agent: ToolAvailabilityView): Promise<string[]>;
132
+ /**
133
+ * 这份 agent 配置下说明与装饰器不同的工具(`AgentToolProvider.describe`):工具名 → 说明。
134
+ * loop 在算本轮摘除清单时一并算好,`buildToolSchemasFor` 与「下一轮预览」的 `definitionsFor`
135
+ * 用同一份,预览与喂给模型的说明不会分叉。
136
+ */
137
+ descriptionsFor(agent: ToolAvailabilityView): Promise<Record<string, string>>;
138
+ /**
139
+ * 会往工作空间里写文件的工具名(`ToolMeta.writesWorkspace`)。
140
+ *
141
+ * 消费方是工具调用的文件变化记账(`extensions/tool-file-changes.hook.ts`):
142
+ * 只有这些工具前后才扫一次工作目录。判据同样由工具自己声明。
143
+ */
144
+ workspaceWriterToolNames(): ReadonlySet<string>;
145
+ /**
146
+ * 只带 schema、无 execute 的工具集——喂 streamText,SDK 只吐 tool-call,执行由
147
+ * loop 自驱。
148
+ *
149
+ * `initiator` **缺省 `NO_INITIATOR`,即 fail-closed**:漏传等于不给要权限的工具,
150
+ * 而不是给。方向与 `viewer` 的 null(= 系统调用、不过滤)相反,正是因为
151
+ * 漏传的教训是缺省不能站在宽松那一侧。
152
+ */
153
+ buildToolSchemasFor(agent: ToolAgentView, opts?: ToolSetOptions): ToolSet;
154
+ /** 按名执行单个工具。复用 runOne 的超时 + 「工具永不抛」兜底。未知工具 → fail。 */
155
+ executeTool(name: string, input: unknown, ctxBase: ToolContext, toolCallId: string): Promise<ToolResult>;
156
+ /**
157
+ * 这次调用**失败了吗**。SSE 事件与落库 part 共用这一个判据。
158
+ *
159
+ * **两层信封都要看,这正是它必须单独成为一个方法的原因。** `result.ok` 只说
160
+ * 明注册表这一层顺利跑完了(工具存在、没超时、没抛异常);工具**自己判定的
161
+ * 失败**(`toolError(...)`)是 `{ok:true, data:{kind:'error'}}` —— 外层是
162
+ * `ok:true`。此前 `isError: !result.ok` 只看外层,于是「文件不存在」「服务商
163
+ * 没配」这类工具正常给出的失败,在界面上全都显示成绿色的成功。
164
+ *
165
+ * `kind:'accepted'`(后台受理)不是失败。
166
+ */
167
+ didFail(result: ToolResult): boolean;
168
+ /**
169
+ * ToolResult → 喂模型的文本。SSE、落库、模型上下文三处同源。
170
+ *
171
+ * **出口处一律 `toWellFormed()`**:工具截断外部文本时用 `slice` 很容易把 emoji
172
+ * 切成孤立的半个代理对,而 Postgres 的 jsonb 整句拒收它(`Unicode low
173
+ * surrogate must follow a high surrogate`)——tool-result 落不了库,那一轮就
174
+ * 失败,`agent_run` 收尾也跟着写不进去。在这里规整而不是在落库时:三处同源,
175
+ * 模型看到的和库里存的仍然逐字相同(与 `replaceNul` 同一个道理)。第三方服务名的过滤(只过失败)
176
+ * 也在这里(`sanitizeError`),理由同上。
177
+ */
178
+ renderToolOutput(name: string, result: ToolResult): string;
179
+ /** 工具为这次结果提供的结构化引用(落库进 `MessagePart.ref`)。 */
180
+ refOf(name: string, result: ToolResult): Record<string, unknown> | undefined;
181
+ /** 这次结果是否钉住不许裁剪(落库进 `MessagePart.pinned`)。失败的调用不问工具。 */
182
+ pinnedOf(name: string, result: ToolResult): boolean;
183
+ /**
184
+ * 工具为这次结果交给模型看的图片(落库进 `MessagePart.images`)。
185
+ * 失败的调用没有图——`didFail` 为真时这里也不问工具,两处判据同源。
186
+ */
187
+ imagesOf(name: string, result: ToolResult): ToolResultImage[] | undefined;
188
+ private runOne;
189
+ }
190
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/tools/tool-registry.ts"],"names":[],"mappings":"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"}