@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,39 @@
1
+ import { ObservationEvent } from "../observation/event.js";
2
+ import { ObservationBoundary } from "../observation/port.js";
3
+ import { ExportAck, ObservationBatch, ObservationExporter } from "./types.js";
4
+ //#region src/observability/exporters.d.ts
5
+ /** Memory-only exporter for tests and local inspection. It cannot claim durability. */
6
+ declare class MemoryObservationExporter implements ObservationExporter {
7
+ readonly id: string;
8
+ readonly supportedBoundaries: readonly ["none"];
9
+ private readonly retained;
10
+ private readonly retainedBatches;
11
+ constructor(id?: string);
12
+ export(batch: ObservationBatch, _signal: AbortSignal): Promise<ExportAck>;
13
+ events(): readonly ObservationEvent[];
14
+ batches(): readonly ObservationBatch[];
15
+ clear(): void;
16
+ }
17
+ interface TestObservationExporterOptions {
18
+ readonly id?: string;
19
+ readonly supportedBoundaries?: readonly ObservationBoundary[];
20
+ readonly failExports?: number;
21
+ readonly retryable?: boolean;
22
+ readonly rejectAck?: boolean;
23
+ }
24
+ /** Deterministic programmable exporter used by delivery and fault-injection tests. */
25
+ declare class TestObservationExporter implements ObservationExporter {
26
+ readonly id: string;
27
+ readonly supportedBoundaries: readonly ObservationBoundary[];
28
+ readonly exported: ObservationBatch[];
29
+ shutdownCalls: number;
30
+ private failuresRemaining;
31
+ private readonly retryable;
32
+ private readonly rejectAck;
33
+ constructor(options?: TestObservationExporterOptions);
34
+ export(batch: ObservationBatch, signal: AbortSignal): Promise<ExportAck>;
35
+ shutdown(_signal: AbortSignal): Promise<void>;
36
+ }
37
+ //#endregion
38
+ export { MemoryObservationExporter, TestObservationExporter, TestObservationExporterOptions };
39
+ //# sourceMappingURL=exporters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporters.d.ts","names":[],"sources":["../../src/observability/exporters.ts"],"mappings":";;;;;cAWa,qCAAqC;WACvC;WACA;mBACQ;mBACA;EAEjB,YAAY;EAKZ,OAAO,OAAO,kBAAkB,SAAS,cAAc,QAAQ;EAM/D,mBAAmB;EAInB,oBAAoB;EAIpB;;UAMe;WACN;WACA,+BAA+B;WAC/B;WACA;WACA;;;cAIE,mCAAmC;WACrC;WACA,8BAA8B;WAC9B,UAAU;EACnB;UACQ;mBACS;mBACA;EAEjB,YAAY,UAAS;EAQrB,OAAO,OAAO,kBAAkB,QAAQ,cAAc,QAAQ;EAc9D,SAAS,SAAS,cAAc"}
@@ -0,0 +1,2 @@
1
+ import{deepFreeze as e}from"../primitives/freeze.js";import{createOperationId as t}from"../observation/context.js";var n=class{id;supportedBoundaries=Object.freeze([`none`]);retained=[];retainedBatches=[];constructor(e=`memory`){if(e.trim().length===0)throw TypeError(`memory exporter id must be non-empty`);this.id=e}export(e,t){return this.retainedBatches.push(e),this.retained.push(...e.events),Promise.resolve(Object.freeze({batchId:e.batchId,accepted:!0,retryable:!1}))}events(){return e([...this.retained])}batches(){return e([...this.retainedBatches])}clear(){this.retained.length=0,this.retainedBatches.length=0}},r=class{id;supportedBoundaries;exported=[];shutdownCalls=0;failuresRemaining;retryable;rejectAck;constructor(e={}){this.id=e.id??`test-${t()}`,this.supportedBoundaries=Object.freeze([...e.supportedBoundaries??[`none`]]),this.failuresRemaining=e.failExports??0,this.retryable=e.retryable??!0,this.rejectAck=e.rejectAck??!1}export(e,t){return t.aborted?Promise.reject(t.reason??Error(`export aborted`)):(this.exported.push(e),this.failuresRemaining>0?(this.failuresRemaining--,Promise.reject(Error(`test exporter failure`))):Promise.resolve(Object.freeze({batchId:this.rejectAck?`${e.batchId}-wrong`:e.batchId,accepted:!this.rejectAck,retryable:this.retryable})))}shutdown(e){return this.shutdownCalls++,Promise.resolve()}};export{n as MemoryObservationExporter,r as TestObservationExporter};
2
+ //# sourceMappingURL=exporters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporters.js","names":[],"sources":["../../src/observability/exporters.ts"],"sourcesContent":["import {\n deepFreeze,\n} from '../primitives/index.ts'\nimport {\n createOperationId,\n type ObservationBoundary,\n type ObservationEvent,\n} from '../observation/index.ts'\nimport type { ExportAck, ObservationBatch, ObservationExporter } from './types.ts'\n\n/** Memory-only exporter for tests and local inspection. It cannot claim durability. */\nexport class MemoryObservationExporter implements ObservationExporter {\n readonly id: string\n readonly supportedBoundaries = Object.freeze(['none'] as const)\n private readonly retained: ObservationEvent[] = []\n private readonly retainedBatches: ObservationBatch[] = []\n\n constructor(id = 'memory') {\n if (id.trim().length === 0) throw new TypeError('memory exporter id must be non-empty')\n this.id = id\n }\n\n export(batch: ObservationBatch, _signal: AbortSignal): Promise<ExportAck> {\n this.retainedBatches.push(batch)\n this.retained.push(...batch.events)\n return Promise.resolve(Object.freeze({ batchId: batch.batchId, accepted: true, retryable: false }))\n }\n\n events(): readonly ObservationEvent[] {\n return deepFreeze([...this.retained])\n }\n\n batches(): readonly ObservationBatch[] {\n return deepFreeze([...this.retainedBatches])\n }\n\n clear(): void {\n this.retained.length = 0\n this.retainedBatches.length = 0\n }\n}\n\nexport interface TestObservationExporterOptions {\n readonly id?: string\n readonly supportedBoundaries?: readonly ObservationBoundary[]\n readonly failExports?: number\n readonly retryable?: boolean\n readonly rejectAck?: boolean\n}\n\n/** Deterministic programmable exporter used by delivery and fault-injection tests. */\nexport class TestObservationExporter implements ObservationExporter {\n readonly id: string\n readonly supportedBoundaries: readonly ObservationBoundary[]\n readonly exported: ObservationBatch[] = []\n shutdownCalls = 0\n private failuresRemaining: number\n private readonly retryable: boolean\n private readonly rejectAck: boolean\n\n constructor(options: TestObservationExporterOptions = {}) {\n this.id = options.id ?? `test-${createOperationId()}`\n this.supportedBoundaries = Object.freeze([...(options.supportedBoundaries ?? ['none'])])\n this.failuresRemaining = options.failExports ?? 0\n this.retryable = options.retryable ?? true\n this.rejectAck = options.rejectAck ?? false\n }\n\n export(batch: ObservationBatch, signal: AbortSignal): Promise<ExportAck> {\n if (signal.aborted) return Promise.reject(signal.reason ?? new Error('export aborted'))\n this.exported.push(batch)\n if (this.failuresRemaining > 0) {\n this.failuresRemaining--\n return Promise.reject(new Error('test exporter failure'))\n }\n return Promise.resolve(Object.freeze({\n batchId: this.rejectAck ? `${batch.batchId}-wrong` : batch.batchId,\n accepted: !this.rejectAck,\n retryable: this.retryable,\n }))\n }\n\n shutdown(_signal: AbortSignal): Promise<void> {\n this.shutdownCalls++\n return Promise.resolve()\n }\n}\n"],"mappings":"mHAWA,IAAa,EAAb,KAAsE,CACpE,GACA,oBAA+B,OAAO,OAAO,CAAC,MAAM,CAAU,EAC9D,SAAgD,CAAC,EACjD,gBAAuD,CAAC,EAExD,YAAY,EAAK,SAAU,CACzB,GAAI,EAAG,KAAK,CAAC,CAAC,SAAW,EAAG,MAAU,UAAU,sCAAsC,EACtF,KAAK,GAAK,CACZ,CAEA,OAAO,EAAyB,EAA0C,CAGxE,OAFA,KAAK,gBAAgB,KAAK,CAAK,EAC/B,KAAK,SAAS,KAAK,GAAG,EAAM,MAAM,EAC3B,QAAQ,QAAQ,OAAO,OAAO,CAAE,QAAS,EAAM,QAAS,SAAU,GAAM,UAAW,EAAM,CAAC,CAAC,CACpG,CAEA,QAAsC,CACpC,OAAO,EAAW,CAAC,GAAG,KAAK,QAAQ,CAAC,CACtC,CAEA,SAAuC,CACrC,OAAO,EAAW,CAAC,GAAG,KAAK,eAAe,CAAC,CAC7C,CAEA,OAAc,CACZ,KAAK,SAAS,OAAS,EACvB,KAAK,gBAAgB,OAAS,CAChC,CACF,EAWa,EAAb,KAAoE,CAClE,GACA,oBACA,SAAwC,CAAC,EACzC,cAAgB,EAChB,kBACA,UACA,UAEA,YAAY,EAA0C,CAAC,EAAG,CACxD,KAAK,GAAK,EAAQ,IAAM,QAAQ,EAAkB,IAClD,KAAK,oBAAsB,OAAO,OAAO,CAAC,GAAI,EAAQ,qBAAuB,CAAC,MAAM,CAAE,CAAC,EACvF,KAAK,kBAAoB,EAAQ,aAAe,EAChD,KAAK,UAAY,EAAQ,WAAa,GACtC,KAAK,UAAY,EAAQ,WAAa,EACxC,CAEA,OAAO,EAAyB,EAAyC,CAOvE,OANI,EAAO,QAAgB,QAAQ,OAAO,EAAO,QAAc,MAAM,gBAAgB,CAAC,GACtF,KAAK,SAAS,KAAK,CAAK,EACpB,KAAK,kBAAoB,GAC3B,KAAK,oBACE,QAAQ,OAAW,MAAM,uBAAuB,CAAC,GAEnD,QAAQ,QAAQ,OAAO,OAAO,CACnC,QAAS,KAAK,UAAY,GAAG,EAAM,QAAQ,QAAU,EAAM,QAC3D,SAAU,CAAC,KAAK,UAChB,UAAW,KAAK,SAClB,CAAC,CAAC,EACJ,CAEA,SAAS,EAAqC,CAE5C,MADA,MAAK,gBACE,QAAQ,QAAQ,CACzB,CACF"}
@@ -0,0 +1,2 @@
1
+ import{deepFreeze as e}from"../primitives/freeze.js";import{createObservationRunScope as t,createOperationId as n}from"../observation/context.js";import{createCoreSpan as r}from"../observation/port.js";const i={trace:0,debug:1,info:2,warn:3,error:4,fatal:5};function a(t){try{return e(structuredClone(t))}catch(e){throw TypeError(`logger fields must be structured-cloneable JSON`,{cause:e})}}function o(e,i){let a=i?.invocation?.scope??t(),o=i?.correlation??i?.invocation?.correlation,s;if(o?.traceId!==void 0&&o.spanId!==void 0&&o.parentSpanId!==void 0&&o.runId!==void 0)s=o;else{let e=o?.runId??n();s=r({name:`sdk.integration.request`,runId:e,startedAt:new Date().toISOString(),monotonicMs:a.monotonicMs()}).correlation}return{correlation:s,resource:i?.resource??i?.invocation?.resource??e.resource,scope:a}}var s=class e{target;context;boundFields;constructor(e,t,n){this.target=e,this.context=t,this.boundFields=n}child(t){return new e(this.target,this.context,a({...this.boundFields,...t}))}trace(e,t){this.log(`trace`,e,t)}debug(e,t){this.log(`debug`,e,t)}info(e,t){this.log(`info`,e,t)}warn(e,t){this.log(`warn`,e,t)}error(e,t){this.log(`error`,e,t)}fatal(e,t){this.log(`fatal`,e,t)}log(e,t,r={}){if(typeof t!=`string`)throw TypeError(`logger message must be a string`);if(i[e]<i[this.target.minimumLevel])return;let o=e===`trace`||e===`debug`?`verbose`:e===`error`||e===`fatal`?`critical`:`normal`;this.target.emit({schemaVersion:1,eventId:n(),sequence:this.context.scope.nextSequence(),name:`sdk.log`,phase:`point`,occurredAt:new Date().toISOString(),monotonicMs:this.context.scope.monotonicMs(),priority:o,resource:this.context.resource,correlation:this.context.correlation,data:{level:e,message:t,fields:a({...this.boundFields,...r})}})}};function c(e,t){return new s(e,o(e,t),a({...t?.fields??{}}))}export{c as createBusLogger};
2
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","names":[],"sources":["../../src/observability/logger.ts"],"sourcesContent":["import {\n deepFreeze,\n type JsonObject,\n} from '../primitives/index.ts'\nimport {\n createCoreSpan,\n createObservationRunScope,\n createOperationId,\n type CorrelationContext,\n type ObservationEvent,\n type ObservationResource,\n type ObservationRunScope,\n} from '../observation/index.ts'\nimport type { LoggerContext, LogLevel, SdkLogger } from './types.ts'\n\nconst LEVEL_ORDER: Readonly<Record<LogLevel, number>> = {\n trace: 0, debug: 1, info: 2, warn: 3, error: 4, fatal: 5,\n}\n\ninterface LoggerTarget {\n readonly minimumLevel: LogLevel\n readonly resource: ObservationResource\n emit(event: ObservationEvent): void\n}\n\ninterface ResolvedLoggerContext {\n readonly correlation: CorrelationContext\n readonly resource: ObservationResource\n readonly scope: ObservationRunScope\n}\n\nfunction cloneFields(fields: Readonly<JsonObject>): Readonly<JsonObject> {\n try { return deepFreeze(structuredClone(fields)) }\n catch (error) { throw new TypeError('logger fields must be structured-cloneable JSON', { cause: error }) }\n}\n\nfunction resolveContext(target: LoggerTarget, input: LoggerContext | undefined): ResolvedLoggerContext {\n const scope = input?.invocation?.scope ?? createObservationRunScope()\n const supplied = input?.correlation ?? input?.invocation?.correlation\n let correlation: CorrelationContext\n if (supplied?.traceId !== undefined && supplied.spanId !== undefined\n && supplied.parentSpanId !== undefined && supplied.runId !== undefined) {\n correlation = supplied as CorrelationContext\n } else {\n const runId = supplied?.runId ?? createOperationId()\n correlation = createCoreSpan({\n name: 'sdk.integration.request', runId,\n startedAt: new Date().toISOString(), monotonicMs: scope.monotonicMs(),\n }).correlation\n }\n return {\n correlation,\n resource: input?.resource ?? input?.invocation?.resource ?? target.resource,\n scope,\n }\n}\n\nclass BusLogger implements SdkLogger {\n constructor(\n private readonly target: LoggerTarget,\n private readonly context: ResolvedLoggerContext,\n private readonly boundFields: Readonly<JsonObject>,\n ) {}\n\n child(fields: Readonly<JsonObject>): SdkLogger {\n return new BusLogger(this.target, this.context, cloneFields({ ...this.boundFields, ...fields }))\n }\n\n trace(message: string, fields?: Readonly<JsonObject>): void { this.log('trace', message, fields) }\n debug(message: string, fields?: Readonly<JsonObject>): void { this.log('debug', message, fields) }\n info(message: string, fields?: Readonly<JsonObject>): void { this.log('info', message, fields) }\n warn(message: string, fields?: Readonly<JsonObject>): void { this.log('warn', message, fields) }\n error(message: string, fields?: Readonly<JsonObject>): void { this.log('error', message, fields) }\n fatal(message: string, fields?: Readonly<JsonObject>): void { this.log('fatal', message, fields) }\n\n private log(level: LogLevel, message: string, fields: Readonly<JsonObject> = {}): void {\n if (typeof message !== 'string') throw new TypeError('logger message must be a string')\n if (LEVEL_ORDER[level] < LEVEL_ORDER[this.target.minimumLevel]) return\n const priority = level === 'trace' || level === 'debug'\n ? 'verbose'\n : level === 'error' || level === 'fatal' ? 'critical' : 'normal'\n this.target.emit({\n schemaVersion: 1,\n eventId: createOperationId(),\n sequence: this.context.scope.nextSequence(),\n name: 'sdk.log',\n phase: 'point',\n occurredAt: new Date().toISOString(),\n monotonicMs: this.context.scope.monotonicMs(),\n priority,\n resource: this.context.resource,\n correlation: this.context.correlation,\n data: { level, message, fields: cloneFields({ ...this.boundFields, ...fields }) },\n })\n }\n}\n\nexport function createBusLogger(target: LoggerTarget, context?: LoggerContext): SdkLogger {\n return new BusLogger(target, resolveContext(target, context), cloneFields({ ...(context?.fields ?? {}) }))\n}\n"],"mappings":"0MAeA,MAAM,EAAkD,CACtD,MAAO,EAAG,MAAO,EAAG,KAAM,EAAG,KAAM,EAAG,MAAO,EAAG,MAAO,CACzD,EAcA,SAAS,EAAY,EAAoD,CACvE,GAAI,CAAE,OAAO,EAAW,gBAAgB,CAAM,CAAC,CAAE,OAC1C,EAAO,CAAE,MAAU,UAAU,kDAAmD,CAAE,MAAO,CAAM,CAAC,CAAE,CAC3G,CAEA,SAAS,EAAe,EAAsB,EAAyD,CACrG,IAAM,EAAQ,GAAO,YAAY,OAAS,EAA0B,EAC9D,EAAW,GAAO,aAAe,GAAO,YAAY,YACtD,EACJ,GAAI,GAAU,UAAY,IAAA,IAAa,EAAS,SAAW,IAAA,IACtD,EAAS,eAAiB,IAAA,IAAa,EAAS,QAAU,IAAA,GAC7D,EAAc,MACT,CACL,IAAM,EAAQ,GAAU,OAAS,EAAkB,EACnD,EAAc,EAAe,CAC3B,KAAM,0BAA2B,QACjC,UAAW,IAAI,KAAK,CAAA,CAAE,YAAY,EAAG,YAAa,EAAM,YAAY,CACtE,CAAC,CAAC,CAAC,WACL,CACA,MAAO,CACL,cACA,SAAU,GAAO,UAAY,GAAO,YAAY,UAAY,EAAO,SACnE,OACF,CACF,CAEA,IAAM,EAAN,MAAM,CAA+B,CAEhB,OACA,QACA,YAHnB,YACE,EACA,EACA,EACA,CAHiB,KAAA,OAAA,EACA,KAAA,QAAA,EACA,KAAA,YAAA,CAChB,CAEH,MAAM,EAAyC,CAC7C,OAAO,IAAI,EAAU,KAAK,OAAQ,KAAK,QAAS,EAAY,CAAE,GAAG,KAAK,YAAa,GAAG,CAAO,CAAC,CAAC,CACjG,CAEA,MAAM,EAAiB,EAAqC,CAAE,KAAK,IAAI,QAAS,EAAS,CAAM,CAAE,CACjG,MAAM,EAAiB,EAAqC,CAAE,KAAK,IAAI,QAAS,EAAS,CAAM,CAAE,CACjG,KAAK,EAAiB,EAAqC,CAAE,KAAK,IAAI,OAAQ,EAAS,CAAM,CAAE,CAC/F,KAAK,EAAiB,EAAqC,CAAE,KAAK,IAAI,OAAQ,EAAS,CAAM,CAAE,CAC/F,MAAM,EAAiB,EAAqC,CAAE,KAAK,IAAI,QAAS,EAAS,CAAM,CAAE,CACjG,MAAM,EAAiB,EAAqC,CAAE,KAAK,IAAI,QAAS,EAAS,CAAM,CAAE,CAEjG,IAAY,EAAiB,EAAiB,EAA+B,CAAC,EAAS,CACrF,GAAI,OAAO,GAAY,SAAU,MAAU,UAAU,iCAAiC,EACtF,GAAI,EAAY,GAAS,EAAY,KAAK,OAAO,cAAe,OAChE,IAAM,EAAW,IAAU,SAAW,IAAU,QAC5C,UACA,IAAU,SAAW,IAAU,QAAU,WAAa,SAC1D,KAAK,OAAO,KAAK,CACf,cAAe,EACf,QAAS,EAAkB,EAC3B,SAAU,KAAK,QAAQ,MAAM,aAAa,EAC1C,KAAM,UACN,MAAO,QACP,WAAY,IAAI,KAAK,CAAA,CAAE,YAAY,EACnC,YAAa,KAAK,QAAQ,MAAM,YAAY,EAC5C,WACA,SAAU,KAAK,QAAQ,SACvB,YAAa,KAAK,QAAQ,YAC1B,KAAM,CAAE,QAAO,UAAS,OAAQ,EAAY,CAAE,GAAG,KAAK,YAAa,GAAG,CAAO,CAAC,CAAE,CAClF,CAAC,CACH,CACF,EAEA,SAAgB,EAAgB,EAAsB,EAAoC,CACxF,OAAO,IAAI,EAAU,EAAQ,EAAe,EAAQ,CAAO,EAAG,EAAY,CAAE,GAAI,GAAS,QAAU,CAAC,CAAG,CAAC,CAAC,CAC3G"}
@@ -0,0 +1,12 @@
1
+ import { ObservationEvent } from "../observation/event.js";
2
+ import { LogProjection, MetricProjection, TraceProjection } from "./types.js";
3
+ //#region src/observability/projections.d.ts
4
+ /** Project one lifecycle event into a backend-neutral trace record. */
5
+ declare function projectTrace(event: ObservationEvent): TraceProjection | undefined;
6
+ /** Project `sdk.log` while retaining explicit correlation. */
7
+ declare function projectLog(event: ObservationEvent): LogProjection | undefined;
8
+ /** Project bounded-cardinality metrics; IDs, URLs, model IDs, and tool names are excluded. */
9
+ declare function projectMetrics(event: ObservationEvent): readonly MetricProjection[];
10
+ //#endregion
11
+ export { projectLog, projectMetrics, projectTrace };
12
+ //# sourceMappingURL=projections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projections.d.ts","names":[],"sources":["../../src/observability/projections.ts"],"mappings":";;;;iBAmBgB,aAAa,OAAO,mBAAmB;;iBAmBvC,WAAW,OAAO,mBAAmB;;iBAuDrC,eAAe,OAAO,4BAA4B"}
@@ -0,0 +1,2 @@
1
+ function e(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function t(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function n(e){if(e.name===`sdk.log`||e.name===`sdk.exporter.state`||e.name===`sdk.observer.failure`)return;let n=typeof e.data.status==`string`?e.data.status:void 0,r=t(e.data.durationMs);return Object.freeze({eventId:e.eventId,name:e.name,phase:e.phase,traceId:e.correlation.traceId,spanId:e.correlation.spanId,parentSpanId:e.correlation.parentSpanId,...n===void 0?{}:{status:n},...r===void 0?{}:{durationMs:r}})}function r(t){if(t.name!==`sdk.log`)return;let n=t.data.level,r=t.data.message,i=e(t.data.fields);if(!(![`trace`,`debug`,`info`,`warn`,`error`,`fatal`].includes(String(n))||typeof r!=`string`||i===void 0))return Object.freeze({eventId:t.eventId,level:n,message:r,fields:i,traceId:t.correlation.traceId,spanId:t.correlation.spanId})}function i(t){let n=e(t.data.error);return Object.freeze({...typeof t.data.provider==`string`?{provider:t.data.provider}:{},...typeof t.data.operation==`string`?{operation:t.data.operation}:{},...typeof t.data.status==`string`?{status:t.data.status}:{},...typeof n?.code==`string`?{errorCode:n.code}:{},...typeof t.data.executionMode==`string`?{executionMode:t.data.executionMode}:{}})}function a(n){let r=e(n.data.usageReport);if(r===void 0)return[];let a=r.coverage,o=[];typeof a==`string`&&o.push(Object.freeze({name:`ai_agent_sdk.usage.coverage`,value:1,attributes:Object.freeze({...i(n),coverage:a})}));for(let[a,s]of[[`reported`,e(r.reported)],[`estimated`,e(r.estimated)]])if(s!==void 0)for(let[e,r]of[[`inputTokens`,`input`],[`outputTokens`,`output`],[`cacheReadTokens`,`cache-read`],[`cacheWriteTokens`,`cache-write`],[`reasoningTokens`,`reasoning`]]){let c=t(s[e]);c!==void 0&&o.push(Object.freeze({name:`ai_agent_sdk.token.usage`,value:c,attributes:Object.freeze({...i(n),tokenType:r,source:a})}))}return o}function o(e){let n=[],r=t(e.data.durationMs),o=e.name===`sdk.model.call`?`ai_agent_sdk.model.call.duration`:e.name===`sdk.provider.attempt`?`ai_agent_sdk.provider.attempt.duration`:e.name===`sdk.tool.call`?`ai_agent_sdk.tool.call.duration`:void 0;return e.phase===`end`&&o!==void 0&&r!==void 0&&n.push(Object.freeze({name:o,value:r,attributes:i(e)})),e.name===`sdk.provider.retry.scheduled`&&n.push(Object.freeze({name:`ai_agent_sdk.provider.retry`,value:1,attributes:i(e)})),n.push(...a(e)),Object.freeze(n)}export{r as projectLog,o as projectMetrics,n as projectTrace};
2
+ //# sourceMappingURL=projections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projections.js","names":[],"sources":["../../src/observability/projections.ts"],"sourcesContent":["import {\n type JsonObject,\n} from '../primitives/index.ts'\nimport {\n type ObservationEvent,\n} from '../observation/index.ts'\nimport type { LogLevel, LogProjection, MetricProjection, TraceProjection } from './types.ts'\n\nfunction object(value: unknown): Readonly<Record<string, unknown>> | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n}\n\nfunction finite(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\n/** Project one lifecycle event into a backend-neutral trace record. */\nexport function projectTrace(event: ObservationEvent): TraceProjection | undefined {\n if (event.name === 'sdk.log' || event.name === 'sdk.exporter.state' || event.name === 'sdk.observer.failure') {\n return undefined\n }\n const status = typeof event.data.status === 'string' ? event.data.status : undefined\n const durationMs = finite(event.data.durationMs)\n return Object.freeze({\n eventId: event.eventId,\n name: event.name,\n phase: event.phase,\n traceId: event.correlation.traceId,\n spanId: event.correlation.spanId,\n parentSpanId: event.correlation.parentSpanId,\n ...status === undefined ? {} : { status },\n ...durationMs === undefined ? {} : { durationMs },\n })\n}\n\n/** Project `sdk.log` while retaining explicit correlation. */\nexport function projectLog(event: ObservationEvent): LogProjection | undefined {\n if (event.name !== 'sdk.log') return undefined\n const level = event.data.level\n const message = event.data.message\n const fields = object(event.data.fields)\n if (!['trace', 'debug', 'info', 'warn', 'error', 'fatal'].includes(String(level))\n || typeof message !== 'string' || fields === undefined) return undefined\n return Object.freeze({\n eventId: event.eventId,\n level: level as LogLevel,\n message,\n fields: fields as JsonObject,\n traceId: event.correlation.traceId,\n spanId: event.correlation.spanId,\n })\n}\n\nfunction safeAttributes(event: ObservationEvent): JsonObject {\n const error = object(event.data.error)\n return Object.freeze({\n ...typeof event.data.provider === 'string' ? { provider: event.data.provider } : {},\n ...typeof event.data.operation === 'string' ? { operation: event.data.operation } : {},\n ...typeof event.data.status === 'string' ? { status: event.data.status } : {},\n ...typeof error?.code === 'string' ? { errorCode: error.code } : {},\n ...typeof event.data.executionMode === 'string' ? { executionMode: event.data.executionMode } : {},\n })\n}\n\nfunction usageMetrics(event: ObservationEvent): MetricProjection[] {\n const report = object(event.data.usageReport)\n if (report === undefined) return []\n const coverage = report.coverage\n const output: MetricProjection[] = []\n if (typeof coverage === 'string') output.push(Object.freeze({\n name: 'ai_agent_sdk.usage.coverage', value: 1,\n attributes: Object.freeze({ ...safeAttributes(event), coverage }),\n }))\n for (const [source, counters] of [['reported', object(report.reported)], ['estimated', object(report.estimated)]] as const) {\n if (counters === undefined) continue\n for (const [key, tokenType] of [\n ['inputTokens', 'input'], ['outputTokens', 'output'], ['cacheReadTokens', 'cache-read'],\n ['cacheWriteTokens', 'cache-write'], ['reasoningTokens', 'reasoning'],\n ] as const) {\n const value = finite(counters[key])\n if (value === undefined) continue\n output.push(Object.freeze({\n name: 'ai_agent_sdk.token.usage', value,\n attributes: Object.freeze({ ...safeAttributes(event), tokenType, source }),\n }))\n }\n }\n return output\n}\n\n/** Project bounded-cardinality metrics; IDs, URLs, model IDs, and tool names are excluded. */\nexport function projectMetrics(event: ObservationEvent): readonly MetricProjection[] {\n const output: MetricProjection[] = []\n const durationMs = finite(event.data.durationMs)\n const durationName = event.name === 'sdk.model.call'\n ? 'ai_agent_sdk.model.call.duration'\n : event.name === 'sdk.provider.attempt'\n ? 'ai_agent_sdk.provider.attempt.duration'\n : event.name === 'sdk.tool.call'\n ? 'ai_agent_sdk.tool.call.duration'\n : undefined\n if (event.phase === 'end' && durationName !== undefined && durationMs !== undefined) {\n output.push(Object.freeze({ name: durationName, value: durationMs, attributes: safeAttributes(event) }))\n }\n if (event.name === 'sdk.provider.retry.scheduled') {\n output.push(Object.freeze({ name: 'ai_agent_sdk.provider.retry', value: 1, attributes: safeAttributes(event) }))\n }\n output.push(...usageMetrics(event))\n return Object.freeze(output)\n}\n"],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { JsonObject } from "../primitives/json.js";
2
+ import { CorrelationContext } from "../observation/context.js";
3
+ import { ObservationEvent, ObservationResource } from "../observation/event.js";
4
+ import { CaptureReceipt, ObservationBoundary, ObservationPort } from "../observation/port.js";
5
+ import { IntegrationOperationEvidenceFields, LogLevel, SdkLogger } from "../logging/types.js";
6
+ import { ModelInvocationContext } from "../observation/report.js";
7
+ import { ContentRedactor, ObservationContentPolicy, ObservationHealthSnapshot, ObservationProcessor } from "../observation/telemetry-types.js";
8
+ //#region src/observability/types.d.ts
9
+ interface ObservationBatch {
10
+ readonly schemaVersion: 1;
11
+ readonly batchId: string;
12
+ readonly createdAt: string;
13
+ readonly events: readonly ObservationEvent[];
14
+ }
15
+ interface ExportAck {
16
+ readonly batchId: string;
17
+ readonly accepted: boolean;
18
+ readonly retryable: boolean;
19
+ }
20
+ interface ObservationExporter {
21
+ readonly id: string;
22
+ /** Boundaries this exporter can honestly reach. Omission means memory-only. */
23
+ readonly supportedBoundaries?: readonly ObservationBoundary[];
24
+ /**
25
+ * Start local staging synchronously after privacy processing and queue
26
+ * acceptance. Any returned promise is completed by `export`; it is not a
27
+ * durability claim and capture never awaits it.
28
+ */
29
+ stage?(event: ObservationEvent): void | Promise<void>;
30
+ export(batch: ObservationBatch, signal: AbortSignal): Promise<ExportAck>;
31
+ shutdown?(signal: AbortSignal): Promise<void>;
32
+ }
33
+ interface ObservationExporterRegistration {
34
+ readonly exporter: ObservationExporter;
35
+ readonly requirement: 'required' | 'best-effort';
36
+ readonly boundary: ObservationBoundary;
37
+ }
38
+ interface FlushResult {
39
+ readonly complete: boolean;
40
+ readonly exportedEvents: number;
41
+ readonly pendingEvents: number;
42
+ readonly rejectedCritical: number;
43
+ readonly timedOut: boolean;
44
+ }
45
+ interface LoggerContext {
46
+ readonly invocation?: Pick<ModelInvocationContext, 'correlation' | 'resource' | 'scope'>;
47
+ readonly correlation?: CorrelationContext;
48
+ readonly resource?: ObservationResource;
49
+ readonly fields?: Readonly<JsonObject>;
50
+ }
51
+ interface ObservabilityOptions {
52
+ readonly mode?: ObservationPort['mode'];
53
+ readonly resource?: Partial<Omit<ObservationResource, 'sdkName'>>;
54
+ readonly exporters?: readonly ObservationExporterRegistration[];
55
+ readonly processors?: readonly ObservationProcessor[];
56
+ readonly content?: ObservationContentPolicy;
57
+ readonly redactors?: readonly ContentRedactor[];
58
+ readonly includeErrorStacks?: boolean;
59
+ readonly minimumLogLevel?: LogLevel;
60
+ readonly maxQueueEvents?: number;
61
+ readonly maxQueueBytes?: number;
62
+ readonly maxBatchEvents?: number;
63
+ readonly maxBatchBytes?: number;
64
+ readonly flushTimeoutMs?: number;
65
+ readonly shutdownTimeoutMs?: number;
66
+ readonly onHealthChange?: (health: ObservationHealthSnapshot) => void;
67
+ /** Optional synchronous tracing backend; invalid spans fall back to core IDs. */
68
+ readonly openSpan?: ObservationPort['openSpan'];
69
+ }
70
+ interface Observability extends ObservationPort {
71
+ readonly resource: ObservationResource;
72
+ checkpoint(event: ObservationEvent, signal?: AbortSignal): Promise<CaptureReceipt>;
73
+ logger(context?: LoggerContext): SdkLogger;
74
+ health(): ObservationHealthSnapshot;
75
+ flush(signal?: AbortSignal): Promise<FlushResult>;
76
+ shutdown(signal?: AbortSignal): Promise<FlushResult>;
77
+ }
78
+ interface TraceProjection {
79
+ readonly eventId: string;
80
+ readonly name: string;
81
+ readonly phase: string;
82
+ readonly traceId: string;
83
+ readonly spanId: string;
84
+ readonly parentSpanId: string | null;
85
+ readonly status?: string;
86
+ readonly durationMs?: number;
87
+ }
88
+ interface LogProjection {
89
+ readonly eventId: string;
90
+ readonly level: LogLevel;
91
+ readonly message: string;
92
+ readonly fields: JsonObject;
93
+ readonly traceId: string;
94
+ readonly spanId: string;
95
+ }
96
+ interface MetricProjection {
97
+ readonly name: string;
98
+ readonly value: number;
99
+ readonly attributes: JsonObject;
100
+ }
101
+ //#endregion
102
+ export { type ContentRedactor, ExportAck, FlushResult, type IntegrationOperationEvidenceFields, type LogLevel, LogProjection, LoggerContext, MetricProjection, Observability, ObservabilityOptions, ObservationBatch, type ObservationContentPolicy, ObservationExporter, ObservationExporterRegistration, type ObservationHealthSnapshot, type ObservationProcessor, type SdkLogger, TraceProjection };
103
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/observability/types.ts"],"mappings":";;;;;;;;UA4BiB;WACN;WACA;WACA;WACA,iBAAiB;;UAGX;WACN;WACA;WACA;;UAGM;WACN;;WAEA,+BAA+B;;;;;;EAMxC,OAAO,OAAO,0BAA0B;EACxC,OAAO,OAAO,kBAAkB,QAAQ,cAAc,QAAQ;EAC9D,UAAU,QAAQ,cAAc;;UAGjB;WACN,UAAU;WACV;WACA,UAAU;;UAGJ;WACN;WACA;WACA;WACA;WACA;;UAGM;WACN,aAAa,KAAK;WAClB,cAAc;WACd,WAAW;WACX,SAAS,SAAS;;UAGZ;WACN,OAAO;WACP,WAAW,QAAQ,KAAK;WACxB,qBAAqB;WACrB,sBAAsB;WACtB,UAAU;WACV,qBAAqB;WACrB;WACA,kBAAkB;WAClB;WACA;WACA;WACA;WACA;WACA;WACA,kBAAkB,QAAQ;;WAE1B,WAAW;;UAGL,sBAAsB;WAC5B,UAAU;EACnB,WAAW,OAAO,kBAAkB,SAAS,cAAc,QAAQ;EACnE,OAAO,UAAU,gBAAgB;EACjC,UAAU;EACV,MAAM,SAAS,cAAc,QAAQ;EACrC,SAAS,SAAS,cAAc,QAAQ;;UAGzB;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;UAGM;WACN;WACA,OAAO;WACP;WACA,QAAQ;WACR;WACA;;UAGM;WACN;WACA;WACA,YAAY"}
@@ -0,0 +1,20 @@
1
+ import { JsonObject, JsonValue } from "./primitives/json.js";
2
+ import { ObservationEvent, ObservationResource, ObservationResourceInput, SafeErrorRecord } from "./observation/event.js";
3
+ import { ObservationBoundary, ObservationDeliverySummary, ObservationPort } from "./observation/port.js";
4
+ import { AttemptUsageReport, UsageCounters, UsageCoverage } from "./observation/usage.js";
5
+ import { IntegrationOperationEvidenceFields, LogLevel, SdkLogger } from "./logging/types.js";
6
+ import { ModelCallReport } from "./observation/report.js";
7
+ import { UsageCoverageSummary } from "./support-safe/error.js";
8
+ import { RunUsageReport, UsageEstimationInput, UsageEstimator, UsagePolicy } from "./agent/accounting/report.js";
9
+ import { ObservationDeliveryAck, ObservationDeliveryBatch, ObservationExportItem, RunReport, RunTerminalRecord } from "./agent/accounting/delivery-types.js";
10
+ import { OBSERVATION_EXPORTER_API_VERSION, ObservationExporterPlugin, ObservationExporterPluginDefinition, RuntimeObservationExporterRegistration } from "./composition/exporter/types.js";
11
+ import { ContentRedactor, ObservationContentPolicy, ObservationHealthSnapshot, ObservationProcessor } from "./observation/telemetry-types.js";
12
+ import { RuntimeLoggerContext } from "./composition/logging/logger.js";
13
+ import { RuntimeObservationHealthSnapshot } from "./composition/observation/health.js";
14
+ import { DiagnosticSnapshot } from "./composition/runtime/types.js";
15
+ import { ExportAck, FlushResult, LogProjection, LoggerContext, MetricProjection, Observability, ObservabilityOptions, ObservationBatch, ObservationExporter, ObservationExporterRegistration, TraceProjection } from "./observability/types.js";
16
+ import { defineObservationExporter } from "./composition/exporter/definition.js";
17
+ import { createObservability } from "./observability/bus.js";
18
+ import { MemoryObservationExporter, TestObservationExporter, TestObservationExporterOptions } from "./observability/exporters.js";
19
+ import { projectLog, projectMetrics, projectTrace } from "./observability/projections.js";
20
+ export { type AttemptUsageReport, type ContentRedactor, type DiagnosticSnapshot, type ExportAck, type FlushResult, type IntegrationOperationEvidenceFields, type JsonObject, type JsonValue, type LogLevel, type LogProjection, type LoggerContext, MemoryObservationExporter, type MetricProjection, type ModelCallReport, OBSERVATION_EXPORTER_API_VERSION, type Observability, type ObservabilityOptions, type ObservationBatch, type ObservationBoundary, type ObservationContentPolicy, type ObservationDeliveryAck, type ObservationDeliveryBatch, type ObservationDeliverySummary, type ObservationEvent, type ObservationExportItem, type ObservationExporter, type ObservationExporterPlugin, type ObservationExporterPluginDefinition, type ObservationExporterRegistration, type ObservationHealthSnapshot, type ObservationPort, type ObservationProcessor, type ObservationResource, type ObservationResourceInput, type RunReport, type RunTerminalRecord, type RunUsageReport, type RuntimeLoggerContext, type RuntimeObservationExporterRegistration, type RuntimeObservationHealthSnapshot, type SafeErrorRecord, type SdkLogger, TestObservationExporter, type TestObservationExporterOptions, type TraceProjection, type UsageCounters, type UsageCoverage, type UsageCoverageSummary, type UsageEstimationInput, type UsageEstimator, type UsagePolicy, createObservability, defineObservationExporter, projectLog, projectMetrics, projectTrace };
@@ -0,0 +1 @@
1
+ import{OBSERVATION_EXPORTER_API_VERSION as e}from"./composition/exporter/types.js";import{defineObservationExporter as t}from"./composition/exporter/definition.js";import{createObservability as n}from"./observability/bus.js";import{MemoryObservationExporter as r,TestObservationExporter as i}from"./observability/exporters.js";import{projectLog as a,projectMetrics as o,projectTrace as s}from"./observability/projections.js";export{r as MemoryObservationExporter,e as OBSERVATION_EXPORTER_API_VERSION,i as TestObservationExporter,n as createObservability,t as defineObservationExporter,a as projectLog,o as projectMetrics,s as projectTrace};
@@ -0,0 +1,2 @@
1
+ const e=Object.freeze([`none`,`local-durable`,`remote-acknowledged`]);export{e as EXPORTER_BOUNDARIES};
2
+ //# sourceMappingURL=boundaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundaries.js","names":[],"sources":["../../src/observation/boundaries.ts"],"sourcesContent":["import type { ObservationBoundary } from './port.ts'\n\nexport const EXPORTER_BOUNDARIES: readonly ObservationBoundary[] = Object.freeze([\n 'none', 'local-durable', 'remote-acknowledged',\n])\n"],"mappings":"AAEA,MAAa,EAAsD,OAAO,OAAO,CAC/E,OAAQ,gBAAiB,qBAC3B,CAAC"}
@@ -0,0 +1,39 @@
1
+ //#region src/observation/context.d.ts
2
+ declare const OBSERVATION_ID_BRAND: unique symbol;
3
+ type TraceId = string & {
4
+ readonly [OBSERVATION_ID_BRAND]: 'TraceId';
5
+ };
6
+ type SpanId = string & {
7
+ readonly [OBSERVATION_ID_BRAND]: 'SpanId';
8
+ };
9
+ interface CorrelationContext {
10
+ readonly traceId: TraceId;
11
+ readonly spanId: SpanId;
12
+ readonly parentSpanId: SpanId | null;
13
+ readonly runId: string;
14
+ readonly conversationId?: string;
15
+ readonly turnId?: string;
16
+ readonly modelCallId?: string;
17
+ readonly attemptId?: string;
18
+ readonly toolCallId?: string;
19
+ readonly providerRequestId?: string;
20
+ readonly sessionId?: string;
21
+ }
22
+ /** One synchronous sequence and monotonic clock shared by every event in a run. */
23
+ interface ObservationRunScope {
24
+ nextSequence(): number;
25
+ monotonicMs(): number;
26
+ }
27
+ /** Create an isolated run event scope. The first sequence returned is one. */
28
+ declare function createObservationRunScope(): ObservationRunScope;
29
+ declare function createTraceId(): TraceId;
30
+ declare function createSpanId(): SpanId;
31
+ /** IDs for runs, model calls, attempts, events, and other non-W3C operations. */
32
+ declare function createOperationId(): string;
33
+ declare function isTraceId(value: unknown): value is TraceId;
34
+ declare function isSpanId(value: unknown): value is SpanId;
35
+ declare function traceparent(context: Pick<CorrelationContext, 'traceId' | 'spanId'>): string;
36
+ declare function freezeCorrelation(context: CorrelationContext): CorrelationContext;
37
+ //#endregion
38
+ export { CorrelationContext, ObservationRunScope, SpanId, TraceId, createObservationRunScope, createOperationId, createSpanId, createTraceId, freezeCorrelation, isSpanId, isTraceId, traceparent };
39
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/observation/context.ts"],"mappings":";cAGc;KAEF;YAA+B;;KAC/B;YAA8B;;UAEzB;WACN,SAAS;WACT,QAAQ;WACR,cAAc;WACd;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;UAIM;EACf;EACA;;;iBAIc,6BAA6B;iBAc7B,iBAAiB;iBAIjB,gBAAgB;;iBAKhB;iBAIA,UAAU,iBAAiB,SAAS;iBAIpC,SAAS,iBAAiB,SAAS;iBAInC,YAAY,SAAS,KAAK;iBAI1B,kBAAkB,SAAS,qBAAqB"}
@@ -0,0 +1,2 @@
1
+ import{deepFreeze as e}from"../primitives/freeze.js";import{systemMonotonicNow as t,systemRandomHex as n}from"../platform/adapter.js";function r(){let e=t(),n=1;return Object.freeze({nextSequence(){if(!Number.isSafeInteger(n)||n<1)throw RangeError(`observation sequence exhausted`);return n++},monotonicMs(){return Math.max(0,t()-e)}})}function i(){return n(16)}function a(){return n(8)}function o(){return n(16)}function s(e){return typeof e==`string`&&/^[0-9a-f]{32}$/.test(e)&&!/^0+$/.test(e)}function c(e){return typeof e==`string`&&/^[0-9a-f]{16}$/.test(e)&&!/^0+$/.test(e)}function l(e){return`00-${e.traceId}-${e.spanId}-01`}function u(t){return e({...t})}export{r as createObservationRunScope,o as createOperationId,a as createSpanId,i as createTraceId,u as freezeCorrelation,c as isSpanId,s as isTraceId,l as traceparent};
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../src/observation/context.ts"],"sourcesContent":["import { deepFreeze } from '../primitives/freeze.ts'\nimport { systemMonotonicNow, systemRandomHex } from '../platform/adapter.ts'\n\ndeclare const OBSERVATION_ID_BRAND: unique symbol\n\nexport type TraceId = string & { readonly [OBSERVATION_ID_BRAND]: 'TraceId' }\nexport type SpanId = string & { readonly [OBSERVATION_ID_BRAND]: 'SpanId' }\n\nexport interface CorrelationContext {\n readonly traceId: TraceId\n readonly spanId: SpanId\n readonly parentSpanId: SpanId | null\n readonly runId: string\n readonly conversationId?: string\n readonly turnId?: string\n readonly modelCallId?: string\n readonly attemptId?: string\n readonly toolCallId?: string\n readonly providerRequestId?: string\n readonly sessionId?: string\n}\n\n/** One synchronous sequence and monotonic clock shared by every event in a run. */\nexport interface ObservationRunScope {\n nextSequence(): number\n monotonicMs(): number\n}\n\n/** Create an isolated run event scope. The first sequence returned is one. */\nexport function createObservationRunScope(): ObservationRunScope {\n const origin = systemMonotonicNow()\n let next = 1\n return Object.freeze({\n nextSequence(): number {\n if (!Number.isSafeInteger(next) || next < 1) throw new RangeError('observation sequence exhausted')\n return next++\n },\n monotonicMs(): number {\n return Math.max(0, systemMonotonicNow() - origin)\n },\n })\n}\n\nexport function createTraceId(): TraceId {\n return systemRandomHex(16) as TraceId\n}\n\nexport function createSpanId(): SpanId {\n return systemRandomHex(8) as SpanId\n}\n\n/** IDs for runs, model calls, attempts, events, and other non-W3C operations. */\nexport function createOperationId(): string {\n return systemRandomHex(16)\n}\n\nexport function isTraceId(value: unknown): value is TraceId {\n return typeof value === 'string' && /^[0-9a-f]{32}$/.test(value) && !/^0+$/.test(value)\n}\n\nexport function isSpanId(value: unknown): value is SpanId {\n return typeof value === 'string' && /^[0-9a-f]{16}$/.test(value) && !/^0+$/.test(value)\n}\n\nexport function traceparent(context: Pick<CorrelationContext, 'traceId' | 'spanId'>): string {\n return `00-${context.traceId}-${context.spanId}-01`\n}\n\nexport function freezeCorrelation(context: CorrelationContext): CorrelationContext {\n return deepFreeze({ ...context })\n}\n"],"mappings":"sIA6BA,SAAgB,GAAiD,CAC/D,IAAM,EAAS,EAAmB,EAC9B,EAAO,EACX,OAAO,OAAO,OAAO,CACnB,cAAuB,CACrB,GAAI,CAAC,OAAO,cAAc,CAAI,GAAK,EAAO,EAAG,MAAU,WAAW,gCAAgC,EAClG,MAAO,IACT,EACA,aAAsB,CACpB,OAAO,KAAK,IAAI,EAAG,EAAmB,EAAI,CAAM,CAClD,CACF,CAAC,CACH,CAEA,SAAgB,GAAyB,CACvC,OAAO,EAAgB,EAAE,CAC3B,CAEA,SAAgB,GAAuB,CACrC,OAAO,EAAgB,CAAC,CAC1B,CAGA,SAAgB,GAA4B,CAC1C,OAAO,EAAgB,EAAE,CAC3B,CAEA,SAAgB,EAAU,EAAkC,CAC1D,OAAO,OAAO,GAAU,UAAY,iBAAiB,KAAK,CAAK,GAAK,CAAC,OAAO,KAAK,CAAK,CACxF,CAEA,SAAgB,EAAS,EAAiC,CACxD,OAAO,OAAO,GAAU,UAAY,iBAAiB,KAAK,CAAK,GAAK,CAAC,OAAO,KAAK,CAAK,CACxF,CAEA,SAAgB,EAAY,EAAiE,CAC3F,MAAO,MAAM,EAAQ,QAAQ,GAAG,EAAQ,OAAO,IACjD,CAEA,SAAgB,EAAkB,EAAiD,CACjF,OAAO,EAAW,CAAE,GAAG,CAAQ,CAAC,CAClC"}
@@ -0,0 +1,50 @@
1
+ import { JsonObject, JsonValue } from "../primitives/json.js";
2
+ import { CorrelationContext } from "./context.js";
3
+ //#region src/observation/event.d.ts
4
+ type ObservationPriority = 'critical' | 'normal' | 'verbose';
5
+ type ObservationPhase = 'start' | 'end' | 'point';
6
+ type OperationStatus = 'success' | 'error' | 'aborted' | 'rejected' | 'unknown';
7
+ interface ObservationResourceInput {
8
+ readonly serviceName?: string;
9
+ readonly serviceVersion?: string;
10
+ readonly environment?: string;
11
+ readonly attributes?: Readonly<Record<string, JsonValue>>;
12
+ }
13
+ interface ObservationResource {
14
+ readonly sdkName: 'ai-agent-sdk';
15
+ readonly sdkVersion: string;
16
+ readonly serviceName?: string;
17
+ readonly serviceVersion?: string;
18
+ readonly runtime: 'browser' | 'edge' | 'node' | 'unknown';
19
+ readonly runtimeId?: string;
20
+ readonly environment?: string;
21
+ readonly attributes?: Readonly<Record<string, JsonValue>>;
22
+ }
23
+ type ObservationEventName = 'sdk.agent.run' | 'sdk.agent.turn' | 'sdk.model.call' | 'sdk.provider.attempt' | 'sdk.provider.retry.scheduled' | 'sdk.tool.call' | 'sdk.compaction' | 'sdk.hook.call' | 'sdk.user.input.wait' | 'sdk.skill.operation' | 'sdk.memory.operation' | 'sdk.credential.operation' | 'sdk.integration.request' | 'sdk.observer.failure' | 'sdk.exporter.state' | 'sdk.log';
24
+ interface ObservationEvent<Name extends ObservationEventName = ObservationEventName, Data extends JsonObject = JsonObject> {
25
+ readonly schemaVersion: 1;
26
+ readonly eventId: string;
27
+ readonly sequence: number;
28
+ readonly name: Name;
29
+ readonly phase: ObservationPhase;
30
+ readonly occurredAt: string;
31
+ readonly monotonicMs: number;
32
+ readonly priority: ObservationPriority;
33
+ readonly resource: ObservationResource;
34
+ readonly correlation: CorrelationContext;
35
+ readonly data: Data;
36
+ }
37
+ interface SafeErrorRecord {
38
+ readonly type: string;
39
+ readonly message: string;
40
+ readonly code?: string;
41
+ readonly retryable?: boolean;
42
+ readonly status?: number;
43
+ readonly causeTypes?: readonly string[];
44
+ readonly stack?: string;
45
+ }
46
+ /** Converts thrown values without retaining bodies, credentials, or stacks by default. */
47
+ declare function safeErrorRecord(value: unknown, includeStack?: boolean): SafeErrorRecord;
48
+ //#endregion
49
+ export { ObservationEvent, ObservationEventName, ObservationPhase, ObservationPriority, ObservationResource, ObservationResourceInput, OperationStatus, SafeErrorRecord, safeErrorRecord };
50
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","names":[],"sources":["../../src/observation/event.ts"],"mappings":";;;KAGY;KACA;KACA;UAEK;WACN;WACA;WACA;WACA,aAAa,SAAS,eAAe;;UAG/B;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA,aAAa,SAAS,eAAe;;KAGpC;UAkBK,iBACf,aAAa,uBAAuB,sBACpC,aAAa,aAAa;WAEjB;WACA;WACA;WACA,MAAM;WACN,OAAO;WACP;WACA;WACA,UAAU;WACV,UAAU;WACV,aAAa;WACb,MAAM;;UAGA;WACN;WACA;WACA;WACA;WACA;WACA;WACA;;;iBA6BK,gBAAgB,gBAAgB,yBAAuB"}
@@ -0,0 +1,2 @@
1
+ function e(e){try{return(typeof e==`string`?e:String(e)).slice(0,2048)}catch{return`<unrenderable value>`}}function t(e,t){try{return Reflect.get(e,t)}catch{return}}function n(e){try{return e instanceof Error}catch{return!1}}function r(r,i=!1){if(!n(r))return Object.freeze({type:typeof r,message:e(r)});let a=r,o=[],s=t(a,`cause`),c=new Set;for(;s!=null&&!c.has(s);){c.add(s);let e=n(s),r=e?t(s,`name`):void 0;o.push(typeof r==`string`&&r.length>0?r:e?`Error`:typeof s),s=e?t(s,`cause`):void 0}let l=t(a,`name`),u=t(a,`message`),d=t(a,`code`),f=t(a,`retryable`),p=t(a,`status`),m=i?t(a,`stack`):void 0;return Object.freeze({type:typeof l==`string`&&l.length>0?l:`Error`,message:e(u),...typeof d==`string`&&d.length>0?{code:d}:{},...typeof f==`boolean`?{retryable:f}:{},...typeof p==`number`&&Number.isInteger(p)?{status:p}:{},...o.length>0?{causeTypes:Object.freeze(o)}:{},...typeof m==`string`?{stack:m}:{}})}export{r as safeErrorRecord};
2
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","names":[],"sources":["../../src/observation/event.ts"],"sourcesContent":["import type { JsonObject, JsonValue } from '../primitives/json.ts'\nimport type { CorrelationContext } from './context.ts'\n\nexport type ObservationPriority = 'critical' | 'normal' | 'verbose'\nexport type ObservationPhase = 'start' | 'end' | 'point'\nexport type OperationStatus = 'success' | 'error' | 'aborted' | 'rejected' | 'unknown'\n\nexport interface ObservationResourceInput {\n readonly serviceName?: string\n readonly serviceVersion?: string\n readonly environment?: string\n readonly attributes?: Readonly<Record<string, JsonValue>>\n}\n\nexport interface ObservationResource {\n readonly sdkName: 'ai-agent-sdk'\n readonly sdkVersion: string\n readonly serviceName?: string\n readonly serviceVersion?: string\n readonly runtime: 'browser' | 'edge' | 'node' | 'unknown'\n readonly runtimeId?: string\n readonly environment?: string\n readonly attributes?: Readonly<Record<string, JsonValue>>\n}\n\nexport type ObservationEventName =\n | 'sdk.agent.run'\n | 'sdk.agent.turn'\n | 'sdk.model.call'\n | 'sdk.provider.attempt'\n | 'sdk.provider.retry.scheduled'\n | 'sdk.tool.call'\n | 'sdk.compaction'\n | 'sdk.hook.call'\n | 'sdk.user.input.wait'\n | 'sdk.skill.operation'\n | 'sdk.memory.operation'\n | 'sdk.credential.operation'\n | 'sdk.integration.request'\n | 'sdk.observer.failure'\n | 'sdk.exporter.state'\n | 'sdk.log'\n\nexport interface ObservationEvent<\n Name extends ObservationEventName = ObservationEventName,\n Data extends JsonObject = JsonObject,\n> {\n readonly schemaVersion: 1\n readonly eventId: string\n readonly sequence: number\n readonly name: Name\n readonly phase: ObservationPhase\n readonly occurredAt: string\n readonly monotonicMs: number\n readonly priority: ObservationPriority\n readonly resource: ObservationResource\n readonly correlation: CorrelationContext\n readonly data: Data\n}\n\nexport interface SafeErrorRecord {\n readonly type: string\n readonly message: string\n readonly code?: string\n readonly retryable?: boolean\n readonly status?: number\n readonly causeTypes?: readonly string[]\n readonly stack?: string\n}\n\nfunction boundedUnknownMessage(value: unknown): string {\n try {\n const rendered = typeof value === 'string' ? value : String(value)\n return rendered.slice(0, 2_048)\n } catch {\n return '<unrenderable value>'\n }\n}\n\nfunction safeRead(value: object, key: PropertyKey): unknown {\n try {\n return Reflect.get(value, key)\n } catch {\n return undefined\n }\n}\n\nfunction isError(value: unknown): value is Error {\n try {\n return value instanceof Error\n } catch {\n return false\n }\n}\n\n/** Converts thrown values without retaining bodies, credentials, or stacks by default. */\nexport function safeErrorRecord(value: unknown, includeStack = false): SafeErrorRecord {\n if (!isError(value)) return Object.freeze({ type: typeof value, message: boundedUnknownMessage(value) })\n const source = value as object\n const causeTypes: string[] = []\n let cause = safeRead(source, 'cause')\n const seen = new Set<unknown>()\n while (cause !== undefined && cause !== null && !seen.has(cause)) {\n seen.add(cause)\n const causeIsError = isError(cause)\n const causeName = causeIsError ? safeRead(cause, 'name') : undefined\n causeTypes.push(typeof causeName === 'string' && causeName.length > 0 ? causeName : causeIsError ? 'Error' : typeof cause)\n cause = causeIsError ? safeRead(cause, 'cause') : undefined\n }\n const name = safeRead(source, 'name')\n const message = safeRead(source, 'message')\n const code = safeRead(source, 'code')\n const retryable = safeRead(source, 'retryable')\n const status = safeRead(source, 'status')\n const stack = includeStack ? safeRead(source, 'stack') : undefined\n return Object.freeze({\n type: typeof name === 'string' && name.length > 0 ? name : 'Error',\n message: boundedUnknownMessage(message),\n ...typeof code === 'string' && code.length > 0 ? { code } : {},\n ...typeof retryable === 'boolean' ? { retryable } : {},\n ...typeof status === 'number' && Number.isInteger(status) ? { status } : {},\n ...causeTypes.length > 0 ? { causeTypes: Object.freeze(causeTypes) } : {},\n ...typeof stack === 'string' ? { stack } : {},\n })\n}\n"],"mappings":"AAsEA,SAAS,EAAsB,EAAwB,CACrD,GAAI,CAEF,OADiB,OAAO,GAAU,SAAW,EAAQ,OAAO,CAAK,EAAA,CACjD,MAAM,EAAG,IAAK,CAChC,MAAQ,CACN,MAAO,sBACT,CACF,CAEA,SAAS,EAAS,EAAe,EAA2B,CAC1D,GAAI,CACF,OAAO,QAAQ,IAAI,EAAO,CAAG,CAC/B,MAAQ,CACN,MACF,CACF,CAEA,SAAS,EAAQ,EAAgC,CAC/C,GAAI,CACF,OAAO,aAAiB,KAC1B,MAAQ,CACN,MAAO,EACT,CACF,CAGA,SAAgB,EAAgB,EAAgB,EAAe,GAAwB,CACrF,GAAI,CAAC,EAAQ,CAAK,EAAG,OAAO,OAAO,OAAO,CAAE,KAAM,OAAO,EAAO,QAAS,EAAsB,CAAK,CAAE,CAAC,EACvG,IAAM,EAAS,EACT,EAAuB,CAAC,EAC1B,EAAQ,EAAS,EAAQ,OAAO,EAC9B,EAAO,IAAI,IACjB,KAAO,GAAiC,MAAQ,CAAC,EAAK,IAAI,CAAK,GAAG,CAChE,EAAK,IAAI,CAAK,EACd,IAAM,EAAe,EAAQ,CAAK,EAC5B,EAAY,EAAe,EAAS,EAAO,MAAM,EAAI,IAAA,GAC3D,EAAW,KAAK,OAAO,GAAc,UAAY,EAAU,OAAS,EAAI,EAAY,EAAe,QAAU,OAAO,CAAK,EACzH,EAAQ,EAAe,EAAS,EAAO,OAAO,EAAI,IAAA,EACpD,CACA,IAAM,EAAO,EAAS,EAAQ,MAAM,EAC9B,EAAU,EAAS,EAAQ,SAAS,EACpC,EAAO,EAAS,EAAQ,MAAM,EAC9B,EAAY,EAAS,EAAQ,WAAW,EACxC,EAAS,EAAS,EAAQ,QAAQ,EAClC,EAAQ,EAAe,EAAS,EAAQ,OAAO,EAAI,IAAA,GACzD,OAAO,OAAO,OAAO,CACnB,KAAM,OAAO,GAAS,UAAY,EAAK,OAAS,EAAI,EAAO,QAC3D,QAAS,EAAsB,CAAO,EACtC,GAAG,OAAO,GAAS,UAAY,EAAK,OAAS,EAAI,CAAE,MAAK,EAAI,CAAC,EAC7D,GAAG,OAAO,GAAc,UAAY,CAAE,WAAU,EAAI,CAAC,EACrD,GAAG,OAAO,GAAW,UAAY,OAAO,UAAU,CAAM,EAAI,CAAE,QAAO,EAAI,CAAC,EAC1E,GAAG,EAAW,OAAS,EAAI,CAAE,WAAY,OAAO,OAAO,CAAU,CAAE,EAAI,CAAC,EACxE,GAAG,OAAO,GAAU,SAAW,CAAE,OAAM,EAAI,CAAC,CAC9C,CAAC,CACH"}
@@ -0,0 +1,56 @@
1
+ import { CorrelationContext } from "./context.js";
2
+ import { ObservationEvent, OperationStatus, SafeErrorRecord } from "./event.js";
3
+ //#region src/observation/port.d.ts
4
+ type DeliveryMode = 'operational' | 'reliable' | 'audit';
5
+ type ObservationBoundary = 'none' | 'local-durable' | 'remote-acknowledged';
6
+ interface CaptureReceipt {
7
+ readonly eventId: string;
8
+ readonly status: 'accepted' | 'rejected' | 'disabled';
9
+ readonly durable: boolean;
10
+ readonly boundary: ObservationBoundary;
11
+ readonly reason?: 'capacity' | 'closed' | 'processor-failed' | 'exporter-unavailable';
12
+ }
13
+ /** Validate an untrusted observer receipt before using it for delivery claims. */
14
+ declare function validateCaptureReceipt(value: unknown, eventId: string): CaptureReceipt;
15
+ type ObservationSpanName = 'sdk.agent.run' | 'sdk.agent.turn' | 'sdk.model.call' | 'sdk.provider.attempt' | 'sdk.tool.call' | 'sdk.compaction' | 'sdk.hook.call' | 'sdk.user.input.wait' | 'sdk.skill.operation' | 'sdk.memory.operation' | 'sdk.credential.operation' | 'sdk.integration.request';
16
+ interface OpenObservationSpanInput {
17
+ readonly name: ObservationSpanName;
18
+ readonly runId: string;
19
+ readonly parent?: CorrelationContext;
20
+ readonly correlation?: Omit<Partial<CorrelationContext>, 'traceId' | 'spanId' | 'parentSpanId' | 'runId'>;
21
+ readonly startedAt: string;
22
+ readonly monotonicMs: number;
23
+ }
24
+ interface ObservationSpan {
25
+ readonly correlation: CorrelationContext;
26
+ readonly traceparent: string;
27
+ end(status: OperationStatus, endedAt: string, monotonicMs: number): void;
28
+ }
29
+ interface ObservationPort {
30
+ readonly mode: DeliveryMode;
31
+ openSpan(input: OpenObservationSpanInput): ObservationSpan;
32
+ capture(event: ObservationEvent): CaptureReceipt;
33
+ checkpoint?(event: ObservationEvent, signal?: AbortSignal): Promise<CaptureReceipt>;
34
+ }
35
+ interface ObservationDeliverySummary {
36
+ readonly mode: DeliveryMode;
37
+ readonly requiredBoundary: ObservationBoundary;
38
+ readonly reachedBoundary: ObservationBoundary;
39
+ readonly complete: boolean;
40
+ readonly acceptedCritical: number;
41
+ readonly rejectedCritical: number;
42
+ readonly pendingCritical: number;
43
+ readonly lastFailure?: SafeErrorRecord;
44
+ }
45
+ declare function createCoreSpan(input: OpenObservationSpanInput): ObservationSpan;
46
+ interface ObservationSpanSnapshot extends ObservationSpan {
47
+ readonly end: ObservationSpan['end'];
48
+ }
49
+ /** Copy an untrusted backend span so its getters or later mutations cannot affect events. */
50
+ declare function snapshotObservationSpan(value: unknown): ObservationSpanSnapshot | undefined;
51
+ declare function validObservationSpan(value: unknown): value is ObservationSpan;
52
+ declare function disabledDeliverySummary(): ObservationDeliverySummary;
53
+ declare const NOOP_OBSERVATION_PORT: ObservationPort;
54
+ //#endregion
55
+ export { CaptureReceipt, DeliveryMode, NOOP_OBSERVATION_PORT, ObservationBoundary, ObservationDeliverySummary, ObservationPort, ObservationSpan, ObservationSpanName, OpenObservationSpanInput, createCoreSpan, disabledDeliverySummary, snapshotObservationSpan, validObservationSpan, validateCaptureReceipt };
56
+ //# sourceMappingURL=port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.d.ts","names":[],"sources":["../../src/observation/port.ts"],"mappings":";;;KAIY;KACA;UAEK;WACN;WACA;WACA;WACA,UAAU;WACV;;;iBAaK,uBAAuB,gBAAgB,kBAAkB;KAqC7D;UAcK;WACN,MAAM;WACN;WACA,SAAS;WACT,cAAc,KAAK,QAAQ;WAC3B;WACA;;UAGM;WACN,aAAa;WACb;EACT,IAAI,QAAQ,iBAAiB,iBAAiB;;UAG/B;WACN,MAAM;EACf,SAAS,OAAO,2BAA2B;EAC3C,QAAQ,OAAO,mBAAmB;EAClC,YAAY,OAAO,kBAAkB,SAAS,cAAc,QAAQ;;UAGrD;WACN,MAAM;WACN,kBAAkB;WAClB,iBAAiB;WACjB;WACA;WACA;WACA;WACA,cAAc;;iBAGT,eAAe,OAAO,2BAA2B;UAmBvD,gCAAgC;WAC/B,KAAK;;;iBAoBA,wBAAwB,iBAAiB;iBAmCzC,qBAAqB,iBAAiB,SAAS;iBAI/C,2BAA2B;cAY9B,uBAAuB"}
@@ -0,0 +1,2 @@
1
+ import{deepFreeze as e}from"../primitives/freeze.js";import{createSpanId as t,createTraceId as n,freezeCorrelation as r,isSpanId as i,isTraceId as a,traceparent as o}from"./context.js";const s=new Set([`accepted`,`rejected`,`disabled`]),c=new Set([`none`,`local-durable`,`remote-acknowledged`]),l=new Set([`capacity`,`closed`,`processor-failed`,`exporter-unavailable`]);function u(e,t){if(typeof e!=`object`||!e)throw TypeError(`observation receipt must be an object`);let n;try{n={eventId:Reflect.get(e,`eventId`),status:Reflect.get(e,`status`),durable:Reflect.get(e,`durable`),boundary:Reflect.get(e,`boundary`),reason:Reflect.get(e,`reason`)}}catch{throw TypeError(`observation receipt properties could not be read`)}if(n.eventId!==t)throw TypeError(`observation receipt eventId mismatch`);if(!s.has(n.status))throw TypeError(`observation receipt status is invalid`);if(typeof n.durable!=`boolean`)throw TypeError(`observation receipt durable flag is invalid`);if(!c.has(n.boundary))throw TypeError(`observation receipt boundary is invalid`);if(n.reason!==void 0&&!l.has(n.reason))throw TypeError(`observation receipt reason is invalid`);let r=n.status,i=n.boundary,a=n.durable;if(i===`none`===a)throw TypeError(`observation receipt durable flag contradicts its boundary`);if(r!==`accepted`&&(a||i!==`none`))throw TypeError(`a rejected or disabled observation receipt cannot claim durability`);return Object.freeze({eventId:t,status:r,durable:a,boundary:i,...n.reason===void 0?{}:{reason:n.reason}})}function d(e){let i=r({traceId:e.parent?.traceId??n(),spanId:t(),parentSpanId:e.parent?.spanId??null,runId:e.runId,...e.correlation}),a=!1;return Object.freeze({correlation:i,traceparent:o(i),end(e,t,n){a||=!0}})}function f(e,t){if(typeof e!=`string`)return!1;let n=/^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/.exec(e);return n?.[1]===t.traceId&&n[2]===t.spanId}const p=[`conversationId`,`turnId`,`modelCallId`,`attemptId`,`toolCallId`,`providerRequestId`,`sessionId`];function m(e){try{if(typeof e!=`object`||!e)return;let t=Reflect.get(e,`correlation`);if(typeof t!=`object`||!t)return;let n=Reflect.get(t,`traceId`),o=Reflect.get(t,`spanId`),s=Reflect.get(t,`parentSpanId`),c=Reflect.get(t,`runId`);if(!a(n)||!i(o)||s!==null&&!i(s)||typeof c!=`string`||c.length===0)return;let l={};for(let e of p){let n=Reflect.get(t,e);if(n!==void 0){if(typeof n!=`string`||n.length===0)return;l[e]=n}}let u=r({traceId:n,spanId:o,parentSpanId:s,runId:c,...l}),d=Reflect.get(e,`traceparent`),m=Reflect.get(e,`end`);return!f(d,u)||typeof m!=`function`?void 0:Object.freeze({correlation:u,traceparent:d,end:(t,n,r)=>{Reflect.apply(m,e,[t,n,r])}})}catch{return}}function h(e){return m(e)!==void 0}function g(){return e({mode:`operational`,requiredBoundary:`none`,reachedBoundary:`none`,complete:!0,acceptedCritical:0,rejectedCritical:0,pendingCritical:0})}const _=Object.freeze({mode:`operational`,openSpan:d,capture(e){return Object.freeze({eventId:e.eventId,status:`disabled`,durable:!1,boundary:`none`})},checkpoint(e){return Promise.resolve(Object.freeze({eventId:e.eventId,status:`disabled`,durable:!1,boundary:`none`}))}});export{_ as NOOP_OBSERVATION_PORT,d as createCoreSpan,g as disabledDeliverySummary,m as snapshotObservationSpan,h as validObservationSpan,u as validateCaptureReceipt};
2
+ //# sourceMappingURL=port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.js","names":[],"sources":["../../src/observation/port.ts"],"sourcesContent":["import { deepFreeze } from '../primitives/freeze.ts'\nimport { createSpanId, createTraceId, freezeCorrelation, isSpanId, isTraceId, traceparent, type CorrelationContext } from './context.ts'\nimport type { ObservationEvent, OperationStatus, SafeErrorRecord } from './event.ts'\n\nexport type DeliveryMode = 'operational' | 'reliable' | 'audit'\nexport type ObservationBoundary = 'none' | 'local-durable' | 'remote-acknowledged'\n\nexport interface CaptureReceipt {\n readonly eventId: string\n readonly status: 'accepted' | 'rejected' | 'disabled'\n readonly durable: boolean\n readonly boundary: ObservationBoundary\n readonly reason?: 'capacity' | 'closed' | 'processor-failed' | 'exporter-unavailable'\n}\n\nconst RECEIPT_STATUSES = new Set<CaptureReceipt['status']>(['accepted', 'rejected', 'disabled'])\nconst RECEIPT_BOUNDARIES = new Set<ObservationBoundary>(['none', 'local-durable', 'remote-acknowledged'])\nconst RECEIPT_REASONS = new Set<NonNullable<CaptureReceipt['reason']>>([\n 'capacity',\n 'closed',\n 'processor-failed',\n 'exporter-unavailable',\n])\n\n/** Validate an untrusted observer receipt before using it for delivery claims. */\nexport function validateCaptureReceipt(value: unknown, eventId: string): CaptureReceipt {\n if (typeof value !== 'object' || value === null) throw new TypeError('observation receipt must be an object')\n let receipt: Readonly<Record<string, unknown>>\n try {\n receipt = {\n eventId: Reflect.get(value, 'eventId'),\n status: Reflect.get(value, 'status'),\n durable: Reflect.get(value, 'durable'),\n boundary: Reflect.get(value, 'boundary'),\n reason: Reflect.get(value, 'reason'),\n }\n } catch {\n throw new TypeError('observation receipt properties could not be read')\n }\n if (receipt.eventId !== eventId) throw new TypeError('observation receipt eventId mismatch')\n if (!RECEIPT_STATUSES.has(receipt.status as CaptureReceipt['status'])) throw new TypeError('observation receipt status is invalid')\n if (typeof receipt.durable !== 'boolean') throw new TypeError('observation receipt durable flag is invalid')\n if (!RECEIPT_BOUNDARIES.has(receipt.boundary as ObservationBoundary)) throw new TypeError('observation receipt boundary is invalid')\n if (receipt.reason !== undefined && !RECEIPT_REASONS.has(receipt.reason as NonNullable<CaptureReceipt['reason']>)) {\n throw new TypeError('observation receipt reason is invalid')\n }\n const status = receipt.status as CaptureReceipt['status']\n const boundary = receipt.boundary as ObservationBoundary\n const durable = receipt.durable\n if ((boundary === 'none') === durable) throw new TypeError('observation receipt durable flag contradicts its boundary')\n if (status !== 'accepted' && (durable || boundary !== 'none')) {\n throw new TypeError('a rejected or disabled observation receipt cannot claim durability')\n }\n return Object.freeze({\n eventId,\n status,\n durable,\n boundary,\n ...receipt.reason === undefined ? {} : { reason: receipt.reason as NonNullable<CaptureReceipt['reason']> },\n })\n}\n\nexport type ObservationSpanName =\n | 'sdk.agent.run'\n | 'sdk.agent.turn'\n | 'sdk.model.call'\n | 'sdk.provider.attempt'\n | 'sdk.tool.call'\n | 'sdk.compaction'\n | 'sdk.hook.call'\n | 'sdk.user.input.wait'\n | 'sdk.skill.operation'\n | 'sdk.memory.operation'\n | 'sdk.credential.operation'\n | 'sdk.integration.request'\n\nexport interface OpenObservationSpanInput {\n readonly name: ObservationSpanName\n readonly runId: string\n readonly parent?: CorrelationContext\n readonly correlation?: Omit<Partial<CorrelationContext>, 'traceId' | 'spanId' | 'parentSpanId' | 'runId'>\n readonly startedAt: string\n readonly monotonicMs: number\n}\n\nexport interface ObservationSpan {\n readonly correlation: CorrelationContext\n readonly traceparent: string\n end(status: OperationStatus, endedAt: string, monotonicMs: number): void\n}\n\nexport interface ObservationPort {\n readonly mode: DeliveryMode\n openSpan(input: OpenObservationSpanInput): ObservationSpan\n capture(event: ObservationEvent): CaptureReceipt\n checkpoint?(event: ObservationEvent, signal?: AbortSignal): Promise<CaptureReceipt>\n}\n\nexport interface ObservationDeliverySummary {\n readonly mode: DeliveryMode\n readonly requiredBoundary: ObservationBoundary\n readonly reachedBoundary: ObservationBoundary\n readonly complete: boolean\n readonly acceptedCritical: number\n readonly rejectedCritical: number\n readonly pendingCritical: number\n readonly lastFailure?: SafeErrorRecord\n}\n\nexport function createCoreSpan(input: OpenObservationSpanInput): ObservationSpan {\n const correlation = freezeCorrelation({\n traceId: input.parent?.traceId ?? createTraceId(),\n spanId: createSpanId(),\n parentSpanId: input.parent?.spanId ?? null,\n runId: input.runId,\n ...input.correlation,\n })\n let ended = false\n return Object.freeze({\n correlation,\n traceparent: traceparent(correlation),\n end(_status: OperationStatus, _endedAt: string, _monotonicMs: number): void {\n if (ended) return\n ended = true\n },\n })\n}\n\ninterface ObservationSpanSnapshot extends ObservationSpan {\n readonly end: ObservationSpan['end']\n}\n\nfunction traceparentMatchesCorrelation(value: unknown, correlation: CorrelationContext): value is string {\n if (typeof value !== 'string') return false\n const match = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/.exec(value)\n return match?.[1] === correlation.traceId && match[2] === correlation.spanId\n}\n\nconst OPTIONAL_CORRELATION_KEYS = [\n 'conversationId',\n 'turnId',\n 'modelCallId',\n 'attemptId',\n 'toolCallId',\n 'providerRequestId',\n 'sessionId',\n] as const\n\n/** Copy an untrusted backend span so its getters or later mutations cannot affect events. */\nexport function snapshotObservationSpan(value: unknown): ObservationSpanSnapshot | undefined {\n try {\n if (typeof value !== 'object' || value === null) return undefined\n const correlationValue = Reflect.get(value, 'correlation')\n if (typeof correlationValue !== 'object' || correlationValue === null) return undefined\n const traceId = Reflect.get(correlationValue, 'traceId')\n const spanId = Reflect.get(correlationValue, 'spanId')\n const parentSpanId = Reflect.get(correlationValue, 'parentSpanId')\n const runId = Reflect.get(correlationValue, 'runId')\n if (!isTraceId(traceId) || !isSpanId(spanId)\n || (parentSpanId !== null && !isSpanId(parentSpanId))\n || typeof runId !== 'string' || runId.length === 0) return undefined\n const optional: Partial<Record<typeof OPTIONAL_CORRELATION_KEYS[number], string>> = {}\n for (const key of OPTIONAL_CORRELATION_KEYS) {\n const field = Reflect.get(correlationValue, key)\n if (field === undefined) continue\n if (typeof field !== 'string' || field.length === 0) return undefined\n optional[key] = field\n }\n const correlation = freezeCorrelation({ traceId, spanId, parentSpanId, runId, ...optional })\n const backendTraceparent = Reflect.get(value, 'traceparent')\n const end = Reflect.get(value, 'end')\n if (!traceparentMatchesCorrelation(backendTraceparent, correlation) || typeof end !== 'function') return undefined\n return Object.freeze({\n correlation,\n traceparent: backendTraceparent,\n end: (status: OperationStatus, endedAt: string, monotonicMs: number) => {\n Reflect.apply(end, value, [status, endedAt, monotonicMs])\n },\n })\n } catch {\n return undefined\n }\n}\n\nexport function validObservationSpan(value: unknown): value is ObservationSpan {\n return snapshotObservationSpan(value) !== undefined\n}\n\nexport function disabledDeliverySummary(): ObservationDeliverySummary {\n return deepFreeze({\n mode: 'operational',\n requiredBoundary: 'none',\n reachedBoundary: 'none',\n complete: true,\n acceptedCritical: 0,\n rejectedCritical: 0,\n pendingCritical: 0,\n })\n}\n\nexport const NOOP_OBSERVATION_PORT: ObservationPort = Object.freeze({\n mode: 'operational' as const,\n openSpan: createCoreSpan,\n capture(event: ObservationEvent): CaptureReceipt {\n return Object.freeze({ eventId: event.eventId, status: 'disabled', durable: false, boundary: 'none' })\n },\n checkpoint(event: ObservationEvent): Promise<CaptureReceipt> {\n return Promise.resolve(Object.freeze({ eventId: event.eventId, status: 'disabled', durable: false, boundary: 'none' }))\n },\n})\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{deepFreeze as e}from"../primitives/freeze.js";import{isSpanId as t,isTraceId as n}from"./context.js";import{safeErrorRecord as r}from"./event.js";const i=2048,a=65536,o=`[REDACTED]`,s=new Set([`sdk.agent.run`,`sdk.agent.turn`,`sdk.model.call`,`sdk.provider.attempt`,`sdk.provider.retry.scheduled`,`sdk.tool.call`,`sdk.compaction`,`sdk.hook.call`,`sdk.user.input.wait`,`sdk.skill.operation`,`sdk.memory.operation`,`sdk.credential.operation`,`sdk.integration.request`,`sdk.observer.failure`,`sdk.exporter.state`,`sdk.log`]),c=new Set([`start`,`end`,`point`]),l=new Set([`critical`,`normal`,`verbose`]),u=new Set([`answer`,`arguments`,`body`,`completion`,`content`,`filecontent`,`image`,`input`,`messages`,`output`,`prompt`,`reasoning`,`requestbody`,`responsebody`,`result`,`text`,`toolarguments`,`toolresult`]),d=new Set([`accept`,`content-type`,`request-id`,`traceparent`,`user-agent`]),f=[`conversationId`,`turnId`,`modelCallId`,`attemptId`,`toolCallId`,`providerRequestId`,`sessionId`];function p(e,t){try{return Reflect.get(e,t)}catch{return}}function m(e){return e.toLowerCase().replace(/[^a-z0-9]/g,``)}function h(e){let t=m(e);return t===`authorization`||t===`proxyauthorization`||t===`cookie`||t===`setcookie`||t.includes(`apikey`)||t.includes(`accesstoken`)||t.includes(`refreshtoken`)||t.includes(`idtoken`)||t.includes(`clientsecret`)||t.includes(`password`)||t.includes(`sessionsecret`)}function g(e){return typeof e==`string`?{kind:`string`,length:e.length}:Array.isArray(e)?{kind:`array`,length:e.length}:typeof e==`object`&&e?{kind:`object`}:{kind:typeof e}}function _(e,t,n){let r=e;for(let e of n)try{r=e.redact(r,t)}catch{return`[REDACTION_FAILED]`}return r}function v(e){return e.replace(/\b(Bearer)\s+[A-Za-z0-9._~+/=-]+/gi,`$1 [REDACTED]`).replace(/\b(authorization|proxy[-_]?authorization|api[-_]?key|access[-_]?token|refresh[-_]?token|id[-_]?token|client[-_]?secret|password|session[-_]?secret)\s*[:=]\s*[^\s,;]+/gi,`$1=[REDACTED]`)}function y(t,n){let r={options:n,seen:new WeakSet,truncated:!1},i=b(t,[`data`],0,r);if(i===null||Array.isArray(i)||typeof i!=`object`)throw TypeError(`observation data must be an object`);let a={...i};return r.truncated&&(a[`observability.truncated`]=!0),e(a)}function b(e,t,n,a){if(e===null)return null;if(typeof e==`string`){let t=v(e);return t.length>i&&(a.truncated=!0),t.slice(0,i)}if(typeof e==`number`)return Number.isFinite(e)?e:String(e);if(typeof e==`boolean`)return e;if(typeof e==`bigint`||typeof e==`symbol`||typeof e==`function`||e===void 0)return a.truncated=!0,`[${typeof e}]`;if(e instanceof Error)return b(r(e,a.options.includeErrorStacks),t,n,a);if(n>=8)return a.truncated=!0,`[MaxDepth]`;if(a.seen.has(e))return a.truncated=!0,`[Circular]`;a.seen.add(e);try{if(Array.isArray(e)){e.length>100&&(a.truncated=!0);let r=[];for(let i=0;i<Math.min(e.length,100);i++)r.push(b(p(e,i),[...t,String(i)],n+1,a));return r}let r=Object.create(null),i;try{i=Object.keys(e)}catch{return a.truncated=!0,`[Uninspectable]`}let s=m(t.at(-1)??``)===`headers`;for(let c of i){if(Object.keys(r).length>=64){a.truncated=!0;break}let i=c.slice(0,128);if(i!==c&&(a.truncated=!0),s&&!d.has(c.toLowerCase())){r[i]=o;continue}let l=p(e,c);if(h(c)){r[i]=o;continue}let f=u.has(m(c));if(!(f&&a.options.content===`none`)){if(f&&a.options.content===`metadata`){r[i]=g(l);continue}if(f&&a.options.content===`redacted`&&typeof l==`string`){r[i]=b(_(l,[...t,c],a.options.redactors),[...t,c],n+1,a);continue}r[i]=b(l,[...t,c],n+1,a)}}return r}finally{a.seen.delete(e)}}function x(e,t){if(typeof e!=`string`||e.length===0)throw TypeError(`observation ${t} is invalid`);return e.slice(0,i)}function S(e){return new TextEncoder().encode(JSON.stringify(e)).byteLength}function C(r,a){if(typeof r!=`object`||!r)throw TypeError(`observation event must be an object`);if(p(r,`schemaVersion`)!==1)throw TypeError(`observation schemaVersion is invalid`);let o=p(r,`name`),u=p(r,`phase`),d=p(r,`priority`);if(!s.has(o))throw TypeError(`observation name is invalid`);if(!c.has(u))throw TypeError(`observation phase is invalid`);if(!l.has(d))throw TypeError(`observation priority is invalid`);let m=p(r,`sequence`),h=p(r,`monotonicMs`);if(!Number.isSafeInteger(m)||m<1)throw TypeError(`observation sequence is invalid`);if(typeof h!=`number`||!Number.isFinite(h)||h<0)throw TypeError(`observation monotonicMs is invalid`);let g=p(r,`resource`),_=p(r,`correlation`);if(typeof g!=`object`||!g||p(g,`sdkName`)!==`ai-agent-sdk`)throw TypeError(`observation resource is invalid`);if(typeof _!=`object`||!_||!n(p(_,`traceId`))||!t(p(_,`spanId`)))throw TypeError(`observation correlation is invalid`);let v=p(_,`parentSpanId`);if(v!==null&&!t(v))throw TypeError(`observation parentSpanId is invalid`);if(typeof p(_,`runId`)!=`string`||String(p(_,`runId`)).length===0)throw TypeError(`observation runId is invalid`);for(let e of f){let t=p(_,e);if(t!==void 0&&(typeof t!=`string`||t.length===0))throw TypeError(`observation ${e} is invalid`)}let y=x(p(r,`occurredAt`),`occurredAt`);if(Number.isNaN(Date.parse(y))||new Date(y).toISOString()!==y)throw TypeError(`observation occurredAt must be UTC ISO 8601`);let C=x(p(r,`eventId`),`eventId`);if(!/^[0-9a-f]{32}$/.test(C)||/^0+$/.test(C))throw TypeError(`observation eventId is invalid`);let w=x(p(g,`sdkVersion`),`resource.sdkVersion`),T=p(g,`runtime`);if(![`browser`,`edge`,`node`,`unknown`].includes(String(T)))throw TypeError(`observation resource runtime is invalid`);let E={options:a,seen:new WeakSet,truncated:!1},D=b(p(r,`data`),[`data`],0,E);if(D===null||Array.isArray(D)||typeof D!=`object`)throw TypeError(`observation data must be an object`);let O={...D};E.truncated&&(O[`observability.truncated`]=!0);let k={schemaVersion:1,eventId:C,sequence:m,name:o,phase:u,occurredAt:y,monotonicMs:h,priority:d,resource:{sdkName:`ai-agent-sdk`,sdkVersion:w,...typeof p(g,`serviceName`)==`string`?{serviceName:String(p(g,`serviceName`)).slice(0,i)}:{},...typeof p(g,`serviceVersion`)==`string`?{serviceVersion:String(p(g,`serviceVersion`)).slice(0,i)}:{},runtime:T},correlation:b(_,[`correlation`],0,E),data:O};if(S(k)>65536){let e=Object.keys(O);for(;e.length>0&&S(k)>65536;){let t=e.pop();t!==void 0&&t!==`observability.truncated`&&delete O[t]}O[`observability.truncated`]=!0}if(S(k)>65536)throw RangeError(`observation event exceeds the 64 KiB hard limit`);return e(k)}function w(e){return S(e)}export{a as MAX_EVENT_BYTES,h as isSecretKey,v as redactInlineSecrets,y as sanitizeObservationData,C as sanitizeObservationEvent,w as serializedEventBytes};
2
+ //# sourceMappingURL=privacy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy.js","names":[],"sources":["../../src/observation/privacy.ts"],"sourcesContent":["import {\n deepFreeze,\n type JsonObject,\n type JsonValue,\n} from '../primitives/index.ts'\nimport {\n isSpanId,\n isTraceId,\n safeErrorRecord,\n type ObservationEvent,\n type ObservationEventName,\n type ObservationPhase,\n type ObservationPriority,\n} from '../observation/index.ts'\nimport type { ContentRedactor, ObservationContentPolicy } from './telemetry-types.ts'\n\nconst MAX_TOP_LEVEL_FIELDS = 64\nconst MAX_KEY_LENGTH = 128\nconst MAX_STRING_LENGTH = 2_048\nconst MAX_ARRAY_LENGTH = 100\nconst MAX_DEPTH = 8\nexport const MAX_EVENT_BYTES = 64 * 1024\nconst REDACTED = '[REDACTED]'\n\nconst EVENT_NAMES = new Set<ObservationEventName>([\n 'sdk.agent.run', 'sdk.agent.turn', 'sdk.model.call', 'sdk.provider.attempt',\n 'sdk.provider.retry.scheduled', 'sdk.tool.call', 'sdk.compaction', 'sdk.hook.call',\n 'sdk.user.input.wait', 'sdk.skill.operation', 'sdk.memory.operation',\n 'sdk.credential.operation', 'sdk.integration.request', 'sdk.observer.failure',\n 'sdk.exporter.state', 'sdk.log',\n])\nconst PHASES = new Set<ObservationPhase>(['start', 'end', 'point'])\nconst PRIORITIES = new Set<ObservationPriority>(['critical', 'normal', 'verbose'])\nconst CONTENT_KEYS = new Set([\n 'answer', 'arguments', 'body', 'completion', 'content', 'filecontent', 'image',\n 'input', 'messages', 'output', 'prompt', 'reasoning', 'requestbody', 'responsebody',\n 'result', 'text', 'toolarguments', 'toolresult',\n])\nconst SAFE_HEADER_NAMES = new Set(['accept', 'content-type', 'request-id', 'traceparent', 'user-agent'])\nconst OPTIONAL_CORRELATION_KEYS = [\n 'conversationId', 'turnId', 'modelCallId', 'attemptId', 'toolCallId',\n 'providerRequestId', 'sessionId',\n] as const\n\ninterface PrivacyOptions {\n readonly content: ObservationContentPolicy\n readonly redactors: readonly ContentRedactor[]\n readonly includeErrorStacks: boolean\n}\n\nfunction safeRead(source: unknown, key: PropertyKey): unknown {\n try { return Reflect.get(source as object, key) } catch { return undefined }\n}\n\nfunction normalizedKey(key: string): string {\n return key.toLowerCase().replace(/[^a-z0-9]/g, '')\n}\n\nexport function isSecretKey(key: string): boolean {\n const normalized = normalizedKey(key)\n return normalized === 'authorization' || normalized === 'proxyauthorization'\n || normalized === 'cookie' || normalized === 'setcookie'\n || normalized.includes('apikey') || normalized.includes('accesstoken')\n || normalized.includes('refreshtoken') || normalized.includes('idtoken')\n || normalized.includes('clientsecret') || normalized.includes('password')\n || normalized.includes('sessionsecret')\n}\n\nfunction contentMetadata(value: unknown): JsonObject {\n if (typeof value === 'string') return { kind: 'string', length: value.length }\n if (Array.isArray(value)) return { kind: 'array', length: value.length }\n if (value !== null && typeof value === 'object') return { kind: 'object' }\n return { kind: typeof value }\n}\n\nfunction redactContent(value: string, path: readonly string[], redactors: readonly ContentRedactor[]): string {\n let current = value\n for (const redactor of redactors) {\n try { current = redactor.redact(current, path) } catch { return '[REDACTION_FAILED]' }\n }\n return current\n}\n\nexport function redactInlineSecrets(value: string): string {\n return value\n .replace(/\\b(Bearer)\\s+[A-Za-z0-9._~+/=-]+/gi, '$1 [REDACTED]')\n .replace(\n /\\b(authorization|proxy[-_]?authorization|api[-_]?key|access[-_]?token|refresh[-_]?token|id[-_]?token|client[-_]?secret|password|session[-_]?secret)\\s*[:=]\\s*[^\\s,;]+/gi,\n '$1=[REDACTED]',\n )\n}\n\ninterface CloneState {\n readonly options: PrivacyOptions\n readonly seen: WeakSet<object>\n truncated: boolean\n}\n\n/** Internal composition helper: apply the same recursive content/secret policy before retaining logger child fields. */\nexport function sanitizeObservationData(value: unknown, options: PrivacyOptions): JsonObject {\n const state: CloneState = { options, seen: new WeakSet(), truncated: false }\n const cloned = cloneValue(value, ['data'], 0, state)\n if (cloned === null || Array.isArray(cloned) || typeof cloned !== 'object') throw new TypeError('observation data must be an object')\n const data: Record<string, JsonValue> = { ...(cloned as Record<string, JsonValue>) }\n if (state.truncated) data['observability.truncated'] = true\n return deepFreeze(data)\n}\n\nfunction cloneValue(value: unknown, path: readonly string[], depth: number, state: CloneState): JsonValue {\n if (value === null) return null\n if (typeof value === 'string') {\n const redacted = redactInlineSecrets(value)\n if (redacted.length > MAX_STRING_LENGTH) state.truncated = true\n return redacted.slice(0, MAX_STRING_LENGTH)\n }\n if (typeof value === 'number') return Number.isFinite(value) ? value : String(value)\n if (typeof value === 'boolean') return value\n if (typeof value === 'bigint' || typeof value === 'symbol' || typeof value === 'function' || value === undefined) {\n state.truncated = true\n return `[${typeof value}]`\n }\n if (value instanceof Error) return cloneValue(\n safeErrorRecord(value, state.options.includeErrorStacks), path, depth, state,\n )\n if (depth >= MAX_DEPTH) { state.truncated = true; return '[MaxDepth]' }\n if (state.seen.has(value)) { state.truncated = true; return '[Circular]' }\n state.seen.add(value)\n try {\n if (Array.isArray(value)) {\n if (value.length > MAX_ARRAY_LENGTH) state.truncated = true\n const output: JsonValue[] = []\n for (let index = 0; index < Math.min(value.length, MAX_ARRAY_LENGTH); index++) {\n output.push(cloneValue(safeRead(value, index), [...path, String(index)], depth + 1, state))\n }\n return output\n }\n const output: Record<string, JsonValue> = Object.create(null) as Record<string, JsonValue>\n let keys: string[]\n try { keys = Object.keys(value) } catch { state.truncated = true; return '[Uninspectable]' }\n const headers = normalizedKey(path.at(-1) ?? '') === 'headers'\n for (const originalKey of keys) {\n if (Object.keys(output).length >= MAX_TOP_LEVEL_FIELDS) { state.truncated = true; break }\n const key = originalKey.slice(0, MAX_KEY_LENGTH)\n if (key !== originalKey) state.truncated = true\n if (headers && !SAFE_HEADER_NAMES.has(originalKey.toLowerCase())) {\n output[key] = REDACTED\n continue\n }\n const child = safeRead(value, originalKey)\n if (isSecretKey(originalKey)) {\n output[key] = REDACTED\n continue\n }\n const contentKey = CONTENT_KEYS.has(normalizedKey(originalKey))\n if (contentKey && state.options.content === 'none') continue\n if (contentKey && state.options.content === 'metadata') {\n output[key] = contentMetadata(child)\n continue\n }\n if (contentKey && state.options.content === 'redacted' && typeof child === 'string') {\n output[key] = cloneValue(\n redactContent(child, [...path, originalKey], state.options.redactors),\n [...path, originalKey], depth + 1, state,\n )\n continue\n }\n output[key] = cloneValue(child, [...path, originalKey], depth + 1, state)\n }\n return output\n } finally {\n state.seen.delete(value)\n }\n}\n\nfunction requiredString(value: unknown, field: string): string {\n if (typeof value !== 'string' || value.length === 0) throw new TypeError(`observation ${field} is invalid`)\n return value.slice(0, MAX_STRING_LENGTH)\n}\n\nfunction eventBytes(event: ObservationEvent): number {\n return new TextEncoder().encode(JSON.stringify(event)).byteLength\n}\n\n/** Validate, privacy-process, bound, and deeply freeze one untrusted event. */\nexport function sanitizeObservationEvent(event: unknown, options: PrivacyOptions): ObservationEvent {\n if (typeof event !== 'object' || event === null) throw new TypeError('observation event must be an object')\n if (safeRead(event, 'schemaVersion') !== 1) throw new TypeError('observation schemaVersion is invalid')\n const name = safeRead(event, 'name')\n const phase = safeRead(event, 'phase')\n const priority = safeRead(event, 'priority')\n if (!EVENT_NAMES.has(name as ObservationEventName)) throw new TypeError('observation name is invalid')\n if (!PHASES.has(phase as ObservationPhase)) throw new TypeError('observation phase is invalid')\n if (!PRIORITIES.has(priority as ObservationPriority)) throw new TypeError('observation priority is invalid')\n const sequence = safeRead(event, 'sequence')\n const monotonicMs = safeRead(event, 'monotonicMs')\n if (!Number.isSafeInteger(sequence) || (sequence as number) < 1) throw new TypeError('observation sequence is invalid')\n if (typeof monotonicMs !== 'number' || !Number.isFinite(monotonicMs) || monotonicMs < 0) {\n throw new TypeError('observation monotonicMs is invalid')\n }\n const resource = safeRead(event, 'resource')\n const correlation = safeRead(event, 'correlation')\n if (typeof resource !== 'object' || resource === null || safeRead(resource, 'sdkName') !== 'ai-agent-sdk') {\n throw new TypeError('observation resource is invalid')\n }\n if (typeof correlation !== 'object' || correlation === null\n || !isTraceId(safeRead(correlation, 'traceId')) || !isSpanId(safeRead(correlation, 'spanId'))) {\n throw new TypeError('observation correlation is invalid')\n }\n const parentSpanId = safeRead(correlation, 'parentSpanId')\n if (parentSpanId !== null && !isSpanId(parentSpanId)) throw new TypeError('observation parentSpanId is invalid')\n if (typeof safeRead(correlation, 'runId') !== 'string' || String(safeRead(correlation, 'runId')).length === 0) {\n throw new TypeError('observation runId is invalid')\n }\n for (const key of OPTIONAL_CORRELATION_KEYS) {\n const value = safeRead(correlation, key)\n if (value !== undefined && (typeof value !== 'string' || value.length === 0)) {\n throw new TypeError(`observation ${key} is invalid`)\n }\n }\n const occurredAt = requiredString(safeRead(event, 'occurredAt'), 'occurredAt')\n if (Number.isNaN(Date.parse(occurredAt)) || new Date(occurredAt).toISOString() !== occurredAt) {\n throw new TypeError('observation occurredAt must be UTC ISO 8601')\n }\n const eventId = requiredString(safeRead(event, 'eventId'), 'eventId')\n if (!/^[0-9a-f]{32}$/.test(eventId) || /^0+$/.test(eventId)) throw new TypeError('observation eventId is invalid')\n const sdkVersion = requiredString(safeRead(resource, 'sdkVersion'), 'resource.sdkVersion')\n const runtime = safeRead(resource, 'runtime')\n if (!['browser', 'edge', 'node', 'unknown'].includes(String(runtime))) {\n throw new TypeError('observation resource runtime is invalid')\n }\n\n const state: CloneState = { options, seen: new WeakSet(), truncated: false }\n const clonedData = cloneValue(safeRead(event, 'data'), ['data'], 0, state)\n if (clonedData === null || Array.isArray(clonedData) || typeof clonedData !== 'object') {\n throw new TypeError('observation data must be an object')\n }\n const data: Record<string, JsonValue> = { ...(clonedData as Record<string, JsonValue>) }\n if (state.truncated) data['observability.truncated'] = true\n const safe: ObservationEvent = {\n schemaVersion: 1,\n eventId,\n sequence: sequence as number,\n name: name as ObservationEventName,\n phase: phase as ObservationPhase,\n occurredAt,\n monotonicMs,\n priority: priority as ObservationPriority,\n resource: {\n sdkName: 'ai-agent-sdk',\n sdkVersion,\n ...typeof safeRead(resource, 'serviceName') === 'string'\n ? { serviceName: String(safeRead(resource, 'serviceName')).slice(0, MAX_STRING_LENGTH) }\n : {},\n ...typeof safeRead(resource, 'serviceVersion') === 'string'\n ? { serviceVersion: String(safeRead(resource, 'serviceVersion')).slice(0, MAX_STRING_LENGTH) }\n : {},\n runtime: runtime as 'browser' | 'edge' | 'node' | 'unknown',\n },\n correlation: cloneValue(correlation, ['correlation'], 0, state) as unknown as ObservationEvent['correlation'],\n data,\n }\n if (eventBytes(safe) > MAX_EVENT_BYTES) {\n const keys = Object.keys(data)\n while (keys.length > 0 && eventBytes(safe) > MAX_EVENT_BYTES) {\n const key = keys.pop()\n if (key !== undefined && key !== 'observability.truncated') delete data[key]\n }\n data['observability.truncated'] = true\n }\n if (eventBytes(safe) > MAX_EVENT_BYTES) throw new RangeError('observation event exceeds the 64 KiB hard limit')\n return deepFreeze(safe)\n}\n\nexport function serializedEventBytes(event: ObservationEvent): number {\n return eventBytes(event)\n}\n"],"mappings":"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"}