@alvin0/ai-agent-sdk-core 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 (623) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -0
  3. package/dist/agent/accounting/common.js +2 -0
  4. package/dist/agent/accounting/common.js.map +1 -0
  5. package/dist/agent/accounting/config.js +2 -0
  6. package/dist/agent/accounting/config.js.map +1 -0
  7. package/dist/agent/accounting/contracts.d.ts +36 -0
  8. package/dist/agent/accounting/contracts.d.ts.map +1 -0
  9. package/dist/agent/accounting/delivery/accounting-data.js +2 -0
  10. package/dist/agent/accounting/delivery/accounting-data.js.map +1 -0
  11. package/dist/agent/accounting/delivery/config.js +2 -0
  12. package/dist/agent/accounting/delivery/config.js.map +1 -0
  13. package/dist/agent/accounting/delivery/data.js +2 -0
  14. package/dist/agent/accounting/delivery/data.js.map +1 -0
  15. package/dist/agent/accounting/delivery/support-errors.js +2 -0
  16. package/dist/agent/accounting/delivery/support-errors.js.map +1 -0
  17. package/dist/agent/accounting/delivery/terminal.js +2 -0
  18. package/dist/agent/accounting/delivery/terminal.js.map +1 -0
  19. package/dist/agent/accounting/delivery-types.d.ts +43 -0
  20. package/dist/agent/accounting/delivery-types.d.ts.map +1 -0
  21. package/dist/agent/accounting/error.d.ts +18 -0
  22. package/dist/agent/accounting/error.d.ts.map +1 -0
  23. package/dist/agent/accounting/error.js +2 -0
  24. package/dist/agent/accounting/error.js.map +1 -0
  25. package/dist/agent/accounting/estimate.js +2 -0
  26. package/dist/agent/accounting/estimate.js.map +1 -0
  27. package/dist/agent/accounting/event-buffer.js +2 -0
  28. package/dist/agent/accounting/event-buffer.js.map +1 -0
  29. package/dist/agent/accounting/ledger.js +2 -0
  30. package/dist/agent/accounting/ledger.js.map +1 -0
  31. package/dist/agent/accounting/report.d.ts +70 -0
  32. package/dist/agent/accounting/report.d.ts.map +1 -0
  33. package/dist/agent/accounting/usage.d.ts +13 -0
  34. package/dist/agent/accounting/usage.d.ts.map +1 -0
  35. package/dist/agent/accounting/usage.js +2 -0
  36. package/dist/agent/accounting/usage.js.map +1 -0
  37. package/dist/agent/context/section.d.ts +15 -0
  38. package/dist/agent/context/section.d.ts.map +1 -0
  39. package/dist/agent/context/section.js +2 -0
  40. package/dist/agent/context/section.js.map +1 -0
  41. package/dist/agent/context/types.d.ts +98 -0
  42. package/dist/agent/context/types.d.ts.map +1 -0
  43. package/dist/agent/define/definition.d.ts +110 -0
  44. package/dist/agent/define/definition.d.ts.map +1 -0
  45. package/dist/agent/define/definition.js +2 -0
  46. package/dist/agent/define/definition.js.map +1 -0
  47. package/dist/agent/define/instructions.js +2 -0
  48. package/dist/agent/define/instructions.js.map +1 -0
  49. package/dist/agent/define/output-format.js +2 -0
  50. package/dist/agent/define/output-format.js.map +1 -0
  51. package/dist/agent/define/session/accounting.js +2 -0
  52. package/dist/agent/define/session/accounting.js.map +1 -0
  53. package/dist/agent/define/session/common.js +2 -0
  54. package/dist/agent/define/session/common.js.map +1 -0
  55. package/dist/agent/define/session/config.js +2 -0
  56. package/dist/agent/define/session/config.js.map +1 -0
  57. package/dist/agent/define/session/model-config.js +2 -0
  58. package/dist/agent/define/session/model-config.js.map +1 -0
  59. package/dist/agent/define/session/observer.js +2 -0
  60. package/dist/agent/define/session/observer.js.map +1 -0
  61. package/dist/agent/define/session/run-seal.js +2 -0
  62. package/dist/agent/define/session/run-seal.js.map +1 -0
  63. package/dist/agent/define/session/runtime-binding.js +2 -0
  64. package/dist/agent/define/session/runtime-binding.js.map +1 -0
  65. package/dist/agent/define/session/runtime-compaction.js +2 -0
  66. package/dist/agent/define/session/runtime-compaction.js.map +1 -0
  67. package/dist/agent/define/session/runtime-memory.js +2 -0
  68. package/dist/agent/define/session/runtime-memory.js.map +1 -0
  69. package/dist/agent/define/session/skills.js +2 -0
  70. package/dist/agent/define/session/skills.js.map +1 -0
  71. package/dist/agent/define/session/trace-accounting.js +2 -0
  72. package/dist/agent/define/session/trace-accounting.js.map +1 -0
  73. package/dist/agent/define/session/types.d.ts +217 -0
  74. package/dist/agent/define/session/types.d.ts.map +1 -0
  75. package/dist/agent/define/session/validation.js +2 -0
  76. package/dist/agent/define/session/validation.js.map +1 -0
  77. package/dist/agent/define/session.d.ts +77 -0
  78. package/dist/agent/define/session.d.ts.map +1 -0
  79. package/dist/agent/define/session.js +2 -0
  80. package/dist/agent/define/session.js.map +1 -0
  81. package/dist/agent/history/config.js +2 -0
  82. package/dist/agent/history/config.js.map +1 -0
  83. package/dist/agent/history/history.d.ts +33 -0
  84. package/dist/agent/history/history.d.ts.map +1 -0
  85. package/dist/agent/history/history.js +2 -0
  86. package/dist/agent/history/history.js.map +1 -0
  87. package/dist/agent/history/normalize.d.ts +7 -0
  88. package/dist/agent/history/normalize.d.ts.map +1 -0
  89. package/dist/agent/history/normalize.js +2 -0
  90. package/dist/agent/history/normalize.js.map +1 -0
  91. package/dist/agent/history/project.d.ts +14 -0
  92. package/dist/agent/history/project.d.ts.map +1 -0
  93. package/dist/agent/history/project.js +2 -0
  94. package/dist/agent/history/project.js.map +1 -0
  95. package/dist/agent/history/types.d.ts +85 -0
  96. package/dist/agent/history/types.d.ts.map +1 -0
  97. package/dist/agent/history/validation.js +2 -0
  98. package/dist/agent/history/validation.js.map +1 -0
  99. package/dist/agent/loop/events.d.ts +213 -0
  100. package/dist/agent/loop/events.d.ts.map +1 -0
  101. package/dist/agent/loop/queue.js +2 -0
  102. package/dist/agent/loop/queue.js.map +1 -0
  103. package/dist/agent/loop/run-turn.d.ts +8 -0
  104. package/dist/agent/loop/run-turn.d.ts.map +1 -0
  105. package/dist/agent/loop/run-turn.js +2 -0
  106. package/dist/agent/loop/run-turn.js.map +1 -0
  107. package/dist/agent/loop/schedule.d.ts +62 -0
  108. package/dist/agent/loop/schedule.d.ts.map +1 -0
  109. package/dist/agent/loop/schedule.js +3 -0
  110. package/dist/agent/loop/schedule.js.map +1 -0
  111. package/dist/agent/loop/turn/cancellation.js +2 -0
  112. package/dist/agent/loop/turn/cancellation.js.map +1 -0
  113. package/dist/agent/loop/turn/common.js +2 -0
  114. package/dist/agent/loop/turn/common.js.map +1 -0
  115. package/dist/agent/loop/turn/config.js +2 -0
  116. package/dist/agent/loop/turn/config.js.map +1 -0
  117. package/dist/agent/loop/turn/content.js +4 -0
  118. package/dist/agent/loop/turn/content.js.map +1 -0
  119. package/dist/agent/loop/turn/hooks.js +2 -0
  120. package/dist/agent/loop/turn/hooks.js.map +1 -0
  121. package/dist/agent/loop/turn/model-round.js +2 -0
  122. package/dist/agent/loop/turn/model-round.js.map +1 -0
  123. package/dist/agent/loop/turn/repetition.js +2 -0
  124. package/dist/agent/loop/turn/repetition.js.map +1 -0
  125. package/dist/agent/loop/turn/types.d.ts +82 -0
  126. package/dist/agent/loop/turn/types.d.ts.map +1 -0
  127. package/dist/agent/loop/turn/usage-stop.js +2 -0
  128. package/dist/agent/loop/turn/usage-stop.js.map +1 -0
  129. package/dist/agent/loop/turn/validation.js +2 -0
  130. package/dist/agent/loop/turn/validation.js.map +1 -0
  131. package/dist/agent/loop/types.d.ts +82 -0
  132. package/dist/agent/loop/types.d.ts.map +1 -0
  133. package/dist/agent/memory/accounting-binding.js +2 -0
  134. package/dist/agent/memory/accounting-binding.js.map +1 -0
  135. package/dist/agent/memory/compaction-config.d.ts +63 -0
  136. package/dist/agent/memory/compaction-config.d.ts.map +1 -0
  137. package/dist/agent/memory/compaction-config.js +2 -0
  138. package/dist/agent/memory/compaction-config.js.map +1 -0
  139. package/dist/agent/memory/compaction.d.ts +62 -0
  140. package/dist/agent/memory/compaction.d.ts.map +1 -0
  141. package/dist/agent/memory/compaction.js +6 -0
  142. package/dist/agent/memory/compaction.js.map +1 -0
  143. package/dist/agent/memory/memory.d.ts +61 -0
  144. package/dist/agent/memory/memory.d.ts.map +1 -0
  145. package/dist/agent/memory/memory.js +5 -0
  146. package/dist/agent/memory/memory.js.map +1 -0
  147. package/dist/agent/memory/persistence-types.d.ts +44 -0
  148. package/dist/agent/memory/persistence-types.d.ts.map +1 -0
  149. package/dist/agent/memory/surface-compaction.d.ts +6 -0
  150. package/dist/agent/memory/surface-compaction.d.ts.map +1 -0
  151. package/dist/agent/memory/surface-compaction.js +4 -0
  152. package/dist/agent/memory/surface-compaction.js.map +1 -0
  153. package/dist/agent/memory/token-estimator.d.ts +12 -0
  154. package/dist/agent/memory/token-estimator.d.ts.map +1 -0
  155. package/dist/agent/memory/token-estimator.js +2 -0
  156. package/dist/agent/memory/token-estimator.js.map +1 -0
  157. package/dist/agent/mode/run-agent.d.ts +79 -0
  158. package/dist/agent/mode/run-agent.d.ts.map +1 -0
  159. package/dist/agent/mode/run-agent.js +4 -0
  160. package/dist/agent/mode/run-agent.js.map +1 -0
  161. package/dist/agent/mode/user-input.d.ts +61 -0
  162. package/dist/agent/mode/user-input.d.ts.map +1 -0
  163. package/dist/agent/mode/user-input.js +2 -0
  164. package/dist/agent/mode/user-input.js.map +1 -0
  165. package/dist/agent/skill/catalog.d.ts +53 -0
  166. package/dist/agent/skill/catalog.d.ts.map +1 -0
  167. package/dist/agent/skill/catalog.js +2 -0
  168. package/dist/agent/skill/catalog.js.map +1 -0
  169. package/dist/agent/skill/definition.d.ts +106 -0
  170. package/dist/agent/skill/definition.d.ts.map +1 -0
  171. package/dist/agent/skill/definition.js +2 -0
  172. package/dist/agent/skill/definition.js.map +1 -0
  173. package/dist/agent/skill/provider/config.d.ts +11 -0
  174. package/dist/agent/skill/provider/config.d.ts.map +1 -0
  175. package/dist/agent/skill/provider/config.js +2 -0
  176. package/dist/agent/skill/provider/config.js.map +1 -0
  177. package/dist/agent/skill/provider/context.js +2 -0
  178. package/dist/agent/skill/provider/context.js.map +1 -0
  179. package/dist/agent/skill/provider/definition.d.ts +6 -0
  180. package/dist/agent/skill/provider/definition.d.ts.map +1 -0
  181. package/dist/agent/skill/provider/definition.js +2 -0
  182. package/dist/agent/skill/provider/definition.js.map +1 -0
  183. package/dist/agent/skill/provider/snapshot.js +2 -0
  184. package/dist/agent/skill/provider/snapshot.js.map +1 -0
  185. package/dist/agent/skill/provider/types.d.ts +49 -0
  186. package/dist/agent/skill/provider/types.d.ts.map +1 -0
  187. package/dist/agent/skill/tools.d.ts +45 -0
  188. package/dist/agent/skill/tools.d.ts.map +1 -0
  189. package/dist/agent/skill/tools.js +14 -0
  190. package/dist/agent/skill/tools.js.map +1 -0
  191. package/dist/agent/team/common.d.ts +26 -0
  192. package/dist/agent/team/common.d.ts.map +1 -0
  193. package/dist/agent/team/common.js +2 -0
  194. package/dist/agent/team/common.js.map +1 -0
  195. package/dist/agent/team/composed.d.ts +45 -0
  196. package/dist/agent/team/composed.d.ts.map +1 -0
  197. package/dist/agent/team/composed.js +2 -0
  198. package/dist/agent/team/composed.js.map +1 -0
  199. package/dist/agent/team/contracts.d.ts +54 -0
  200. package/dist/agent/team/contracts.d.ts.map +1 -0
  201. package/dist/agent/team/managed.d.ts +527 -0
  202. package/dist/agent/team/managed.d.ts.map +1 -0
  203. package/dist/agent/team/managed.js +4 -0
  204. package/dist/agent/team/managed.js.map +1 -0
  205. package/dist/agent/team/team.d.ts +142 -0
  206. package/dist/agent/team/team.d.ts.map +1 -0
  207. package/dist/agent/team/team.js +2 -0
  208. package/dist/agent/team/team.js.map +1 -0
  209. package/dist/agent/team/types.d.ts +170 -0
  210. package/dist/agent/team/types.d.ts.map +1 -0
  211. package/dist/agent/tool/approval.d.ts +106 -0
  212. package/dist/agent/tool/approval.d.ts.map +1 -0
  213. package/dist/agent/tool/approval.js +2 -0
  214. package/dist/agent/tool/approval.js.map +1 -0
  215. package/dist/agent/tool/capture.js +2 -0
  216. package/dist/agent/tool/capture.js.map +1 -0
  217. package/dist/agent/tool/config.js +2 -0
  218. package/dist/agent/tool/config.js.map +1 -0
  219. package/dist/agent/tool/definition.d.ts +227 -0
  220. package/dist/agent/tool/definition.d.ts.map +1 -0
  221. package/dist/agent/tool/definition.js +2 -0
  222. package/dist/agent/tool/definition.js.map +1 -0
  223. package/dist/agent/tool/errors.d.ts +82 -0
  224. package/dist/agent/tool/errors.d.ts.map +1 -0
  225. package/dist/agent/tool/errors.js +2 -0
  226. package/dist/agent/tool/errors.js.map +1 -0
  227. package/dist/agent/tool/execution.d.ts +60 -0
  228. package/dist/agent/tool/execution.d.ts.map +1 -0
  229. package/dist/agent/tool/execution.js +2 -0
  230. package/dist/agent/tool/execution.js.map +1 -0
  231. package/dist/agent/tool/output-budget.d.ts +159 -0
  232. package/dist/agent/tool/output-budget.d.ts.map +1 -0
  233. package/dist/agent/tool/output-budget.js +3 -0
  234. package/dist/agent/tool/output-budget.js.map +1 -0
  235. package/dist/agent/tool/pipeline.d.ts +98 -0
  236. package/dist/agent/tool/pipeline.d.ts.map +1 -0
  237. package/dist/agent/tool/pipeline.js +4 -0
  238. package/dist/agent/tool/pipeline.js.map +1 -0
  239. package/dist/agent/tool/registry.d.ts +70 -0
  240. package/dist/agent/tool/registry.d.ts.map +1 -0
  241. package/dist/agent/tool/registry.js +2 -0
  242. package/dist/agent/tool/registry.js.map +1 -0
  243. package/dist/agent/tool/schema.d.ts +12 -0
  244. package/dist/agent/tool/schema.d.ts.map +1 -0
  245. package/dist/agent/tool/schema.js +2 -0
  246. package/dist/agent/tool/schema.js.map +1 -0
  247. package/dist/agent/tool/source-types.d.ts +25 -0
  248. package/dist/agent/tool/source-types.d.ts.map +1 -0
  249. package/dist/agent/trace/trace.d.ts +63 -0
  250. package/dist/agent/trace/trace.d.ts.map +1 -0
  251. package/dist/agent/trace/trace.js +2 -0
  252. package/dist/agent/trace/trace.js.map +1 -0
  253. package/dist/agent.d.ts +52 -0
  254. package/dist/agent.js +1 -0
  255. package/dist/async/settlement.d.ts +6 -0
  256. package/dist/async/settlement.d.ts.map +1 -0
  257. package/dist/async/settlement.js +2 -0
  258. package/dist/async/settlement.js.map +1 -0
  259. package/dist/capability/common/config.js +2 -0
  260. package/dist/capability/common/config.js.map +1 -0
  261. package/dist/capability/common/data.js +2 -0
  262. package/dist/capability/common/data.js.map +1 -0
  263. package/dist/composition/agent/author.d.ts +12 -0
  264. package/dist/composition/agent/author.d.ts.map +1 -0
  265. package/dist/composition/agent/author.js +2 -0
  266. package/dist/composition/agent/author.js.map +1 -0
  267. package/dist/composition/agent/definition.js +2 -0
  268. package/dist/composition/agent/definition.js.map +1 -0
  269. package/dist/composition/agent/native-event.js +2 -0
  270. package/dist/composition/agent/native-event.js.map +1 -0
  271. package/dist/composition/agent/native-tools.js +2 -0
  272. package/dist/composition/agent/native-tools.js.map +1 -0
  273. package/dist/composition/agent/options.js +2 -0
  274. package/dist/composition/agent/options.js.map +1 -0
  275. package/dist/composition/agent/policy.js +2 -0
  276. package/dist/composition/agent/policy.js.map +1 -0
  277. package/dist/composition/agent/public-message.js +2 -0
  278. package/dist/composition/agent/public-message.js.map +1 -0
  279. package/dist/composition/agent/session.js +2 -0
  280. package/dist/composition/agent/session.js.map +1 -0
  281. package/dist/composition/agent/types.d.ts +218 -0
  282. package/dist/composition/agent/types.d.ts.map +1 -0
  283. package/dist/composition/common/counter.js +2 -0
  284. package/dist/composition/common/counter.js.map +1 -0
  285. package/dist/composition/common/errors.d.ts +15 -0
  286. package/dist/composition/common/errors.d.ts.map +1 -0
  287. package/dist/composition/common/errors.js +2 -0
  288. package/dist/composition/common/errors.js.map +1 -0
  289. package/dist/composition/common/json-data.js +2 -0
  290. package/dist/composition/common/json-data.js.map +1 -0
  291. package/dist/composition/credential/config.d.ts +5 -0
  292. package/dist/composition/credential/config.d.ts.map +1 -0
  293. package/dist/composition/credential/config.js +2 -0
  294. package/dist/composition/credential/config.js.map +1 -0
  295. package/dist/composition/credential/definition.d.ts +9 -0
  296. package/dist/composition/credential/definition.d.ts.map +1 -0
  297. package/dist/composition/credential/definition.js +2 -0
  298. package/dist/composition/credential/definition.js.map +1 -0
  299. package/dist/composition/credential/types.d.ts +38 -0
  300. package/dist/composition/credential/types.d.ts.map +1 -0
  301. package/dist/composition/delivery/ack.js +2 -0
  302. package/dist/composition/delivery/ack.js.map +1 -0
  303. package/dist/composition/delivery/attempt.js +2 -0
  304. package/dist/composition/delivery/attempt.js.map +1 -0
  305. package/dist/composition/delivery/batch.js +2 -0
  306. package/dist/composition/delivery/batch.js.map +1 -0
  307. package/dist/composition/delivery/checkpoint.js +2 -0
  308. package/dist/composition/delivery/checkpoint.js.map +1 -0
  309. package/dist/composition/delivery/event.js +2 -0
  310. package/dist/composition/delivery/event.js.map +1 -0
  311. package/dist/composition/delivery/resource.d.ts +11 -0
  312. package/dist/composition/delivery/resource.d.ts.map +1 -0
  313. package/dist/composition/delivery/resource.js +2 -0
  314. package/dist/composition/delivery/resource.js.map +1 -0
  315. package/dist/composition/delivery/staging.js +2 -0
  316. package/dist/composition/delivery/staging.js.map +1 -0
  317. package/dist/composition/diagnostics/config.js +2 -0
  318. package/dist/composition/diagnostics/config.js.map +1 -0
  319. package/dist/composition/diagnostics/ring.d.ts +12 -0
  320. package/dist/composition/diagnostics/ring.d.ts.map +1 -0
  321. package/dist/composition/diagnostics/ring.js +2 -0
  322. package/dist/composition/diagnostics/ring.js.map +1 -0
  323. package/dist/composition/exporter/definition.d.ts +7 -0
  324. package/dist/composition/exporter/definition.d.ts.map +1 -0
  325. package/dist/composition/exporter/definition.js +2 -0
  326. package/dist/composition/exporter/definition.js.map +1 -0
  327. package/dist/composition/exporter/lifecycle.js +2 -0
  328. package/dist/composition/exporter/lifecycle.js.map +1 -0
  329. package/dist/composition/exporter/preflight.js +2 -0
  330. package/dist/composition/exporter/preflight.js.map +1 -0
  331. package/dist/composition/exporter/types.d.ts +25 -0
  332. package/dist/composition/exporter/types.d.ts.map +1 -0
  333. package/dist/composition/exporter/types.js +2 -0
  334. package/dist/composition/exporter/types.js.map +1 -0
  335. package/dist/composition/identity/agent.js +2 -0
  336. package/dist/composition/identity/agent.js.map +1 -0
  337. package/dist/composition/lifecycle/bounded.js +2 -0
  338. package/dist/composition/lifecycle/bounded.js.map +1 -0
  339. package/dist/composition/lifecycle/operations.js +2 -0
  340. package/dist/composition/lifecycle/operations.js.map +1 -0
  341. package/dist/composition/lifecycle/types.d.ts +13 -0
  342. package/dist/composition/lifecycle/types.d.ts.map +1 -0
  343. package/dist/composition/lifecycle/types.js +2 -0
  344. package/dist/composition/lifecycle/types.js.map +1 -0
  345. package/dist/composition/logging/config.js +2 -0
  346. package/dist/composition/logging/config.js.map +1 -0
  347. package/dist/composition/logging/integration.js +2 -0
  348. package/dist/composition/logging/integration.js.map +1 -0
  349. package/dist/composition/logging/logger.d.ts +9 -0
  350. package/dist/composition/logging/logger.d.ts.map +1 -0
  351. package/dist/composition/logging/logger.js +2 -0
  352. package/dist/composition/logging/logger.js.map +1 -0
  353. package/dist/composition/memory/config.d.ts +10 -0
  354. package/dist/composition/memory/config.d.ts.map +1 -0
  355. package/dist/composition/memory/config.js +2 -0
  356. package/dist/composition/memory/config.js.map +1 -0
  357. package/dist/composition/memory/definition.d.ts +7 -0
  358. package/dist/composition/memory/definition.d.ts.map +1 -0
  359. package/dist/composition/memory/definition.js +2 -0
  360. package/dist/composition/memory/definition.js.map +1 -0
  361. package/dist/composition/memory/key.js +2 -0
  362. package/dist/composition/memory/key.js.map +1 -0
  363. package/dist/composition/memory/resume.js +2 -0
  364. package/dist/composition/memory/resume.js.map +1 -0
  365. package/dist/composition/memory/run.js +2 -0
  366. package/dist/composition/memory/run.js.map +1 -0
  367. package/dist/composition/model-catalog/config.js +2 -0
  368. package/dist/composition/model-catalog/config.js.map +1 -0
  369. package/dist/composition/model-catalog/manager.js +2 -0
  370. package/dist/composition/model-catalog/manager.js.map +1 -0
  371. package/dist/composition/model-catalog/options.js +2 -0
  372. package/dist/composition/model-catalog/options.js.map +1 -0
  373. package/dist/composition/model-catalog/types.d.ts +9 -0
  374. package/dist/composition/model-catalog/types.d.ts.map +1 -0
  375. package/dist/composition/observation/config.js +2 -0
  376. package/dist/composition/observation/config.js.map +1 -0
  377. package/dist/composition/observation/extensions.js +2 -0
  378. package/dist/composition/observation/extensions.js.map +1 -0
  379. package/dist/composition/observation/final-report.d.ts +6 -0
  380. package/dist/composition/observation/final-report.d.ts.map +1 -0
  381. package/dist/composition/observation/final-report.js +2 -0
  382. package/dist/composition/observation/final-report.js.map +1 -0
  383. package/dist/composition/observation/health.d.ts +13 -0
  384. package/dist/composition/observation/health.d.ts.map +1 -0
  385. package/dist/composition/observation/port.d.ts +11 -0
  386. package/dist/composition/observation/port.d.ts.map +1 -0
  387. package/dist/composition/observation/port.js +2 -0
  388. package/dist/composition/observation/port.js.map +1 -0
  389. package/dist/composition/preflight.js +2 -0
  390. package/dist/composition/preflight.js.map +1 -0
  391. package/dist/composition/provider/activation.js +2 -0
  392. package/dist/composition/provider/activation.js.map +1 -0
  393. package/dist/composition/provider/definition.d.ts +7 -0
  394. package/dist/composition/provider/definition.d.ts.map +1 -0
  395. package/dist/composition/provider/definition.js +2 -0
  396. package/dist/composition/provider/definition.js.map +1 -0
  397. package/dist/composition/provider/model-selection.js +2 -0
  398. package/dist/composition/provider/model-selection.js.map +1 -0
  399. package/dist/composition/provider/preflight.js +2 -0
  400. package/dist/composition/provider/preflight.js.map +1 -0
  401. package/dist/composition/provider/types.d.ts +38 -0
  402. package/dist/composition/provider/types.d.ts.map +1 -0
  403. package/dist/composition/provider/types.js +2 -0
  404. package/dist/composition/provider/types.js.map +1 -0
  405. package/dist/composition/queue/config.js +2 -0
  406. package/dist/composition/queue/config.js.map +1 -0
  407. package/dist/composition/queue/scheduler.js +2 -0
  408. package/dist/composition/queue/scheduler.js.map +1 -0
  409. package/dist/composition/queue/store.js +2 -0
  410. package/dist/composition/queue/store.js.map +1 -0
  411. package/dist/composition/runtime/config.js +2 -0
  412. package/dist/composition/runtime/config.js.map +1 -0
  413. package/dist/composition/runtime/owner.js +2 -0
  414. package/dist/composition/runtime/owner.js.map +1 -0
  415. package/dist/composition/runtime/public.d.ts +7 -0
  416. package/dist/composition/runtime/public.d.ts.map +1 -0
  417. package/dist/composition/runtime/public.js +2 -0
  418. package/dist/composition/runtime/public.js.map +1 -0
  419. package/dist/composition/runtime/types.d.ts +76 -0
  420. package/dist/composition/runtime/types.d.ts.map +1 -0
  421. package/dist/composition/startup.js +2 -0
  422. package/dist/composition/startup.js.map +1 -0
  423. package/dist/composition/team/config.js +2 -0
  424. package/dist/composition/team/config.js.map +1 -0
  425. package/dist/composition/team/options.js +2 -0
  426. package/dist/composition/team/options.js.map +1 -0
  427. package/dist/composition/team/runtime.js +2 -0
  428. package/dist/composition/team/runtime.js.map +1 -0
  429. package/dist/composition/team/types.d.ts +63 -0
  430. package/dist/composition/team/types.d.ts.map +1 -0
  431. package/dist/composition/tool-source/config.d.ts +5 -0
  432. package/dist/composition/tool-source/config.d.ts.map +1 -0
  433. package/dist/composition/tool-source/config.js +2 -0
  434. package/dist/composition/tool-source/config.js.map +1 -0
  435. package/dist/composition/tool-source/definition.d.ts +7 -0
  436. package/dist/composition/tool-source/definition.d.ts.map +1 -0
  437. package/dist/composition/tool-source/definition.js +2 -0
  438. package/dist/composition/tool-source/definition.js.map +1 -0
  439. package/dist/composition/tool-source/snapshot.js +2 -0
  440. package/dist/composition/tool-source/snapshot.js.map +1 -0
  441. package/dist/contract/adapter.d.ts +91 -0
  442. package/dist/contract/adapter.d.ts.map +1 -0
  443. package/dist/contract/adapter.js +2 -0
  444. package/dist/contract/adapter.js.map +1 -0
  445. package/dist/contract/call-config.d.ts +36 -0
  446. package/dist/contract/call-config.d.ts.map +1 -0
  447. package/dist/contract/call-config.js +2 -0
  448. package/dist/contract/call-config.js.map +1 -0
  449. package/dist/contract/generate-options.d.ts +41 -0
  450. package/dist/contract/generate-options.d.ts.map +1 -0
  451. package/dist/contract/model-info.d.ts +99 -0
  452. package/dist/contract/model-info.d.ts.map +1 -0
  453. package/dist/contract/output-format.d.ts +18 -0
  454. package/dist/contract/output-format.d.ts.map +1 -0
  455. package/dist/contract/retry-policy.d.ts +104 -0
  456. package/dist/contract/retry-policy.d.ts.map +1 -0
  457. package/dist/contract/retry-policy.js +2 -0
  458. package/dist/contract/retry-policy.js.map +1 -0
  459. package/dist/contract/tool.d.ts +65 -0
  460. package/dist/contract/tool.d.ts.map +1 -0
  461. package/dist/contract/tool.js +2 -0
  462. package/dist/contract/tool.js.map +1 -0
  463. package/dist/errors/agent-sdk-error.d.ts +88 -0
  464. package/dist/errors/agent-sdk-error.d.ts.map +1 -0
  465. package/dist/errors/agent-sdk-error.js +2 -0
  466. package/dist/errors/agent-sdk-error.js.map +1 -0
  467. package/dist/errors/capability-identity.d.ts +10 -0
  468. package/dist/errors/capability-identity.d.ts.map +1 -0
  469. package/dist/errors/capability-identity.js +2 -0
  470. package/dist/errors/capability-identity.js.map +1 -0
  471. package/dist/errors/failure.d.ts +33 -0
  472. package/dist/errors/failure.d.ts.map +1 -0
  473. package/dist/errors/failure.js +2 -0
  474. package/dist/errors/failure.js.map +1 -0
  475. package/dist/errors/model-error.d.ts +83 -0
  476. package/dist/errors/model-error.d.ts.map +1 -0
  477. package/dist/errors/model-error.js +2 -0
  478. package/dist/errors/model-error.js.map +1 -0
  479. package/dist/http/api-key.d.ts +47 -0
  480. package/dist/http/api-key.d.ts.map +1 -0
  481. package/dist/http/api-key.js +2 -0
  482. package/dist/http/api-key.js.map +1 -0
  483. package/dist/http/attribution.d.ts +51 -0
  484. package/dist/http/attribution.d.ts.map +1 -0
  485. package/dist/http/attribution.js +2 -0
  486. package/dist/http/attribution.js.map +1 -0
  487. package/dist/index.d.ts +70 -0
  488. package/dist/index.js +1 -0
  489. package/dist/logging/types.d.ts +53 -0
  490. package/dist/logging/types.d.ts.map +1 -0
  491. package/dist/logging/types.js +2 -0
  492. package/dist/logging/types.js.map +1 -0
  493. package/dist/memory.d.ts +10 -0
  494. package/dist/memory.js +1 -0
  495. package/dist/message/content.d.ts +125 -0
  496. package/dist/message/content.d.ts.map +1 -0
  497. package/dist/message/message.d.ts +154 -0
  498. package/dist/message/message.d.ts.map +1 -0
  499. package/dist/message/message.js +2 -0
  500. package/dist/message/message.js.map +1 -0
  501. package/dist/message/projection.d.ts +34 -0
  502. package/dist/message/projection.d.ts.map +1 -0
  503. package/dist/message/projection.js +2 -0
  504. package/dist/message/projection.js.map +1 -0
  505. package/dist/observability/bus.d.ts +7 -0
  506. package/dist/observability/bus.d.ts.map +1 -0
  507. package/dist/observability/bus.js +2 -0
  508. package/dist/observability/bus.js.map +1 -0
  509. package/dist/observability/exporters.d.ts +39 -0
  510. package/dist/observability/exporters.d.ts.map +1 -0
  511. package/dist/observability/exporters.js +2 -0
  512. package/dist/observability/exporters.js.map +1 -0
  513. package/dist/observability/logger.js +2 -0
  514. package/dist/observability/logger.js.map +1 -0
  515. package/dist/observability/projections.d.ts +12 -0
  516. package/dist/observability/projections.d.ts.map +1 -0
  517. package/dist/observability/projections.js +2 -0
  518. package/dist/observability/projections.js.map +1 -0
  519. package/dist/observability/types.d.ts +103 -0
  520. package/dist/observability/types.d.ts.map +1 -0
  521. package/dist/observability.d.ts +20 -0
  522. package/dist/observability.js +1 -0
  523. package/dist/observation/boundaries.js +2 -0
  524. package/dist/observation/boundaries.js.map +1 -0
  525. package/dist/observation/context.d.ts +39 -0
  526. package/dist/observation/context.d.ts.map +1 -0
  527. package/dist/observation/context.js +2 -0
  528. package/dist/observation/context.js.map +1 -0
  529. package/dist/observation/event.d.ts +50 -0
  530. package/dist/observation/event.d.ts.map +1 -0
  531. package/dist/observation/event.js +2 -0
  532. package/dist/observation/event.js.map +1 -0
  533. package/dist/observation/port.d.ts +56 -0
  534. package/dist/observation/port.d.ts.map +1 -0
  535. package/dist/observation/port.js +2 -0
  536. package/dist/observation/port.js.map +1 -0
  537. package/dist/observation/privacy.js +2 -0
  538. package/dist/observation/privacy.js.map +1 -0
  539. package/dist/observation/report.d.ts +117 -0
  540. package/dist/observation/report.d.ts.map +1 -0
  541. package/dist/observation/report.js +2 -0
  542. package/dist/observation/report.js.map +1 -0
  543. package/dist/observation/telemetry-types.d.ts +29 -0
  544. package/dist/observation/telemetry-types.d.ts.map +1 -0
  545. package/dist/observation/usage.d.ts +52 -0
  546. package/dist/observation/usage.d.ts.map +1 -0
  547. package/dist/observation/usage.js +2 -0
  548. package/dist/observation/usage.js.map +1 -0
  549. package/dist/platform/adapter.js +2 -0
  550. package/dist/platform/adapter.js.map +1 -0
  551. package/dist/platform/capability-operation.js +2 -0
  552. package/dist/platform/capability-operation.js.map +1 -0
  553. package/dist/platform/config.js +2 -0
  554. package/dist/platform/config.js.map +1 -0
  555. package/dist/platform/logger-platform.js +2 -0
  556. package/dist/platform/logger-platform.js.map +1 -0
  557. package/dist/platform/resources.js +2 -0
  558. package/dist/platform/resources.js.map +1 -0
  559. package/dist/plugin/provider-plugin.d.ts +37 -0
  560. package/dist/plugin/provider-plugin.d.ts.map +1 -0
  561. package/dist/plugin/provider-plugin.js +2 -0
  562. package/dist/plugin/provider-plugin.js.map +1 -0
  563. package/dist/primitives/brand.d.ts +61 -0
  564. package/dist/primitives/brand.d.ts.map +1 -0
  565. package/dist/primitives/brand.js +2 -0
  566. package/dist/primitives/brand.js.map +1 -0
  567. package/dist/primitives/freeze.d.ts +20 -0
  568. package/dist/primitives/freeze.d.ts.map +1 -0
  569. package/dist/primitives/freeze.js +2 -0
  570. package/dist/primitives/freeze.js.map +1 -0
  571. package/dist/primitives/json-snapshot.js +2 -0
  572. package/dist/primitives/json-snapshot.js.map +1 -0
  573. package/dist/primitives/json.d.ts +32 -0
  574. package/dist/primitives/json.d.ts.map +1 -0
  575. package/dist/primitives/json.js +2 -0
  576. package/dist/primitives/json.js.map +1 -0
  577. package/dist/primitives/never.d.ts +22 -0
  578. package/dist/primitives/never.d.ts.map +1 -0
  579. package/dist/primitives/never.js +2 -0
  580. package/dist/primitives/never.js.map +1 -0
  581. package/dist/primitives/snapshot.d.ts +10 -0
  582. package/dist/primitives/snapshot.d.ts.map +1 -0
  583. package/dist/primitives/snapshot.js +2 -0
  584. package/dist/primitives/snapshot.js.map +1 -0
  585. package/dist/primitives/version.d.ts +6 -0
  586. package/dist/primitives/version.d.ts.map +1 -0
  587. package/dist/primitives/version.js +2 -0
  588. package/dist/primitives/version.js.map +1 -0
  589. package/dist/provider.d.ts +19 -0
  590. package/dist/provider.js +1 -0
  591. package/dist/runtime/model-call-handle.js +2 -0
  592. package/dist/runtime/model-call-handle.js.map +1 -0
  593. package/dist/runtime/model-metadata.js +2 -0
  594. package/dist/runtime/model-metadata.js.map +1 -0
  595. package/dist/runtime/model-stream.js +2 -0
  596. package/dist/runtime/model-stream.js.map +1 -0
  597. package/dist/runtime/registry.d.ts +171 -0
  598. package/dist/runtime/registry.d.ts.map +1 -0
  599. package/dist/runtime/registry.js +2 -0
  600. package/dist/runtime/registry.js.map +1 -0
  601. package/dist/runtime/with-retry.d.ts +45 -0
  602. package/dist/runtime/with-retry.d.ts.map +1 -0
  603. package/dist/runtime/with-retry.js +2 -0
  604. package/dist/runtime/with-retry.js.map +1 -0
  605. package/dist/skills.d.ts +8 -0
  606. package/dist/skills.js +1 -0
  607. package/dist/stream/assembler.d.ts +86 -0
  608. package/dist/stream/assembler.d.ts.map +1 -0
  609. package/dist/stream/assembler.js +2 -0
  610. package/dist/stream/assembler.js.map +1 -0
  611. package/dist/stream/chunk.d.ts +135 -0
  612. package/dist/stream/chunk.d.ts.map +1 -0
  613. package/dist/stream/idle-timeout.d.ts +30 -0
  614. package/dist/stream/idle-timeout.d.ts.map +1 -0
  615. package/dist/stream/idle-timeout.js +2 -0
  616. package/dist/stream/idle-timeout.js.map +1 -0
  617. package/dist/support-safe/error.d.ts +29 -0
  618. package/dist/support-safe/error.d.ts.map +1 -0
  619. package/dist/support-safe/error.js +2 -0
  620. package/dist/support-safe/error.js.map +1 -0
  621. package/dist/tools.d.ts +15 -0
  622. package/dist/tools.js +1 -0
  623. package/package.json +96 -0
@@ -0,0 +1,2 @@
1
+ import{deepFreeze as e}from"../../primitives/freeze.js";import{OBSERVATION_ERROR_CODES as t}from"../../observation/report.js";import{addUsageCounters as n}from"../../observation/usage.js";import{accountingError as r}from"./common.js";const i=[`inputTokens`,`outputTokens`,`totalTokens`,`cacheReadTokens`,`cacheWriteTokens`,`reasoningTokens`];function a(n,i){let a={logicalCalls:n.length,attempts:n.reduce((e,t)=>e+t.attempts.length,0),complete:n.filter(e=>e.coverage===`complete`).length,partial:n.filter(e=>e.coverage===`partial`).length,estimated:n.filter(e=>e.coverage===`estimated`).length,missing:n.filter(e=>e.coverage===`missing`).length,notApplicable:n.filter(e=>e.coverage===`not-applicable`).length,possiblyBilledAttemptsWithoutUsage:n.reduce((e,t)=>p(e,t.possiblyBilledAttemptsWithoutUsage).value,0)};if(n.length===0)return e({reported:{inputTokens:0,outputTokens:0,totalTokens:0},coverage:a,authoritative:!0});let o=u(n.map(e=>e.reported),i),s=n.flatMap(e=>e.estimated===void 0?[]:[e.estimated]),l=s.length===0?void 0:u(s,i),d;for(let e of n){let n;for(let a of e.attempts){if(a.dispatchState===`not-sent`)continue;let e=c({...a,authoritative:a.coverage===`complete`});if(e===void 0)continue;let o=p(n??0,e);n=o.value,o.overflow&&i.push(r(`attempt usage budget saturated at Number.MAX_SAFE_INTEGER`,t.USAGE_COUNTER_OVERFLOW))}let a=c(e),o=a===void 0?n:Math.max(a,n??0);if(o===void 0)continue;let s=p(d??0,o);d=s.value,s.overflow&&i.push(r(`usage budget saturated at Number.MAX_SAFE_INTEGER`,t.USAGE_COUNTER_OVERFLOW))}let f=n.every(e=>e.authoritative)&&!i.some(e=>e.code===t.USAGE_COUNTER_OVERFLOW||e.code===t.USAGE_INVALID);return e({reported:o,...l===void 0?{}:{estimated:l},...d===void 0?{}:{budgetTokens:d},coverage:a,authoritative:f})}function o(e){return a(e,[])}function s(e){if(!e.authoritative)return;let t=e.reported.inputTokens,n=e.reported.outputTokens;if(t!==void 0&&n!==void 0)return Object.freeze({inputTokens:t,outputTokens:n,...e.reported.totalTokens===void 0?{}:{totalTokens:e.reported.totalTokens},...e.reported.cacheReadTokens===void 0?{}:{cacheReadTokens:e.reported.cacheReadTokens},...e.reported.cacheWriteTokens===void 0?{}:{cacheWriteTokens:e.reported.cacheWriteTokens},...e.reported.reasoningTokens===void 0?{}:{reasoningTokens:e.reported.reasoningTokens}})}function c(e){if(e.budgetTokens!==void 0)return e.budgetTokens;if(e.authoritative)return e.reported.totalTokens??d(e.reported);let t=d(Object.freeze({...l(e,`inputTokens`),...l(e,`cacheReadTokens`),...l(e,`cacheWriteTokens`),...l(e,`outputTokens`)}));return t===void 0?e.reported.totalTokens??e.estimated?.totalTokens:Math.max(t,e.reported.totalTokens??e.estimated?.totalTokens??0)}function l(e,t){let n=e.reported[t]??e.estimated?.[t];return n===void 0?{}:{[t]:n}}function u(e,i){let a=n(e);return a.overflow&&i.push(r(`usage aggregation saturated at Number.MAX_SAFE_INTEGER`,t.USAGE_COUNTER_OVERFLOW)),a.counters}function d(e){let t=[e.inputTokens,e.cacheReadTokens,e.cacheWriteTokens,e.outputTokens];if(t.every(e=>e===void 0))return;let n=0;for(let e of t)n=p(n,e??0).value;return n}function f(e,t){let n={};for(let r of i)t[r]===void 0&&e[r]!==void 0&&(n[r]=e[r]);return Object.freeze({...n})}function p(e,t){let n=e+t;return Number.isSafeInteger(n)?{value:n,overflow:!1}:{value:2**53-1,overflow:!0}}export{i as COUNTER_KEYS,u as aggregateCounterSets,a as aggregateUsage,s as authoritativeTokenUsage,c as budgetTokenTotal,l as counterValue,d as disjointTotal,f as missingCounters,p as saturating,o as summarizeModelCallUsage};
2
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","names":[],"sources":["../../../src/agent/accounting/usage.ts"],"sourcesContent":["import {\n OBSERVATION_ERROR_CODES, addUsageCounters, type ModelCallReport, type SafeErrorRecord,\n type UsageCounters,\n} from '../../observation/index.ts'\nimport { deepFreeze } from '../../primitives/index.ts'\nimport type { RunUsageReport } from './report.ts'\nimport type { TokenUsage } from '../../stream/index.ts'\nimport { accountingError } from './common.ts'\n\nexport const COUNTER_KEYS = [\n 'inputTokens', 'outputTokens', 'totalTokens', 'cacheReadTokens',\n 'cacheWriteTokens', 'reasoningTokens',\n] as const satisfies readonly (keyof UsageCounters)[]\n\nexport function aggregateUsage(reports: readonly ModelCallReport[], errors: SafeErrorRecord[]): RunUsageReport {\n const coverage = {\n logicalCalls: reports.length,\n attempts: reports.reduce((total, report) => total + report.attempts.length, 0),\n complete: reports.filter(report => report.coverage === 'complete').length,\n partial: reports.filter(report => report.coverage === 'partial').length,\n estimated: reports.filter(report => report.coverage === 'estimated').length,\n missing: reports.filter(report => report.coverage === 'missing').length,\n notApplicable: reports.filter(report => report.coverage === 'not-applicable').length,\n possiblyBilledAttemptsWithoutUsage: reports.reduce(\n (total, report) => saturating(total, report.possiblyBilledAttemptsWithoutUsage).value,\n 0,\n ),\n }\n if (reports.length === 0) {\n return deepFreeze({\n reported: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },\n coverage,\n authoritative: true,\n })\n }\n const reported = aggregateCounterSets(reports.map(report => report.reported), errors)\n const estimatedValues = reports.flatMap(report => report.estimated === undefined ? [] : [report.estimated])\n const estimated = estimatedValues.length === 0 ? undefined : aggregateCounterSets(estimatedValues, errors)\n let budgetTokens: number | undefined\n for (const report of reports) {\n // Aggregate counters can omit incomparable totals. The attempt evidence\n // still owns those known costs, without charging call + attempts twice.\n let attemptTokens: number | undefined\n for (const attempt of report.attempts) {\n if (attempt.dispatchState === 'not-sent') continue\n const tokens = budgetTokenTotal({ ...attempt, authoritative: attempt.coverage === 'complete' })\n if (tokens === undefined) continue\n const sum = saturating(attemptTokens ?? 0, tokens)\n attemptTokens = sum.value\n if (sum.overflow) errors.push(accountingError(\n 'attempt usage budget saturated at Number.MAX_SAFE_INTEGER',\n OBSERVATION_ERROR_CODES.USAGE_COUNTER_OVERFLOW,\n ))\n }\n const logicalTokens = budgetTokenTotal(report)\n const contribution = logicalTokens === undefined ? attemptTokens\n : Math.max(logicalTokens, attemptTokens ?? 0)\n if (contribution === undefined) continue\n const sum = saturating(budgetTokens ?? 0, contribution)\n budgetTokens = sum.value\n if (sum.overflow) errors.push(accountingError(\n 'usage budget saturated at Number.MAX_SAFE_INTEGER',\n OBSERVATION_ERROR_CODES.USAGE_COUNTER_OVERFLOW,\n ))\n }\n const authoritative = reports.every(report => report.authoritative)\n && !errors.some(error => error.code === OBSERVATION_ERROR_CODES.USAGE_COUNTER_OVERFLOW\n || error.code === OBSERVATION_ERROR_CODES.USAGE_INVALID)\n return deepFreeze({\n reported,\n ...(estimated === undefined ? {} : { estimated }),\n ...(budgetTokens === undefined ? {} : { budgetTokens }),\n coverage,\n authoritative,\n })\n}\n\n/** Deterministic public projection used by turn outcomes and the canonical ledger. */\nexport function summarizeModelCallUsage(reports: readonly ModelCallReport[]): RunUsageReport {\n return aggregateUsage(reports, [])\n}\n\n/** Legacy exact usage exists only when every logical call is authoritative. */\nexport function authoritativeTokenUsage(report: RunUsageReport): TokenUsage | undefined {\n if (!report.authoritative) return undefined\n const inputTokens = report.reported.inputTokens\n const outputTokens = report.reported.outputTokens\n if (inputTokens === undefined || outputTokens === undefined) return undefined\n return Object.freeze({\n inputTokens,\n outputTokens,\n ...(report.reported.totalTokens === undefined ? {} : { totalTokens: report.reported.totalTokens }),\n ...(report.reported.cacheReadTokens === undefined ? {} : { cacheReadTokens: report.reported.cacheReadTokens }),\n ...(report.reported.cacheWriteTokens === undefined ? {} : { cacheWriteTokens: report.reported.cacheWriteTokens }),\n ...(report.reported.reasoningTokens === undefined ? {} : { reasoningTokens: report.reported.reasoningTokens }),\n })\n}\n\n/** Budget projection: reported buckets plus estimates only where reporting is absent. */\nexport function budgetTokenTotal(report: Pick<RunUsageReport, 'reported' | 'estimated' | 'authoritative' | 'budgetTokens'>): number | undefined {\n if (report.budgetTokens !== undefined) return report.budgetTokens\n if (report.authoritative) return report.reported.totalTokens ?? disjointTotal(report.reported)\n const combined: UsageCounters = Object.freeze({\n ...counterValue(report, 'inputTokens'),\n ...counterValue(report, 'cacheReadTokens'),\n ...counterValue(report, 'cacheWriteTokens'),\n ...counterValue(report, 'outputTokens'),\n })\n const bucketTotal = disjointTotal(combined)\n if (bucketTotal !== undefined) return Math.max(\n bucketTotal, report.reported.totalTokens ?? report.estimated?.totalTokens ?? 0,\n )\n return report.reported.totalTokens ?? report.estimated?.totalTokens\n}\n\nexport function counterValue(\n report: Pick<RunUsageReport, 'reported' | 'estimated'>,\n key: 'inputTokens' | 'cacheReadTokens' | 'cacheWriteTokens' | 'outputTokens',\n): Partial<Record<typeof key, number>> {\n const value = report.reported[key] ?? report.estimated?.[key]\n return value === undefined ? {} : { [key]: value }\n}\n\nexport function aggregateCounterSets(values: readonly UsageCounters[], errors: SafeErrorRecord[]): UsageCounters {\n // A prior aggregation may contain input/output from different subsets.\n // Only the provider normalization boundary may derive an exact total.\n const result = addUsageCounters(values)\n if (result.overflow) errors.push(accountingError(\n 'usage aggregation saturated at Number.MAX_SAFE_INTEGER',\n OBSERVATION_ERROR_CODES.USAGE_COUNTER_OVERFLOW,\n ))\n return result.counters\n}\n\nexport function disjointTotal(value: UsageCounters): number | undefined {\n const parts = [value.inputTokens, value.cacheReadTokens, value.cacheWriteTokens, value.outputTokens]\n if (parts.every(part => part === undefined)) return undefined\n let total = 0\n for (const part of parts) total = saturating(total, part ?? 0).value\n return total\n}\n\nexport function missingCounters(estimated: UsageCounters, reported: UsageCounters): UsageCounters {\n const output: Partial<Record<keyof UsageCounters, number>> = {}\n for (const key of COUNTER_KEYS) {\n if (reported[key] === undefined && estimated[key] !== undefined) output[key] = estimated[key]\n }\n return Object.freeze({ ...output })\n}\n\nexport function saturating(left: number, right: number): { value: number; overflow: boolean } {\n const total = left + right\n return !Number.isSafeInteger(total)\n ? { value: Number.MAX_SAFE_INTEGER, overflow: true }\n : { value: total, overflow: false }\n}\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ContextSection } from "./types.js";
2
+ //#region src/agent/context/section.d.ts
3
+ declare const CONTEXT_SECTION_ID_PATTERN: RegExp;
4
+ declare const CONTEXT_SECTION_INVALID = "CONTEXT_SECTION_INVALID";
5
+ /** Ceiling for one section's rendered text. A section budgets its own content below this. */
6
+ declare const MAX_CONTEXT_SECTION_TEXT_BYTES = 262144;
7
+ /**
8
+ * Capture one section after checking the parts the loop depends on.
9
+ * @param input - the authored section.
10
+ * @returns a frozen section with its `resolve` bound to the authored object.
11
+ */
12
+ declare function defineContextSection(input: ContextSection): ContextSection;
13
+ //#endregion
14
+ export { CONTEXT_SECTION_ID_PATTERN, CONTEXT_SECTION_INVALID, MAX_CONTEXT_SECTION_TEXT_BYTES, defineContextSection };
15
+ //# sourceMappingURL=section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.d.ts","names":[],"sources":["../../../src/agent/context/section.ts"],"mappings":";;cAea,4BAA0B;cAC1B;;cAEA;;;;;;iBAaG,qBAAqB,OAAO,iBAAiB"}
@@ -0,0 +1,2 @@
1
+ import{AgentSdkError as e}from"../../errors/agent-sdk-error.js";import{createUserMessage as t}from"../../message/message.js";const n=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,r=`CONTEXT_SECTION_INVALID`,i=262144,a=`context-section:`;function o(e){return new TextEncoder().encode(e).byteLength}function s(t){if(typeof t.id!=`string`||!n.test(t.id))throw new e(`context section id must be kebab-case, received '${String(t.id)}'`,r);if(typeof t.resolve!=`function`)throw new e(`context section '${t.id}' must supply resolve()`,r);let i=t.resolve.bind(t);return Object.freeze({id:t.id,resolve:i,...t.retractionText===void 0?{}:{retractionText:t.retractionText}})}function c(t){if(t===void 0)return;let n=new Set,i=t.map(t=>{let i=s(t);if(n.has(i.id))throw new e(`duplicate context section '${i.id}'`,r);return n.add(i.id),i});return Object.freeze(i)}function l(e){return e.retractionText??`The previously provided '${e.id}' context no longer applies.`}var u=class{sections;history;logger;guard;maxTextBytes;scope;live=new Map;adopted=new Set;constructor(e){this.sections=e.sections,this.history=e.history,this.logger=e.logger,this.guard=e.guard??(e=>e),this.maxTextBytes=e.maxTextBytes??262144,this.scope=Object.freeze(e.scope??{agentId:void 0,conversationId:void 0})}async reconcile(e,t,n){for(let r of this.sections){if(n.aborted)return;let i=this.resync(r.id),a={signal:n,step:e,touches:t,scope:this.scope,current:i===void 0||i.retracted||i.revision===void 0?void 0:{revision:i.revision,text:i.text}},s;try{s=await this.guard(Promise.resolve().then(()=>r.resolve(a)),`context-section:${r.id}`)}catch(e){this.logger?.warn(`context section resolve failed`,{section:r.id,error:e instanceof Error?e.message:String(e)});continue}if(s===void 0){i!==void 0&&!i.retracted&&this.write(r,l(r),void 0,!0,i.seq);continue}if(typeof s.revision!=`string`||typeof s.text!=`string`){this.logger?.warn(`context section returned an invalid state`,{section:r.id});continue}if(i!==void 0&&!i.retracted){if(i.revision===s.revision)continue;if(i.text===s.text){this.live.set(r.id,{...i,revision:s.revision});continue}}let c=o(s.text);if(c>this.maxTextBytes){this.logger?.warn(`context section exceeded its byte ceiling`,{section:r.id,bytes:c,maxTextBytes:this.maxTextBytes});continue}this.write(r,s.text,s.revision,!1,i?.seq)}}resync(e){let t=this.live.get(e),n=this.history.generation();if(this.adopted.has(e)&&t?.generation===n)return t;this.adopted.add(e);let r=`${a}${e}`,i;for(let e of this.history.surface()){if(e.message.source.kind!==`app`||e.message.source.producer!==r)continue;let a=e.message.content.flatMap(e=>e.type===`text`?[e.text]:[]).join(``);i={seq:e.seq,text:a,revision:t?.seq===e.seq?t.revision:void 0,retracted:t?.seq===e.seq&&t.retracted,generation:n}}return i===void 0?this.live.delete(e):this.live.set(e,i),i}write(e,n,r,i,o){let s=t({source:{kind:`app`,producer:`${a}${e.id}`},content:[{type:`text`,text:n}]});if(o!==void 0)try{let t=this.history.append({kind:`user`,message:s},{op:`replace`,from:o,to:o,targets:[o]}).seq;this.live.set(e.id,{seq:t,text:n,revision:r,retracted:i,generation:this.history.generation()});return}catch{this.live.delete(e.id)}let c=this.history.append({kind:`user`,message:s}).seq;this.live.set(e.id,{seq:c,text:n,revision:r,retracted:i,generation:this.history.generation()})}};export{n as CONTEXT_SECTION_ID_PATTERN,r as CONTEXT_SECTION_INVALID,a as CONTEXT_SECTION_PRODUCER_PREFIX,u as ContextSectionRuntime,i as MAX_CONTEXT_SECTION_TEXT_BYTES,c as captureContextSections,s as defineContextSection};
2
+ //# sourceMappingURL=section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section.js","names":[],"sources":["../../../src/agent/context/section.ts"],"sourcesContent":["/**\n * Validation and the turn-scoped reconciler for {@link ContextSection}.\n *\n * @module ai-agent-sdk/core/agent/context/section\n */\n\nimport { createUserMessage } from '../../message/index.ts'\nimport { AgentSdkError } from '../../errors/agent-sdk-error.ts'\nimport type { SdkLogger } from '../../logging/types.ts'\nimport type { History } from '../history/history.ts'\nimport type {\n ContextSection, ContextSectionResolveInput, ContextSectionScope, ContextSectionState,\n ContextToolTouch,\n} from './types.ts'\n\nexport const CONTEXT_SECTION_ID_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/\nexport const CONTEXT_SECTION_INVALID = 'CONTEXT_SECTION_INVALID'\n/** Ceiling for one section's rendered text. A section budgets its own content below this. */\nexport const MAX_CONTEXT_SECTION_TEXT_BYTES = 262_144\n/** Message-source producer prefix that identifies a section's own surface node. */\nexport const CONTEXT_SECTION_PRODUCER_PREFIX = 'context-section:'\n\nfunction byteLength(value: string): number {\n return new TextEncoder().encode(value).byteLength\n}\n\n/**\n * Capture one section after checking the parts the loop depends on.\n * @param input - the authored section.\n * @returns a frozen section with its `resolve` bound to the authored object.\n */\nexport function defineContextSection(input: ContextSection): ContextSection {\n if (typeof input.id !== 'string' || !CONTEXT_SECTION_ID_PATTERN.test(input.id)) {\n throw new AgentSdkError(\n `context section id must be kebab-case, received '${String(input.id)}'`,\n CONTEXT_SECTION_INVALID,\n )\n }\n if (typeof input.resolve !== 'function') {\n throw new AgentSdkError(`context section '${input.id}' must supply resolve()`, CONTEXT_SECTION_INVALID)\n }\n const resolve = input.resolve.bind(input)\n return Object.freeze({\n id: input.id,\n resolve,\n ...input.retractionText === undefined ? {} : { retractionText: input.retractionText },\n })\n}\n\n/**\n * Reject duplicate ids once, at assembly, rather than per step.\n * @param sections - authored sections in surface order.\n * @returns the frozen, validated list.\n */\nexport function captureContextSections(\n sections: readonly ContextSection[] | undefined,\n): readonly ContextSection[] | undefined {\n if (sections === undefined) return undefined\n const seen = new Set<string>()\n const captured = sections.map(section => {\n const validated = defineContextSection(section)\n if (seen.has(validated.id)) {\n throw new AgentSdkError(`duplicate context section '${validated.id}'`, CONTEXT_SECTION_INVALID)\n }\n seen.add(validated.id)\n return validated\n })\n return Object.freeze(captured)\n}\n\nfunction retraction(section: ContextSection): string {\n return section.retractionText\n ?? `The previously provided '${section.id}' context no longer applies.`\n}\n\n/**\n * What one section currently has on the model surface.\n *\n * `revision` is absent for a node adopted from an earlier turn: the text is\n * known, its producer's revision key is not, so the first comparison of that\n * turn falls back to comparing the text itself.\n */\ninterface LiveNode {\n readonly seq: number\n readonly text: string\n readonly revision: string | undefined\n /** True once the node holds a retraction notice rather than section content. */\n readonly retracted: boolean\n /** History replacement generation when this node was written or adopted. */\n readonly generation: number\n}\n\nexport interface ContextSectionRuntimeOptions {\n readonly sections: readonly ContextSection[]\n readonly history: History\n readonly logger?: SdkLogger\n /** Bounds one resolve the same way a turn hook is bounded. */\n readonly guard?: <T>(pending: Promise<T>, name: string) => Promise<T>\n readonly maxTextBytes?: number\n /** Conversation identity handed to every resolve. */\n readonly scope?: ContextSectionScope\n}\n\n/**\n * Keeps each section's single live surface node in step with its content.\n *\n * A failing or over-budget section is skipped for that step with its previous\n * node intact: assembled context is advisory, and losing it must never cost the\n * turn. Every write goes through the same replace-in-place path the tool-budget\n * notice uses, so a section never accumulates stale copies of itself.\n *\n * A runtime lives for one turn, but the surface does not. Before deciding\n * anything, a section whose node may have moved — the first step of a new turn,\n * or any step after a compaction shadowed part of the surface — re-reads the\n * live surface and adopts whatever node it still owns there. Without that, a\n * second turn would append a duplicate copy of context the model can already\n * read, and a compacted-away node would never be rewritten because its revision\n * still matched.\n */\nexport class ContextSectionRuntime {\n private readonly sections: readonly ContextSection[]\n private readonly history: History\n private readonly logger: SdkLogger | undefined\n private readonly guard: <T>(pending: Promise<T>, name: string) => Promise<T>\n private readonly maxTextBytes: number\n private readonly scope: ContextSectionScope\n private readonly live = new Map<string, LiveNode>()\n private readonly adopted = new Set<string>()\n\n constructor(options: ContextSectionRuntimeOptions) {\n this.sections = options.sections\n this.history = options.history\n this.logger = options.logger\n this.guard = options.guard ?? (pending => pending)\n this.maxTextBytes = options.maxTextBytes ?? MAX_CONTEXT_SECTION_TEXT_BYTES\n this.scope = Object.freeze(options.scope ?? { agentId: undefined, conversationId: undefined })\n }\n\n /**\n * Recompute every section and write only what changed.\n * @param step - 0 before the first model round, then one per completed step.\n * @param touches - tool calls committed since the previous reconcile.\n * @param signal - turn cancellation.\n */\n async reconcile(\n step: number,\n touches: readonly ContextToolTouch[],\n signal: AbortSignal,\n ): Promise<void> {\n for (const section of this.sections) {\n if (signal.aborted) return\n const node = this.resync(section.id)\n const input: ContextSectionResolveInput = {\n signal,\n step,\n touches,\n scope: this.scope,\n current: node === undefined || node.retracted || node.revision === undefined\n ? undefined\n : { revision: node.revision, text: node.text },\n }\n let next: ContextSectionState | undefined\n try {\n next = await this.guard(\n Promise.resolve().then(() => section.resolve(input)),\n `context-section:${section.id}`,\n )\n } catch (error: unknown) {\n // Advisory context. A section that throws keeps whatever it last wrote\n // rather than taking the turn down with it.\n this.logger?.warn('context section resolve failed', {\n section: section.id,\n error: error instanceof Error ? error.message : String(error),\n })\n continue\n }\n if (next === undefined) {\n // A section that stays retracted must not rewrite the notice on every\n // step; one notice replaces the content and then stands.\n if (node !== undefined && !node.retracted) {\n this.write(section, retraction(section), undefined, true, node.seq)\n }\n continue\n }\n if (typeof next.revision !== 'string' || typeof next.text !== 'string') {\n this.logger?.warn('context section returned an invalid state', { section: section.id })\n continue\n }\n if (node !== undefined && !node.retracted) {\n if (node.revision === next.revision) continue\n if (node.text === next.text) {\n // Same text under a new revision key — an adopted node, or a producer\n // that rekeyed identical content. Record the key; write nothing.\n this.live.set(section.id, { ...node, revision: next.revision })\n continue\n }\n }\n const bytes = byteLength(next.text)\n if (bytes > this.maxTextBytes) {\n this.logger?.warn('context section exceeded its byte ceiling', {\n section: section.id, bytes, maxTextBytes: this.maxTextBytes,\n })\n continue\n }\n this.write(section, next.text, next.revision, false, node?.seq)\n }\n }\n\n /**\n * Reconcile the tracked node against the surface the model actually reads.\n * @param id - the section's id.\n * @returns the live node, or undefined when the section owns none.\n */\n private resync(id: string): LiveNode | undefined {\n const tracked = this.live.get(id)\n const generation = this.history.generation()\n if (this.adopted.has(id) && tracked?.generation === generation) return tracked\n this.adopted.add(id)\n const producer = `${CONTEXT_SECTION_PRODUCER_PREFIX}${id}`\n // Last wins: a replace reinserts at the original position, so a section that\n // somehow owns two nodes keeps the newest and rewrites over it.\n let found: LiveNode | undefined\n for (const node of this.history.surface()) {\n if (node.message.source.kind !== 'app' || node.message.source.producer !== producer) continue\n const text = node.message.content\n .flatMap(block => block.type === 'text' ? [block.text] : [])\n .join('')\n found = {\n seq: node.seq,\n text,\n // A tracked revision survives only while the node it described is the\n // one still on the surface.\n revision: tracked?.seq === node.seq ? tracked.revision : undefined,\n retracted: tracked?.seq === node.seq ? tracked.retracted : false,\n generation,\n }\n }\n if (found === undefined) this.live.delete(id)\n else this.live.set(id, found)\n return found\n }\n\n private write(\n section: ContextSection,\n text: string,\n revision: string | undefined,\n retracted: boolean,\n previous: number | undefined,\n ): void {\n const message = createUserMessage({\n source: { kind: 'app', producer: `${CONTEXT_SECTION_PRODUCER_PREFIX}${section.id}` },\n content: [{ type: 'text', text }],\n })\n if (previous !== undefined) {\n // Replacing is best-effort for the same reason the budget notice is:\n // compaction can shadow the earlier node between steps, and a replace\n // whose target left the surface is rejected. Fall through to an append so\n // the model still reads the current content.\n try {\n const seq = this.history.append(\n { kind: 'user', message },\n { op: 'replace', from: previous, to: previous, targets: [previous] },\n ).seq\n this.live.set(section.id, { seq, text, revision, retracted, generation: this.history.generation() })\n return\n } catch {\n this.live.delete(section.id)\n }\n }\n const seq = this.history.append({ kind: 'user', message }).seq\n this.live.set(section.id, { seq, text, revision, retracted, generation: this.history.generation() })\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ //#region src/agent/context/types.d.ts
2
+ /**
3
+ * Turn-scoped model-visible context sections.
4
+ *
5
+ * A section owns at most one live node on the model surface and is recomputed
6
+ * before every model round. Unchanged sections cost nothing: the loop compares
7
+ * the returned {@link ContextSectionState.revision} against the live node and
8
+ * writes only on a difference. A changed section *replaces* its own node rather
9
+ * than appending beside it, so the model never reads two versions of the same
10
+ * context at once.
11
+ *
12
+ * Nothing here touches a filesystem, a clock, or a network. A section is a
13
+ * pure recompute callback; where its content comes from is the host's concern.
14
+ *
15
+ * @module ai-agent-sdk/core/agent/context/types
16
+ */
17
+ /** What one context section currently wants the model to read. */
18
+ interface ContextSectionState {
19
+ /**
20
+ * Change key for this content.
21
+ *
22
+ * Equal to the live node's revision means no rewrite and no token cost. Any
23
+ * other value replaces the live node. A content digest is the usual choice;
24
+ * a monotonic counter works when the producer already tracks versions.
25
+ */
26
+ readonly revision: string;
27
+ /** Exact model-facing text. The loop never trims, wraps, or rewrites it. */
28
+ readonly text: string;
29
+ }
30
+ /** One tool call committed since the previous resolve. */
31
+ interface ContextToolTouch {
32
+ readonly toolName: string;
33
+ /** Verbatim provider arguments; a section parses only what it recognizes. */
34
+ readonly rawArguments: string;
35
+ /** Whether the call ended in a tool failure. */
36
+ readonly failed: boolean;
37
+ }
38
+ interface ContextSectionResolveInput {
39
+ readonly signal: AbortSignal;
40
+ /** 0 before the first model round of the turn, then one per completed step. */
41
+ readonly step: number;
42
+ /** Tool calls committed since the previous resolve, in model order. */
43
+ readonly touches: readonly ContextToolTouch[];
44
+ /** The state currently on the model surface, when this section has one. */
45
+ readonly current: ContextSectionState | undefined;
46
+ /**
47
+ * Who is asking, so a section instance shared by several agents can keep its
48
+ * state apart.
49
+ *
50
+ * One section object is routinely mounted on a definition that many sessions
51
+ * instantiate — every member of a team, every worker cloned from a lead — and
52
+ * those sessions run concurrently. A section that accumulates anything across
53
+ * steps must key that state by this scope, or one agent's discoveries leak
54
+ * into another's context. Both fields are absent for a bare `runTurn` that
55
+ * was given no trace identity.
56
+ */
57
+ readonly scope: ContextSectionScope;
58
+ }
59
+ /** Stable identity of the conversation a resolve belongs to. */
60
+ interface ContextSectionScope {
61
+ readonly agentId: string | undefined;
62
+ readonly conversationId: string | undefined;
63
+ }
64
+ /**
65
+ * A recomputed block of model-visible context.
66
+ *
67
+ * ```ts
68
+ * const clock = defineContextSection({
69
+ * id: 'wall-clock',
70
+ * resolve() {
71
+ * const text = `Current time: ${new Date().toISOString()}`
72
+ * return { revision: text, text }
73
+ * },
74
+ * })
75
+ * ```
76
+ */
77
+ interface ContextSection {
78
+ /** Kebab-case identity, unique within one turn. */
79
+ readonly id: string;
80
+ /**
81
+ * Recompute this section.
82
+ *
83
+ * Return the same revision to leave the surface untouched, a new state to
84
+ * replace it, or `undefined` to retract the section entirely.
85
+ */
86
+ resolve(input: ContextSectionResolveInput): ContextSectionState | undefined | Promise<ContextSectionState | undefined>;
87
+ /**
88
+ * Replaces the live node when a section that had one retracts.
89
+ *
90
+ * The loop cannot delete a surface node, so a retraction becomes a short
91
+ * message saying the earlier text no longer applies. Defaults to a generic
92
+ * line naming the section id.
93
+ */
94
+ readonly retractionText?: string;
95
+ }
96
+ //#endregion
97
+ export { ContextSection, ContextSectionResolveInput, ContextSectionScope, ContextSectionState, ContextToolTouch };
98
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/agent/context/types.ts"],"mappings":";;;;;;;;;;;;;;;;;UAiBiB;;;;;;;;WAQN;;WAEA;;;UAIM;WACN;;WAEA;;WAEA;;UAGM;WACN,QAAQ;;WAER;;WAEA,kBAAkB;;WAElB,SAAS;;;;;;;;;;;;WAYT,OAAO;;;UAID;WACN;WACA;;;;;;;;;;;;;;;UAgBM;;WAEN;;;;;;;EAOT,QAAQ,OAAO,6BACb,kCAAkC,QAAQ;;;;;;;;WAQnC"}
@@ -0,0 +1,110 @@
1
+ import { ReasoningEffortId } from "../../primitives/brand.js";
2
+ import { NativeToolSchema, ToolChoice } from "../../contract/tool.js";
3
+ import { ModelOutputFormat } from "../../contract/output-format.js";
4
+ import { ToolDefinition } from "../tool/definition.js";
5
+ import { ContextSection } from "../context/types.js";
6
+ import { AgentMode } from "../mode/run-agent.js";
7
+ import { AgentCompactionConfig, AgentCompactionOptions } from "../memory/compaction-config.js";
8
+ import { AgentMemoryConfig, AgentMemoryConfigInput } from "../memory/memory.js";
9
+ import { SkillSource } from "../skill/definition.js";
10
+ import { AgentSkillOptions, ResolvedAgentSkillOptions } from "../skill/tools.js";
11
+ import { AgentResumeSessionOptions, AgentSessionOptions } from "./session/types.js";
12
+ import { AgentSession } from "./session.js";
13
+ //#region src/agent/define/definition.d.ts
14
+ interface AgentDefinitionInput {
15
+ /** Stable code-owned identity used by traces and catalogs. */
16
+ readonly id: string;
17
+ /** Human-readable display name; defaults to `id`. */
18
+ readonly name?: string;
19
+ readonly description?: string;
20
+ /** Provider route; defaults to `codex`. */
21
+ readonly provider?: string;
22
+ /** Provider model id; defaults to `gpt-5.6-luna`. */
23
+ readonly model?: string;
24
+ /**
25
+ * Provider reasoning effort. Omitted means no preference.
26
+ *
27
+ * An agent that never asked for a level should not be given one: the value
28
+ * is validated against the model's own ladder, so an invented default makes
29
+ * the agent unrunnable on every provider that declares no efforts — and
30
+ * silently overrides the provider's own default everywhere else.
31
+ */
32
+ readonly effort?: string;
33
+ /** Requested output budget; omission uses the selected model's declared default/cap. */
34
+ readonly maxTokens?: number;
35
+ /** The agent's stable system instructions. */
36
+ readonly instructions: string;
37
+ /** Execution policy; defaults to `basic`. */
38
+ readonly mode?: AgentMode;
39
+ /** Host-executed tools owned by this definition. */
40
+ readonly tools?: readonly ToolDefinition<any>[];
41
+ /** Provider-executed tools such as web search or image generation. */
42
+ readonly nativeTools?: readonly NativeToolSchema[];
43
+ /** Inline web skills and/or lazy providers such as filesystem discovery. */
44
+ readonly skills?: readonly SkillSource[];
45
+ /** Optional allowlist resolved across definition and per-session skill sources. */
46
+ readonly skillIds?: readonly string[];
47
+ /** Progressive-disclosure catalog and resource limits. */
48
+ readonly skillOptions?: AgentSkillOptions;
49
+ /**
50
+ * Model-visible context this agent always recomputes before a model round.
51
+ *
52
+ * Sections are platform-neutral callbacks. A filesystem-backed one (project
53
+ * instruction files, working-tree state) is built by a platform package and
54
+ * mounted here or per session.
55
+ */
56
+ readonly contextSections?: readonly ContextSection[];
57
+ readonly toolChoice?: ToolChoice;
58
+ /** Constrain visible model output to plain text or a named JSON Schema. */
59
+ readonly outputFormat?: ModelOutputFormat;
60
+ /** Maximum model iterations for one user turn; defaults to 16. */
61
+ /** Model steps per prompt; 'auto' continues without a fixed step ceiling. */
62
+ readonly maxTurns?: number | 'auto';
63
+ /** Maximum host tool calls for one user turn; defaults to 64. */
64
+ readonly maxToolCalls?: number;
65
+ /** Public progress narration policy; defaults to `concise`. */
66
+ readonly commentary?: 'auto' | 'concise' | 'off';
67
+ /** Durable task facts injected outside compactable conversation history. */
68
+ readonly memory?: AgentMemoryConfigInput;
69
+ /** Automatic context checkpointing; false disables it. Defaults to enabled. */
70
+ readonly compaction?: AgentCompactionOptions | false;
71
+ }
72
+ interface AgentDefinition {
73
+ readonly id: string;
74
+ readonly name: string;
75
+ readonly description: string | undefined;
76
+ readonly provider: string;
77
+ readonly model: string;
78
+ readonly effort: ReasoningEffortId | undefined;
79
+ readonly maxTokens: number | undefined;
80
+ readonly instructions: string;
81
+ readonly mode: AgentMode;
82
+ readonly tools: readonly ToolDefinition<any>[];
83
+ readonly nativeTools: readonly NativeToolSchema[];
84
+ readonly skills: readonly SkillSource[];
85
+ readonly skillIds: readonly string[] | undefined;
86
+ readonly skillOptions: ResolvedAgentSkillOptions;
87
+ readonly contextSections: readonly ContextSection[];
88
+ readonly toolChoice: ToolChoice | undefined;
89
+ readonly outputFormat: ModelOutputFormat | undefined;
90
+ readonly maxTurns: number | 'auto';
91
+ readonly maxToolCalls: number;
92
+ readonly commentary: 'auto' | 'concise' | 'off';
93
+ readonly memory: AgentMemoryConfig;
94
+ readonly compaction: AgentCompactionConfig | false;
95
+ }
96
+ interface DefinedAgent extends AgentDefinition {
97
+ /** Start an isolated, multi-turn conversation for this definition. */
98
+ createSession(options: AgentSessionOptions): AgentSession;
99
+ /** Resume a snapshot without manually hydrating history and memory. */
100
+ resumeSession(options: AgentResumeSessionOptions): AgentSession;
101
+ /** Derive a definition while preserving all unspecified settings. */
102
+ with(overrides: AgentDefinitionOverrides): DefinedAgent;
103
+ }
104
+ type AgentDefinitionOverrides = Partial<Omit<AgentDefinitionInput, 'id'>>;
105
+ type CloneAgentOverrides = AgentDefinitionOverrides & {
106
+ readonly id: string;
107
+ };
108
+ //#endregion
109
+ export { AgentDefinition, AgentDefinitionInput, AgentDefinitionOverrides, CloneAgentOverrides, DefinedAgent };
110
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","names":[],"sources":["../../../src/agent/define/definition.ts"],"mappings":";;;;;;;;;;;;;UAkCiB;;WAEN;;WAEA;WACA;;WAEA;;WAEA;;;;;;;;;WASA;;WAEA;;WAEA;;WAEA,OAAO;;WAEP,iBAAiB;;WAEjB,uBAAuB;;WAEvB,kBAAkB;;WAElB;;WAEA,eAAe;;;;;;;;WAQf,2BAA2B;WAC3B,aAAa;;WAEb,eAAe;;;WAGf;;WAEA;;WAEA;;WAEA,SAAS;;WAET,aAAa;;UAGP;WACN;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA,MAAM;WACN,gBAAgB;WAChB,sBAAsB;WACtB,iBAAiB;WACjB;WACA,cAAc;WACd,0BAA0B;WAC1B,YAAY;WACZ,cAAc;WACd;WACA;WACA;WACA,QAAQ;WACR,YAAY;;UAGN,qBAAqB;;EAEpC,cAAc,SAAS,sBAAsB;;EAE7C,cAAc,SAAS,4BAA4B;;EAEnD,KAAK,WAAW,2BAA2B;;KAGjC,2BAA2B,QAAQ,KAAK;KACxC,sBAAsB;WAAsC"}
@@ -0,0 +1,2 @@
1
+ import{ReasoningEffortId as e}from"../../primitives/brand.js";import{resolveMemoryConfig as t}from"../memory/memory.js";import{resolveCompactionConfig as n}from"../memory/compaction-config.js";import{validateSkillId as r,validateSkillSource as i}from"../skill/definition.js";import{SKILL_TOOL_NAMES as a,resolveSkillOptions as o}from"../skill/tools.js";import{captureContextSections as s}from"../context/section.js";import{AgentSession as c}from"./session.js";import{captureOutputFormat as l}from"./output-format.js";const u=/^[a-zA-Z][a-zA-Z0-9_-]*$/;var d=class{id;name;description;provider;model;effort;maxTokens;instructions;mode;tools;nativeTools;skills;skillIds;skillOptions;contextSections;toolChoice;outputFormat;maxTurns;maxToolCalls;commentary;memory;compaction;constructor(r){g(r),this.id=r.id,this.name=r.name??r.id,this.description=r.description,this.provider=r.provider??`codex`,this.model=r.model??`gpt-5.6-luna`,this.effort=r.effort===void 0?void 0:e(r.effort),this.maxTokens=r.maxTokens,this.instructions=r.instructions,this.mode=r.mode??`basic`,this.tools=Object.freeze([...r.tools??[]]),this.nativeTools=Object.freeze((r.nativeTools??[]).map(e=>Object.freeze({...e}))),this.skills=Object.freeze([...r.skills??[]]),this.skillIds=r.skillIds===void 0?void 0:Object.freeze([...r.skillIds]),this.skillOptions=o(r.skillOptions),this.contextSections=s(r.contextSections)??Object.freeze([]),this.toolChoice=r.toolChoice,this.outputFormat=l(r.outputFormat),this.maxTurns=r.maxTurns??16,this.maxToolCalls=r.maxToolCalls??64,this.commentary=r.commentary??`concise`,this.memory=t(r.memory),this.compaction=r.compaction!==!1&&n(r.compaction),Object.freeze(this)}createSession(e){return new c(this,e)}resumeSession(e){return c.fromSnapshot(this,e)}with(e){return f(m(this,e))}};function f(e){return new d(e)}function p(e,t){return f(m(e,t))}function m(e,t){let n=t.description??e.description,r=t.toolChoice??e.toolChoice,i=t.outputFormat??e.outputFormat,a=t.skillIds??e.skillIds,o=t.maxTokens??e.maxTokens;return{id:t.id??e.id,name:t.name??e.name,...n===void 0?{}:{description:n},provider:t.provider??e.provider,model:t.model??e.model,...(t.effort??e.effort)===void 0?{}:{effort:t.effort??e.effort},...o===void 0?{}:{maxTokens:o},instructions:t.instructions??e.instructions,mode:t.mode??e.mode,tools:t.tools??e.tools,nativeTools:t.nativeTools??e.nativeTools,skills:t.skills??e.skills,...a===void 0?{}:{skillIds:a},skillOptions:t.skillOptions??e.skillOptions,contextSections:t.contextSections??e.contextSections,...r===void 0?{}:{toolChoice:r},...i===void 0?{}:{outputFormat:i},maxTurns:t.maxTurns??e.maxTurns,maxToolCalls:t.maxToolCalls??e.maxToolCalls,commentary:t.commentary??e.commentary,memory:t.memory??e.memory,compaction:t.compaction??h(e.compaction)}}function h(e){return e!==!1&&{auto:e.auto,...e.maxInputTokens===void 0?{}:{maxInputTokens:e.maxInputTokens},thresholdRatio:e.thresholdRatio,...e.retainRatio===void 0?{}:{retainRatio:e.retainRatio},...e.retainTokens===void 0?{}:{retainTokens:e.retainTokens},...e.summarizationProvider===void 0?{}:{summarizationProvider:e.summarizationProvider},...e.summarizationModel===void 0?{}:{summarizationModel:e.summarizationModel},...e.summarizationEffort===void 0?{}:{summarizationEffort:e.summarizationEffort},maxSummaryTokens:e.maxSummaryTokens,compactionRetries:e.compactionRetries,maxOverflowRetries:e.maxOverflowRetries,maxSummaryInputChars:e.maxSummaryInputChars,maxSummaryRequestChars:e.maxSummaryRequestChars,maxSummaryRequestBytes:e.maxSummaryRequestBytes,maxSummaryResponseBytes:e.maxSummaryResponseBytes,maxSummaryStreamEvents:e.maxSummaryStreamEvents,summaryTimeoutMs:e.summaryTimeoutMs,teardownTimeoutMs:e.teardownTimeoutMs,maxToolResultChars:e.maxToolResultChars}}function g(e){if(!u.test(e.id))throw TypeError(`agent id must start with a letter and contain only letters, numbers, _ or -`);for(let[t,n]of[[`name`,e.name],[`description`,e.description],[`provider`,e.provider],[`model`,e.model],[`effort`,e.effort]])if(n!==void 0&&n.trim().length===0)throw TypeError(`agent ${t} must be a non-empty string`);if(e.instructions.trim().length===0)throw TypeError(`agent instructions must be a non-empty string`);if(e.maxTurns!==void 0&&e.maxTurns!==`auto`&&(!Number.isSafeInteger(e.maxTurns)||e.maxTurns<1))throw RangeError(`agent maxTurns must be a positive safe integer or 'auto'`);if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw RangeError(`agent maxTokens must be a positive safe integer`);if(e.maxToolCalls!==void 0&&(!Number.isInteger(e.maxToolCalls)||e.maxToolCalls<1))throw RangeError(`agent maxToolCalls must be a positive integer`);let t=new Set;for(let n of e.tools??[]){if(typeof n.name!=`string`||n.name.trim().length===0)throw TypeError(`agent host tools must have a non-empty name`);if(typeof n.description!=`string`||n.description.trim().length===0)throw TypeError(`agent host tool '${n.name}' must have a non-empty description`);if(typeof n.parameters!=`object`||n.parameters===null)throw TypeError(`agent host tool '${n.name}' must declare JSON Schema parameters`);if(typeof n.execute!=`function`)throw TypeError(`agent host tool '${n.name}' must implement execute()`);if(n.timeoutMs!==void 0&&(!Number.isFinite(n.timeoutMs)||n.timeoutMs<=0))throw RangeError(`agent host tool '${n.name}' must have a positive timeoutMs`);if(t.has(n.name))throw TypeError(`agent has duplicate host tool '${n.name}'`);t.add(n.name)}for(let n of e.nativeTools??[]){if(typeof n.name!=`string`||n.name.trim().length===0)throw TypeError(`agent native tools must have a non-empty name`);if(t.has(n.name))throw TypeError(`agent has duplicate tool '${n.name}'`);t.add(n.name)}if((e.skills?.length??0)>0||(e.skillIds?.length??0)>0){for(let e of a)if(t.has(e))throw TypeError(`agent tool '${e}' collides with the skill runtime`)}let n=new Set,o=new Set,s=new Set;for(let t of e.skillIds??[]){if(r(t,`agent skill`),s.has(t))throw TypeError(`agent has duplicate allowed skill '${t}'`);s.add(t)}for(let t of e.skills??[])if(i(t),t.kind===`skill`){if(n.has(t.id))throw TypeError(`agent has duplicate inline skill '${t.id}'`);n.add(t.id)}else{if(o.has(t.id))throw TypeError(`agent has duplicate skill provider '${t.id}'`);o.add(t.id)}}export{p as cloneAgent,f as defineAgent};
2
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","names":[],"sources":["../../../src/agent/define/definition.ts"],"sourcesContent":["/** Declarative, code-first agent definitions. */\n\nimport type { ModelOutputFormat, ToolChoice, NativeToolSchema } from '../../contract/index.ts'\nimport { ReasoningEffortId, type ReasoningEffortId as ReasoningEffort } from '../../primitives/index.ts'\nimport type { AgentMode } from '../mode/run-agent.ts'\nimport type { ToolDefinition } from '../tool/definition.ts'\nimport { captureContextSections } from '../context/section.ts'\nimport type { ContextSection } from '../context/types.ts'\nimport {\n SKILL_TOOL_NAMES,\n resolveSkillOptions,\n validateSkillId,\n validateSkillSource,\n type AgentSkillOptions,\n type ResolvedAgentSkillOptions,\n type SkillSource,\n} from '../skill/index.ts'\nimport {\n resolveCompactionConfig,\n type AgentCompactionConfig,\n type AgentCompactionOptions,\n} from '../memory/compaction-config.ts'\nimport {\n resolveMemoryConfig,\n type AgentMemoryConfig,\n type AgentMemoryConfigInput,\n} from '../memory/memory.ts'\nimport {\n AgentSession,\n type AgentResumeSessionOptions,\n type AgentSessionOptions,\n} from './session.ts'\nimport { captureOutputFormat } from './output-format.ts'\n\nexport interface AgentDefinitionInput {\n /** Stable code-owned identity used by traces and catalogs. */\n readonly id: string\n /** Human-readable display name; defaults to `id`. */\n readonly name?: string\n readonly description?: string\n /** Provider route; defaults to `codex`. */\n readonly provider?: string\n /** Provider model id; defaults to `gpt-5.6-luna`. */\n readonly model?: string\n /**\n * Provider reasoning effort. Omitted means no preference.\n *\n * An agent that never asked for a level should not be given one: the value\n * is validated against the model's own ladder, so an invented default makes\n * the agent unrunnable on every provider that declares no efforts — and\n * silently overrides the provider's own default everywhere else.\n */\n readonly effort?: string\n /** Requested output budget; omission uses the selected model's declared default/cap. */\n readonly maxTokens?: number\n /** The agent's stable system instructions. */\n readonly instructions: string\n /** Execution policy; defaults to `basic`. */\n readonly mode?: AgentMode\n /** Host-executed tools owned by this definition. */\n readonly tools?: readonly ToolDefinition<any>[]\n /** Provider-executed tools such as web search or image generation. */\n readonly nativeTools?: readonly NativeToolSchema[]\n /** Inline web skills and/or lazy providers such as filesystem discovery. */\n readonly skills?: readonly SkillSource[]\n /** Optional allowlist resolved across definition and per-session skill sources. */\n readonly skillIds?: readonly string[]\n /** Progressive-disclosure catalog and resource limits. */\n readonly skillOptions?: AgentSkillOptions\n /**\n * Model-visible context this agent always recomputes before a model round.\n *\n * Sections are platform-neutral callbacks. A filesystem-backed one (project\n * instruction files, working-tree state) is built by a platform package and\n * mounted here or per session.\n */\n readonly contextSections?: readonly ContextSection[]\n readonly toolChoice?: ToolChoice\n /** Constrain visible model output to plain text or a named JSON Schema. */\n readonly outputFormat?: ModelOutputFormat\n /** Maximum model iterations for one user turn; defaults to 16. */\n /** Model steps per prompt; 'auto' continues without a fixed step ceiling. */\n readonly maxTurns?: number | 'auto'\n /** Maximum host tool calls for one user turn; defaults to 64. */\n readonly maxToolCalls?: number\n /** Public progress narration policy; defaults to `concise`. */\n readonly commentary?: 'auto' | 'concise' | 'off'\n /** Durable task facts injected outside compactable conversation history. */\n readonly memory?: AgentMemoryConfigInput\n /** Automatic context checkpointing; false disables it. Defaults to enabled. */\n readonly compaction?: AgentCompactionOptions | false\n}\n\nexport interface AgentDefinition {\n readonly id: string\n readonly name: string\n readonly description: string | undefined\n readonly provider: string\n readonly model: string\n readonly effort: ReasoningEffort | undefined\n readonly maxTokens: number | undefined\n readonly instructions: string\n readonly mode: AgentMode\n readonly tools: readonly ToolDefinition<any>[]\n readonly nativeTools: readonly NativeToolSchema[]\n readonly skills: readonly SkillSource[]\n readonly skillIds: readonly string[] | undefined\n readonly skillOptions: ResolvedAgentSkillOptions\n readonly contextSections: readonly ContextSection[]\n readonly toolChoice: ToolChoice | undefined\n readonly outputFormat: ModelOutputFormat | undefined\n readonly maxTurns: number | 'auto'\n readonly maxToolCalls: number\n readonly commentary: 'auto' | 'concise' | 'off'\n readonly memory: AgentMemoryConfig\n readonly compaction: AgentCompactionConfig | false\n}\n\nexport interface DefinedAgent extends AgentDefinition {\n /** Start an isolated, multi-turn conversation for this definition. */\n createSession(options: AgentSessionOptions): AgentSession\n /** Resume a snapshot without manually hydrating history and memory. */\n resumeSession(options: AgentResumeSessionOptions): AgentSession\n /** Derive a definition while preserving all unspecified settings. */\n with(overrides: AgentDefinitionOverrides): DefinedAgent\n}\n\nexport type AgentDefinitionOverrides = Partial<Omit<AgentDefinitionInput, 'id'>>\nexport type CloneAgentOverrides = AgentDefinitionOverrides & { readonly id: string }\ntype MergeAgentOverrides = AgentDefinitionOverrides & { readonly id?: string }\n\nconst ID_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]*$/\n\nclass DefinedAgentValue implements DefinedAgent {\n readonly id: string\n readonly name: string\n readonly description: string | undefined\n readonly provider: string\n readonly model: string\n readonly effort: ReasoningEffort | undefined\n readonly maxTokens: number | undefined\n readonly instructions: string\n readonly mode: AgentMode\n readonly tools: readonly ToolDefinition<any>[]\n readonly nativeTools: readonly NativeToolSchema[]\n readonly skills: readonly SkillSource[]\n readonly skillIds: readonly string[] | undefined\n readonly skillOptions: ResolvedAgentSkillOptions\n readonly contextSections: readonly ContextSection[]\n readonly toolChoice: ToolChoice | undefined\n readonly outputFormat: ModelOutputFormat | undefined\n readonly maxTurns: number | 'auto'\n readonly maxToolCalls: number\n readonly commentary: 'auto' | 'concise' | 'off'\n readonly memory: AgentMemoryConfig\n readonly compaction: AgentCompactionConfig | false\n\n constructor(input: AgentDefinitionInput) {\n validate(input)\n this.id = input.id\n this.name = input.name ?? input.id\n this.description = input.description\n this.provider = input.provider ?? 'codex'\n this.model = input.model ?? 'gpt-5.6-luna'\n this.effort = input.effort === undefined ? undefined : ReasoningEffortId(input.effort)\n this.maxTokens = input.maxTokens\n this.instructions = input.instructions\n this.mode = input.mode ?? 'basic'\n this.tools = Object.freeze([...(input.tools ?? [])])\n this.nativeTools = Object.freeze((input.nativeTools ?? []).map(tool => Object.freeze({ ...tool })))\n this.skills = Object.freeze([...(input.skills ?? [])])\n this.skillIds = input.skillIds === undefined ? undefined : Object.freeze([...input.skillIds])\n this.skillOptions = resolveSkillOptions(input.skillOptions)\n this.contextSections = captureContextSections(input.contextSections) ?? Object.freeze([])\n this.toolChoice = input.toolChoice\n this.outputFormat = captureOutputFormat(input.outputFormat)\n this.maxTurns = input.maxTurns ?? 16\n this.maxToolCalls = input.maxToolCalls ?? 64\n this.commentary = input.commentary ?? 'concise'\n this.memory = resolveMemoryConfig(input.memory)\n this.compaction = input.compaction === false ? false : resolveCompactionConfig(input.compaction)\n Object.freeze(this)\n }\n\n createSession(options: AgentSessionOptions): AgentSession {\n return new AgentSession(this, options)\n }\n\n resumeSession(options: AgentResumeSessionOptions): AgentSession {\n return AgentSession.fromSnapshot(this, options)\n }\n\n with(overrides: AgentDefinitionOverrides): DefinedAgent {\n return defineAgent(mergedInput(this, overrides))\n }\n}\n\n/** Define and validate one reusable agent. */\nexport function defineAgent(input: AgentDefinitionInput): DefinedAgent {\n return new DefinedAgentValue(input)\n}\n\n/** Clone an agent under a new stable id. */\nexport function cloneAgent(source: AgentDefinition, overrides: CloneAgentOverrides): DefinedAgent {\n return defineAgent(mergedInput(source, overrides))\n}\n\nfunction mergedInput(\n source: AgentDefinition,\n overrides: MergeAgentOverrides,\n): AgentDefinitionInput {\n const description = overrides.description ?? source.description\n const toolChoice = overrides.toolChoice ?? source.toolChoice\n const outputFormat = overrides.outputFormat ?? source.outputFormat\n const skillIds = overrides.skillIds ?? source.skillIds\n const maxTokens = overrides.maxTokens ?? source.maxTokens\n return {\n id: overrides.id ?? source.id,\n name: overrides.name ?? source.name,\n ...(description === undefined ? {} : { description }),\n provider: overrides.provider ?? source.provider,\n model: overrides.model ?? source.model,\n ...(overrides.effort ?? source.effort) === undefined\n ? {}\n : { effort: (overrides.effort ?? source.effort) as string },\n ...(maxTokens === undefined ? {} : { maxTokens }),\n instructions: overrides.instructions ?? source.instructions,\n mode: overrides.mode ?? source.mode,\n tools: overrides.tools ?? source.tools,\n nativeTools: overrides.nativeTools ?? source.nativeTools,\n skills: overrides.skills ?? source.skills,\n ...(skillIds === undefined ? {} : { skillIds }),\n skillOptions: overrides.skillOptions ?? source.skillOptions,\n contextSections: overrides.contextSections ?? source.contextSections,\n ...(toolChoice === undefined ? {} : { toolChoice }),\n ...(outputFormat === undefined ? {} : { outputFormat }),\n maxTurns: overrides.maxTurns ?? source.maxTurns,\n maxToolCalls: overrides.maxToolCalls ?? source.maxToolCalls,\n commentary: overrides.commentary ?? source.commentary,\n memory: overrides.memory ?? source.memory,\n compaction: overrides.compaction ?? compactionInput(source.compaction),\n }\n}\n\nfunction compactionInput(value: AgentCompactionConfig | false): AgentCompactionOptions | false {\n if (value === false) return false\n return {\n auto: value.auto,\n ...(value.maxInputTokens === undefined ? {} : { maxInputTokens: value.maxInputTokens }),\n thresholdRatio: value.thresholdRatio,\n ...(value.retainRatio === undefined ? {} : { retainRatio: value.retainRatio }),\n ...(value.retainTokens === undefined ? {} : { retainTokens: value.retainTokens }),\n ...(value.summarizationProvider === undefined ? {} : { summarizationProvider: value.summarizationProvider }),\n ...(value.summarizationModel === undefined ? {} : { summarizationModel: value.summarizationModel }),\n ...(value.summarizationEffort === undefined ? {} : { summarizationEffort: value.summarizationEffort }),\n maxSummaryTokens: value.maxSummaryTokens,\n compactionRetries: value.compactionRetries,\n maxOverflowRetries: value.maxOverflowRetries,\n maxSummaryInputChars: value.maxSummaryInputChars,\n maxSummaryRequestChars: value.maxSummaryRequestChars,\n maxSummaryRequestBytes: value.maxSummaryRequestBytes,\n maxSummaryResponseBytes: value.maxSummaryResponseBytes,\n maxSummaryStreamEvents: value.maxSummaryStreamEvents,\n summaryTimeoutMs: value.summaryTimeoutMs,\n teardownTimeoutMs: value.teardownTimeoutMs,\n maxToolResultChars: value.maxToolResultChars,\n }\n}\n\nfunction validate(input: AgentDefinitionInput): void {\n if (!ID_PATTERN.test(input.id)) {\n throw new TypeError('agent id must start with a letter and contain only letters, numbers, _ or -')\n }\n for (const [field, value] of [\n ['name', input.name], ['description', input.description], ['provider', input.provider],\n ['model', input.model], ['effort', input.effort],\n ] as const) {\n if (value !== undefined && value.trim().length === 0) {\n throw new TypeError(`agent ${field} must be a non-empty string`)\n }\n }\n if (input.instructions.trim().length === 0) {\n throw new TypeError('agent instructions must be a non-empty string')\n }\n if (input.maxTurns !== undefined && input.maxTurns !== 'auto'\n && (!Number.isSafeInteger(input.maxTurns) || input.maxTurns < 1)) {\n throw new RangeError(\"agent maxTurns must be a positive safe integer or 'auto'\")\n }\n if (input.maxTokens !== undefined\n && (!Number.isSafeInteger(input.maxTokens) || input.maxTokens < 1)) {\n throw new RangeError('agent maxTokens must be a positive safe integer')\n }\n if (input.maxToolCalls !== undefined\n && (!Number.isInteger(input.maxToolCalls) || input.maxToolCalls < 1)) {\n throw new RangeError('agent maxToolCalls must be a positive integer')\n }\n const names = new Set<string>()\n for (const tool of input.tools ?? []) {\n if (typeof tool.name !== 'string' || tool.name.trim().length === 0) {\n throw new TypeError('agent host tools must have a non-empty name')\n }\n if (typeof tool.description !== 'string' || tool.description.trim().length === 0) {\n throw new TypeError(`agent host tool '${tool.name}' must have a non-empty description`)\n }\n if (typeof tool.parameters !== 'object' || tool.parameters === null) {\n throw new TypeError(`agent host tool '${tool.name}' must declare JSON Schema parameters`)\n }\n if (typeof tool.execute !== 'function') {\n throw new TypeError(`agent host tool '${tool.name}' must implement execute()`)\n }\n if (tool.timeoutMs !== undefined && (!Number.isFinite(tool.timeoutMs) || tool.timeoutMs <= 0)) {\n throw new RangeError(`agent host tool '${tool.name}' must have a positive timeoutMs`)\n }\n if (names.has(tool.name)) throw new TypeError(`agent has duplicate host tool '${tool.name}'`)\n names.add(tool.name)\n }\n for (const tool of input.nativeTools ?? []) {\n if (typeof tool.name !== 'string' || tool.name.trim().length === 0) {\n throw new TypeError('agent native tools must have a non-empty name')\n }\n if (names.has(tool.name)) throw new TypeError(`agent has duplicate tool '${tool.name}'`)\n names.add(tool.name)\n }\n if ((input.skills?.length ?? 0) > 0 || (input.skillIds?.length ?? 0) > 0) {\n for (const reserved of SKILL_TOOL_NAMES) {\n if (names.has(reserved)) throw new TypeError(`agent tool '${reserved}' collides with the skill runtime`)\n }\n }\n const directSkills = new Set<string>()\n const providers = new Set<string>()\n const allowedSkills = new Set<string>()\n for (const id of input.skillIds ?? []) {\n validateSkillId(id, 'agent skill')\n if (allowedSkills.has(id)) throw new TypeError(`agent has duplicate allowed skill '${id}'`)\n allowedSkills.add(id)\n }\n for (const source of input.skills ?? []) {\n validateSkillSource(source)\n if (source.kind === 'skill') {\n if (directSkills.has(source.id)) throw new TypeError(`agent has duplicate inline skill '${source.id}'`)\n directSkills.add(source.id)\n } else {\n if (providers.has(source.id)) throw new TypeError(`agent has duplicate skill provider '${source.id}'`)\n providers.add(source.id)\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{AgentSdkError as e}from"../../errors/agent-sdk-error.js";const t=65536,n=`RUN_ADDITIONAL_INSTRUCTIONS_INVALID`;function r(t){if(t!==void 0){if(typeof t!=`string`||t.trim().length===0||new TextEncoder().encode(t).byteLength>65536)throw new e(`Run additional instructions are invalid`,n);return t}}function i(e,t){return t===void 0?e:`${e}\n\n${t}`}export{n as RUN_ADDITIONAL_INSTRUCTIONS_INVALID,t as RUN_ADDITIONAL_INSTRUCTIONS_MAX_BYTES,i as appendRunInstructions,r as captureAdditionalInstructions};
2
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","names":[],"sources":["../../../src/agent/define/instructions.ts"],"sourcesContent":["import { AgentSdkError } from '../../errors/agent-sdk-error.ts'\n\nexport const RUN_ADDITIONAL_INSTRUCTIONS_MAX_BYTES = 65_536\nexport const RUN_ADDITIONAL_INSTRUCTIONS_INVALID = 'RUN_ADDITIONAL_INSTRUCTIONS_INVALID'\n\n/** Capture the exact host-owned overlay; accepted text is never trimmed or rewritten. */\nexport function captureAdditionalInstructions(value: unknown): string | undefined {\n if (value === undefined) return undefined\n if (typeof value !== 'string' || value.trim().length === 0\n || new TextEncoder().encode(value).byteLength > RUN_ADDITIONAL_INSTRUCTIONS_MAX_BYTES) {\n throw new AgentSdkError('Run additional instructions are invalid', RUN_ADDITIONAL_INSTRUCTIONS_INVALID)\n }\n return value\n}\n\nexport function appendRunInstructions(system: string, overlay?: string): string {\n return overlay === undefined ? system : `${system}\\n\\n${overlay}`\n}\n"],"mappings":"gEAEA,MAAa,EAAwC,MACxC,EAAsC,sCAGnD,SAAgB,EAA8B,EAAoC,CAC5E,OAAU,IAAA,GACd,IAAI,OAAO,GAAU,UAAY,EAAM,KAAK,CAAC,CAAC,SAAW,GACpD,IAAI,YAAY,CAAC,CAAC,OAAO,CAAK,CAAC,CAAC,WAAA,MACnC,MAAM,IAAI,EAAc,0CAA2C,CAAmC,EAExG,OAAO,CAFiG,CAG1G,CAEA,SAAgB,EAAsB,EAAgB,EAA0B,CAC9E,OAAO,IAAY,IAAA,GAAY,EAAS,GAAG,EAAO,MAAM,GAC1D"}
@@ -0,0 +1,2 @@
1
+ import{snapshotJsonObject as e}from"../../primitives/json-snapshot.js";import{TOOL_DEFINITION_LIMITS as t}from"../tool/config.js";const n=/^[A-Za-z0-9_-]{1,64}$/u;function r(r){if(r===void 0)return;if(typeof r!=`object`||!r||Array.isArray(r))throw o();let s=i(r,`type`);if(s===`text`)return a(r,[`type`]),Object.freeze({type:s});if(s!==`json_schema`)throw o();a(r,[`type`,`name`,`schema`]);let c=i(r,`name`);if(typeof c!=`string`||!n.test(c))throw o();let l=e(i(r,`schema`),{maxObjectFields:t.schemaFields,maxArrayItems:t.schemaArrayItems,maxDepth:t.schemaDepth,maxNodes:t.schemaNodes,maxKeyBytes:t.schemaKeyBytes,maxBytes:t.schemaBytes});return Object.freeze({type:s,name:c,schema:l})}function i(e,t){let n=Object.getOwnPropertyDescriptor(e,t);if(n===void 0||!(`value`in n))throw o();return n.value}function a(e,t){let n=new Set(t);if(Reflect.ownKeys(e).some(e=>typeof e!=`string`||!n.has(e)))throw o()}function o(){return TypeError(`agent outputFormat must be text or a bounded JSON Schema with a valid name`)}export{r as captureOutputFormat};
2
+ //# sourceMappingURL=output-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-format.js","names":[],"sources":["../../../src/agent/define/output-format.ts"],"sourcesContent":["import type { ModelOutputFormat } from '../../contract/output-format.ts'\nimport { snapshotJsonObject } from '../../primitives/json-snapshot.ts'\nimport { TOOL_DEFINITION_LIMITS } from '../tool/config.ts'\n\nconst NAME = /^[A-Za-z0-9_-]{1,64}$/u\n\n/** Validate, detach, bound, and freeze output configuration at definition time. */\nexport function captureOutputFormat(value: ModelOutputFormat | undefined): ModelOutputFormat | undefined {\n if (value === undefined) return undefined\n if (typeof value !== 'object' || value === null || Array.isArray(value)) throw invalid()\n const type = ownData(value, 'type')\n if (type === 'text') {\n exactKeys(value, ['type'])\n return Object.freeze({ type })\n }\n if (type !== 'json_schema') throw invalid()\n exactKeys(value, ['type', 'name', 'schema'])\n const name = ownData(value, 'name')\n if (typeof name !== 'string' || !NAME.test(name)) throw invalid()\n const schema = snapshotJsonObject(ownData(value, 'schema'), {\n maxObjectFields: TOOL_DEFINITION_LIMITS.schemaFields,\n maxArrayItems: TOOL_DEFINITION_LIMITS.schemaArrayItems,\n maxDepth: TOOL_DEFINITION_LIMITS.schemaDepth,\n maxNodes: TOOL_DEFINITION_LIMITS.schemaNodes,\n maxKeyBytes: TOOL_DEFINITION_LIMITS.schemaKeyBytes,\n maxBytes: TOOL_DEFINITION_LIMITS.schemaBytes,\n })\n return Object.freeze({ type, name, schema })\n}\n\nfunction ownData(source: object, key: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)\n if (descriptor === undefined || !('value' in descriptor)) throw invalid()\n return descriptor.value\n}\n\nfunction exactKeys(source: object, allowed: readonly string[]): void {\n const expected = new Set(allowed)\n if (Reflect.ownKeys(source).some(key => typeof key !== 'string' || !expected.has(key))) throw invalid()\n}\n\nfunction invalid(): TypeError {\n return new TypeError('agent outputFormat must be text or a bounded JSON Schema with a valid name')\n}\n"],"mappings":"kIAIA,MAAM,EAAO,yBAGb,SAAgB,EAAoB,EAAqE,CACvG,GAAI,IAAU,IAAA,GAAW,OACzB,GAAI,OAAO,GAAU,WAAY,GAAkB,MAAM,QAAQ,CAAK,EAAG,MAAM,EAAQ,EACvF,IAAM,EAAO,EAAQ,EAAO,MAAM,EAClC,GAAI,IAAS,OAEX,OADA,EAAU,EAAO,CAAC,MAAM,CAAC,EAClB,OAAO,OAAO,CAAE,MAAK,CAAC,EAE/B,GAAI,IAAS,cAAe,MAAM,EAAQ,EAC1C,EAAU,EAAO,CAAC,OAAQ,OAAQ,QAAQ,CAAC,EAC3C,IAAM,EAAO,EAAQ,EAAO,MAAM,EAClC,GAAI,OAAO,GAAS,UAAY,CAAC,EAAK,KAAK,CAAI,EAAG,MAAM,EAAQ,EAChE,IAAM,EAAS,EAAmB,EAAQ,EAAO,QAAQ,EAAG,CAC1D,gBAAiB,EAAuB,aACxC,cAAe,EAAuB,iBACtC,SAAU,EAAuB,YACjC,SAAU,EAAuB,YACjC,YAAa,EAAuB,eACpC,SAAU,EAAuB,WACnC,CAAC,EACD,OAAO,OAAO,OAAO,CAAE,OAAM,OAAM,QAAO,CAAC,CAC7C,CAEA,SAAS,EAAQ,EAAgB,EAAsB,CACrD,IAAM,EAAa,OAAO,yBAAyB,EAAQ,CAAG,EAC9D,GAAI,IAAe,IAAA,IAAa,EAAE,UAAW,GAAa,MAAM,EAAQ,EACxE,OAAO,EAAW,KACpB,CAEA,SAAS,EAAU,EAAgB,EAAkC,CACnE,IAAM,EAAW,IAAI,IAAI,CAAO,EAChC,GAAI,QAAQ,QAAQ,CAAM,CAAC,CAAC,KAAK,GAAO,OAAO,GAAQ,UAAY,CAAC,EAAS,IAAI,CAAG,CAAC,EAAG,MAAM,EAAQ,CACxG,CAEA,SAAS,GAAqB,CAC5B,OAAW,UAAU,4EAA4E,CACnG"}
@@ -0,0 +1,2 @@
1
+ import{RunLedger as e}from"../../accounting/ledger.js";function t(t){let{definition:n,options:r,runtimeLimits:i,conversationId:a,runtime:o}=t;return new e({...r.observation===void 0?{}:{observation:r.observation},...r.observationResource===void 0?{}:{resource:r.observationResource},conversationId:a,sessionId:a,agentId:n.id,mode:n.mode,maxTurns:n.maxTurns,...r.usagePolicy===void 0?{}:{usagePolicy:r.usagePolicy},cumulativeTokenBudget:typeof i.maxTotalTokens==`number`,...o?.logger===void 0?{}:{logger:o.logger},...r.ledgerLimits===void 0?{}:{limits:r.ledgerLimits}})}export{t as createSessionLedger};
2
+ //# sourceMappingURL=accounting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting.js","names":[],"sources":["../../../../src/agent/define/session/accounting.ts"],"sourcesContent":["import type { AgentDefinition } from '../definition.ts'\nimport type { AgentRuntimeLimits, AgentSessionOptions } from './types.ts'\nimport type { RuntimeSessionConfiguration } from './runtime-binding.ts'\nimport { RunLedger } from '../../accounting/ledger.ts'\n\nexport interface SessionLedgerInput {\n readonly definition: AgentDefinition\n readonly options: AgentSessionOptions\n readonly runtimeLimits: Readonly<AgentRuntimeLimits>\n readonly conversationId: string\n readonly runtime?: RuntimeSessionConfiguration\n}\n\nexport function createSessionLedger(input: SessionLedgerInput): RunLedger {\n const { definition, options, runtimeLimits, conversationId, runtime } = input\n return new RunLedger({\n ...options.observation === undefined ? {} : { observation: options.observation },\n ...options.observationResource === undefined ? {} : { resource: options.observationResource },\n conversationId,\n sessionId: conversationId,\n agentId: definition.id,\n mode: definition.mode,\n maxTurns: definition.maxTurns,\n ...options.usagePolicy === undefined ? {} : { usagePolicy: options.usagePolicy },\n cumulativeTokenBudget: typeof runtimeLimits.maxTotalTokens === 'number',\n ...(runtime?.logger === undefined ? {} : { logger: runtime.logger }),\n ...options.ledgerLimits === undefined ? {} : { limits: options.ledgerLimits },\n })\n}\n"],"mappings":"uDAaA,SAAgB,EAAoB,EAAsC,CACxE,GAAM,CAAE,aAAY,UAAS,gBAAe,iBAAgB,WAAY,EACxE,OAAO,IAAI,EAAU,CACnB,GAAG,EAAQ,cAAgB,IAAA,GAAY,CAAC,EAAI,CAAE,YAAa,EAAQ,WAAY,EAC/E,GAAG,EAAQ,sBAAwB,IAAA,GAAY,CAAC,EAAI,CAAE,SAAU,EAAQ,mBAAoB,EAC5F,iBACA,UAAW,EACX,QAAS,EAAW,GACpB,KAAM,EAAW,KACjB,SAAU,EAAW,SACrB,GAAG,EAAQ,cAAgB,IAAA,GAAY,CAAC,EAAI,CAAE,YAAa,EAAQ,WAAY,EAC/E,sBAAuB,OAAO,EAAc,gBAAmB,SAC/D,GAAI,GAAS,SAAW,IAAA,GAAY,CAAC,EAAI,CAAE,OAAQ,EAAQ,MAAO,EAClE,GAAG,EAAQ,eAAiB,IAAA,GAAY,CAAC,EAAI,CAAE,OAAQ,EAAQ,YAAa,CAC9E,CAAC,CACH"}
@@ -0,0 +1,2 @@
1
+ import{systemRandomId as e}from"../../../platform/adapter.js";import{createTextMessage as t,freezeMessage as n}from"../../../message/message.js";import{ToolRegistry as r}from"../../tool/registry.js";function i(e){if(e===void 0)return a();if(e.trim().length===0||e.length>256)throw TypeError(`agent conversationId must be a non-empty string of at most 256 characters`);return e}function a(){return e()}function o(e){if(typeof e==`string`)return t(e);if(e.role!==`user`)throw TypeError(`agent input message must have role user`);return n(e)}function s(e){return e.role===`user`}function c(){let e=()=>void 0,t=()=>void 0;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function l(e){return e instanceof Error?e.message:String(e)}function u(e){return typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:void 0}function d(e,t,n=[]){if(e.length===0&&t===void 0&&n.length===0)return;let i=new r;for(let t of e)i.register(t);if(t!==void 0){let e=`names`in t?t.names().map(e=>t.get(e)).filter(e=>e!==void 0):t;for(let t of e)i.register(t)}for(let e of n)i.register(e);return i}export{i as conversationId,c as deferred,u as errorCodeOf,s as isUserMessage,l as messageOf,a as newConversationId,d as toolCatalog,o as userMessage};
2
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","names":[],"sources":["../../../../src/agent/define/session/common.ts"],"sourcesContent":["import { systemRandomId } from '../../../platform/adapter.ts'\nimport type { ToolDefinition } from '../../tool/definition.ts'\nimport { ToolRegistry, type ToolCatalog } from '../../tool/registry.ts'\nimport type { Message, UserMessage } from '../../../message/index.ts'\nimport { createTextMessage, freezeMessage } from '../../../message/index.ts'\nimport { type AgentInput } from './types.ts'\n\nexport function conversationId(value: string | undefined): string {\n if (value === undefined) return newConversationId()\n if (value.trim().length === 0 || value.length > 256) {\n throw new TypeError('agent conversationId must be a non-empty string of at most 256 characters')\n }\n return value\n}\n\nexport function newConversationId(): string {\n return systemRandomId()\n}\n\nexport function userMessage(input: AgentInput): UserMessage {\n if (typeof input === 'string') return createTextMessage(input)\n if (input.role !== 'user') throw new TypeError('agent input message must have role user')\n return freezeMessage(input)\n}\n\nexport function isUserMessage(message: Message): message is UserMessage { return message.role === 'user' }\n\nexport interface Deferred<T> {\n readonly promise: Promise<T>\n readonly resolve: (value: T) => void\n readonly reject: (error: unknown) => void\n}\n\nexport function deferred<T>(): Deferred<T> {\n let resolve: (value: T) => void = () => undefined\n let reject: (error: unknown) => void = () => undefined\n const promise = new Promise<T>((resolvePromise, rejectPromise) => {\n resolve = resolvePromise\n reject = rejectPromise\n })\n return { promise, resolve, reject }\n}\n\nexport function messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nexport function errorCodeOf(error: unknown): string | undefined {\n return typeof error === 'object' && error !== null\n && 'code' in error && typeof error.code === 'string'\n ? error.code\n : undefined\n}\n\nexport function toolCatalog(\n defined: readonly ToolDefinition<any>[],\n additional: ToolCatalog | readonly ToolDefinition<any>[] | undefined,\n generated: readonly ToolDefinition<any>[] = [],\n): ToolCatalog | undefined {\n if (defined.length === 0 && additional === undefined && generated.length === 0) return undefined\n const registry = new ToolRegistry()\n for (const tool of defined) registry.register(tool)\n if (additional !== undefined) {\n const tools = 'names' in additional\n ? additional.names().map(name => additional.get(name))\n .filter((tool): tool is ToolDefinition => tool !== undefined)\n : additional\n for (const tool of tools) registry.register(tool)\n }\n for (const tool of generated) registry.register(tool)\n return registry\n}\n"],"mappings":"uMAOA,SAAgB,EAAe,EAAmC,CAChE,GAAI,IAAU,IAAA,GAAW,OAAO,EAAkB,EAClD,GAAI,EAAM,KAAK,CAAC,CAAC,SAAW,GAAK,EAAM,OAAS,IAC9C,MAAU,UAAU,2EAA2E,EAEjG,OAAO,CACT,CAEA,SAAgB,GAA4B,CAC1C,OAAO,EAAe,CACxB,CAEA,SAAgB,EAAY,EAAgC,CAC1D,GAAI,OAAO,GAAU,SAAU,OAAO,EAAkB,CAAK,EAC7D,GAAI,EAAM,OAAS,OAAQ,MAAU,UAAU,yCAAyC,EACxF,OAAO,EAAc,CAAK,CAC5B,CAEA,SAAgB,EAAc,EAA0C,CAAE,OAAO,EAAQ,OAAS,MAAO,CAQzG,SAAgB,GAA2B,CACzC,IAAI,MAAoC,IAAA,GACpC,MAAyC,IAAA,GAK7C,MAAO,CAAE,QAAA,IAJW,SAAY,EAAgB,IAAkB,CAChE,EAAU,EACV,EAAS,CACX,CACe,EAAG,UAAS,QAAO,CACpC,CAEA,SAAgB,EAAU,EAAwB,CAChD,OAAO,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,CAC9D,CAEA,SAAgB,EAAY,EAAoC,CAC9D,OAAO,OAAO,GAAU,UAAY,GAC/B,SAAU,GAAS,OAAO,EAAM,MAAS,SAC1C,EAAM,KACN,IAAA,EACN,CAEA,SAAgB,EACd,EACA,EACA,EAA4C,CAAC,EACpB,CACzB,GAAI,EAAQ,SAAW,GAAK,IAAe,IAAA,IAAa,EAAU,SAAW,EAAG,OAChF,IAAM,EAAW,IAAI,EACrB,IAAK,IAAM,KAAQ,EAAS,EAAS,SAAS,CAAI,EAClD,GAAI,IAAe,IAAA,GAAW,CAC5B,IAAM,EAAQ,UAAW,EACrB,EAAW,MAAM,CAAC,CAAC,IAAI,GAAQ,EAAW,IAAI,CAAI,CAAC,CAAC,CACnD,OAAQ,GAAiC,IAAS,IAAA,EAAS,EAC5D,EACJ,IAAK,IAAM,KAAQ,EAAO,EAAS,SAAS,CAAI,CAClD,CACA,IAAK,IAAM,KAAQ,EAAW,EAAS,SAAS,CAAI,EACpD,OAAO,CACT"}
@@ -0,0 +1,2 @@
1
+ import{timeoutValue as e}from"../../../platform/config.js";function t(t){if(t===void 0)return Object.freeze({});let n={...t};if(n.maxTotalTokens!==void 0&&n.maxTotalTokens!==`auto`&&(!Number.isSafeInteger(n.maxTotalTokens)||n.maxTotalTokens<1))throw RangeError(`agent runtimeLimits.maxTotalTokens must be a positive safe integer or 'auto'`);if(n.finalReportReserveTokens!==void 0&&(!Number.isSafeInteger(n.finalReportReserveTokens)||n.finalReportReserveTokens<0||typeof n.maxTotalTokens==`number`&&n.finalReportReserveTokens>=n.maxTotalTokens))throw RangeError(`agent runtimeLimits.finalReportReserveTokens must be a non-negative safe integer below maxTotalTokens`);for(let t of[`teardownTimeoutMs`,`modelTimeoutMs`,`maxModelRequestBytes`,`maxModelResponseBytes`,`maxModelStreamEvents`,`maxToolResultBytes`,`maxToolDurationMs`,`toolTeardownTimeoutMs`,`maxParallelToolCalls`,`maxConsecutiveToolErrors`,`repeatToolWarningAt`,`repeatToolLimit`,`toolCycleWarningAt`,`toolCycleLimit`,`maxToolCycleLength`,`maxToolResultTokens`,`hookTimeoutMs`,`hookTeardownTimeoutMs`,`memoryOperationTimeoutMs`,`observerTimeoutMs`]){let r=n[t];if(r!==void 0&&t.endsWith(`Ms`)&&e(r),r!==void 0&&(!Number.isSafeInteger(r)||r<1))throw RangeError(`agent runtimeLimits.${t} must be a positive safe integer`)}if(n.toolResultOverflow!==void 0&&![`auto`,`truncate`,`spill`].includes(n.toolResultOverflow))throw RangeError(`agent runtimeLimits.toolResultOverflow must be 'auto', 'truncate', or 'spill'`);if(n.onExhausted!==void 0&&![`force-final-answer`,`stop`,`continue`].includes(n.onExhausted))throw RangeError(`agent runtimeLimits.onExhausted must be 'force-final-answer', 'stop', or 'continue'`);if((n.repeatToolLimit??6)<(n.repeatToolWarningAt??3))throw RangeError(`agent runtimeLimits.repeatToolLimit must be >= repeatToolWarningAt`);if((n.toolCycleLimit??3)<(n.toolCycleWarningAt??2))throw RangeError(`agent runtimeLimits.toolCycleLimit must be >= toolCycleWarningAt`);return Object.freeze(n)}export{t as resolveRuntimeLimits};
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","names":[],"sources":["../../../../src/agent/define/session/config.ts"],"sourcesContent":["import { type AgentRuntimeLimits } from './types.ts'\nimport { timeoutValue } from '../../../platform/config.ts'\n\nexport function resolveRuntimeLimits(input: AgentRuntimeLimits | undefined): Readonly<AgentRuntimeLimits> {\n if (input === undefined) return Object.freeze({})\n const values = { ...input }\n if (values.maxTotalTokens !== undefined && values.maxTotalTokens !== 'auto'\n && (!Number.isSafeInteger(values.maxTotalTokens) || values.maxTotalTokens < 1)) {\n throw new RangeError(\"agent runtimeLimits.maxTotalTokens must be a positive safe integer or 'auto'\")\n }\n if (values.finalReportReserveTokens !== undefined\n && (!Number.isSafeInteger(values.finalReportReserveTokens) || values.finalReportReserveTokens < 0\n || (typeof values.maxTotalTokens === 'number' && values.finalReportReserveTokens >= values.maxTotalTokens))) {\n throw new RangeError('agent runtimeLimits.finalReportReserveTokens must be a non-negative safe integer below maxTotalTokens')\n }\n for (const key of [\n 'teardownTimeoutMs', 'modelTimeoutMs', 'maxModelRequestBytes',\n 'maxModelResponseBytes', 'maxModelStreamEvents', 'maxToolResultBytes',\n 'maxToolDurationMs', 'toolTeardownTimeoutMs', 'maxParallelToolCalls',\n 'maxConsecutiveToolErrors', 'repeatToolWarningAt', 'repeatToolLimit',\n 'toolCycleWarningAt', 'toolCycleLimit', 'maxToolCycleLength', 'maxToolResultTokens',\n 'hookTimeoutMs', 'hookTeardownTimeoutMs', 'memoryOperationTimeoutMs',\n 'observerTimeoutMs',\n ] as const) {\n const value = values[key]\n if (value !== undefined && key.endsWith('Ms')) timeoutValue(value)\n if (value !== undefined && (!Number.isSafeInteger(value) || value < 1)) {\n throw new RangeError(`agent runtimeLimits.${key} must be a positive safe integer`)\n }\n }\n if (values.toolResultOverflow !== undefined\n && !['auto', 'truncate', 'spill'].includes(values.toolResultOverflow)) {\n throw new RangeError(\n \"agent runtimeLimits.toolResultOverflow must be 'auto', 'truncate', or 'spill'\",\n )\n }\n if (values.onExhausted !== undefined\n && !['force-final-answer', 'stop', 'continue'].includes(values.onExhausted)) {\n throw new RangeError(\n \"agent runtimeLimits.onExhausted must be 'force-final-answer', 'stop', or 'continue'\",\n )\n }\n if ((values.repeatToolLimit ?? 6) < (values.repeatToolWarningAt ?? 3)) {\n throw new RangeError('agent runtimeLimits.repeatToolLimit must be >= repeatToolWarningAt')\n }\n if ((values.toolCycleLimit ?? 3) < (values.toolCycleWarningAt ?? 2)) {\n throw new RangeError('agent runtimeLimits.toolCycleLimit must be >= toolCycleWarningAt')\n }\n return Object.freeze(values)\n}\n"],"mappings":"2DAGA,SAAgB,EAAqB,EAAqE,CACxG,GAAI,IAAU,IAAA,GAAW,OAAO,OAAO,OAAO,CAAC,CAAC,EAChD,IAAM,EAAS,CAAE,GAAG,CAAM,EAC1B,GAAI,EAAO,iBAAmB,IAAA,IAAa,EAAO,iBAAmB,SAC/D,CAAC,OAAO,cAAc,EAAO,cAAc,GAAK,EAAO,eAAiB,GAC5E,MAAU,WAAW,8EAA8E,EAErG,GAAI,EAAO,2BAA6B,IAAA,KAClC,CAAC,OAAO,cAAc,EAAO,wBAAwB,GAAK,EAAO,yBAA2B,GAC1F,OAAO,EAAO,gBAAmB,UAAY,EAAO,0BAA4B,EAAO,gBAC7F,MAAU,WAAW,uGAAuG,EAE9H,IAAK,IAAM,IAAO,CAChB,oBAAqB,iBAAkB,uBACvC,wBAAyB,uBAAwB,qBACjD,oBAAqB,wBAAyB,uBAC9C,2BAA4B,sBAAuB,kBACnD,qBAAsB,iBAAkB,qBAAsB,sBAC9D,gBAAiB,wBAAyB,2BAC1C,mBACF,EAAY,CACV,IAAM,EAAQ,EAAO,GAErB,GADI,IAAU,IAAA,IAAa,EAAI,SAAS,IAAI,GAAG,EAAa,CAAK,EAC7D,IAAU,IAAA,KAAc,CAAC,OAAO,cAAc,CAAK,GAAK,EAAQ,GAClE,MAAU,WAAW,uBAAuB,EAAI,iCAAiC,CAErF,CACA,GAAI,EAAO,qBAAuB,IAAA,IAC7B,CAAC,CAAC,OAAQ,WAAY,OAAO,CAAC,CAAC,SAAS,EAAO,kBAAkB,EACpE,MAAU,WACR,+EACF,EAEF,GAAI,EAAO,cAAgB,IAAA,IACtB,CAAC,CAAC,qBAAsB,OAAQ,UAAU,CAAC,CAAC,SAAS,EAAO,WAAW,EAC1E,MAAU,WACR,qFACF,EAEF,IAAK,EAAO,iBAAmB,IAAM,EAAO,qBAAuB,GACjE,MAAU,WAAW,oEAAoE,EAE3F,IAAK,EAAO,gBAAkB,IAAM,EAAO,oBAAsB,GAC/D,MAAU,WAAW,kEAAkE,EAEzF,OAAO,OAAO,OAAO,CAAM,CAC7B"}
@@ -0,0 +1,2 @@
1
+ function e(e,t){return t===void 0?{provider:e.provider,model:e.model,...e.effort===void 0?{}:{reasoningEffort:e.effort},...e.maxTokens===void 0?{}:{maxTokens:e.maxTokens}}:{provider:t.provider,model:t.model,...t.reasoningEffort===void 0?{}:{reasoningEffort:t.reasoningEffort},...t.maxTokens===void 0?{}:{maxTokens:t.maxTokens}}}export{e as sessionCallConfig};
2
+ //# sourceMappingURL=model-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-config.js","names":[],"sources":["../../../../src/agent/define/session/model-config.ts"],"sourcesContent":["import type { AgentDefinition } from '../definition.ts'\nimport type { CallConfig } from '../../../contract/index.ts'\nimport type { RuntimeSessionConfiguration } from './runtime-binding.ts'\n\nexport function sessionCallConfig(\n definition: AgentDefinition,\n runtime: RuntimeSessionConfiguration | undefined,\n): Pick<CallConfig, 'provider' | 'model' | 'reasoningEffort' | 'maxTokens'> {\n if (runtime !== undefined) return {\n provider: runtime.provider,\n model: runtime.model,\n ...(runtime.reasoningEffort === undefined ? {} : { reasoningEffort: runtime.reasoningEffort }),\n ...(runtime.maxTokens === undefined ? {} : { maxTokens: runtime.maxTokens }),\n }\n return {\n provider: definition.provider,\n model: definition.model,\n // Omitted when the author expressed no preference: a value the SDK invented\n // is rejected outright by a model that declares no ladder.\n ...(definition.effort === undefined ? {} : { reasoningEffort: definition.effort }),\n ...(definition.maxTokens === undefined ? {} : { maxTokens: definition.maxTokens }),\n }\n}\n"],"mappings":"AAIA,SAAgB,EACd,EACA,EAC0E,CAO1E,OANI,IAAY,IAAA,GAMT,CACL,SAAU,EAAW,SACrB,MAAO,EAAW,MAGlB,GAAI,EAAW,SAAW,IAAA,GAAY,CAAC,EAAI,CAAE,gBAAiB,EAAW,MAAO,EAChF,GAAI,EAAW,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAW,SAAU,CAClF,EAbkC,CAChC,SAAU,EAAQ,SAClB,MAAO,EAAQ,MACf,GAAI,EAAQ,kBAAoB,IAAA,GAAY,CAAC,EAAI,CAAE,gBAAiB,EAAQ,eAAgB,EAC5F,GAAI,EAAQ,YAAc,IAAA,GAAY,CAAC,EAAI,CAAE,UAAW,EAAQ,SAAU,CAC5E,CASF"}
@@ -0,0 +1,2 @@
1
+ import{waitForSettlement as e}from"../../../async/settlement.js";async function t(t,n,r){for await(let i of t)n!==void 0&&await e(Promise.resolve().then(()=>n(i)),r)}export{t as consumeSessionEvents};
2
+ //# sourceMappingURL=observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer.js","names":[],"sources":["../../../../src/agent/define/session/observer.ts"],"sourcesContent":["import { waitForSettlement } from '../../../async/index.ts'\nimport type { AgentRunEvent } from '../../mode/run-agent.ts'\n\nexport async function consumeSessionEvents(\n events: AsyncIterable<AgentRunEvent>,\n observer: ((event: AgentRunEvent) => void | Promise<void>) | undefined,\n timeoutMs: number,\n): Promise<void> {\n for await (const event of events) {\n if (observer === undefined) continue\n await waitForSettlement(Promise.resolve().then(() => observer(event)), timeoutMs)\n }\n}\n"],"mappings":"iEAGA,eAAsB,EACpB,EACA,EACA,EACe,CACf,UAAW,IAAM,KAAS,EACpB,IAAa,IAAA,IACjB,MAAM,EAAkB,QAAQ,QAAQ,CAAC,CAAC,SAAW,EAAS,CAAK,CAAC,EAAG,CAAS,CAEpF"}
@@ -0,0 +1,2 @@
1
+ import{createRunTerminalRecord as e,withTerminalDelivery as t}from"../../accounting/delivery/terminal.js";import{AgentRunError as n}from"../../accounting/error.js";function r(r){if(r.isTerminal())return r.report.promise;r.markTerminal(),r.abort(),r.toolSources.resolve(r.currentToolSources());let i=Object.assign(Error(`Runtime close sealed an unsettled agent run`),{code:`RUNTIME_OPERATION_ABORTED`});return r.ledger.finalize(`aborted`,!1,i).then(a=>{let o=t(e(a),a.delivery),s=new n(`Agent run did not complete`,i.code,o,{cause:i});r.report.resolve(o),r.result.reject(s),r.buffer.fail(s)},e=>{r.report.reject(e),r.result.reject(e),r.buffer.fail(e)}).finally(r.release),r.report.promise}export{r as sealRuntimeRun};
2
+ //# sourceMappingURL=run-seal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-seal.js","names":[],"sources":["../../../../src/agent/define/session/run-seal.ts"],"sourcesContent":["import { AgentRunError } from '../../accounting/error.ts'\nimport type { RunLedger } from '../../accounting/ledger.ts'\nimport { RunEventBuffer } from '../../accounting/event-buffer.ts'\nimport type { RunReport, ToolSourceRunReference } from '../../accounting/delivery-types.ts'\nimport { createRunTerminalRecord, withTerminalDelivery } from '../../accounting/delivery/terminal.ts'\nimport type { AgentRunEvent } from '../../mode/run-agent.ts'\nimport type { AgentResponse } from './types.ts'\nimport type { Deferred } from './common.ts'\n\ninterface RuntimeRunSealInput {\n readonly ledger: RunLedger\n readonly buffer: RunEventBuffer<AgentRunEvent>\n readonly report: Deferred<RunReport>\n readonly result: Deferred<AgentResponse>\n readonly toolSources: Deferred<readonly ToolSourceRunReference[]>\n readonly currentToolSources: () => readonly ToolSourceRunReference[]\n readonly isTerminal: () => boolean\n readonly markTerminal: () => void\n readonly abort: () => void\n readonly release: () => void\n}\n\n/** Seal one uncooperative run without allowing its eventual return to replace public terminal state. */\nexport function sealRuntimeRun(input: RuntimeRunSealInput): Promise<RunReport> {\n if (input.isTerminal()) return input.report.promise\n input.markTerminal()\n input.abort()\n input.toolSources.resolve(input.currentToolSources())\n const failure = Object.assign(new Error('Runtime close sealed an unsettled agent run'), {\n code: 'RUNTIME_OPERATION_ABORTED',\n })\n void input.ledger.finalize('aborted', false, failure).then(legacy => {\n const report = withTerminalDelivery(createRunTerminalRecord(legacy), legacy.delivery)\n const error = new AgentRunError('Agent run did not complete', failure.code, report, { cause: failure })\n input.report.resolve(report)\n input.result.reject(error)\n input.buffer.fail(error)\n }, error => {\n input.report.reject(error)\n input.result.reject(error)\n input.buffer.fail(error)\n }).finally(input.release)\n return input.report.promise\n}\n"],"mappings":"oKAuBA,SAAgB,EAAe,EAAgD,CAC7E,GAAI,EAAM,WAAW,EAAG,OAAO,EAAM,OAAO,QAC5C,EAAM,aAAa,EACnB,EAAM,MAAM,EACZ,EAAM,YAAY,QAAQ,EAAM,mBAAmB,CAAC,EACpD,IAAM,EAAU,OAAO,OAAW,MAAM,6CAA6C,EAAG,CACtF,KAAM,2BACR,CAAC,EAYD,OAXA,EAAW,OAAO,SAAS,UAAW,GAAO,CAAO,CAAC,CAAC,KAAK,GAAU,CACnE,IAAM,EAAS,EAAqB,EAAwB,CAAM,EAAG,EAAO,QAAQ,EAC9E,EAAQ,IAAI,EAAc,6BAA8B,EAAQ,KAAM,EAAQ,CAAE,MAAO,CAAQ,CAAC,EACtG,EAAM,OAAO,QAAQ,CAAM,EAC3B,EAAM,OAAO,OAAO,CAAK,EACzB,EAAM,OAAO,KAAK,CAAK,CACzB,EAAG,GAAS,CACV,EAAM,OAAO,OAAO,CAAK,EACzB,EAAM,OAAO,OAAO,CAAK,EACzB,EAAM,OAAO,KAAK,CAAK,CACzB,CAAC,CAAC,CAAC,QAAQ,EAAM,OAAO,EACjB,EAAM,OAAO,OACtB"}
@@ -0,0 +1,2 @@
1
+ const e=new WeakMap,t=new WeakMap,n=new WeakMap,r=new WeakMap,i=new WeakMap;function a(r,a,o,s,c){e.set(r,a),t.set(r,o),n.set(r,s),i.set(r,c)}function o(e,n){let r=t.get(e);if(r===void 0)throw TypeError(`Runtime session is unavailable`);return r(n)}function s(e,t){let r=n.get(e);if(r===void 0)throw TypeError(`Runtime session is unavailable`);return r(t)}function c(e){return r.get(e)}function l(t,n,r,i){let a=e.get(t);if(a===void 0)throw TypeError(`Runtime session is unavailable`);return a(n,r,i)}function u(e,t){let n=i.get(e);if(n===void 0)throw TypeError(`Runtime session is unavailable`);r.set(e,Object.freeze({...t})),n()}export{a as attachRuntimeSession,s as compactRuntimeSession,u as configureRuntimeSessionModel,c as runtimeSessionConfiguration,o as streamPendingRuntimeSession,l as streamRuntimeSession};
2
+ //# sourceMappingURL=runtime-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-binding.js","names":[],"sources":["../../../../src/agent/define/session/runtime-binding.ts"],"sourcesContent":["import type { CallConfig } from '../../../contract/index.ts'\nimport type { CorrelationContext } from '../../../observation/index.ts'\nimport type { SdkLogger } from '../../../logging/types.ts'\nimport type { RuntimeMemoryPersistence } from '../../memory/persistence-types.ts'\nimport type {\n ToolSourceRunReference, ToolSourceRunSnapshot,\n} from '../../tool/source-types.ts'\nimport type { AgentSession } from '../session.ts'\nimport type { AgentInput, AgentInvocationOptions, AgentRunHandle } from './types.ts'\nimport type { CompactionResult } from '../../memory/compaction.ts'\nimport type { LegacyRunReport } from '../../accounting/report.ts'\n\nexport interface RuntimeSessionConfiguration\n extends Readonly<Pick<CallConfig, 'provider' | 'model' | 'reasoningEffort' | 'maxTokens'>> {\n readonly logger?: (correlation: CorrelationContext) => SdkLogger\n readonly prepareTools?: (\n signal: AbortSignal,\n logger: SdkLogger,\n occupiedNames: readonly string[],\n ) => ToolSourceRunSnapshot\n readonly memory?: RuntimeMemoryPersistence\n}\n\nexport type RuntimeSessionRunHandle = AgentRunHandle & {\n readonly traceId: string\n readonly toolSourceSnapshots: Promise<readonly ToolSourceRunReference[]>\n readonly eventsSettled: Promise<void>\n abort(reason?: unknown): void\n seal(): AgentRunHandle['report']\n}\n\ntype RuntimeStream = (\n input: AgentInput,\n invocation: AgentInvocationOptions,\n additionalInstructions?: string,\n) => AgentRunHandle\n\ntype RuntimePendingStream = (invocation: AgentInvocationOptions) => AgentRunHandle\n\nexport interface RuntimeCompactionOutcome {\n readonly result: CompactionResult | null\n readonly report: LegacyRunReport\n readonly failure?: unknown\n}\n\ntype RuntimeCompact = (invocation: AgentInvocationOptions) => Promise<RuntimeCompactionOutcome>\n\nconst streams = new WeakMap<AgentSession, RuntimeStream>()\nconst pendingStreams = new WeakMap<AgentSession, RuntimePendingStream>()\nconst compactors = new WeakMap<AgentSession, RuntimeCompact>()\nconst configurations = new WeakMap<AgentSession, RuntimeSessionConfiguration>()\nconst configured = new WeakMap<AgentSession, () => void>()\n\nexport function attachRuntimeSession(\n session: AgentSession,\n stream: RuntimeStream,\n streamPending: RuntimePendingStream,\n compact: RuntimeCompact,\n onConfigure: () => void,\n): void {\n streams.set(session, stream)\n pendingStreams.set(session, streamPending)\n compactors.set(session, compact)\n configured.set(session, onConfigure)\n}\n\nexport function streamPendingRuntimeSession(\n session: AgentSession,\n invocation: AgentInvocationOptions,\n): RuntimeSessionRunHandle {\n const stream = pendingStreams.get(session)\n if (stream === undefined) throw new TypeError('Runtime session is unavailable')\n return stream(invocation) as RuntimeSessionRunHandle\n}\n\nexport function compactRuntimeSession(\n session: AgentSession,\n invocation: AgentInvocationOptions,\n): Promise<RuntimeCompactionOutcome> {\n const compact = compactors.get(session)\n if (compact === undefined) throw new TypeError('Runtime session is unavailable')\n return compact(invocation)\n}\n\nexport function runtimeSessionConfiguration(\n session: AgentSession,\n): RuntimeSessionConfiguration | undefined {\n return configurations.get(session)\n}\n\n/** Internal composition seam; keeps run-only overlays out of preserved legacy options. */\nexport function streamRuntimeSession(\n session: AgentSession,\n input: AgentInput,\n invocation: AgentInvocationOptions,\n additionalInstructions?: string,\n): RuntimeSessionRunHandle {\n const stream = streams.get(session)\n if (stream === undefined) throw new TypeError('Runtime session is unavailable')\n return stream(input, invocation, additionalInstructions) as RuntimeSessionRunHandle\n}\n\n/** Preserve reasoning-effort omission while binding one high-level runtime session. */\nexport function configureRuntimeSessionModel(\n session: AgentSession,\n configuration: RuntimeSessionConfiguration,\n): void {\n const onConfigure = configured.get(session)\n if (onConfigure === undefined) throw new TypeError('Runtime session is unavailable')\n configurations.set(session, Object.freeze({ ...configuration }))\n onConfigure()\n}\n"],"mappings":"AA+CA,MAAM,EAAU,IAAI,QACd,EAAiB,IAAI,QACrB,EAAa,IAAI,QACjB,EAAiB,IAAI,QACrB,EAAa,IAAI,QAEvB,SAAgB,EACd,EACA,EACA,EACA,EACA,EACM,CACN,EAAQ,IAAI,EAAS,CAAM,EAC3B,EAAe,IAAI,EAAS,CAAa,EACzC,EAAW,IAAI,EAAS,CAAO,EAC/B,EAAW,IAAI,EAAS,CAAW,CACrC,CAEA,SAAgB,EACd,EACA,EACyB,CACzB,IAAM,EAAS,EAAe,IAAI,CAAO,EACzC,GAAI,IAAW,IAAA,GAAW,MAAU,UAAU,gCAAgC,EAC9E,OAAO,EAAO,CAAU,CAC1B,CAEA,SAAgB,EACd,EACA,EACmC,CACnC,IAAM,EAAU,EAAW,IAAI,CAAO,EACtC,GAAI,IAAY,IAAA,GAAW,MAAU,UAAU,gCAAgC,EAC/E,OAAO,EAAQ,CAAU,CAC3B,CAEA,SAAgB,EACd,EACyC,CACzC,OAAO,EAAe,IAAI,CAAO,CACnC,CAGA,SAAgB,EACd,EACA,EACA,EACA,EACyB,CACzB,IAAM,EAAS,EAAQ,IAAI,CAAO,EAClC,GAAI,IAAW,IAAA,GAAW,MAAU,UAAU,gCAAgC,EAC9E,OAAO,EAAO,EAAO,EAAY,CAAsB,CACzD,CAGA,SAAgB,EACd,EACA,EACM,CACN,IAAM,EAAc,EAAW,IAAI,CAAO,EAC1C,GAAI,IAAgB,IAAA,GAAW,MAAU,UAAU,gCAAgC,EACnF,EAAe,IAAI,EAAS,OAAO,OAAO,CAAE,GAAG,CAAc,CAAC,CAAC,EAC/D,EAAY,CACd"}
@@ -0,0 +1,2 @@
1
+ async function e(e){let{accounting:t,invocation:n}=e,r=null,i,a;try{await e.prepare(),a=t.startOperation(`compaction`,{data:{trigger:`manual`}}),r=await e.compactor?.compactNow(n.signal)??null,t.endOperation(a,`success`),a=void 0}catch(e){i=e,a!==void 0&&t.endOperation(a,n.signal?.aborted===!0?`aborted`:`error`,{error:e})}let o=await t.finalize(n.signal?.aborted===!0?`aborted`:i===void 0?`success`:`error`,i===void 0,i);return Object.freeze({result:r,report:o,...i===void 0?{}:{failure:i}})}export{e as runRuntimeCompaction};
2
+ //# sourceMappingURL=runtime-compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-compaction.js","names":[],"sources":["../../../../src/agent/define/session/runtime-compaction.ts"],"sourcesContent":["import type { RunAccountingPort } from '../../accounting/contracts.ts'\nimport type { LegacyRunReport } from '../../accounting/report.ts'\nimport type { CompactionResult, ContextCompactor } from '../../memory/compaction.ts'\nimport type { AgentInvocationOptions } from './types.ts'\n\nexport interface RuntimeCompactionInput {\n readonly compactor?: ContextCompactor\n readonly invocation: AgentInvocationOptions\n readonly accounting: RunAccountingPort\n readonly prepare: () => Promise<void>\n}\n\nexport interface RuntimeCompactionOutcome {\n readonly result: CompactionResult | null\n readonly report: LegacyRunReport\n readonly failure?: unknown\n}\n\nexport async function runRuntimeCompaction(input: RuntimeCompactionInput): Promise<RuntimeCompactionOutcome> {\n const { accounting, invocation } = input\n let result: CompactionResult | null = null\n let failure: unknown\n let operation: string | undefined\n try {\n await input.prepare()\n operation = accounting.startOperation('compaction', { data: { trigger: 'manual' } })\n result = await input.compactor?.compactNow(invocation.signal) ?? null\n accounting.endOperation(operation, 'success')\n operation = undefined\n } catch (error: unknown) {\n failure = error\n if (operation !== undefined) accounting.endOperation(\n operation,\n invocation.signal?.aborted === true ? 'aborted' : 'error',\n { error },\n )\n }\n const report = await accounting.finalize(\n invocation.signal?.aborted === true ? 'aborted' : failure === undefined ? 'success' : 'error',\n failure === undefined,\n failure,\n )\n return Object.freeze({ result, report, ...(failure === undefined ? {} : { failure }) })\n}\n"],"mappings":"AAkBA,eAAsB,EAAqB,EAAkE,CAC3G,GAAM,CAAE,aAAY,cAAe,EAC/B,EAAkC,KAClC,EACA,EACJ,GAAI,CACF,MAAM,EAAM,QAAQ,EACpB,EAAY,EAAW,eAAe,aAAc,CAAE,KAAM,CAAE,QAAS,QAAS,CAAE,CAAC,EACnF,EAAS,MAAM,EAAM,WAAW,WAAW,EAAW,MAAM,GAAK,KACjE,EAAW,aAAa,EAAW,SAAS,EAC5C,EAAY,IAAA,EACd,OAAS,EAAgB,CACvB,EAAU,EACN,IAAc,IAAA,IAAW,EAAW,aACtC,EACA,EAAW,QAAQ,UAAY,GAAO,UAAY,QAClD,CAAE,OAAM,CACV,CACF,CACA,IAAM,EAAS,MAAM,EAAW,SAC9B,EAAW,QAAQ,UAAY,GAAO,UAAY,IAAY,IAAA,GAAY,UAAY,QACtF,IAAY,IAAA,GACZ,CACF,EACA,OAAO,OAAO,OAAO,CAAE,SAAQ,SAAQ,GAAI,IAAY,IAAA,GAAY,CAAC,EAAI,CAAE,SAAQ,CAAG,CAAC,CACxF"}
@@ -0,0 +1,2 @@
1
+ import{createUserMessage as e}from"../../../message/message.js";import{AgentMemory as t}from"../../memory/memory.js";import{isUserMessage as n}from"./common.js";async function r(e,n,r,i,a){let o=a.modelInvocation.logger;if(o===void 0)throw Error(`runtime memory logger is unavailable`);let s=a.startOperation(`memory`,{data:{action:`load`}});try{let c=await e.load(n,i,o),l=c.status===`loaded`?t.fromSnapshot(c.snapshot,r):void 0;return a.endOperation(s,c.status===`disabled`?`error`:`success`,c.status===`disabled`?{error:c.error}:{}),Object.freeze({state:c,...l===void 0?{}:{memory:l}})}catch(e){throw a.endOperation(s,i.aborted?`aborted`:`error`),e}}async function i(e,t,n,r,i,a){let o=a.modelInvocation.logger;if(o===void 0)throw Error(`runtime memory logger is unavailable`);let s=a.startOperation(`memory`,{data:{action:`commit`}});try{let c=await e.commit(t,n,r.revision,i,o);a.endOperation(s,c.status===`disabled`?`error`:`success`,c.status===`disabled`?{error:c.error}:{})}catch(e){throw a.endOperation(s,i.aborted?`aborted`:`error`),e}}function a(t,n,r){let i=r?.startOperation(`memory`,{data:{action:`render`}});try{let a=t.render(n);return i!==void 0&&r?.endOperation(i,`success`),a.length===0?[]:[e({source:{kind:`app`,producer:`agent-task-memory`},content:[{type:`text`,text:a}]})]}catch(e){throw i!==void 0&&r?.endOperation(i,`error`,{error:e}),e}}function o(e,t,r){if(!r)return;let i=t.entries().find(e=>e.event.kind===`user`&&e.event.message.role===`user`&&e.event.message.source.kind===`user`);i?.event.kind===`user`&&n(i.event.message)&&e.captureOriginalObjective(i.event.message)}export{o as captureResumedObjective,i as commitRuntimeMemory,r as loadRuntimeMemory,a as renderRuntimeMemory};
2
+ //# sourceMappingURL=runtime-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-memory.js","names":[],"sources":["../../../../src/agent/define/session/runtime-memory.ts"],"sourcesContent":["import { AgentMemory, type AgentMemoryConfig, type AgentMemorySnapshot } from '../../memory/memory.ts'\nimport type { RunLedger } from '../../accounting/ledger.ts'\nimport type { RunAccountingPort } from '../../accounting/contracts.ts'\nimport type { MemoryLoadState, RuntimeMemoryPersistence } from '../../memory/persistence-types.ts'\nimport { createUserMessage, type UserMessage } from '../../../message/index.ts'\nimport type { History } from '../../history/history.ts'\nimport { isUserMessage } from './common.ts'\n\nexport interface PreparedRuntimeMemory {\n readonly state: MemoryLoadState\n readonly memory?: AgentMemory\n}\n\nexport async function loadRuntimeMemory(\n persistence: RuntimeMemoryPersistence,\n conversationId: string,\n limits: AgentMemoryConfig,\n signal: AbortSignal,\n ledger: RunLedger,\n): Promise<PreparedRuntimeMemory> {\n const logger = ledger.modelInvocation.logger\n if (logger === undefined) throw new Error('runtime memory logger is unavailable')\n const operation = ledger.startOperation('memory', { data: { action: 'load' } })\n try {\n const state = await persistence.load(conversationId, signal, logger)\n const memory = state.status === 'loaded'\n ? AgentMemory.fromSnapshot(state.snapshot, limits)\n : undefined\n ledger.endOperation(operation, state.status === 'disabled' ? 'error' : 'success',\n state.status === 'disabled' ? { error: state.error } : {})\n return Object.freeze({ state, ...(memory === undefined ? {} : { memory }) })\n } catch (error) {\n ledger.endOperation(operation, signal.aborted ? 'aborted' : 'error')\n throw error\n }\n}\n\nexport async function commitRuntimeMemory(\n persistence: RuntimeMemoryPersistence,\n conversationId: string,\n snapshot: AgentMemorySnapshot,\n state: Exclude<MemoryLoadState, { readonly status: 'disabled' }>,\n signal: AbortSignal,\n ledger: RunLedger,\n): Promise<void> {\n const logger = ledger.modelInvocation.logger\n if (logger === undefined) throw new Error('runtime memory logger is unavailable')\n const operation = ledger.startOperation('memory', { data: { action: 'commit' } })\n try {\n const committed = await persistence.commit(\n conversationId, snapshot, state.revision, signal, logger,\n )\n ledger.endOperation(operation, committed.status === 'disabled' ? 'error' : 'success',\n committed.status === 'disabled' ? { error: committed.error } : {})\n } catch (error) {\n ledger.endOperation(operation, signal.aborted ? 'aborted' : 'error')\n throw error\n }\n}\n\nexport function renderRuntimeMemory(\n memory: AgentMemory,\n maxInjectedChars: number,\n accounting?: RunAccountingPort,\n): readonly UserMessage[] {\n const operation = accounting?.startOperation('memory', { data: { action: 'render' } })\n try {\n const content = memory.render(maxInjectedChars)\n if (operation !== undefined) accounting?.endOperation(operation, 'success')\n return content.length === 0 ? [] : [createUserMessage({\n source: { kind: 'app', producer: 'agent-task-memory' },\n content: [{ type: 'text', text: content }],\n })]\n } catch (error) {\n if (operation !== undefined) accounting?.endOperation(operation, 'error', { error })\n throw error\n }\n}\n\nexport function captureResumedObjective(\n memory: AgentMemory,\n history: History,\n enabled: boolean,\n): void {\n if (!enabled) return\n const entry = history.entries().find(entry => entry.event.kind === 'user'\n && entry.event.message.role === 'user' && entry.event.message.source.kind === 'user')\n if (entry?.event.kind === 'user' && isUserMessage(entry.event.message)) {\n memory.captureOriginalObjective(entry.event.message)\n }\n}\n"],"mappings":"iKAaA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EACgC,CAChC,IAAM,EAAS,EAAO,gBAAgB,OACtC,GAAI,IAAW,IAAA,GAAW,MAAU,MAAM,sCAAsC,EAChF,IAAM,EAAY,EAAO,eAAe,SAAU,CAAE,KAAM,CAAE,OAAQ,MAAO,CAAE,CAAC,EAC9E,GAAI,CACF,IAAM,EAAQ,MAAM,EAAY,KAAK,EAAgB,EAAQ,CAAM,EAC7D,EAAS,EAAM,SAAW,SAC5B,EAAY,aAAa,EAAM,SAAU,CAAM,EAC/C,IAAA,GAGJ,OAFA,EAAO,aAAa,EAAW,EAAM,SAAW,WAAa,QAAU,UACrE,EAAM,SAAW,WAAa,CAAE,MAAO,EAAM,KAAM,EAAI,CAAC,CAAC,EACpD,OAAO,OAAO,CAAE,QAAO,GAAI,IAAW,IAAA,GAAY,CAAC,EAAI,CAAE,QAAO,CAAG,CAAC,CAC7E,OAAS,EAAO,CAEd,MADA,EAAO,aAAa,EAAW,EAAO,QAAU,UAAY,OAAO,EAC7D,CACR,CACF,CAEA,eAAsB,EACpB,EACA,EACA,EACA,EACA,EACA,EACe,CACf,IAAM,EAAS,EAAO,gBAAgB,OACtC,GAAI,IAAW,IAAA,GAAW,MAAU,MAAM,sCAAsC,EAChF,IAAM,EAAY,EAAO,eAAe,SAAU,CAAE,KAAM,CAAE,OAAQ,QAAS,CAAE,CAAC,EAChF,GAAI,CACF,IAAM,EAAY,MAAM,EAAY,OAClC,EAAgB,EAAU,EAAM,SAAU,EAAQ,CACpD,EACA,EAAO,aAAa,EAAW,EAAU,SAAW,WAAa,QAAU,UACzE,EAAU,SAAW,WAAa,CAAE,MAAO,EAAU,KAAM,EAAI,CAAC,CAAC,CACrE,OAAS,EAAO,CAEd,MADA,EAAO,aAAa,EAAW,EAAO,QAAU,UAAY,OAAO,EAC7D,CACR,CACF,CAEA,SAAgB,EACd,EACA,EACA,EACwB,CACxB,IAAM,EAAY,GAAY,eAAe,SAAU,CAAE,KAAM,CAAE,OAAQ,QAAS,CAAE,CAAC,EACrF,GAAI,CACF,IAAM,EAAU,EAAO,OAAO,CAAgB,EAE9C,OADI,IAAc,IAAA,IAAW,GAAY,aAAa,EAAW,SAAS,EACnE,EAAQ,SAAW,EAAI,CAAC,EAAI,CAAC,EAAkB,CACpD,OAAQ,CAAE,KAAM,MAAO,SAAU,mBAAoB,EACrD,QAAS,CAAC,CAAE,KAAM,OAAQ,KAAM,CAAQ,CAAC,CAC3C,CAAC,CAAC,CACJ,OAAS,EAAO,CAEd,MADI,IAAc,IAAA,IAAW,GAAY,aAAa,EAAW,QAAS,CAAE,OAAM,CAAC,EAC7E,CACR,CACF,CAEA,SAAgB,EACd,EACA,EACA,EACM,CACN,GAAI,CAAC,EAAS,OACd,IAAM,EAAQ,EAAQ,QAAQ,CAAC,CAAC,KAAK,GAAS,EAAM,MAAM,OAAS,QAC9D,EAAM,MAAM,QAAQ,OAAS,QAAU,EAAM,MAAM,QAAQ,OAAO,OAAS,MAAM,EAClF,GAAO,MAAM,OAAS,QAAU,EAAc,EAAM,MAAM,OAAO,GACnE,EAAO,yBAAyB,EAAM,MAAM,OAAO,CAEvD"}
@@ -0,0 +1,2 @@
1
+ import{AgentSdkError as e}from"../../../errors/agent-sdk-error.js";import{captureSkillReference as t}from"../../skill/provider/snapshot.js";function n(n,r){let i=Object.freeze([...n?.activated??[]].map(e=>e.catalogRevision===void 0?Object.freeze({id:e.id,provider:e.provider,source:e.source,...e.resourceBase===void 0?{}:{resourceBase:Object.freeze({...e.resourceBase})}}):t(e)));for(let t of i)if(t.catalogRevision!==void 0){if(r===void 0)throw new e(`Persisted skill reference has no matching provider`,`SKILL_REFERENCE_INVALID`);r.validateReferenceOwner(t)}return i}async function r(e,t,n,r,i,a,o){let s=o?.startOperation(`skill`,{data:{action:`discover-and-restore`}}),c=AbortSignal.any([AbortSignal.timeout(e.skillOptions.operationTimeoutMs),...a===void 0?[]:[a]]);try{if(t===void 0){if(n.length>0)throw Error(`agent '${e.id}' cannot restore activated skills without skill sources`);s!==void 0&&o?.endOperation(s,`success`);return}for(let e of n)e.catalogRevision!==void 0&&t.validateReferenceOwner(e);let a=r(c);if(await t.discover(a),n.length===0){s!==void 0&&o?.endOperation(s,`success`);return}for(let e of n){if(e.catalogRevision!==void 0){await t.restoreReference(e,a);continue}let n=t.summaries().find(t=>t.id===e.id);if(n===void 0)throw Error(`cannot restore activated skill '${e.id}'; it is no longer available`);if(n.provider!==e.provider||n.source!==e.source)throw Error(`cannot restore activated skill '${e.id}'; its provider or source changed`);if(n.resourceBase?.kind!==e.resourceBase?.kind||n.resourceBase?.value!==e.resourceBase?.value)throw Error(`cannot restore activated skill '${e.id}'; its resource location changed`);if(await t.activate(e.id,a)===void 0)throw Error(`cannot restore activated skill '${e.id}'; its definition is unavailable`)}i(),s!==void 0&&o?.endOperation(s,`success`)}catch(e){throw t?.clearActivations(),s!==void 0&&o?.endOperation(s,c.aborted?`aborted`:`error`,{error:e}),e}}export{n as captureResumedSkillActivations,r as prepareSkills};
2
+ //# sourceMappingURL=skills.js.map