@namzu/sdk 0.2.0 → 0.4.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 (329) hide show
  1. package/CHANGELOG.md +74 -2
  2. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  3. package/dist/agents/ReactiveAgent.js +3 -2
  4. package/dist/agents/ReactiveAgent.js.map +1 -1
  5. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  6. package/dist/agents/SupervisorAgent.js +5 -2
  7. package/dist/agents/SupervisorAgent.js.map +1 -1
  8. package/dist/bridge/a2a/index.d.ts +1 -1
  9. package/dist/bridge/a2a/index.d.ts.map +1 -1
  10. package/dist/bridge/a2a/index.js +1 -1
  11. package/dist/bridge/a2a/index.js.map +1 -1
  12. package/dist/bridge/a2a/message.d.ts +0 -2
  13. package/dist/bridge/a2a/message.d.ts.map +1 -1
  14. package/dist/bridge/a2a/message.js +0 -26
  15. package/dist/bridge/a2a/message.js.map +1 -1
  16. package/dist/bridge/a2a/task.d.ts +4 -3
  17. package/dist/bridge/a2a/task.d.ts.map +1 -1
  18. package/dist/bridge/a2a/task.js +4 -4
  19. package/dist/bridge/a2a/task.js.map +1 -1
  20. package/dist/contracts/api.d.ts +6 -38
  21. package/dist/contracts/api.d.ts.map +1 -1
  22. package/dist/contracts/ids.d.ts +1 -1
  23. package/dist/contracts/ids.d.ts.map +1 -1
  24. package/dist/contracts/index.d.ts +3 -5
  25. package/dist/contracts/index.d.ts.map +1 -1
  26. package/dist/contracts/index.js +1 -1
  27. package/dist/contracts/index.js.map +1 -1
  28. package/dist/contracts/schemas.d.ts +1 -31
  29. package/dist/contracts/schemas.d.ts.map +1 -1
  30. package/dist/contracts/schemas.js +1 -7
  31. package/dist/contracts/schemas.js.map +1 -1
  32. package/dist/index.d.ts +2 -7
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +5 -6
  35. package/dist/index.js.map +1 -1
  36. package/dist/manager/agent/__tests__/lifecycle.test.js +27 -13
  37. package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -1
  38. package/dist/manager/agent/lifecycle.d.ts +9 -0
  39. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  40. package/dist/manager/agent/lifecycle.js +93 -31
  41. package/dist/manager/agent/lifecycle.js.map +1 -1
  42. package/dist/manager/index.d.ts +2 -0
  43. package/dist/manager/index.d.ts.map +1 -1
  44. package/dist/manager/index.js +1 -0
  45. package/dist/manager/index.js.map +1 -1
  46. package/dist/manager/run/persistence.d.ts +3 -1
  47. package/dist/manager/run/persistence.d.ts.map +1 -1
  48. package/dist/manager/run/persistence.js +5 -0
  49. package/dist/manager/run/persistence.js.map +1 -1
  50. package/dist/manager/thread/__tests__/lifecycle.test.d.ts +2 -0
  51. package/dist/manager/thread/__tests__/lifecycle.test.d.ts.map +1 -0
  52. package/dist/manager/thread/__tests__/lifecycle.test.js +216 -0
  53. package/dist/manager/thread/__tests__/lifecycle.test.js.map +1 -0
  54. package/dist/manager/thread/lifecycle.d.ts +105 -0
  55. package/dist/manager/thread/lifecycle.d.ts.map +1 -0
  56. package/dist/manager/thread/lifecycle.js +186 -0
  57. package/dist/manager/thread/lifecycle.js.map +1 -0
  58. package/dist/rag/retriever.js +2 -2
  59. package/dist/registry/tool/execute.js +1 -1
  60. package/dist/registry/tool/execute.js.map +1 -1
  61. package/dist/runtime/query/__tests__/context.test.js +8 -7
  62. package/dist/runtime/query/__tests__/context.test.js.map +1 -1
  63. package/dist/runtime/query/context-cache.d.ts +3 -3
  64. package/dist/runtime/query/context-cache.d.ts.map +1 -1
  65. package/dist/runtime/query/context-cache.js +2 -2
  66. package/dist/runtime/query/context-cache.js.map +1 -1
  67. package/dist/runtime/query/context.d.ts +12 -21
  68. package/dist/runtime/query/context.d.ts.map +1 -1
  69. package/dist/runtime/query/context.js +3 -1
  70. package/dist/runtime/query/context.js.map +1 -1
  71. package/dist/runtime/query/index.d.ts +13 -15
  72. package/dist/runtime/query/index.d.ts.map +1 -1
  73. package/dist/runtime/query/index.js +2 -1
  74. package/dist/runtime/query/index.js.map +1 -1
  75. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  76. package/dist/runtime/query/iteration/index.js +1 -1
  77. package/dist/runtime/query/iteration/index.js.map +1 -1
  78. package/dist/session/__tests__/integration/_fixtures.d.ts +11 -4
  79. package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -1
  80. package/dist/session/__tests__/integration/_fixtures.js +23 -6
  81. package/dist/session/__tests__/integration/_fixtures.js.map +1 -1
  82. package/dist/session/__tests__/integration/archive-gate.test.d.ts +15 -0
  83. package/dist/session/__tests__/integration/archive-gate.test.d.ts.map +1 -0
  84. package/dist/session/__tests__/integration/archive-gate.test.js +214 -0
  85. package/dist/session/__tests__/integration/archive-gate.test.js.map +1 -0
  86. package/dist/session/__tests__/integration/capacity-caps.test.js +13 -6
  87. package/dist/session/__tests__/integration/capacity-caps.test.js.map +1 -1
  88. package/dist/session/__tests__/integration/e2e-spawn.test.js +14 -2
  89. package/dist/session/__tests__/integration/e2e-spawn.test.js.map +1 -1
  90. package/dist/session/__tests__/integration/event-stream-ordering.test.js +14 -7
  91. package/dist/session/__tests__/integration/event-stream-ordering.test.js.map +1 -1
  92. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js +26 -14
  93. package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js.map +1 -1
  94. package/dist/session/__tests__/integration/handoff-illegal-transition.test.js +30 -20
  95. package/dist/session/__tests__/integration/handoff-illegal-transition.test.js.map +1 -1
  96. package/dist/session/__tests__/integration/handoff-single-e2e.test.js +25 -9
  97. package/dist/session/__tests__/integration/handoff-single-e2e.test.js.map +1 -1
  98. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js +11 -10
  99. package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js.map +1 -1
  100. package/dist/session/__tests__/integration/prev-artifact-dag.test.js +5 -4
  101. package/dist/session/__tests__/integration/prev-artifact-dag.test.js.map +1 -1
  102. package/dist/session/__tests__/integration/retention-archive.test.js +3 -2
  103. package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -1
  104. package/dist/session/__tests__/integration/spawn-rollback.test.d.ts +26 -0
  105. package/dist/session/__tests__/integration/spawn-rollback.test.d.ts.map +1 -0
  106. package/dist/session/__tests__/integration/spawn-rollback.test.js +236 -0
  107. package/dist/session/__tests__/integration/spawn-rollback.test.js.map +1 -0
  108. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js +2 -1
  109. package/dist/session/__tests__/integration/summary-materialization-e2e.test.js.map +1 -1
  110. package/dist/session/__tests__/integration/tenant-isolation.test.js +14 -5
  111. package/dist/session/__tests__/integration/tenant-isolation.test.js.map +1 -1
  112. package/dist/session/errors.d.ts +79 -0
  113. package/dist/session/errors.d.ts.map +1 -1
  114. package/dist/session/errors.js +57 -0
  115. package/dist/session/errors.js.map +1 -1
  116. package/dist/session/handoff/__tests__/broadcast.test.js +49 -31
  117. package/dist/session/handoff/__tests__/broadcast.test.js.map +1 -1
  118. package/dist/session/handoff/__tests__/capacity.test.js +21 -18
  119. package/dist/session/handoff/__tests__/capacity.test.js.map +1 -1
  120. package/dist/session/handoff/__tests__/single.test.js +39 -30
  121. package/dist/session/handoff/__tests__/single.test.js.map +1 -1
  122. package/dist/session/handoff/assignment.d.ts +13 -1
  123. package/dist/session/handoff/assignment.d.ts.map +1 -1
  124. package/dist/session/handoff/broadcast.d.ts +7 -0
  125. package/dist/session/handoff/broadcast.d.ts.map +1 -1
  126. package/dist/session/handoff/broadcast.js +16 -1
  127. package/dist/session/handoff/broadcast.js.map +1 -1
  128. package/dist/session/handoff/single.d.ts +7 -0
  129. package/dist/session/handoff/single.d.ts.map +1 -1
  130. package/dist/session/handoff/single.js +13 -1
  131. package/dist/session/handoff/single.js.map +1 -1
  132. package/dist/session/hierarchy/__tests__/session.test.js +2 -0
  133. package/dist/session/hierarchy/__tests__/session.test.js.map +1 -1
  134. package/dist/session/hierarchy/index.d.ts +1 -0
  135. package/dist/session/hierarchy/index.d.ts.map +1 -1
  136. package/dist/session/hierarchy/index.js.map +1 -1
  137. package/dist/session/hierarchy/session.d.ts +15 -3
  138. package/dist/session/hierarchy/session.d.ts.map +1 -1
  139. package/dist/session/hierarchy/session.js.map +1 -1
  140. package/dist/session/hierarchy/thread.d.ts +54 -0
  141. package/dist/session/hierarchy/thread.d.ts.map +1 -0
  142. package/dist/session/hierarchy/thread.js +2 -0
  143. package/dist/session/hierarchy/thread.js.map +1 -0
  144. package/dist/session/migration/id-prefix.d.ts +8 -13
  145. package/dist/session/migration/id-prefix.d.ts.map +1 -1
  146. package/dist/session/migration/id-prefix.js +8 -13
  147. package/dist/session/migration/id-prefix.js.map +1 -1
  148. package/dist/session/retention/__tests__/archive.test.js +3 -2
  149. package/dist/session/retention/__tests__/archive.test.js.map +1 -1
  150. package/dist/session/summary/__tests__/materialize.test.js +4 -3
  151. package/dist/session/summary/__tests__/materialize.test.js.map +1 -1
  152. package/dist/store/index.d.ts +0 -2
  153. package/dist/store/index.d.ts.map +1 -1
  154. package/dist/store/index.js +0 -1
  155. package/dist/store/index.js.map +1 -1
  156. package/dist/store/session/__tests__/disk.test.js +32 -5
  157. package/dist/store/session/__tests__/disk.test.js.map +1 -1
  158. package/dist/store/session/__tests__/memory.test.js +50 -9
  159. package/dist/store/session/__tests__/memory.test.js.map +1 -1
  160. package/dist/store/session/disk.d.ts +2 -1
  161. package/dist/store/session/disk.d.ts.map +1 -1
  162. package/dist/store/session/disk.js +61 -0
  163. package/dist/store/session/disk.js.map +1 -1
  164. package/dist/store/session/index.d.ts.map +1 -1
  165. package/dist/store/session/index.js +3 -4
  166. package/dist/store/session/index.js.map +1 -1
  167. package/dist/store/session/memory.d.ts +2 -1
  168. package/dist/store/session/memory.d.ts.map +1 -1
  169. package/dist/store/session/memory.js +13 -0
  170. package/dist/store/session/memory.js.map +1 -1
  171. package/dist/store/thread/disk.d.ts +41 -0
  172. package/dist/store/thread/disk.d.ts.map +1 -0
  173. package/dist/store/thread/disk.js +229 -0
  174. package/dist/store/thread/disk.js.map +1 -0
  175. package/dist/store/thread/index.d.ts +4 -0
  176. package/dist/store/thread/index.d.ts.map +1 -0
  177. package/dist/store/thread/index.js +6 -0
  178. package/dist/store/thread/index.js.map +1 -0
  179. package/dist/store/thread/memory.d.ts +23 -0
  180. package/dist/store/thread/memory.d.ts.map +1 -0
  181. package/dist/store/thread/memory.js +90 -0
  182. package/dist/store/thread/memory.js.map +1 -0
  183. package/dist/telemetry/runtime-accessors.d.ts +4 -0
  184. package/dist/telemetry/runtime-accessors.d.ts.map +1 -0
  185. package/dist/telemetry/runtime-accessors.js +17 -0
  186. package/dist/telemetry/runtime-accessors.js.map +1 -0
  187. package/dist/types/agent/base.d.ts +17 -21
  188. package/dist/types/agent/base.d.ts.map +1 -1
  189. package/dist/types/agent/factory.d.ts +8 -2
  190. package/dist/types/agent/factory.d.ts.map +1 -1
  191. package/dist/types/agent/task.d.ts +18 -11
  192. package/dist/types/agent/task.d.ts.map +1 -1
  193. package/dist/types/ids/index.d.ts +5 -9
  194. package/dist/types/ids/index.d.ts.map +1 -1
  195. package/dist/types/ids/index.js +4 -4
  196. package/dist/types/ids/index.js.map +1 -1
  197. package/dist/types/rag/retrieval.d.ts +4 -3
  198. package/dist/types/rag/retrieval.d.ts.map +1 -1
  199. package/dist/types/run/config.d.ts +6 -5
  200. package/dist/types/run/config.d.ts.map +1 -1
  201. package/dist/types/run/metadata.d.ts +5 -18
  202. package/dist/types/run/metadata.d.ts.map +1 -1
  203. package/dist/types/session/ids.d.ts +4 -13
  204. package/dist/types/session/ids.d.ts.map +1 -1
  205. package/dist/types/session/ids.js +3 -6
  206. package/dist/types/session/ids.js.map +1 -1
  207. package/dist/types/session/index.d.ts +1 -1
  208. package/dist/types/session/index.d.ts.map +1 -1
  209. package/dist/types/session/store.d.ts +32 -10
  210. package/dist/types/session/store.d.ts.map +1 -1
  211. package/dist/types/session/store.js +3 -8
  212. package/dist/types/session/store.js.map +1 -1
  213. package/dist/types/thread/index.d.ts +2 -0
  214. package/dist/types/thread/index.d.ts.map +1 -0
  215. package/dist/types/thread/index.js +5 -0
  216. package/dist/types/thread/index.js.map +1 -0
  217. package/dist/types/thread/store.d.ts +86 -0
  218. package/dist/types/thread/store.d.ts.map +1 -0
  219. package/dist/types/thread/store.js +22 -0
  220. package/dist/types/thread/store.js.map +1 -0
  221. package/dist/utils/id.d.ts +1 -12
  222. package/dist/utils/id.d.ts.map +1 -1
  223. package/dist/utils/id.js +3 -23
  224. package/dist/utils/id.js.map +1 -1
  225. package/package.json +11 -20
  226. package/src/agents/ReactiveAgent.ts +3 -2
  227. package/src/agents/SupervisorAgent.ts +5 -2
  228. package/src/bridge/a2a/index.ts +0 -1
  229. package/src/bridge/a2a/message.ts +0 -32
  230. package/src/bridge/a2a/task.ts +8 -7
  231. package/src/contracts/api.ts +6 -42
  232. package/src/contracts/ids.ts +1 -1
  233. package/src/contracts/index.ts +2 -8
  234. package/src/contracts/schemas.ts +1 -8
  235. package/src/index.ts +3 -15
  236. package/src/manager/agent/__tests__/lifecycle.test.ts +34 -13
  237. package/src/manager/agent/lifecycle.ts +114 -35
  238. package/src/manager/index.ts +3 -0
  239. package/src/manager/run/persistence.ts +7 -1
  240. package/src/manager/thread/__tests__/lifecycle.test.ts +286 -0
  241. package/src/manager/thread/lifecycle.ts +217 -0
  242. package/src/rag/retriever.ts +2 -2
  243. package/src/registry/tool/execute.ts +1 -1
  244. package/src/runtime/query/__tests__/context.test.ts +9 -8
  245. package/src/runtime/query/context-cache.ts +4 -4
  246. package/src/runtime/query/context.ts +15 -22
  247. package/src/runtime/query/index.ts +16 -17
  248. package/src/runtime/query/iteration/index.ts +1 -1
  249. package/src/session/__tests__/integration/_fixtures.ts +36 -8
  250. package/src/session/__tests__/integration/archive-gate.test.ts +288 -0
  251. package/src/session/__tests__/integration/capacity-caps.test.ts +13 -6
  252. package/src/session/__tests__/integration/e2e-spawn.test.ts +20 -2
  253. package/src/session/__tests__/integration/event-stream-ordering.test.ts +14 -7
  254. package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +39 -13
  255. package/src/session/__tests__/integration/handoff-illegal-transition.test.ts +54 -19
  256. package/src/session/__tests__/integration/handoff-single-e2e.test.ts +40 -9
  257. package/src/session/__tests__/integration/hierarchy-lifecycle.test.ts +13 -10
  258. package/src/session/__tests__/integration/prev-artifact-dag.test.ts +12 -5
  259. package/src/session/__tests__/integration/retention-archive.test.ts +5 -3
  260. package/src/session/__tests__/integration/spawn-rollback.test.ts +313 -0
  261. package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +4 -2
  262. package/src/session/__tests__/integration/tenant-isolation.test.ts +16 -6
  263. package/src/session/errors.ts +89 -0
  264. package/src/session/handoff/__tests__/broadcast.test.ts +56 -28
  265. package/src/session/handoff/__tests__/capacity.test.ts +26 -20
  266. package/src/session/handoff/__tests__/single.test.ts +45 -28
  267. package/src/session/handoff/assignment.ts +13 -1
  268. package/src/session/handoff/broadcast.ts +26 -1
  269. package/src/session/handoff/single.ts +23 -1
  270. package/src/session/hierarchy/__tests__/session.test.ts +9 -1
  271. package/src/session/hierarchy/index.ts +1 -0
  272. package/src/session/hierarchy/session.ts +15 -3
  273. package/src/session/hierarchy/thread.ts +55 -0
  274. package/src/session/migration/id-prefix.ts +8 -13
  275. package/src/session/retention/__tests__/archive.test.ts +5 -3
  276. package/src/session/summary/__tests__/materialize.test.ts +6 -4
  277. package/src/store/index.ts +0 -3
  278. package/src/store/session/__tests__/disk.test.ts +57 -6
  279. package/src/store/session/__tests__/memory.test.ts +84 -9
  280. package/src/store/session/disk.ts +57 -1
  281. package/src/store/session/index.ts +3 -4
  282. package/src/store/session/memory.ts +13 -1
  283. package/src/store/thread/disk.ts +261 -0
  284. package/src/store/thread/index.ts +7 -0
  285. package/src/store/thread/memory.ts +104 -0
  286. package/src/telemetry/runtime-accessors.ts +19 -0
  287. package/src/types/agent/base.ts +17 -21
  288. package/src/types/agent/factory.ts +8 -3
  289. package/src/types/agent/task.ts +19 -11
  290. package/src/types/ids/index.ts +8 -15
  291. package/src/types/rag/retrieval.ts +4 -3
  292. package/src/types/run/config.ts +6 -5
  293. package/src/types/run/metadata.ts +5 -18
  294. package/src/types/session/ids.ts +4 -15
  295. package/src/types/session/index.ts +1 -2
  296. package/src/types/session/store.ts +34 -11
  297. package/src/types/thread/index.ts +5 -0
  298. package/src/types/thread/store.ts +92 -0
  299. package/src/utils/id.ts +3 -24
  300. package/dist/provider/telemetry/setup.d.ts +0 -19
  301. package/dist/provider/telemetry/setup.d.ts.map +0 -1
  302. package/dist/provider/telemetry/setup.js +0 -102
  303. package/dist/provider/telemetry/setup.js.map +0 -1
  304. package/dist/store/conversation/memory.d.ts +0 -43
  305. package/dist/store/conversation/memory.d.ts.map +0 -1
  306. package/dist/store/conversation/memory.js +0 -108
  307. package/dist/store/conversation/memory.js.map +0 -1
  308. package/dist/telemetry/index.d.ts +0 -6
  309. package/dist/telemetry/index.d.ts.map +0 -1
  310. package/dist/telemetry/index.js +0 -4
  311. package/dist/telemetry/index.js.map +0 -1
  312. package/dist/telemetry/metrics.d.ts +0 -8
  313. package/dist/telemetry/metrics.d.ts.map +0 -1
  314. package/dist/telemetry/metrics.js +0 -53
  315. package/dist/telemetry/metrics.js.map +0 -1
  316. package/dist/types/conversation/index.d.ts +0 -14
  317. package/dist/types/conversation/index.d.ts.map +0 -1
  318. package/dist/types/conversation/index.js +0 -2
  319. package/dist/types/conversation/index.js.map +0 -1
  320. package/dist/types/telemetry/index.d.ts +0 -10
  321. package/dist/types/telemetry/index.d.ts.map +0 -1
  322. package/dist/types/telemetry/index.js +0 -2
  323. package/dist/types/telemetry/index.js.map +0 -1
  324. package/src/provider/telemetry/setup.ts +0 -125
  325. package/src/store/conversation/memory.ts +0 -144
  326. package/src/telemetry/index.ts +0 -14
  327. package/src/telemetry/metrics.ts +0 -69
  328. package/src/types/conversation/index.ts +0 -15
  329. package/src/types/telemetry/index.ts +0 -10
@@ -1,108 +0,0 @@
1
- /**
2
- * @deprecated Use `InMemorySessionStore` from
3
- * `@namzu/sdk/store/session`. This class implements the deprecated
4
- * `ConversationStore` contract (thread-scoped, no tenantId) and is kept
5
- * for one migration window per session-hierarchy.md §13.1; it will be
6
- * removed in 0.3.0.
7
- *
8
- * INTERPRETATION (Phase 3): the old class exposes helpers
9
- * (`addUserMessage`, `createThread`, `hasThread`, `deleteThread`,
10
- * `messageCount`, `clear`) that are not part of `ConversationStore` and
11
- * whose signatures rely on `ThreadId` + `Message` without `TenantId`.
12
- * Those signatures are structurally incompatible with the new
13
- * `SessionStore` surface, so a strict alias re-export would lose API
14
- * (roadmap §2 Phase 3 option (a)). We pick option (b) — retain the
15
- * original class body verbatim with a deprecation banner — to preserve
16
- * existing consumers during the migration window without polluting the
17
- * new `InMemorySessionStore` with thread-scoped helpers.
18
- */
19
- import { findSafeTrimIndex } from '../../compaction/dangling.js';
20
- import { createAssistantMessage, createUserMessage, } from '../../types/message/index.js';
21
- import { extractFinalResponse } from '../../utils/conversation.js';
22
- import { generateMessageId } from '../../utils/id.js';
23
- /**
24
- * @deprecated See module banner. Use `InMemorySessionStore` from
25
- * `@namzu/sdk/store/session`.
26
- */
27
- export class InMemoryConversationStore {
28
- threads = new Map();
29
- maxMessages;
30
- constructor(config = {}) {
31
- this.maxMessages = config.maxMessages ?? 100;
32
- }
33
- loadMessages(threadId) {
34
- const messages = this.threads.get(threadId);
35
- if (!messages)
36
- return [];
37
- // Convert to Message type for trim safety check
38
- const convertedMessages = messages.map((m) => {
39
- switch (m.role) {
40
- case 'user':
41
- return createUserMessage(m.content);
42
- case 'assistant':
43
- return createAssistantMessage(m.content);
44
- default: {
45
- const _exhaustive = m.role;
46
- throw new Error(`Unhandled message role: ${_exhaustive}`);
47
- }
48
- }
49
- });
50
- // Apply safe trimming to preserve tool call/result atomicity
51
- let trimStartIdx = 0;
52
- if (convertedMessages.length > this.maxMessages) {
53
- const desiredTrimPoint = convertedMessages.length - this.maxMessages;
54
- trimStartIdx = findSafeTrimIndex(convertedMessages, desiredTrimPoint);
55
- }
56
- return convertedMessages.slice(trimStartIdx);
57
- }
58
- persistRunResult(threadId, runId, messages) {
59
- const finalAssistant = extractFinalResponse(messages);
60
- if (!finalAssistant || !finalAssistant.content)
61
- return;
62
- this.ensureThread(threadId);
63
- this.threads.get(threadId)?.push({
64
- id: generateMessageId(),
65
- threadId,
66
- role: 'assistant',
67
- content: finalAssistant.content,
68
- runId,
69
- createdAt: new Date().toISOString(),
70
- });
71
- }
72
- addUserMessage(threadId, content) {
73
- this.ensureThread(threadId);
74
- const id = generateMessageId();
75
- this.threads.get(threadId)?.push({
76
- id,
77
- threadId,
78
- role: 'user',
79
- content,
80
- createdAt: new Date().toISOString(),
81
- });
82
- return id;
83
- }
84
- hasThread(threadId) {
85
- return this.threads.has(threadId);
86
- }
87
- createThread(threadId) {
88
- if (this.threads.has(threadId))
89
- return false;
90
- this.threads.set(threadId, []);
91
- return true;
92
- }
93
- deleteThread(threadId) {
94
- return this.threads.delete(threadId);
95
- }
96
- messageCount(threadId) {
97
- return this.threads.get(threadId)?.length ?? 0;
98
- }
99
- clear() {
100
- this.threads.clear();
101
- }
102
- ensureThread(threadId) {
103
- if (!this.threads.has(threadId)) {
104
- this.threads.set(threadId, []);
105
- }
106
- }
107
- }
108
- //# sourceMappingURL=memory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/store/conversation/memory.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- export { TelemetryProvider, initTelemetry, getTelemetry, getTracer, getMeter, } from '../provider/telemetry/setup.js';
2
- export type { TelemetryConfig, ExporterType } from '../types/telemetry/index.js';
3
- export { createPlatformMetrics } from './metrics.js';
4
- export type { PlatformMetrics } from './metrics.js';
5
- export * from './attributes.js';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,GACR,MAAM,gCAAgC,CAAA;AAEvC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,cAAc,iBAAiB,CAAA"}
@@ -1,4 +0,0 @@
1
- export { TelemetryProvider, initTelemetry, getTelemetry, getTracer, getMeter, } from '../provider/telemetry/setup.js';
2
- export { createPlatformMetrics } from './metrics.js';
3
- export * from './attributes.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,GACR,MAAM,gCAAgC,CAAA;AAIvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAGpD,cAAc,iBAAiB,CAAA"}
@@ -1,8 +0,0 @@
1
- export interface PlatformMetrics {
2
- recordTokenUsage(model: string, inputTokens: number, outputTokens: number): void;
3
- recordToolCall(toolName: string, success: boolean): void;
4
- recordRunDuration(status: string, durationSec: number): void;
5
- recordLLMLatency(model: string, durationSec: number): void;
6
- }
7
- export declare function createPlatformMetrics(): PlatformMetrics;
8
- //# sourceMappingURL=metrics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC/B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAChF,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACxD,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5D,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1D;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CA2DvD"}
@@ -1,53 +0,0 @@
1
- import { getMeter } from '../provider/telemetry/setup.js';
2
- export function createPlatformMetrics() {
3
- const meter = getMeter();
4
- const tokenInputCounter = meter.createCounter('gen_ai.client.token.usage', {
5
- description: 'Number of input (prompt) tokens used',
6
- unit: '{token}',
7
- });
8
- const tokenOutputCounter = meter.createCounter('gen_ai.client.token.usage.output', {
9
- description: 'Number of output (completion) tokens used',
10
- unit: '{token}',
11
- });
12
- const toolCallCounter = meter.createCounter('gen_ai.tool.call.count', {
13
- description: 'Number of tool calls executed',
14
- unit: '{call}',
15
- });
16
- const runDurationHistogram = meter.createHistogram('namzu.run.duration', {
17
- description: 'Agent run duration',
18
- unit: 's',
19
- });
20
- const llmLatencyHistogram = meter.createHistogram('gen_ai.client.operation.duration', {
21
- description: 'LLM request duration (GenAI semantic convention)',
22
- unit: 's',
23
- });
24
- return {
25
- recordTokenUsage(model, inputTokens, outputTokens) {
26
- tokenInputCounter.add(inputTokens, {
27
- 'gen_ai.request.model': model,
28
- 'gen_ai.token.type': 'input',
29
- });
30
- tokenOutputCounter.add(outputTokens, {
31
- 'gen_ai.request.model': model,
32
- 'gen_ai.token.type': 'output',
33
- });
34
- },
35
- recordToolCall(toolName, success) {
36
- toolCallCounter.add(1, {
37
- 'gen_ai.tool.name': toolName,
38
- 'namzu.tool.success': success,
39
- });
40
- },
41
- recordRunDuration(status, durationSec) {
42
- runDurationHistogram.record(durationSec, {
43
- 'namzu.run.status': status,
44
- });
45
- },
46
- recordLLMLatency(model, durationSec) {
47
- llmLatencyHistogram.record(durationSec, {
48
- 'gen_ai.request.model': model,
49
- });
50
- },
51
- };
52
- }
53
- //# sourceMappingURL=metrics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AASzD,MAAM,UAAU,qBAAqB;IACpC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;QAC1E,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,SAAS;KACf,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,kCAAkC,EAAE;QAClF,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,SAAS;KACf,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE;QACrE,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,QAAQ;KACd,CAAC,CAAA;IAEF,MAAM,oBAAoB,GAAG,KAAK,CAAC,eAAe,CAAC,oBAAoB,EAAE;QACxE,WAAW,EAAE,oBAAoB;QACjC,IAAI,EAAE,GAAG;KACT,CAAC,CAAA;IAEF,MAAM,mBAAmB,GAAG,KAAK,CAAC,eAAe,CAAC,kCAAkC,EAAE;QACrF,WAAW,EAAE,kDAAkD;QAC/D,IAAI,EAAE,GAAG;KACT,CAAC,CAAA;IAEF,OAAO;QACN,gBAAgB,CAAC,KAAa,EAAE,WAAmB,EAAE,YAAoB;YACxE,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE;gBAClC,sBAAsB,EAAE,KAAK;gBAC7B,mBAAmB,EAAE,OAAO;aAC5B,CAAC,CAAA;YACF,kBAAkB,CAAC,GAAG,CAAC,YAAY,EAAE;gBACpC,sBAAsB,EAAE,KAAK;gBAC7B,mBAAmB,EAAE,QAAQ;aAC7B,CAAC,CAAA;QACH,CAAC;QAED,cAAc,CAAC,QAAgB,EAAE,OAAgB;YAChD,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE;gBACtB,kBAAkB,EAAE,QAAQ;gBAC5B,oBAAoB,EAAE,OAAO;aAC7B,CAAC,CAAA;QACH,CAAC;QAED,iBAAiB,CAAC,MAAc,EAAE,WAAmB;YACpD,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE;gBACxC,kBAAkB,EAAE,MAAM;aAC1B,CAAC,CAAA;QACH,CAAC;QAED,gBAAgB,CAAC,KAAa,EAAE,WAAmB;YAClD,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE;gBACvC,sBAAsB,EAAE,KAAK;aAC7B,CAAC,CAAA;QACH,CAAC;KACD,CAAA;AACF,CAAC"}
@@ -1,14 +0,0 @@
1
- import type { RunId, ThreadId } from '../ids/index.js';
2
- import type { Message } from '../message/index.js';
3
- /**
4
- * @deprecated Use `SessionStore` from `@namzu/sdk` (import via
5
- * `types/session/store.ts` or the root barrel). `ConversationStore` is
6
- * thread-scoped and does not carry the `tenantId` required by
7
- * session-hierarchy.md §12.1. Scheduled for removal in 0.3.0; the one-
8
- * version migration window follows session-hierarchy.md §13.1.
9
- */
10
- export interface ConversationStore {
11
- loadMessages(threadId: ThreadId): Message[];
12
- persistRunResult(threadId: ThreadId, runId: RunId, messages: Message[]): void;
13
- }
14
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,CAAA;IAE3C,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAC7E"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/conversation/index.ts"],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
1
- export type ExporterType = 'console' | 'otlp' | 'none';
2
- export interface TelemetryConfig {
3
- serviceName: string;
4
- serviceVersion?: string;
5
- exporterType: ExporterType;
6
- otlpEndpoint?: string;
7
- otlpHeaders?: Record<string, string>;
8
- metricExportIntervalMs?: number;
9
- }
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/telemetry/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAA;AAEtD,MAAM,WAAW,eAAe;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,YAAY,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAC/B"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/telemetry/index.ts"],"names":[],"mappings":""}
@@ -1,125 +0,0 @@
1
- import { type Meter, type Tracer, metrics, trace } from '@opentelemetry/api'
2
- import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'
3
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
4
- import { Resource } from '@opentelemetry/resources'
5
- import {
6
- ConsoleMetricExporter,
7
- MeterProvider,
8
- PeriodicExportingMetricReader,
9
- } from '@opentelemetry/sdk-metrics'
10
- import { NodeSDK } from '@opentelemetry/sdk-node'
11
- import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node'
12
- import type { TelemetryConfig } from '../../types/telemetry/index.js'
13
- import { toErrorMessage } from '../../utils/error.js'
14
- import { getRootLogger } from '../../utils/logger.js'
15
- import { VERSION } from '../../version.js'
16
-
17
- const logger = getRootLogger().child({ component: 'TelemetryProvider' })
18
-
19
- export class TelemetryProvider {
20
- private sdk: NodeSDK | null = null
21
- private meterProvider: MeterProvider | null = null
22
- private config: TelemetryConfig
23
- private _tracer: Tracer | null = null
24
- private _meter: Meter | null = null
25
-
26
- constructor(config: TelemetryConfig) {
27
- this.config = config
28
- }
29
-
30
- get tracer(): Tracer {
31
- if (!this._tracer) {
32
- this._tracer = trace.getTracer(this.config.serviceName, this.config.serviceVersion ?? VERSION)
33
- }
34
- return this._tracer
35
- }
36
-
37
- get meter(): Meter {
38
- if (!this._meter) {
39
- this._meter = metrics.getMeter(this.config.serviceName, this.config.serviceVersion ?? VERSION)
40
- }
41
- return this._meter
42
- }
43
-
44
- async start(): Promise<void> {
45
- if (this.config.exporterType === 'none') {
46
- logger.info('Telemetry disabled (exporterType=none)')
47
- return
48
- }
49
-
50
- const resource = new Resource({
51
- 'service.name': this.config.serviceName,
52
- 'service.version': this.config.serviceVersion ?? VERSION,
53
- })
54
-
55
- const traceExporter =
56
- this.config.exporterType === 'otlp'
57
- ? new OTLPTraceExporter({
58
- url: this.config.otlpEndpoint ? `${this.config.otlpEndpoint}/v1/traces` : undefined,
59
- headers: this.config.otlpHeaders,
60
- })
61
- : new ConsoleSpanExporter()
62
-
63
- const metricExporter =
64
- this.config.exporterType === 'otlp'
65
- ? new OTLPMetricExporter({
66
- url: this.config.otlpEndpoint ? `${this.config.otlpEndpoint}/v1/metrics` : undefined,
67
- headers: this.config.otlpHeaders,
68
- })
69
- : new ConsoleMetricExporter()
70
-
71
- this.meterProvider = new MeterProvider({
72
- resource,
73
- readers: [
74
- new PeriodicExportingMetricReader({
75
- exporter: metricExporter,
76
- exportIntervalMillis: this.config.metricExportIntervalMs ?? 10_000,
77
- }),
78
- ],
79
- })
80
- metrics.setGlobalMeterProvider(this.meterProvider)
81
-
82
- this.sdk = new NodeSDK({
83
- resource,
84
- spanProcessor: new SimpleSpanProcessor(traceExporter),
85
- })
86
-
87
- this.sdk.start()
88
- logger.info(`Telemetry started (exporter=${this.config.exporterType})`)
89
- }
90
-
91
- async shutdown(): Promise<void> {
92
- try {
93
- if (this.meterProvider) {
94
- await this.meterProvider.shutdown()
95
- }
96
- if (this.sdk) {
97
- await this.sdk.shutdown()
98
- }
99
- logger.info('Telemetry shutdown complete')
100
- } catch (err) {
101
- logger.error('Telemetry shutdown error', {
102
- error: toErrorMessage(err),
103
- })
104
- }
105
- }
106
- }
107
-
108
- let _globalProvider: TelemetryProvider | null = null
109
-
110
- export function initTelemetry(config: TelemetryConfig): TelemetryProvider {
111
- _globalProvider = new TelemetryProvider(config)
112
- return _globalProvider
113
- }
114
-
115
- export function getTelemetry(): TelemetryProvider | null {
116
- return _globalProvider
117
- }
118
-
119
- export function getTracer(): Tracer {
120
- return _globalProvider?.tracer ?? trace.getTracer('namzu')
121
- }
122
-
123
- export function getMeter(): Meter {
124
- return _globalProvider?.meter ?? metrics.getMeter('namzu')
125
- }
@@ -1,144 +0,0 @@
1
- /**
2
- * @deprecated Use `InMemorySessionStore` from
3
- * `@namzu/sdk/store/session`. This class implements the deprecated
4
- * `ConversationStore` contract (thread-scoped, no tenantId) and is kept
5
- * for one migration window per session-hierarchy.md §13.1; it will be
6
- * removed in 0.3.0.
7
- *
8
- * INTERPRETATION (Phase 3): the old class exposes helpers
9
- * (`addUserMessage`, `createThread`, `hasThread`, `deleteThread`,
10
- * `messageCount`, `clear`) that are not part of `ConversationStore` and
11
- * whose signatures rely on `ThreadId` + `Message` without `TenantId`.
12
- * Those signatures are structurally incompatible with the new
13
- * `SessionStore` surface, so a strict alias re-export would lose API
14
- * (roadmap §2 Phase 3 option (a)). We pick option (b) — retain the
15
- * original class body verbatim with a deprecation banner — to preserve
16
- * existing consumers during the migration window without polluting the
17
- * new `InMemorySessionStore` with thread-scoped helpers.
18
- */
19
-
20
- import { findSafeTrimIndex } from '../../compaction/dangling.js'
21
- import type { ConversationStore } from '../../types/conversation/index.js'
22
- import type { MessageId, RunId, ThreadId } from '../../types/ids/index.js'
23
- import {
24
- type Message,
25
- createAssistantMessage,
26
- createUserMessage,
27
- } from '../../types/message/index.js'
28
- import { extractFinalResponse } from '../../utils/conversation.js'
29
- import { generateMessageId } from '../../utils/id.js'
30
-
31
- interface ConversationMessage {
32
- readonly id: MessageId
33
-
34
- readonly threadId: ThreadId
35
-
36
- readonly role: 'user' | 'assistant'
37
-
38
- readonly content: string
39
-
40
- readonly runId?: RunId
41
-
42
- readonly createdAt: string
43
- }
44
-
45
- export interface InMemoryConversationStoreConfig {
46
- readonly maxMessages?: number
47
- }
48
-
49
- /**
50
- * @deprecated See module banner. Use `InMemorySessionStore` from
51
- * `@namzu/sdk/store/session`.
52
- */
53
- export class InMemoryConversationStore implements ConversationStore {
54
- private readonly threads = new Map<ThreadId, ConversationMessage[]>()
55
- private readonly maxMessages: number
56
-
57
- constructor(config: InMemoryConversationStoreConfig = {}) {
58
- this.maxMessages = config.maxMessages ?? 100
59
- }
60
-
61
- loadMessages(threadId: ThreadId): Message[] {
62
- const messages = this.threads.get(threadId)
63
- if (!messages) return []
64
-
65
- // Convert to Message type for trim safety check
66
- const convertedMessages: Message[] = messages.map((m) => {
67
- switch (m.role) {
68
- case 'user':
69
- return createUserMessage(m.content)
70
- case 'assistant':
71
- return createAssistantMessage(m.content)
72
- default: {
73
- const _exhaustive: never = m.role
74
- throw new Error(`Unhandled message role: ${_exhaustive}`)
75
- }
76
- }
77
- })
78
-
79
- // Apply safe trimming to preserve tool call/result atomicity
80
- let trimStartIdx = 0
81
- if (convertedMessages.length > this.maxMessages) {
82
- const desiredTrimPoint = convertedMessages.length - this.maxMessages
83
- trimStartIdx = findSafeTrimIndex(convertedMessages, desiredTrimPoint)
84
- }
85
-
86
- return convertedMessages.slice(trimStartIdx)
87
- }
88
-
89
- persistRunResult(threadId: ThreadId, runId: RunId, messages: Message[]): void {
90
- const finalAssistant = extractFinalResponse(messages)
91
- if (!finalAssistant || !finalAssistant.content) return
92
-
93
- this.ensureThread(threadId)
94
- this.threads.get(threadId)?.push({
95
- id: generateMessageId(),
96
- threadId,
97
- role: 'assistant',
98
- content: finalAssistant.content,
99
- runId,
100
- createdAt: new Date().toISOString(),
101
- })
102
- }
103
-
104
- addUserMessage(threadId: ThreadId, content: string): MessageId {
105
- this.ensureThread(threadId)
106
- const id = generateMessageId()
107
- this.threads.get(threadId)?.push({
108
- id,
109
- threadId,
110
- role: 'user',
111
- content,
112
- createdAt: new Date().toISOString(),
113
- })
114
- return id
115
- }
116
-
117
- hasThread(threadId: ThreadId): boolean {
118
- return this.threads.has(threadId)
119
- }
120
-
121
- createThread(threadId: ThreadId): boolean {
122
- if (this.threads.has(threadId)) return false
123
- this.threads.set(threadId, [])
124
- return true
125
- }
126
-
127
- deleteThread(threadId: ThreadId): boolean {
128
- return this.threads.delete(threadId)
129
- }
130
-
131
- messageCount(threadId: ThreadId): number {
132
- return this.threads.get(threadId)?.length ?? 0
133
- }
134
-
135
- clear(): void {
136
- this.threads.clear()
137
- }
138
-
139
- private ensureThread(threadId: ThreadId): void {
140
- if (!this.threads.has(threadId)) {
141
- this.threads.set(threadId, [])
142
- }
143
- }
144
- }
@@ -1,14 +0,0 @@
1
- export {
2
- TelemetryProvider,
3
- initTelemetry,
4
- getTelemetry,
5
- getTracer,
6
- getMeter,
7
- } from '../provider/telemetry/setup.js'
8
-
9
- export type { TelemetryConfig, ExporterType } from '../types/telemetry/index.js'
10
-
11
- export { createPlatformMetrics } from './metrics.js'
12
- export type { PlatformMetrics } from './metrics.js'
13
-
14
- export * from './attributes.js'
@@ -1,69 +0,0 @@
1
- import { getMeter } from '../provider/telemetry/setup.js'
2
-
3
- export interface PlatformMetrics {
4
- recordTokenUsage(model: string, inputTokens: number, outputTokens: number): void
5
- recordToolCall(toolName: string, success: boolean): void
6
- recordRunDuration(status: string, durationSec: number): void
7
- recordLLMLatency(model: string, durationSec: number): void
8
- }
9
-
10
- export function createPlatformMetrics(): PlatformMetrics {
11
- const meter = getMeter()
12
-
13
- const tokenInputCounter = meter.createCounter('gen_ai.client.token.usage', {
14
- description: 'Number of input (prompt) tokens used',
15
- unit: '{token}',
16
- })
17
-
18
- const tokenOutputCounter = meter.createCounter('gen_ai.client.token.usage.output', {
19
- description: 'Number of output (completion) tokens used',
20
- unit: '{token}',
21
- })
22
-
23
- const toolCallCounter = meter.createCounter('gen_ai.tool.call.count', {
24
- description: 'Number of tool calls executed',
25
- unit: '{call}',
26
- })
27
-
28
- const runDurationHistogram = meter.createHistogram('namzu.run.duration', {
29
- description: 'Agent run duration',
30
- unit: 's',
31
- })
32
-
33
- const llmLatencyHistogram = meter.createHistogram('gen_ai.client.operation.duration', {
34
- description: 'LLM request duration (GenAI semantic convention)',
35
- unit: 's',
36
- })
37
-
38
- return {
39
- recordTokenUsage(model: string, inputTokens: number, outputTokens: number): void {
40
- tokenInputCounter.add(inputTokens, {
41
- 'gen_ai.request.model': model,
42
- 'gen_ai.token.type': 'input',
43
- })
44
- tokenOutputCounter.add(outputTokens, {
45
- 'gen_ai.request.model': model,
46
- 'gen_ai.token.type': 'output',
47
- })
48
- },
49
-
50
- recordToolCall(toolName: string, success: boolean): void {
51
- toolCallCounter.add(1, {
52
- 'gen_ai.tool.name': toolName,
53
- 'namzu.tool.success': success,
54
- })
55
- },
56
-
57
- recordRunDuration(status: string, durationSec: number): void {
58
- runDurationHistogram.record(durationSec, {
59
- 'namzu.run.status': status,
60
- })
61
- },
62
-
63
- recordLLMLatency(model: string, durationSec: number): void {
64
- llmLatencyHistogram.record(durationSec, {
65
- 'gen_ai.request.model': model,
66
- })
67
- },
68
- }
69
- }
@@ -1,15 +0,0 @@
1
- import type { RunId, ThreadId } from '../ids/index.js'
2
- import type { Message } from '../message/index.js'
3
-
4
- /**
5
- * @deprecated Use `SessionStore` from `@namzu/sdk` (import via
6
- * `types/session/store.ts` or the root barrel). `ConversationStore` is
7
- * thread-scoped and does not carry the `tenantId` required by
8
- * session-hierarchy.md §12.1. Scheduled for removal in 0.3.0; the one-
9
- * version migration window follows session-hierarchy.md §13.1.
10
- */
11
- export interface ConversationStore {
12
- loadMessages(threadId: ThreadId): Message[]
13
-
14
- persistRunResult(threadId: ThreadId, runId: RunId, messages: Message[]): void
15
- }
@@ -1,10 +0,0 @@
1
- export type ExporterType = 'console' | 'otlp' | 'none'
2
-
3
- export interface TelemetryConfig {
4
- serviceName: string
5
- serviceVersion?: string
6
- exporterType: ExporterType
7
- otlpEndpoint?: string
8
- otlpHeaders?: Record<string, string>
9
- metricExportIntervalMs?: number
10
- }