@namzu/sdk 0.4.2 → 0.4.4

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 (310) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/advisory/context.test.d.ts +16 -0
  3. package/dist/advisory/context.test.d.ts.map +1 -0
  4. package/dist/advisory/context.test.js +92 -0
  5. package/dist/advisory/context.test.js.map +1 -0
  6. package/dist/advisory/evaluator.test.d.ts +34 -0
  7. package/dist/advisory/evaluator.test.d.ts.map +1 -0
  8. package/dist/advisory/evaluator.test.js +172 -0
  9. package/dist/advisory/evaluator.test.js.map +1 -0
  10. package/dist/advisory/executor.test.d.ts +35 -0
  11. package/dist/advisory/executor.test.d.ts.map +1 -0
  12. package/dist/advisory/executor.test.js +233 -0
  13. package/dist/advisory/executor.test.js.map +1 -0
  14. package/dist/advisory/registry.test.d.ts +16 -0
  15. package/dist/advisory/registry.test.d.ts.map +1 -0
  16. package/dist/advisory/registry.test.js +62 -0
  17. package/dist/advisory/registry.test.js.map +1 -0
  18. package/dist/bridge/a2a/agent-card.test.d.ts +24 -0
  19. package/dist/bridge/a2a/agent-card.test.d.ts.map +1 -0
  20. package/dist/bridge/a2a/agent-card.test.js +118 -0
  21. package/dist/bridge/a2a/agent-card.test.js.map +1 -0
  22. package/dist/bridge/a2a/mapper.test.d.ts +29 -0
  23. package/dist/bridge/a2a/mapper.test.d.ts.map +1 -0
  24. package/dist/bridge/a2a/mapper.test.js +265 -0
  25. package/dist/bridge/a2a/mapper.test.js.map +1 -0
  26. package/dist/bridge/a2a/message.test.d.ts +20 -0
  27. package/dist/bridge/a2a/message.test.d.ts.map +1 -0
  28. package/dist/bridge/a2a/message.test.js +116 -0
  29. package/dist/bridge/a2a/message.test.js.map +1 -0
  30. package/dist/bridge/a2a/task.test.d.ts +29 -0
  31. package/dist/bridge/a2a/task.test.d.ts.map +1 -0
  32. package/dist/bridge/a2a/task.test.js +198 -0
  33. package/dist/bridge/a2a/task.test.js.map +1 -0
  34. package/dist/bridge/mcp/connector/adapter.test.d.ts +27 -0
  35. package/dist/bridge/mcp/connector/adapter.test.d.ts.map +1 -0
  36. package/dist/bridge/mcp/connector/adapter.test.js +203 -0
  37. package/dist/bridge/mcp/connector/adapter.test.js.map +1 -0
  38. package/dist/bridge/sse/mapper.test.d.ts +27 -0
  39. package/dist/bridge/sse/mapper.test.d.ts.map +1 -0
  40. package/dist/bridge/sse/mapper.test.js +271 -0
  41. package/dist/bridge/sse/mapper.test.js.map +1 -0
  42. package/dist/bridge/tools/connector/adapter.d.ts +2 -2
  43. package/dist/bridge/tools/connector/adapter.test.d.ts +28 -0
  44. package/dist/bridge/tools/connector/adapter.test.d.ts.map +1 -0
  45. package/dist/bridge/tools/connector/adapter.test.js +182 -0
  46. package/dist/bridge/tools/connector/adapter.test.js.map +1 -0
  47. package/dist/bridge/tools/connector/definitions.test.d.ts +23 -0
  48. package/dist/bridge/tools/connector/definitions.test.d.ts.map +1 -0
  49. package/dist/bridge/tools/connector/definitions.test.js +158 -0
  50. package/dist/bridge/tools/connector/definitions.test.js.map +1 -0
  51. package/dist/bridge/tools/connector/router.test.d.ts +21 -0
  52. package/dist/bridge/tools/connector/router.test.d.ts.map +1 -0
  53. package/dist/bridge/tools/connector/router.test.js +139 -0
  54. package/dist/bridge/tools/connector/router.test.js.map +1 -0
  55. package/dist/bus/breaker.test.d.ts +41 -0
  56. package/dist/bus/breaker.test.d.ts.map +1 -0
  57. package/dist/bus/breaker.test.js +242 -0
  58. package/dist/bus/breaker.test.js.map +1 -0
  59. package/dist/bus/index.d.ts +3 -1
  60. package/dist/bus/index.d.ts.map +1 -1
  61. package/dist/bus/index.js +18 -11
  62. package/dist/bus/index.js.map +1 -1
  63. package/dist/bus/index.test.d.ts +25 -0
  64. package/dist/bus/index.test.d.ts.map +1 -0
  65. package/dist/bus/index.test.js +151 -0
  66. package/dist/bus/index.test.js.map +1 -0
  67. package/dist/bus/lock.test.d.ts +44 -0
  68. package/dist/bus/lock.test.d.ts.map +1 -0
  69. package/dist/bus/lock.test.js +226 -0
  70. package/dist/bus/lock.test.js.map +1 -0
  71. package/dist/bus/ownership.test.d.ts +26 -0
  72. package/dist/bus/ownership.test.d.ts.map +1 -0
  73. package/dist/bus/ownership.test.js +205 -0
  74. package/dist/bus/ownership.test.js.map +1 -0
  75. package/dist/config/runtime.d.ts +28 -28
  76. package/dist/connector/BaseConnector.test.d.ts +21 -0
  77. package/dist/connector/BaseConnector.test.d.ts.map +1 -0
  78. package/dist/connector/BaseConnector.test.js +108 -0
  79. package/dist/connector/BaseConnector.test.js.map +1 -0
  80. package/dist/connector/builtins/http.test.d.ts +30 -0
  81. package/dist/connector/builtins/http.test.d.ts.map +1 -0
  82. package/dist/connector/builtins/http.test.js +232 -0
  83. package/dist/connector/builtins/http.test.js.map +1 -0
  84. package/dist/connector/builtins/webhook.test.d.ts +20 -0
  85. package/dist/connector/builtins/webhook.test.d.ts.map +1 -0
  86. package/dist/connector/builtins/webhook.test.js +113 -0
  87. package/dist/connector/builtins/webhook.test.js.map +1 -0
  88. package/dist/connector/execution/factory.test.d.ts +16 -0
  89. package/dist/connector/execution/factory.test.d.ts.map +1 -0
  90. package/dist/connector/execution/factory.test.js +64 -0
  91. package/dist/connector/execution/factory.test.js.map +1 -0
  92. package/dist/connector/execution/remote.test.d.ts +16 -0
  93. package/dist/connector/execution/remote.test.d.ts.map +1 -0
  94. package/dist/connector/execution/remote.test.js +53 -0
  95. package/dist/connector/execution/remote.test.js.map +1 -0
  96. package/dist/connector/mcp/adapter.test.d.ts +34 -0
  97. package/dist/connector/mcp/adapter.test.d.ts.map +1 -0
  98. package/dist/connector/mcp/adapter.test.js +199 -0
  99. package/dist/connector/mcp/adapter.test.js.map +1 -0
  100. package/dist/probe/context.d.ts +8 -0
  101. package/dist/probe/context.d.ts.map +1 -0
  102. package/dist/probe/context.js +7 -0
  103. package/dist/probe/context.js.map +1 -0
  104. package/dist/probe/errors.d.ts +12 -0
  105. package/dist/probe/errors.d.ts.map +1 -0
  106. package/dist/probe/errors.js +21 -0
  107. package/dist/probe/errors.js.map +1 -0
  108. package/dist/probe/index.d.ts +5 -0
  109. package/dist/probe/index.d.ts.map +1 -0
  110. package/dist/probe/index.js +4 -0
  111. package/dist/probe/index.js.map +1 -0
  112. package/dist/probe/registry.d.ts +24 -0
  113. package/dist/probe/registry.d.ts.map +1 -0
  114. package/dist/probe/registry.js +228 -0
  115. package/dist/probe/registry.js.map +1 -0
  116. package/dist/probe/registry.test.d.ts +7 -0
  117. package/dist/probe/registry.test.d.ts.map +1 -0
  118. package/dist/probe/registry.test.js +310 -0
  119. package/dist/probe/registry.test.js.map +1 -0
  120. package/dist/provider/instrumentation.d.ts +9 -0
  121. package/dist/provider/instrumentation.d.ts.map +1 -0
  122. package/dist/provider/instrumentation.js +104 -0
  123. package/dist/provider/instrumentation.js.map +1 -0
  124. package/dist/provider/instrumentation.test.d.ts +2 -0
  125. package/dist/provider/instrumentation.test.d.ts.map +1 -0
  126. package/dist/provider/instrumentation.test.js +152 -0
  127. package/dist/provider/instrumentation.test.js.map +1 -0
  128. package/dist/public-runtime.d.ts +5 -0
  129. package/dist/public-runtime.d.ts.map +1 -1
  130. package/dist/public-runtime.js +4 -0
  131. package/dist/public-runtime.js.map +1 -1
  132. package/dist/public-types.d.ts +3 -0
  133. package/dist/public-types.d.ts.map +1 -1
  134. package/dist/rag/chunking.test.d.ts +20 -0
  135. package/dist/rag/chunking.test.d.ts.map +1 -0
  136. package/dist/rag/chunking.test.js +92 -0
  137. package/dist/rag/chunking.test.js.map +1 -0
  138. package/dist/rag/context-assembler.test.d.ts +19 -0
  139. package/dist/rag/context-assembler.test.d.ts.map +1 -0
  140. package/dist/rag/context-assembler.test.js +98 -0
  141. package/dist/rag/context-assembler.test.js.map +1 -0
  142. package/dist/rag/embedding.test.d.ts +19 -0
  143. package/dist/rag/embedding.test.d.ts.map +1 -0
  144. package/dist/rag/embedding.test.js +115 -0
  145. package/dist/rag/embedding.test.js.map +1 -0
  146. package/dist/rag/ingestion.test.d.ts +22 -0
  147. package/dist/rag/ingestion.test.d.ts.map +1 -0
  148. package/dist/rag/ingestion.test.js +99 -0
  149. package/dist/rag/ingestion.test.js.map +1 -0
  150. package/dist/rag/knowledge-base.test.d.ts +17 -0
  151. package/dist/rag/knowledge-base.test.d.ts.map +1 -0
  152. package/dist/rag/knowledge-base.test.js +77 -0
  153. package/dist/rag/knowledge-base.test.js.map +1 -0
  154. package/dist/rag/rag-tool.test.d.ts +21 -0
  155. package/dist/rag/rag-tool.test.d.ts.map +1 -0
  156. package/dist/rag/rag-tool.test.js +149 -0
  157. package/dist/rag/rag-tool.test.js.map +1 -0
  158. package/dist/rag/retriever.test.d.ts +26 -0
  159. package/dist/rag/retriever.test.d.ts.map +1 -0
  160. package/dist/rag/retriever.test.js +180 -0
  161. package/dist/rag/retriever.test.js.map +1 -0
  162. package/dist/rag/vector-store.test.d.ts +38 -0
  163. package/dist/rag/vector-store.test.d.ts.map +1 -0
  164. package/dist/rag/vector-store.test.js +175 -0
  165. package/dist/rag/vector-store.test.js.map +1 -0
  166. package/dist/registry/ManagedRegistry.test.d.ts +21 -0
  167. package/dist/registry/ManagedRegistry.test.d.ts.map +1 -0
  168. package/dist/registry/ManagedRegistry.test.js +98 -0
  169. package/dist/registry/ManagedRegistry.test.js.map +1 -0
  170. package/dist/registry/Registry.test.d.ts +18 -0
  171. package/dist/registry/Registry.test.d.ts.map +1 -0
  172. package/dist/registry/Registry.test.js +79 -0
  173. package/dist/registry/Registry.test.js.map +1 -0
  174. package/dist/registry/agent/definitions.test.d.ts +15 -0
  175. package/dist/registry/agent/definitions.test.d.ts.map +1 -0
  176. package/dist/registry/agent/definitions.test.js +84 -0
  177. package/dist/registry/agent/definitions.test.js.map +1 -0
  178. package/dist/registry/connector/definitions.test.d.ts +13 -0
  179. package/dist/registry/connector/definitions.test.d.ts.map +1 -0
  180. package/dist/registry/connector/definitions.test.js +41 -0
  181. package/dist/registry/connector/definitions.test.js.map +1 -0
  182. package/dist/registry/connector/scoped.test.d.ts +21 -0
  183. package/dist/registry/connector/scoped.test.d.ts.map +1 -0
  184. package/dist/registry/connector/scoped.test.js +115 -0
  185. package/dist/registry/connector/scoped.test.js.map +1 -0
  186. package/dist/registry/plugin/index.test.d.ts +12 -0
  187. package/dist/registry/plugin/index.test.d.ts.map +1 -0
  188. package/dist/registry/plugin/index.test.js +69 -0
  189. package/dist/registry/plugin/index.test.js.map +1 -0
  190. package/dist/registry/tool/execute.test.d.ts +42 -0
  191. package/dist/registry/tool/execute.test.d.ts.map +1 -0
  192. package/dist/registry/tool/execute.test.js +281 -0
  193. package/dist/registry/tool/execute.test.js.map +1 -0
  194. package/dist/runtime/query/events.d.ts +3 -1
  195. package/dist/runtime/query/events.d.ts.map +1 -1
  196. package/dist/runtime/query/events.js +6 -1
  197. package/dist/runtime/query/events.js.map +1 -1
  198. package/dist/runtime/query/executor.d.ts +3 -1
  199. package/dist/runtime/query/executor.d.ts.map +1 -1
  200. package/dist/runtime/query/executor.js +30 -1
  201. package/dist/runtime/query/executor.js.map +1 -1
  202. package/dist/runtime/query/iteration/phases/advisory.test.d.ts +42 -0
  203. package/dist/runtime/query/iteration/phases/advisory.test.d.ts.map +1 -0
  204. package/dist/runtime/query/iteration/phases/advisory.test.js +334 -0
  205. package/dist/runtime/query/iteration/phases/advisory.test.js.map +1 -0
  206. package/dist/test-setup.d.ts +22 -0
  207. package/dist/test-setup.d.ts.map +1 -0
  208. package/dist/test-setup.js +23 -0
  209. package/dist/test-setup.js.map +1 -0
  210. package/dist/types/bus/index.d.ts +46 -2
  211. package/dist/types/bus/index.d.ts.map +1 -1
  212. package/dist/types/doctor/check.d.ts +41 -0
  213. package/dist/types/doctor/check.d.ts.map +1 -0
  214. package/dist/types/doctor/check.js +2 -0
  215. package/dist/types/doctor/check.js.map +1 -0
  216. package/dist/types/doctor/index.d.ts +2 -0
  217. package/dist/types/doctor/index.d.ts.map +1 -0
  218. package/dist/types/doctor/index.js +2 -0
  219. package/dist/types/doctor/index.js.map +1 -0
  220. package/dist/types/probe/event-kind.d.ts +6 -0
  221. package/dist/types/probe/event-kind.d.ts.map +1 -0
  222. package/dist/types/probe/event-kind.js +2 -0
  223. package/dist/types/probe/event-kind.js.map +1 -0
  224. package/dist/types/probe/event-of.d.ts +5 -0
  225. package/dist/types/probe/event-of.d.ts.map +1 -0
  226. package/dist/types/probe/event-of.js +2 -0
  227. package/dist/types/probe/event-of.js.map +1 -0
  228. package/dist/types/probe/index.d.ts +4 -0
  229. package/dist/types/probe/index.d.ts.map +1 -0
  230. package/dist/types/probe/index.js +2 -0
  231. package/dist/types/probe/index.js.map +1 -0
  232. package/dist/types/probe/registry.d.ts +27 -0
  233. package/dist/types/probe/registry.d.ts.map +1 -0
  234. package/dist/types/probe/registry.js +2 -0
  235. package/dist/types/probe/registry.js.map +1 -0
  236. package/dist/utils/logger.d.ts +1 -1
  237. package/dist/utils/logger.d.ts.map +1 -1
  238. package/dist/utils/logger.js +5 -0
  239. package/dist/utils/logger.js.map +1 -1
  240. package/dist/vault/instrumentation.d.ts +11 -0
  241. package/dist/vault/instrumentation.d.ts.map +1 -0
  242. package/dist/vault/instrumentation.js +32 -0
  243. package/dist/vault/instrumentation.js.map +1 -0
  244. package/dist/vault/instrumentation.test.d.ts +2 -0
  245. package/dist/vault/instrumentation.test.d.ts.map +1 -0
  246. package/dist/vault/instrumentation.test.js +80 -0
  247. package/dist/vault/instrumentation.test.js.map +1 -0
  248. package/package.json +4 -1
  249. package/src/advisory/context.test.ts +109 -0
  250. package/src/advisory/evaluator.test.ts +192 -0
  251. package/src/advisory/executor.test.ts +272 -0
  252. package/src/advisory/registry.test.ts +75 -0
  253. package/src/bridge/a2a/agent-card.test.ts +140 -0
  254. package/src/bridge/a2a/mapper.test.ts +293 -0
  255. package/src/bridge/a2a/message.test.ts +138 -0
  256. package/src/bridge/a2a/task.test.ts +235 -0
  257. package/src/bridge/mcp/connector/adapter.test.ts +230 -0
  258. package/src/bridge/sse/mapper.test.ts +422 -0
  259. package/src/bridge/tools/connector/adapter.test.ts +224 -0
  260. package/src/bridge/tools/connector/definitions.test.ts +183 -0
  261. package/src/bridge/tools/connector/router.test.ts +159 -0
  262. package/src/bus/breaker.test.ts +274 -0
  263. package/src/bus/index.test.ts +183 -0
  264. package/src/bus/index.ts +21 -10
  265. package/src/bus/lock.test.ts +265 -0
  266. package/src/bus/ownership.test.ts +243 -0
  267. package/src/connector/BaseConnector.test.ts +130 -0
  268. package/src/connector/builtins/http.test.ts +290 -0
  269. package/src/connector/builtins/webhook.test.ts +138 -0
  270. package/src/connector/execution/factory.test.ts +75 -0
  271. package/src/connector/execution/remote.test.ts +63 -0
  272. package/src/connector/mcp/adapter.test.ts +249 -0
  273. package/src/probe/context.ts +14 -0
  274. package/src/probe/errors.ts +27 -0
  275. package/src/probe/index.ts +4 -0
  276. package/src/probe/registry.test.ts +480 -0
  277. package/src/probe/registry.ts +276 -0
  278. package/src/provider/instrumentation.test.ts +192 -0
  279. package/src/provider/instrumentation.ts +139 -0
  280. package/src/public-runtime.ts +17 -0
  281. package/src/public-types.ts +3 -0
  282. package/src/rag/chunking.test.ts +107 -0
  283. package/src/rag/context-assembler.test.ts +114 -0
  284. package/src/rag/embedding.test.ts +130 -0
  285. package/src/rag/ingestion.test.ts +114 -0
  286. package/src/rag/knowledge-base.test.ts +106 -0
  287. package/src/rag/rag-tool.test.ts +167 -0
  288. package/src/rag/retriever.test.ts +210 -0
  289. package/src/rag/vector-store.test.ts +196 -0
  290. package/src/registry/ManagedRegistry.test.ts +118 -0
  291. package/src/registry/Registry.test.ts +91 -0
  292. package/src/registry/agent/definitions.test.ts +100 -0
  293. package/src/registry/connector/definitions.test.ts +51 -0
  294. package/src/registry/connector/scoped.test.ts +129 -0
  295. package/src/registry/plugin/index.test.ts +85 -0
  296. package/src/registry/tool/execute.test.ts +330 -0
  297. package/src/runtime/query/events.ts +6 -1
  298. package/src/runtime/query/executor.ts +34 -0
  299. package/src/runtime/query/iteration/phases/advisory.test.ts +412 -0
  300. package/src/test-setup.ts +24 -0
  301. package/src/types/bus/index.ts +54 -2
  302. package/src/types/doctor/check.ts +53 -0
  303. package/src/types/doctor/index.ts +9 -0
  304. package/src/types/probe/event-kind.ts +8 -0
  305. package/src/types/probe/event-of.ts +3 -0
  306. package/src/types/probe/index.ts +11 -0
  307. package/src/types/probe/registry.ts +36 -0
  308. package/src/utils/logger.ts +6 -1
  309. package/src/vault/instrumentation.test.ts +98 -0
  310. package/src/vault/instrumentation.ts +56 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,51 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.4
4
+
5
+ ### Patch Changes
6
+
7
+ - ffe516c: Probe layer (typed observation + narrow veto) over AgentBus + RunEvent stream — ses_007 phases 0–3.
8
+
9
+ Public surface additions:
10
+
11
+ - **Typed probe observation.** `probe.on(kind | kind[], handler, opts?)` registers a typed handler scoped to one or more event kinds. `probe.onAny(handler, opts?)` is the catch-all tier preserving legacy `AgentBus.on` semantics. Options: `{ where, priority, name, override }`. Events are frozen at the registry boundary; throws are isolated per probe.
12
+ - **Narrow veto on tool execution.** `probe.veto('tool_executing', handler, opts?)` registers a veto handler. Handler returns `'allow' | 'deny' | { action: 'deny', reason }`. `VetoableEventKind = 'tool_executing'` in v1 (additive minor adds more kinds later). First-deny wins by ascending priority; subsequent veto handlers still fire for audit. Tool executor short-circuits before `tools.execute(...)` on deny: returns a synthetic tool failure carrying `ProbeVetoError.message` so the LLM sees a normal tool-call failure with the probe name + reason.
13
+ - **5 new bus event variants.** `provider_call_start`, `provider_call_completed`, `provider_call_failed`, `vault_lookup`, `sandbox_decision`. Joined to the existing `AgentBusEvent` discriminated union. Snake_case real discriminants — no rename pass on existing events.
14
+ - **Opt-in instrumentation wrappers.** `wrapProviderWithProbes(provider, opts?)` returns an `LLMProvider` that emits `provider_call_*` around every `chat`/`chatStream` call (correlated by a `pcall_${string}` callId, with optional usage telemetry). `wrapVaultWithProbes(vault, opts?)` emits `vault_lookup` on every `retrieve()`; the secret value is never included in the event payload (covered by a "no leakage" test).
15
+ - **First-time public exposure of bus event types.** `AgentBusEvent`, `AgentBusEventListener`, `CircuitBreakerSnapshot`, `FileLock`, etc. were already reachable via `AgentBus.on(listener)` at runtime but couldn't be statically typed by consumers. Now in `public-types.ts`. Pre-existing duplicate `LockId` declaration in `types/bus/` was deduplicated to a re-export from `types/ids/` in passing.
16
+ - **Replay-aware probe context.** `ProbeContext.isReplay: boolean` flag wired through `buildProbeContext({ runId?, isReplay? })` so probes that bill or call external services can opt out on replayed runs (`ctx.isReplay === true`). Replay-execution wiring lands in a future session; the accessor is ready.
17
+
18
+ Integration:
19
+
20
+ - `AgentBus.emit` dispatches through `ProbeRegistry` first (typed-priority probes → legacy `bus.on` listeners → `onAny` catch-all). Existing `bus.on(listener)` consumers see every event in unchanged relative order.
21
+ - `EventTranslator.emitEvent` dispatches every `RunEvent` through the same registry before the existing pendingEvents push + persist flow.
22
+ - `ToolExecutor.executeSingle` calls `probes.queryVeto({type: 'tool_executing', ...})` immediately after the existing `tool_executing` emit, before `tools.execute(...)`.
23
+
24
+ Not yet wired (follow-up commits):
25
+
26
+ - Per-run probes via `createRun({ probes: [...] })` — the registry has the foundation; createRun plumbing lands in a follow-up.
27
+ - `wrapProviderWithProbes` / `wrapVaultWithProbes` are opt-in helpers; the SDK's own `ProviderRegistry` does not auto-wrap registered providers yet.
28
+ - `sandbox_decision` ships as a type only; emit site lands when a real sandbox provider exists (current `LocalSandboxProvider` is a stub).
29
+
30
+ Public surface delta: `380 → 392` runtime keys (verified against the regenerated baseline). Net new symbols added by this changeset:
31
+
32
+ - `probe`, `ProbeRegistry`, `createProbeRegistry`, `buildProbeContext`, `ProbeNameCollisionError`, `ProbeVetoError`
33
+ - `wrapProviderWithProbes`, `wrapVaultWithProbes`
34
+
35
+ Non-runtime (types-only) additions: `ProbeEventKind`, `ProbeEventOf<K>`, `ProbeContext`, `ProbeHandler<K>`, `ProbeOptions<K>`, `Unsubscribe`, `VetoableEventKind`, `VetoDecision`, `VetoHandler<K>`, `VetoOutcome`, `DoctorStatus`, `DoctorCategory`, `DoctorCheck`, `DoctorCheckContext`, `DoctorCheckResult`, `DoctorCheckRecord`, `DoctorReport`, `ProviderCallId`, `ProviderCallUsage`, `SandboxDecisionAction`, plus first-time exposure of all `AgentBusEvent` shape types.
36
+
37
+ Doctor types ship in this release; the runtime registry + CLI command land in a subsequent ses_007 patch.
38
+
39
+ ## 0.4.3
40
+
41
+ ### Patch Changes
42
+
43
+ - ddd0aad: Test-side hardening from ses_006 pre-freeze fix.
44
+
45
+ - **New test: `runtime/query/iteration/phases/advisory.test.ts`** — pins the advisory-phase mutation boundary where fired advisories inject user messages via `runMgr.pushMessage(createUserMessage(...))`. 13 assertions covering early-return paths, happy-path exactly-once calls, envelope format, warnings + decisions rendering, and trigger-selection semantics. Before this test a regression removing the `pushMessage` call at `advisory.ts:154` would pass typecheck, lint, the coverage gate, and every existing `src/advisory/*` test. It now fails deterministically.
46
+ - **`LogLevel` gains `'silent'`** — purely additive; the value short-circuits every `log()` call. Used by the SDK's vitest setup to suppress unmocked `getRootLogger()` stderr writes so GitHub Actions stops annotating `[ERROR]`-level log lines as workflow errors. Consumer impact: zero unless you pass `'silent'` to `configureLogger()` yourself.
47
+ - No runtime behavior change. No public surface additions beyond the one `LogLevel` union member.
48
+
3
49
  ## 0.4.2
4
50
 
5
51
  ### Patch Changes
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 6):
3
+ *
4
+ * - `AdvisoryContext` composes a registry + executor + evaluator +
5
+ * optional budget. It is a dumb container + a call-history log.
6
+ * - `recordCall(record)` appends to `callHistory` in call order.
7
+ * - `getBudgetStatus()`:
8
+ * - `used` = `callHistory.length`.
9
+ * - `total` = `budget?.maxCallsPerRun` (undefined when no budget).
10
+ * - `remaining` = total − used when total defined; undefined else.
11
+ * - `checkBudget()`:
12
+ * - Allowed when no budget OR remaining > 0.
13
+ * - Denied with reason when remaining ≤ 0.
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=context.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.d.ts","sourceRoot":"","sources":["../../src/advisory/context.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 6):
3
+ *
4
+ * - `AdvisoryContext` composes a registry + executor + evaluator +
5
+ * optional budget. It is a dumb container + a call-history log.
6
+ * - `recordCall(record)` appends to `callHistory` in call order.
7
+ * - `getBudgetStatus()`:
8
+ * - `used` = `callHistory.length`.
9
+ * - `total` = `budget?.maxCallsPerRun` (undefined when no budget).
10
+ * - `remaining` = total − used when total defined; undefined else.
11
+ * - `checkBudget()`:
12
+ * - Allowed when no budget OR remaining > 0.
13
+ * - Denied with reason when remaining ≤ 0.
14
+ */
15
+ import { describe, expect, it } from 'vitest';
16
+ import { AdvisoryContext } from './context.js';
17
+ function stubRegistry() {
18
+ return {};
19
+ }
20
+ function stubExecutor() {
21
+ return {};
22
+ }
23
+ function stubEvaluator() {
24
+ return {};
25
+ }
26
+ function callRecord(id) {
27
+ return {
28
+ advisorId: id,
29
+ request: { question: 'q' },
30
+ result: { advice: 'a' },
31
+ usage: {
32
+ promptTokens: 0,
33
+ completionTokens: 0,
34
+ totalTokens: 0,
35
+ cachedTokens: 0,
36
+ cacheWriteTokens: 0,
37
+ },
38
+ cost: { inputCostPer1M: 0, outputCostPer1M: 0, totalCost: 0, cacheDiscount: 0 },
39
+ durationMs: 0,
40
+ iteration: 0,
41
+ timestamp: Date.now(),
42
+ };
43
+ }
44
+ describe('AdvisoryContext', () => {
45
+ it('starts with empty callHistory', () => {
46
+ const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator());
47
+ expect(ctx.callHistory).toEqual([]);
48
+ });
49
+ it('recordCall appends in order', () => {
50
+ const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator());
51
+ ctx.recordCall(callRecord('a'));
52
+ ctx.recordCall(callRecord('b'));
53
+ expect(ctx.callHistory.map((r) => r.advisorId)).toEqual(['a', 'b']);
54
+ });
55
+ describe('getBudgetStatus', () => {
56
+ it('no budget → total + remaining undefined; used reflects history length', () => {
57
+ const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator());
58
+ ctx.recordCall(callRecord('a'));
59
+ expect(ctx.getBudgetStatus()).toEqual({ used: 1, total: undefined, remaining: undefined });
60
+ });
61
+ it('with budget → total + remaining computed', () => {
62
+ const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator(), {
63
+ maxCallsPerRun: 3,
64
+ });
65
+ ctx.recordCall(callRecord('a'));
66
+ expect(ctx.getBudgetStatus()).toEqual({ used: 1, total: 3, remaining: 2 });
67
+ });
68
+ });
69
+ describe('checkBudget', () => {
70
+ it('allowed when no budget', () => {
71
+ const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator());
72
+ expect(ctx.checkBudget()).toEqual({ allowed: true });
73
+ });
74
+ it('allowed when remaining > 0', () => {
75
+ const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator(), {
76
+ maxCallsPerRun: 2,
77
+ });
78
+ ctx.recordCall(callRecord('a'));
79
+ expect(ctx.checkBudget()).toEqual({ allowed: true });
80
+ });
81
+ it('denied when remaining <= 0', () => {
82
+ const ctx = new AdvisoryContext(stubRegistry(), stubExecutor(), stubEvaluator(), {
83
+ maxCallsPerRun: 1,
84
+ });
85
+ ctx.recordCall(callRecord('a'));
86
+ const result = ctx.checkBudget();
87
+ expect(result.allowed).toBe(false);
88
+ expect(result.reason).toMatch(/budget exhausted/);
89
+ });
90
+ });
91
+ });
92
+ //# sourceMappingURL=context.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../src/advisory/context.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 6):
3
+ *
4
+ * - Constructor filters OUT triggers with `enabled: false` + sorts
5
+ * by `priority` desc (higher first). Triggers without priority
6
+ * sort at 0.
7
+ * - `evaluate(state)` returns every trigger whose condition matches
8
+ * AND whose cooldown has elapsed. Order reflects the sorted
9
+ * trigger list.
10
+ * - Budget exhausted (callCount ≥ maxCallsPerRun) → evaluate returns [].
11
+ * - `recordFiring(id, iteration)` updates both `lastFiredMap` (for
12
+ * cooldown) and `callCount` (for budget).
13
+ * - Condition matchers:
14
+ * - `on_error`: matches iff state.lastError is set; if categories
15
+ * are given, requires at least one category substring match.
16
+ * - `on_iteration`: `state.iteration % everyN === 0`.
17
+ * - `on_context_percent`: `state.contextWindowPercent >= threshold`.
18
+ * - `on_tool_category`: `state.lastToolCategory` present + in
19
+ * `condition.categories`.
20
+ * - `on_cost_percent`: costBudgetPercent present + ≥ threshold.
21
+ * - `on_complexity`: totalToolCalls ≥ toolCallThreshold.
22
+ * - `custom`: calls the predicate.
23
+ * - Cooldown: trigger does NOT fire if `iteration - lastFired <
24
+ * cooldownIterations`. No cooldown → always eligible.
25
+ *
26
+ * - **Purity:** evaluate() is pure relative to the advisory phase —
27
+ * it returns triggers; it does NOT inject messages or mutate
28
+ * external state. The injection happens in the advisory phase
29
+ * (runtime/query/iteration/phases/advisory.ts), which pushes a
30
+ * user message via `runMgr.pushMessage`. That file is OUT of
31
+ * scope for this test file (covered by the phase test).
32
+ */
33
+ export {};
34
+ //# sourceMappingURL=evaluator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.test.d.ts","sourceRoot":"","sources":["../../src/advisory/evaluator.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 6):
3
+ *
4
+ * - Constructor filters OUT triggers with `enabled: false` + sorts
5
+ * by `priority` desc (higher first). Triggers without priority
6
+ * sort at 0.
7
+ * - `evaluate(state)` returns every trigger whose condition matches
8
+ * AND whose cooldown has elapsed. Order reflects the sorted
9
+ * trigger list.
10
+ * - Budget exhausted (callCount ≥ maxCallsPerRun) → evaluate returns [].
11
+ * - `recordFiring(id, iteration)` updates both `lastFiredMap` (for
12
+ * cooldown) and `callCount` (for budget).
13
+ * - Condition matchers:
14
+ * - `on_error`: matches iff state.lastError is set; if categories
15
+ * are given, requires at least one category substring match.
16
+ * - `on_iteration`: `state.iteration % everyN === 0`.
17
+ * - `on_context_percent`: `state.contextWindowPercent >= threshold`.
18
+ * - `on_tool_category`: `state.lastToolCategory` present + in
19
+ * `condition.categories`.
20
+ * - `on_cost_percent`: costBudgetPercent present + ≥ threshold.
21
+ * - `on_complexity`: totalToolCalls ≥ toolCallThreshold.
22
+ * - `custom`: calls the predicate.
23
+ * - Cooldown: trigger does NOT fire if `iteration - lastFired <
24
+ * cooldownIterations`. No cooldown → always eligible.
25
+ *
26
+ * - **Purity:** evaluate() is pure relative to the advisory phase —
27
+ * it returns triggers; it does NOT inject messages or mutate
28
+ * external state. The injection happens in the advisory phase
29
+ * (runtime/query/iteration/phases/advisory.ts), which pushes a
30
+ * user message via `runMgr.pushMessage`. That file is OUT of
31
+ * scope for this test file (covered by the phase test).
32
+ */
33
+ import { describe, expect, it, vi } from 'vitest';
34
+ import { TriggerEvaluator } from './evaluator.js';
35
+ function trigger(id, overrides = {}) {
36
+ return {
37
+ id,
38
+ condition: { type: 'on_iteration', everyN: 1 },
39
+ ...overrides,
40
+ };
41
+ }
42
+ function state(overrides = {}) {
43
+ return {
44
+ iteration: 1,
45
+ totalToolCalls: 0,
46
+ totalTokens: 0,
47
+ contextWindowPercent: 0,
48
+ totalCostUsd: 0,
49
+ costBudgetPercent: undefined,
50
+ lastError: undefined,
51
+ lastToolCategory: undefined,
52
+ advisoryCallCount: 0,
53
+ ...overrides,
54
+ };
55
+ }
56
+ describe('TriggerEvaluator — constructor', () => {
57
+ it('filters out triggers with enabled: false', () => {
58
+ const e = new TriggerEvaluator([trigger('a'), trigger('b', { enabled: false })]);
59
+ expect(e.evaluate(state()).map((t) => t.id)).toEqual(['a']);
60
+ });
61
+ it('sorts triggers by priority descending', () => {
62
+ const e = new TriggerEvaluator([
63
+ trigger('low', { priority: 1 }),
64
+ trigger('high', { priority: 10 }),
65
+ trigger('mid', { priority: 5 }),
66
+ ]);
67
+ expect(e.evaluate(state()).map((t) => t.id)).toEqual(['high', 'mid', 'low']);
68
+ });
69
+ });
70
+ describe('TriggerEvaluator — budget', () => {
71
+ it('returns [] when callCount >= maxCallsPerRun', () => {
72
+ const e = new TriggerEvaluator([trigger('a')], { maxCallsPerRun: 1 });
73
+ e.recordFiring('a', 1);
74
+ expect(e.evaluate(state({ iteration: 2 }))).toEqual([]);
75
+ });
76
+ it('ignores budget when maxCallsPerRun is not set', () => {
77
+ const e = new TriggerEvaluator([trigger('a')]);
78
+ e.recordFiring('a', 1);
79
+ e.recordFiring('a', 2);
80
+ expect(e.evaluate(state({ iteration: 3 })).length).toBeGreaterThan(0);
81
+ });
82
+ });
83
+ describe('TriggerEvaluator — cooldown', () => {
84
+ it('blocks triggers in their cooldown window', () => {
85
+ const e = new TriggerEvaluator([trigger('a', { cooldownIterations: 3 })]);
86
+ e.recordFiring('a', 1);
87
+ expect(e.evaluate(state({ iteration: 2 })).map((t) => t.id)).toEqual([]);
88
+ expect(e.evaluate(state({ iteration: 3 })).map((t) => t.id)).toEqual([]);
89
+ expect(e.evaluate(state({ iteration: 4 })).map((t) => t.id)).toEqual(['a']);
90
+ });
91
+ it('always fires when no cooldown is configured', () => {
92
+ const e = new TriggerEvaluator([trigger('a')]);
93
+ e.recordFiring('a', 1);
94
+ expect(e.evaluate(state({ iteration: 2 })).map((t) => t.id)).toEqual(['a']);
95
+ });
96
+ });
97
+ describe('TriggerEvaluator — condition matchers', () => {
98
+ it('on_error: requires lastError to be set', () => {
99
+ const e = new TriggerEvaluator([trigger('t', { condition: { type: 'on_error' } })]);
100
+ expect(e.evaluate(state())).toEqual([]);
101
+ expect(e.evaluate(state({ lastError: 'boom' })).map((t) => t.id)).toEqual(['t']);
102
+ });
103
+ it('on_error with categories: at least one substring match', () => {
104
+ const e = new TriggerEvaluator([
105
+ trigger('t', { condition: { type: 'on_error', categories: ['timeout', 'permission'] } }),
106
+ ]);
107
+ expect(e.evaluate(state({ lastError: 'Connection timeout' })).map((t) => t.id)).toEqual(['t']);
108
+ expect(e.evaluate(state({ lastError: 'Syntax error' }))).toEqual([]);
109
+ });
110
+ it('on_iteration: iteration % everyN === 0', () => {
111
+ const e = new TriggerEvaluator([
112
+ trigger('t', { condition: { type: 'on_iteration', everyN: 3 } }),
113
+ ]);
114
+ expect(e.evaluate(state({ iteration: 1 }))).toEqual([]);
115
+ expect(e.evaluate(state({ iteration: 3 })).map((t) => t.id)).toEqual(['t']);
116
+ expect(e.evaluate(state({ iteration: 6 })).map((t) => t.id)).toEqual(['t']);
117
+ });
118
+ it('on_context_percent: contextWindowPercent >= threshold', () => {
119
+ const e = new TriggerEvaluator([
120
+ trigger('t', { condition: { type: 'on_context_percent', threshold: 80 } }),
121
+ ]);
122
+ expect(e.evaluate(state({ contextWindowPercent: 70 }))).toEqual([]);
123
+ expect(e.evaluate(state({ contextWindowPercent: 80 })).map((t) => t.id)).toEqual(['t']);
124
+ });
125
+ it('on_tool_category: lastToolCategory present + in categories list', () => {
126
+ const e = new TriggerEvaluator([
127
+ trigger('t', {
128
+ condition: { type: 'on_tool_category', categories: ['network', 'filesystem'] },
129
+ }),
130
+ ]);
131
+ expect(e.evaluate(state())).toEqual([]);
132
+ expect(e.evaluate(state({ lastToolCategory: 'other' }))).toEqual([]);
133
+ expect(e.evaluate(state({ lastToolCategory: 'network' })).map((t) => t.id)).toEqual(['t']);
134
+ });
135
+ it('on_cost_percent: costBudgetPercent present + >= threshold', () => {
136
+ const e = new TriggerEvaluator([
137
+ trigger('t', { condition: { type: 'on_cost_percent', threshold: 75 } }),
138
+ ]);
139
+ expect(e.evaluate(state())).toEqual([]); // undefined costBudgetPercent
140
+ expect(e.evaluate(state({ costBudgetPercent: 50 }))).toEqual([]);
141
+ expect(e.evaluate(state({ costBudgetPercent: 80 })).map((t) => t.id)).toEqual(['t']);
142
+ });
143
+ it('on_complexity: totalToolCalls >= toolCallThreshold', () => {
144
+ const e = new TriggerEvaluator([
145
+ trigger('t', { condition: { type: 'on_complexity', toolCallThreshold: 10 } }),
146
+ ]);
147
+ expect(e.evaluate(state({ totalToolCalls: 5 }))).toEqual([]);
148
+ expect(e.evaluate(state({ totalToolCalls: 10 })).map((t) => t.id)).toEqual(['t']);
149
+ });
150
+ it('custom: calls the predicate with state', () => {
151
+ const predicate = vi.fn(() => true);
152
+ const e = new TriggerEvaluator([trigger('t', { condition: { type: 'custom', predicate } })]);
153
+ const s = state({ iteration: 42 });
154
+ expect(e.evaluate(s).map((t) => t.id)).toEqual(['t']);
155
+ expect(predicate).toHaveBeenCalledWith(s);
156
+ });
157
+ });
158
+ describe('TriggerEvaluator — recordFiring', () => {
159
+ it('updates lastFiredMap + callCount', () => {
160
+ const e = new TriggerEvaluator([trigger('a', { cooldownIterations: 5 })], {
161
+ maxCallsPerRun: 2,
162
+ });
163
+ e.recordFiring('a', 1);
164
+ // cooldown active: no fires in iterations 2–5
165
+ expect(e.evaluate(state({ iteration: 2 }))).toEqual([]);
166
+ // cooldown lifted at 6, but budget allows one more
167
+ e.recordFiring('a', 6);
168
+ // budget exhausted
169
+ expect(e.evaluate(state({ iteration: 11 }))).toEqual([]);
170
+ });
171
+ });
172
+ //# sourceMappingURL=evaluator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.test.js","sourceRoot":"","sources":["../../src/advisory/evaluator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 6):
3
+ *
4
+ * - `AdvisoryExecutor.consult(advisor, request, callCtx)`:
5
+ * - Builds a system prompt (see buildSystemPrompt tests).
6
+ * - Builds a context message block (see buildContext tests).
7
+ * - Concatenates `[system, ...context, user(question)]` and calls
8
+ * `advisor.provider.chat(...)` with `toolChoice: 'none'`.
9
+ * - Parses the response via a passthrough `{ advice: rawContent }`
10
+ * shape (no structured parsing yet — advisor.ts line 166-168).
11
+ * - Returns `{result, usage, cost, durationMs}`. `cost` is a
12
+ * zero-value `CostInfo` — pricing is provider-specific and not
13
+ * applied here.
14
+ *
15
+ * - `buildSystemPrompt` priority:
16
+ * 1. `advisor.systemPrompt` (verbatim).
17
+ * 2. `advisor.persona` (via `assembleSystemPrompt`).
18
+ * 3. Fallback: "You are <name>, an advisory agent." + optional
19
+ * domains line + "Provide concise, actionable advice..."
20
+ *
21
+ * - `buildContext`:
22
+ * - Returns [] when `request.includeContext === false`.
23
+ * - Includes workingStateSummary when present.
24
+ * - Includes toolCatalog names when present + non-empty.
25
+ * - Includes truncated conversation context (most-recent-first
26
+ * walk, bounded by `advisor.maxContextTokens * CHARS_PER_TOKEN`).
27
+ * - Returns [] when no context parts were assembled.
28
+ *
29
+ * - `truncateMessages(msgs, maxTokens)` walks right-to-left and
30
+ * includes messages until the char budget is exhausted (in token
31
+ * terms). Returns the included subset preserving original order.
32
+ * No limit when `maxTokens` is undefined.
33
+ */
34
+ export {};
35
+ //# sourceMappingURL=executor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.test.d.ts","sourceRoot":"","sources":["../../src/advisory/executor.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG"}