@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,30 @@
1
+ /**
2
+ * 宿主往 runtime 的 agent 视图上加自己的字段(module augmentation):
3
+ *
4
+ * ```ts
5
+ * declare module '@qjp88995/agent-runtime' {
6
+ * interface AgentExtensions {
7
+ * identity: AgentIdentity;
8
+ * mediaProviders: AgentMediaProviders;
9
+ * }
10
+ * }
11
+ * ```
12
+ *
13
+ * runtime 不解释这些字段,只原样带着走:`AgentDefinition.extensions` →
14
+ * `ToolContext.agent`、`TurnContext.agent`、`AgentToolProvider.isAvailable/describe`。
15
+ * 工具与钩子因此拿得到带类型的宿主配置,而内核一个宿主字段都不认识。
16
+ */
17
+ export interface AgentExtensions {
18
+ }
19
+ /**
20
+ * 一轮运行的发起人此刻有哪些权限点(宿主每轮现读)。权限点是宿主自己的字符串。
21
+ *
22
+ * 决定哪些声明了 `ToolMeta.permission` 的工具端上桌。**这不是门**:要权限的工具在
23
+ * 自己的 `run` 里还要现查一次。没有发起人(系统触发)、账号停用 → `NO_INITIATOR`:
24
+ * 退化方向必须是「什么都没有」。
25
+ */
26
+ export interface Initiator {
27
+ permissions: ReadonlySet<string>;
28
+ }
29
+ export declare const NO_INITIATOR: Initiator;
30
+ //# sourceMappingURL=agent-extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-extensions.d.ts","sourceRoot":"","sources":["../src/agent-extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,eAAe;CAAG;AAEnC;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,eAAO,MAAM,YAAY,EAAE,SAEzB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export const NO_INITIATOR = Object.freeze({
2
+ permissions: new Set(),
3
+ });
4
+ //# sourceMappingURL=agent-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-extensions.js","sourceRoot":"","sources":["../src/agent-extensions.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,YAAY,GAAc,MAAM,CAAC,MAAM,CAAC;IACnD,WAAW,EAAE,IAAI,GAAG,EAAU;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { AgentQuestionAnswer, AnswerAgentQuestionRequest, AskQuestionItem } from './ask-schema.js';
2
+ /**
3
+ * `Ask` 的纯函数层:回答的校验、默认项的推导、结局怎么写成那次工具
4
+ * 调用的返回值。
5
+ */
6
+ export type AnswerValidation = {
7
+ ok: true;
8
+ answers: AgentQuestionAnswer[];
9
+ } | {
10
+ ok: false;
11
+ message: string;
12
+ };
13
+ /**
14
+ * 对着那一行的选项校验用户提交的回答,产出落库形态。
15
+ *
16
+ * 逐条报「第几题错在哪」:这些错误只可能来自前端 bug 或手工调接口,报得含糊的话
17
+ * 排查的人要对着四道题各试一遍。
18
+ */
19
+ export declare function validateAnswers(questions: readonly AskQuestionItem[], request: AnswerAgentQuestionRequest): AnswerValidation;
20
+ /**
21
+ * 超时采用的默认项。任一题没有 `defaultOption` 时返回 null——工具入参校验保证
22
+ * 「限时 ⇒ 每题都有默认项」,这里的 null 只会来自坏数据,调用方据此不投默认值
23
+ * (宁可让问题一直挂着,也不替用户编一个答案)。
24
+ */
25
+ export declare function defaultAnswers(questions: readonly AskQuestionItem[]): AgentQuestionAnswer[] | null;
26
+ /** 秒数写成人话:整分钟说分钟,其余说秒。 */
27
+ export declare function describeWait(seconds: number): string;
28
+ /** 一个有了结局的问题:写成返回值要的全部材料。 */
29
+ export interface QuestionOutcome {
30
+ status: 'answered' | 'expired' | 'superseded' | 'cancelled';
31
+ questions: readonly AskQuestionItem[];
32
+ /** `answered` 是用户选的,`expired` 是默认项,其余为 null。 */
33
+ answers: readonly AgentQuestionAnswer[] | null;
34
+ /** 从提问到期限的秒数;不限时为 null。只有 `expired` 用得上。 */
35
+ waitedSeconds: number | null;
36
+ }
37
+ /**
38
+ * 问题的结局 → **那次 `Ask` 调用的返回值**(工具等到有了结局才返回)。
39
+ *
40
+ * 四种结局各自要让模型做对一件事,文案就是为那件事写的:
41
+ * - `answered`:照用户选的做。
42
+ * - `expired`:按默认项往下做、**别再问一遍**(不说的话那是它最常见的反应,而用户
43
+ * 此刻多半不在),并在回复里说明这一项是按默认定的。
44
+ * - `superseded`:别按默认项——用户改为直接打字回复了,那句话紧随其后。
45
+ * - `cancelled`:**不要**按默认项继续。用户说了停,这里要是含糊,模型会体贴地
46
+ * 「那我先按推荐的来」。
47
+ */
48
+ export declare function renderOutcomeResult(outcome: QuestionOutcome): string;
49
+ //# sourceMappingURL=ask-outcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-outcome.d.ts","sourceRoot":"","sources":["../../src/builtins/ask-outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,0BAA0B,EAC1B,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB;;;GAGG;AAEH,MAAM,MAAM,gBAAgB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,OAAO,EAAE,0BAA0B,GAClC,gBAAgB,CA4ClB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,eAAe,EAAE,GACpC,mBAAmB,EAAE,GAAG,IAAI,CAY9B;AAgCD,0BAA0B;AAC1B,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,6BAA6B;AAC7B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;IAC5D,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,gDAAgD;IAChD,OAAO,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,CAAC;IAC/C,4CAA4C;IAC5C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAmBpE"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * 对着那一行的选项校验用户提交的回答,产出落库形态。
3
+ *
4
+ * 逐条报「第几题错在哪」:这些错误只可能来自前端 bug 或手工调接口,报得含糊的话
5
+ * 排查的人要对着四道题各试一遍。
6
+ */
7
+ export function validateAnswers(questions, request) {
8
+ if (request.answers.length !== questions.length) {
9
+ return {
10
+ ok: false,
11
+ message: `共 ${questions.length} 题,收到 ${request.answers.length} 个回答`,
12
+ };
13
+ }
14
+ const answers = [];
15
+ for (const [i, q] of questions.entries()) {
16
+ const a = request.answers[i];
17
+ const n = i + 1;
18
+ const known = new Set(q.options.map(o => o.label));
19
+ const unknown = a.labels.filter(l => !known.has(l));
20
+ if (unknown.length > 0) {
21
+ return {
22
+ ok: false,
23
+ message: `第 ${n} 题没有这个选项:${unknown.join('、')}`,
24
+ };
25
+ }
26
+ if (new Set(a.labels).size !== a.labels.length) {
27
+ return { ok: false, message: `第 ${n} 题的选项重复` };
28
+ }
29
+ // 空白的「其他」当作没写——前端展开了输入框但用户什么都没填。
30
+ const other = a.other && a.other.length > 0 ? a.other : null;
31
+ const picked = a.labels.length + (other ? 1 : 0);
32
+ if (picked === 0) {
33
+ // 跳过:有默认项的题按默认项算(并如实记下不是用户亲手选的),没有的必答。
34
+ if (q.defaultOption === undefined) {
35
+ return { ok: false, message: `第 ${n} 题为必答题` };
36
+ }
37
+ answers.push({
38
+ header: q.header,
39
+ labels: [q.defaultOption],
40
+ other: null,
41
+ byDefault: true,
42
+ });
43
+ continue;
44
+ }
45
+ if (!q.multiSelect && picked > 1) {
46
+ return { ok: false, message: `第 ${n} 题为单选题,只能选一项` };
47
+ }
48
+ answers.push({ header: q.header, labels: a.labels, other });
49
+ }
50
+ return { ok: true, answers };
51
+ }
52
+ /**
53
+ * 超时采用的默认项。任一题没有 `defaultOption` 时返回 null——工具入参校验保证
54
+ * 「限时 ⇒ 每题都有默认项」,这里的 null 只会来自坏数据,调用方据此不投默认值
55
+ * (宁可让问题一直挂着,也不替用户编一个答案)。
56
+ */
57
+ export function defaultAnswers(questions) {
58
+ const out = [];
59
+ for (const q of questions) {
60
+ if (q.defaultOption === undefined)
61
+ return null;
62
+ out.push({
63
+ header: q.header,
64
+ labels: [q.defaultOption],
65
+ other: null,
66
+ byDefault: true,
67
+ });
68
+ }
69
+ return out;
70
+ }
71
+ /** 一题的回答写成一句话:选中的 label 在前,「其他」里写的话原样跟在后面。 */
72
+ function answerPhrase(a) {
73
+ return [...a.labels, ...(a.other ? [a.other] : [])].join('、');
74
+ }
75
+ /**
76
+ * 逐题写成「问题 → 回答」。带着问题本身:这段话要脱离那次调用的入参也读得懂。
77
+ *
78
+ * `markSkipped`:用户提交时跳过的那几题如实标出来。模型得知道哪些是用户亲手定的、
79
+ * 哪些只是没反对它的默认项——后者用户回头想改是很自然的事,它不该当成一个已经
80
+ * 拍板的决定去坚持。整题超时的不逐条标(那段话开头已经说了「按你给的默认项继续」,
81
+ * 每一题都标一遍只是噪音)。
82
+ */
83
+ function renderPicks(questions, answers, markSkipped) {
84
+ return questions
85
+ .map((q, i) => {
86
+ const a = answers[i];
87
+ const note = markSkipped && a.byDefault
88
+ ? '(用户没有选这一题,按你给的默认项)'
89
+ : '';
90
+ return `${q.question}\n→ ${answerPhrase(a)}${note}`;
91
+ })
92
+ .join('\n\n');
93
+ }
94
+ /** 秒数写成人话:整分钟说分钟,其余说秒。 */
95
+ export function describeWait(seconds) {
96
+ return seconds >= 60 && seconds % 60 === 0
97
+ ? `${seconds / 60} 分钟`
98
+ : `${seconds} 秒`;
99
+ }
100
+ /**
101
+ * 问题的结局 → **那次 `Ask` 调用的返回值**(工具等到有了结局才返回)。
102
+ *
103
+ * 四种结局各自要让模型做对一件事,文案就是为那件事写的:
104
+ * - `answered`:照用户选的做。
105
+ * - `expired`:按默认项往下做、**别再问一遍**(不说的话那是它最常见的反应,而用户
106
+ * 此刻多半不在),并在回复里说明这一项是按默认定的。
107
+ * - `superseded`:别按默认项——用户改为直接打字回复了,那句话紧随其后。
108
+ * - `cancelled`:**不要**按默认项继续。用户说了停,这里要是含糊,模型会体贴地
109
+ * 「那我先按推荐的来」。
110
+ */
111
+ export function renderOutcomeResult(outcome) {
112
+ const { status, questions, answers } = outcome;
113
+ if (status === 'answered' && answers) {
114
+ return `用户的回答:\n\n${renderPicks(questions, answers, true)}`;
115
+ }
116
+ if (status === 'expired' && answers) {
117
+ const waited = outcome.waitedSeconds === null
118
+ ? ''
119
+ : `等了 ${describeWait(outcome.waitedSeconds)},`;
120
+ return (`${waited}用户没有回答,按你给的默认项继续:\n\n${renderPicks(questions, answers, false)}\n\n` +
121
+ '直接按默认项往下做,不要就同一件事再问一次;在回复里说明这一项是按默认定的,用户回来后可以改。');
122
+ }
123
+ if (status === 'superseded') {
124
+ return '用户没有点选项,而是直接发了一条消息来回答——那条消息紧随其后,以它为准,不要按默认项继续。';
125
+ }
126
+ return '这个问题已作废(用户停止了这一轮,或等待过久)。不要按默认项继续;用户接下来说什么就做什么,确有必要再重新问。';
127
+ }
128
+ //# sourceMappingURL=ask-outcome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-outcome.js","sourceRoot":"","sources":["../../src/builtins/ask-outcome.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Agent 停下来问用户(`Ask` 工具,原名见 `ASK_FORMER_NAMES`)。
4
+ *
5
+ * **同步工具**:落一条待答问题(`QuestionStore`),然后这一轮就等在这儿,直到那一行有了
6
+ * 结局——结局就是那次工具调用的返回值,模型拿到它接着干(同一个 run、同一条
7
+ * 助手消息)。与 Claude Code 的同名工具同一个形状。
8
+ */
9
+ /**
10
+ * 一个问题的去向。
11
+ *
12
+ * - `pending`:等用户回答(一个会话同时至多一个)。
13
+ * - `answered`:用户点选后提交了。
14
+ * - `expired`:到了 `deadlineAt` 没人答,按默认项继续。
15
+ * - `superseded`:用户没点选项、改为直接打字回复——那句话本身就是回答。
16
+ * - `cancelled`:作废了——用户按了停止、等它的那一轮中断了、或等过了上限。
17
+ */
18
+ export declare const AGENT_QUESTION_STATUSES: readonly ["pending", "answered", "expired", "superseded", "cancelled"];
19
+ export type AgentQuestionStatus = (typeof AGENT_QUESTION_STATUSES)[number];
20
+ export declare const ASK_MAX_QUESTIONS = 4;
21
+ export declare const ASK_MIN_OPTIONS = 2;
22
+ export declare const ASK_MAX_OPTIONS = 4;
23
+ /** 「其他」里用户自己写的那句话的上限。 */
24
+ export declare const ASK_OTHER_MAX_CHARS = 500;
25
+ export declare const AskOptionSchema: z.ZodObject<{
26
+ label: z.ZodString;
27
+ description: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strip>;
29
+ export type AskOption = z.infer<typeof AskOptionSchema>;
30
+ export declare const AskQuestionItemSchema: z.ZodObject<{
31
+ question: z.ZodString;
32
+ header: z.ZodString;
33
+ options: z.ZodArray<z.ZodObject<{
34
+ label: z.ZodString;
35
+ description: z.ZodOptional<z.ZodString>;
36
+ }, z.core.$strip>>;
37
+ multiSelect: z.ZodDefault<z.ZodBoolean>;
38
+ defaultOption: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>;
40
+ export type AskQuestionItem = z.infer<typeof AskQuestionItemSchema>;
41
+ /**
42
+ * 工具入参。三条交叉校验写在 schema 上而不是工具里:错误会随 zod 的 issue 路径
43
+ * 回给模型,它能看出是第几题的哪个字段。
44
+ */
45
+ export declare const AskInputSchema: z.ZodObject<{
46
+ questions: z.ZodArray<z.ZodObject<{
47
+ question: z.ZodString;
48
+ header: z.ZodString;
49
+ options: z.ZodArray<z.ZodObject<{
50
+ label: z.ZodString;
51
+ description: z.ZodOptional<z.ZodString>;
52
+ }, z.core.$strip>>;
53
+ multiSelect: z.ZodDefault<z.ZodBoolean>;
54
+ defaultOption: z.ZodOptional<z.ZodString>;
55
+ }, z.core.$strip>>;
56
+ timeoutSeconds: z.ZodOptional<z.ZodNumber>;
57
+ }, z.core.$strip>;
58
+ export type AskInput = z.infer<typeof AskInputSchema>;
59
+ /** 一题的回答。`labels` 是点选的选项,`other` 是用户在「其他」里写的话。 */
60
+ export interface AgentQuestionAnswer {
61
+ header: string;
62
+ labels: string[];
63
+ other: string | null;
64
+ /**
65
+ * 这一题用户没有亲手选,`labels` 是 Agent 给的默认项。两种来源:整个问题超时了
66
+ * (每一题都为真);或用户提交时跳过了这一题。缺省 = 用户亲手选的。
67
+ *
68
+ * **必答与否不是一个单独的开关,是从 `defaultOption` 推出来的**:有默认项的题
69
+ * 可以跳过,没有的必答。默认项本来就是「用户不做决定时会发生什么」,超时与跳过
70
+ * 是同一个语义;再给模型一个 `required` 参数,就多一种它判断错的方式。
71
+ */
72
+ byDefault?: boolean;
73
+ }
74
+ /**
75
+ * 提交回答。`answers` 与问题**按下标对齐**、长度必须相等。
76
+ * 单选题:`labels` 恰好一个且无 `other`,或 `labels` 为空且有 `other`;
77
+ * 多选题:两者合计至少一项。**两者都空 = 跳过这一题**:有默认项的题按默认项算,
78
+ * 没有默认项的题(必答)会被拒绝。具体校验在服务里(要对着那一行的选项判)。
79
+ */
80
+ export declare const AnswerAgentQuestionRequestSchema: z.ZodObject<{
81
+ answers: z.ZodArray<z.ZodObject<{
82
+ labels: z.ZodDefault<z.ZodArray<z.ZodString>>;
83
+ other: z.ZodOptional<z.ZodString>;
84
+ }, z.core.$strip>>;
85
+ }, z.core.$strip>;
86
+ export type AnswerAgentQuestionRequest = z.infer<typeof AnswerAgentQuestionRequestSchema>;
87
+ export interface AgentQuestion {
88
+ id: string;
89
+ sessionId: string;
90
+ /** 提问的那一轮(= 那条 assistant 消息的 id)。 */
91
+ runId: string;
92
+ /** 那次 `Ask` 调用;前端按它把这一行对到工具卡上。 */
93
+ toolCallId: string;
94
+ questions: AskQuestionItem[];
95
+ status: AgentQuestionStatus;
96
+ /** null = 不限时。 */
97
+ deadlineAt: string | null;
98
+ /**
99
+ * 下发那一刻离 `deadlineAt` 还有多少毫秒(服务端按数据库时钟算)。
100
+ * **倒计时读它,不读 `deadlineAt`**——浏览器时钟与服务器差几十秒很常见,拿
101
+ * 本地 `Date.now()` 去减会让倒计时提前归零、或归零后迟迟不动。不限时或已不是
102
+ * pending 时为 null。
103
+ */
104
+ remainingMs: number | null;
105
+ /** `answered` 是用户选的,`expired` 是默认项,其余为 null。 */
106
+ answers: AgentQuestionAnswer[] | null;
107
+ createdAt: string;
108
+ resolvedAt: string | null;
109
+ }
110
+ //# sourceMappingURL=ask-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-schema.d.ts","sourceRoot":"","sources":["../../src/builtins/ask-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,wEAM1B,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,yBAAyB;AACzB,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,eAAe;;;iBAa1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,qBAAqB;;;;;;;;;iBA4BhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;iBAsCvB,CAAC;AACL,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC;;;;;iBAU3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC9C,OAAO,gCAAgC,CACxC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kBAAkB;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gDAAgD;IAChD,OAAO,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
@@ -0,0 +1,124 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Agent 停下来问用户(`Ask` 工具,原名见 `ASK_FORMER_NAMES`)。
4
+ *
5
+ * **同步工具**:落一条待答问题(`QuestionStore`),然后这一轮就等在这儿,直到那一行有了
6
+ * 结局——结局就是那次工具调用的返回值,模型拿到它接着干(同一个 run、同一条
7
+ * 助手消息)。与 Claude Code 的同名工具同一个形状。
8
+ */
9
+ /**
10
+ * 一个问题的去向。
11
+ *
12
+ * - `pending`:等用户回答(一个会话同时至多一个)。
13
+ * - `answered`:用户点选后提交了。
14
+ * - `expired`:到了 `deadlineAt` 没人答,按默认项继续。
15
+ * - `superseded`:用户没点选项、改为直接打字回复——那句话本身就是回答。
16
+ * - `cancelled`:作废了——用户按了停止、等它的那一轮中断了、或等过了上限。
17
+ */
18
+ export const AGENT_QUESTION_STATUSES = [
19
+ 'pending',
20
+ 'answered',
21
+ 'expired',
22
+ 'superseded',
23
+ 'cancelled',
24
+ ];
25
+ export const ASK_MAX_QUESTIONS = 4;
26
+ export const ASK_MIN_OPTIONS = 2;
27
+ export const ASK_MAX_OPTIONS = 4;
28
+ /** 「其他」里用户自己写的那句话的上限。 */
29
+ export const ASK_OTHER_MAX_CHARS = 500;
30
+ export const AskOptionSchema = z.object({
31
+ label: z
32
+ .string()
33
+ .trim()
34
+ .min(1)
35
+ .max(60)
36
+ .describe('选项名,简短(1–5 个词),同一题内不得重复'),
37
+ description: z
38
+ .string()
39
+ .trim()
40
+ .max(200)
41
+ .optional()
42
+ .describe('选了它意味着什么、有什么取舍。用户看着它做决定'),
43
+ });
44
+ export const AskQuestionItemSchema = z.object({
45
+ question: z
46
+ .string()
47
+ .trim()
48
+ .min(1)
49
+ .max(300)
50
+ .describe('完整的问题,一句话,以问号结尾'),
51
+ header: z
52
+ .string()
53
+ .trim()
54
+ .min(1)
55
+ .max(12)
56
+ .describe('这个问题的短标签(不超过 12 个字),如「开场方式」'),
57
+ options: z
58
+ .array(AskOptionSchema)
59
+ .min(ASK_MIN_OPTIONS)
60
+ .max(ASK_MAX_OPTIONS)
61
+ .describe('2–4 个互斥的选项。不要自己写「其他」——界面永远会提供一个让用户自由输入的「其他」'),
62
+ multiSelect: z.boolean().default(false).describe('是否允许选多个'),
63
+ defaultOption: z
64
+ .string()
65
+ .trim()
66
+ .optional()
67
+ .describe('用户不回答这一题时采用哪个选项,必须逐字等于某个选项的 label。**给了它,这一题用户就可以跳过**(提交时按它算,等待超时也按它算);不给,这一题必答。给了 timeoutSeconds 时每一题都必须有'),
68
+ });
69
+ /**
70
+ * 工具入参。三条交叉校验写在 schema 上而不是工具里:错误会随 zod 的 issue 路径
71
+ * 回给模型,它能看出是第几题的哪个字段。
72
+ */
73
+ export const AskInputSchema = z
74
+ .object({
75
+ questions: z.array(AskQuestionItemSchema).min(1).max(ASK_MAX_QUESTIONS),
76
+ timeoutSeconds: z
77
+ .number()
78
+ .int()
79
+ .positive()
80
+ .optional()
81
+ .describe('最多等多少秒;到点没人回答就按每一题的 defaultOption 继续。不给 = 一直等到用户回答'),
82
+ })
83
+ .superRefine((input, ctx) => {
84
+ input.questions.forEach((q, i) => {
85
+ const labels = q.options.map(o => o.label);
86
+ if (new Set(labels).size !== labels.length) {
87
+ ctx.addIssue({
88
+ code: 'custom',
89
+ path: ['questions', i, 'options'],
90
+ message: '同一题里的选项 label 不能重复',
91
+ });
92
+ }
93
+ if (q.defaultOption !== undefined && !labels.includes(q.defaultOption)) {
94
+ ctx.addIssue({
95
+ code: 'custom',
96
+ path: ['questions', i, 'defaultOption'],
97
+ message: `defaultOption 必须逐字等于某个选项的 label(可选:${labels.join(' / ')})`,
98
+ });
99
+ }
100
+ if (input.timeoutSeconds !== undefined && q.defaultOption === undefined) {
101
+ ctx.addIssue({
102
+ code: 'custom',
103
+ path: ['questions', i, 'defaultOption'],
104
+ message: '给了 timeoutSeconds 就必须给每一题写 defaultOption——到点之后要按它继续',
105
+ });
106
+ }
107
+ });
108
+ });
109
+ /**
110
+ * 提交回答。`answers` 与问题**按下标对齐**、长度必须相等。
111
+ * 单选题:`labels` 恰好一个且无 `other`,或 `labels` 为空且有 `other`;
112
+ * 多选题:两者合计至少一项。**两者都空 = 跳过这一题**:有默认项的题按默认项算,
113
+ * 没有默认项的题(必答)会被拒绝。具体校验在服务里(要对着那一行的选项判)。
114
+ */
115
+ export const AnswerAgentQuestionRequestSchema = z.object({
116
+ answers: z
117
+ .array(z.object({
118
+ labels: z.array(z.string()).max(ASK_MAX_OPTIONS).default([]),
119
+ other: z.string().trim().max(ASK_OTHER_MAX_CHARS).optional(),
120
+ }))
121
+ .min(1)
122
+ .max(ASK_MAX_QUESTIONS),
123
+ });
124
+ //# sourceMappingURL=ask-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-schema.js","sourceRoot":"","sources":["../../src/builtins/ask-schema.ts"],"names":[],"mappings":"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"}