@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
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 2):
3
+ *
4
+ * - `isTerminalState(state)` returns true iff state ∈ {completed,
5
+ * failed, canceled, rejected}.
6
+ * - `runStatusToA2AState(status)` is a table lookup:
7
+ * queued → pending; running → running; completed → completed;
8
+ * failed → failed; cancelled → canceled; cancelling → running;
9
+ * expired → failed.
10
+ * - `runToA2ATask(run, messages?)`:
11
+ * - `id` comes from `run.id`; `contextId` comes from
12
+ * `run.project_id ?? undefined`.
13
+ * - `status.timestamp` picks the first defined of
14
+ * `completed_at`, `started_at`, `created_at` (in that order).
15
+ * - `status.message` is agent-text of `run.result` if present,
16
+ * else of `run.last_error` if present, else undefined.
17
+ * - `artifacts` is present iff `run.result` is present; the single
18
+ * artifact carries a subset of usage + timing metadata.
19
+ * - `history` is mapped through `messageToA2A` only when `messages`
20
+ * is supplied.
21
+ * - Top-level `metadata` carries agent_id, agent_name, stop_reason
22
+ * (even if undefined).
23
+ * - `a2aMessageToCreateRun(agentId, params)` only sets a metadata
24
+ * field on `config` when the source value has the expected type
25
+ * (string for model/systemPrompt; number for numeric fields;
26
+ * 'plan' | 'auto' for permissionMode). Everything else is omitted.
27
+ */
28
+ import { describe, expect, it } from 'vitest';
29
+ import { a2aMessageToCreateRun, isTerminalState, runStatusToA2AState, runToA2ATask, } from './task.js';
30
+ const baseRun = {
31
+ id: 'run_1',
32
+ project_id: null,
33
+ agent_id: 'coder',
34
+ status: 'running',
35
+ created_at: '2026-04-21T12:00:00Z',
36
+ config: {},
37
+ };
38
+ describe('isTerminalState', () => {
39
+ const terminals = ['completed', 'failed', 'canceled', 'rejected'];
40
+ const nonTerminals = ['input-required', 'running', 'pending'];
41
+ it.each(terminals.map((s) => [s]))('%s is terminal', (state) => {
42
+ expect(isTerminalState(state)).toBe(true);
43
+ });
44
+ it.each(nonTerminals.map((s) => [s]))('%s is not terminal', (state) => {
45
+ expect(isTerminalState(state)).toBe(false);
46
+ });
47
+ });
48
+ describe('runStatusToA2AState', () => {
49
+ it.each([
50
+ ['queued', 'pending'],
51
+ ['running', 'running'],
52
+ ['completed', 'completed'],
53
+ ['failed', 'failed'],
54
+ ['cancelled', 'canceled'],
55
+ ['cancelling', 'running'],
56
+ ['expired', 'failed'],
57
+ ])('%s → %s', (wire, a2a) => {
58
+ expect(runStatusToA2AState(wire)).toBe(a2a);
59
+ });
60
+ });
61
+ describe('runToA2ATask', () => {
62
+ it('sets id + contextId from run.id + run.project_id', () => {
63
+ const task = runToA2ATask({ ...baseRun, project_id: 'proj_9' });
64
+ expect(task.id).toBe('run_1');
65
+ expect(task.contextId).toBe('proj_9');
66
+ });
67
+ it('contextId is undefined when project_id is null', () => {
68
+ const task = runToA2ATask(baseRun);
69
+ expect(task.contextId).toBeUndefined();
70
+ });
71
+ it('timestamp prefers completed_at > started_at > created_at', () => {
72
+ const created = '2026-04-21T10:00:00Z';
73
+ const started = '2026-04-21T10:05:00Z';
74
+ const completed = '2026-04-21T10:10:00Z';
75
+ expect(runToA2ATask({
76
+ ...baseRun,
77
+ created_at: created,
78
+ started_at: started,
79
+ completed_at: completed,
80
+ }).status.timestamp).toBe(completed);
81
+ expect(runToA2ATask({ ...baseRun, created_at: created, started_at: started }).status.timestamp).toBe(started);
82
+ expect(runToA2ATask({ ...baseRun, created_at: created }).status.timestamp).toBe(created);
83
+ });
84
+ it('status.message is the result text when result is present', () => {
85
+ const task = runToA2ATask({ ...baseRun, status: 'completed', result: 'all done' });
86
+ expect(task.status.message?.parts).toEqual([{ kind: 'text', text: 'all done' }]);
87
+ expect(task.status.message?.role).toBe('agent');
88
+ });
89
+ it('status.message falls back to last_error when result is absent', () => {
90
+ const task = runToA2ATask({ ...baseRun, status: 'failed', last_error: 'boom' });
91
+ expect(task.status.message?.parts).toEqual([{ kind: 'text', text: 'boom' }]);
92
+ });
93
+ it('status.message is undefined when neither result nor last_error is set', () => {
94
+ const task = runToA2ATask(baseRun);
95
+ expect(task.status.message).toBeUndefined();
96
+ });
97
+ it('attaches an artifact iff result is present', () => {
98
+ expect(runToA2ATask(baseRun).artifacts).toBeUndefined();
99
+ const withResult = runToA2ATask({
100
+ ...baseRun,
101
+ status: 'completed',
102
+ result: 'done',
103
+ model: 'claude-opus-4-7',
104
+ iterations: 3,
105
+ duration_ms: 1200,
106
+ usage: { input_tokens: 10, output_tokens: 20, total_tokens: 30, total_cost_usd: 0.05 },
107
+ });
108
+ expect(withResult.artifacts).toHaveLength(1);
109
+ const artifact = withResult.artifacts?.[0];
110
+ expect(artifact?.artifactId).toBe('run_1-result');
111
+ expect(artifact?.name).toBe('Agent Response');
112
+ expect(artifact?.parts).toEqual([{ kind: 'text', text: 'done' }]);
113
+ expect(artifact?.metadata).toMatchObject({
114
+ model: 'claude-opus-4-7',
115
+ iterations: 3,
116
+ duration_ms: 1200,
117
+ input_tokens: 10,
118
+ output_tokens: 20,
119
+ total_cost_usd: 0.05,
120
+ });
121
+ });
122
+ it('history is undefined when messages are not supplied', () => {
123
+ expect(runToA2ATask(baseRun).history).toBeUndefined();
124
+ });
125
+ it('history maps through messageToA2A for every message', () => {
126
+ const task = runToA2ATask(baseRun, [
127
+ { role: 'user', content: 'hi' },
128
+ { role: 'assistant', content: 'ack' },
129
+ ]);
130
+ expect(task.history).toHaveLength(2);
131
+ expect(task.history?.[0]?.role).toBe('user');
132
+ expect(task.history?.[1]?.role).toBe('agent');
133
+ });
134
+ it('top-level metadata carries agent_id + stop_reason', () => {
135
+ const task = runToA2ATask({ ...baseRun, agent_name: 'Coder', stop_reason: 'end_turn' });
136
+ expect(task.metadata).toMatchObject({
137
+ agent_id: 'coder',
138
+ agent_name: 'Coder',
139
+ stop_reason: 'end_turn',
140
+ });
141
+ });
142
+ });
143
+ describe('a2aMessageToCreateRun', () => {
144
+ const baseMsg = { role: 'user', parts: [{ kind: 'text', text: 'do a thing' }] };
145
+ it('extracts input text from the message', () => {
146
+ const params = { message: baseMsg };
147
+ const result = a2aMessageToCreateRun('agent_1', params);
148
+ expect(result.agentId).toBe('agent_1');
149
+ expect(result.input).toBe('do a thing');
150
+ expect(result.config).toEqual({});
151
+ });
152
+ it('threads contextId from params into projectId', () => {
153
+ const params = { message: baseMsg, contextId: 'proj_2' };
154
+ expect(a2aMessageToCreateRun('agent_1', params).projectId).toBe('proj_2');
155
+ });
156
+ it('only includes typed metadata fields in config', () => {
157
+ const params = {
158
+ message: baseMsg,
159
+ metadata: {
160
+ model: 'opus',
161
+ tokenBudget: 1000,
162
+ timeoutMs: 5000,
163
+ temperature: 0.2,
164
+ maxResponseTokens: 2048,
165
+ permissionMode: 'plan',
166
+ systemPrompt: 'be terse',
167
+ },
168
+ };
169
+ const config = a2aMessageToCreateRun('a', params).config;
170
+ expect(config).toEqual({
171
+ model: 'opus',
172
+ tokenBudget: 1000,
173
+ timeoutMs: 5000,
174
+ temperature: 0.2,
175
+ maxResponseTokens: 2048,
176
+ permissionMode: 'plan',
177
+ systemPrompt: 'be terse',
178
+ });
179
+ });
180
+ it('drops metadata fields with wrong types', () => {
181
+ const params = {
182
+ message: baseMsg,
183
+ metadata: {
184
+ model: 123, // wrong type → dropped
185
+ tokenBudget: 'big', // wrong type → dropped
186
+ permissionMode: 'invalid', // not 'plan'|'auto' → dropped
187
+ },
188
+ };
189
+ expect(a2aMessageToCreateRun('a', params).config).toEqual({});
190
+ });
191
+ it('accepts permissionMode only for "plan" or "auto"', () => {
192
+ for (const mode of ['plan', 'auto']) {
193
+ const params = { message: baseMsg, metadata: { permissionMode: mode } };
194
+ expect(a2aMessageToCreateRun('a', params).config.permissionMode).toBe(mode);
195
+ }
196
+ });
197
+ });
198
+ //# sourceMappingURL=task.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.test.js","sourceRoot":"","sources":["../../../src/bridge/a2a/task.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 2):
3
+ *
4
+ * - `MCPConnectorBridge` wraps a `ConnectorManager` and exposes
5
+ * connector methods as MCP tools with a name pattern
6
+ * `<prefix>_<connectorId>_<methodName>`; prefix defaults to 'namzu'.
7
+ * - `listTools()` with no instanceId iterates
8
+ * `manager.listConnectedInstances()`; `listTools(instanceId)` uses
9
+ * `manager.getInstance(instanceId)` and filters Boolean (missing
10
+ * instance → empty output).
11
+ * - `listTools()` rebuilds `mappings` from scratch on each call.
12
+ * - Schema conversion via `zodToJsonSchema` is best-effort; on
13
+ * conversion failure the schema falls back to `{type: 'object'}`.
14
+ * - `getMappings()` returns a COPY (mutation of the returned array
15
+ * does not affect internal state).
16
+ * - `callTool(name, args)`:
17
+ * - Returns `{content: [text], isError: true}` for unknown tools.
18
+ * - On manager success, returns `{content: [text], isError: false}`
19
+ * with the output stringified if non-string.
20
+ * - On manager failure, returns `{content: [text with error],
21
+ * isError: true}`; falls back to 'Unknown error' when the
22
+ * manager error is undefined.
23
+ * - Method descriptions include the connector DEFINITION name
24
+ * bracketed (not the instance name): `[<def.name>] <method.description>`.
25
+ */
26
+ export {};
27
+ //# sourceMappingURL=adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.d.ts","sourceRoot":"","sources":["../../../../src/bridge/mcp/connector/adapter.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 2):
3
+ *
4
+ * - `MCPConnectorBridge` wraps a `ConnectorManager` and exposes
5
+ * connector methods as MCP tools with a name pattern
6
+ * `<prefix>_<connectorId>_<methodName>`; prefix defaults to 'namzu'.
7
+ * - `listTools()` with no instanceId iterates
8
+ * `manager.listConnectedInstances()`; `listTools(instanceId)` uses
9
+ * `manager.getInstance(instanceId)` and filters Boolean (missing
10
+ * instance → empty output).
11
+ * - `listTools()` rebuilds `mappings` from scratch on each call.
12
+ * - Schema conversion via `zodToJsonSchema` is best-effort; on
13
+ * conversion failure the schema falls back to `{type: 'object'}`.
14
+ * - `getMappings()` returns a COPY (mutation of the returned array
15
+ * does not affect internal state).
16
+ * - `callTool(name, args)`:
17
+ * - Returns `{content: [text], isError: true}` for unknown tools.
18
+ * - On manager success, returns `{content: [text], isError: false}`
19
+ * with the output stringified if non-string.
20
+ * - On manager failure, returns `{content: [text with error],
21
+ * isError: true}`; falls back to 'Unknown error' when the
22
+ * manager error is undefined.
23
+ * - Method descriptions include the connector DEFINITION name
24
+ * bracketed (not the instance name): `[<def.name>] <method.description>`.
25
+ */
26
+ import { describe, expect, it, vi } from 'vitest';
27
+ import { z } from 'zod';
28
+ import { MCPConnectorBridge } from './adapter.js';
29
+ const CID = 'conn_http';
30
+ const IID = 'ci_abc';
31
+ function makeDefinition(overrides = {}) {
32
+ return {
33
+ id: CID,
34
+ name: 'HTTP',
35
+ description: 'HTTP connector',
36
+ connectionType: 'http',
37
+ configSchema: z.object({}),
38
+ methods: [
39
+ {
40
+ name: 'request',
41
+ description: 'make http request',
42
+ inputSchema: z.object({ url: z.string() }),
43
+ },
44
+ ],
45
+ ...overrides,
46
+ };
47
+ }
48
+ function makeInstance() {
49
+ return {
50
+ id: IID,
51
+ connectorId: CID,
52
+ config: { connectorId: CID, name: 'svc' },
53
+ status: 'connected',
54
+ createdAt: Date.now(),
55
+ };
56
+ }
57
+ function makeManager(overrides = {}) {
58
+ const def = makeDefinition();
59
+ const registry = {
60
+ get: vi.fn(() => def),
61
+ };
62
+ const instance = makeInstance();
63
+ return {
64
+ getInstance: vi.fn(() => instance),
65
+ getRegistry: vi.fn(() => registry),
66
+ listConnectedInstances: vi.fn(() => [instance]),
67
+ execute: vi.fn(),
68
+ ...overrides,
69
+ };
70
+ }
71
+ describe('MCPConnectorBridge.listTools', () => {
72
+ it('builds one MCP tool per method per connected instance with default prefix namzu', () => {
73
+ const bridge = new MCPConnectorBridge({ manager: makeManager() });
74
+ const tools = bridge.listTools();
75
+ expect(tools).toHaveLength(1);
76
+ expect(tools[0]?.name).toBe(`namzu_${CID}_request`);
77
+ expect(tools[0]?.description).toBe('[HTTP] make http request');
78
+ });
79
+ it('honors a custom prefix', () => {
80
+ const bridge = new MCPConnectorBridge({ manager: makeManager(), prefix: 'acme' });
81
+ expect(bridge.listTools()[0]?.name).toBe(`acme_${CID}_request`);
82
+ });
83
+ it('single-instance lookup via listTools(instanceId) uses getInstance; missing instance → empty', () => {
84
+ const manager = makeManager({
85
+ getInstance: vi.fn(() => undefined),
86
+ });
87
+ const bridge = new MCPConnectorBridge({ manager });
88
+ expect(bridge.listTools(IID)).toEqual([]);
89
+ });
90
+ it('mappings are rebuilt on every listTools() call (not appended)', () => {
91
+ const bridge = new MCPConnectorBridge({ manager: makeManager() });
92
+ bridge.listTools();
93
+ bridge.listTools();
94
+ expect(bridge.getMappings()).toHaveLength(1);
95
+ });
96
+ it('skips instances whose connectorId is missing in the registry', () => {
97
+ const manager = makeManager({
98
+ getRegistry: vi.fn(() => ({ get: vi.fn(() => undefined) })),
99
+ });
100
+ const bridge = new MCPConnectorBridge({ manager });
101
+ expect(bridge.listTools()).toEqual([]);
102
+ });
103
+ it('getMappings returns a copy — external mutation does not leak', () => {
104
+ const bridge = new MCPConnectorBridge({ manager: makeManager() });
105
+ bridge.listTools();
106
+ const copy = bridge.getMappings();
107
+ copy.length = 0;
108
+ expect(bridge.getMappings()).toHaveLength(1);
109
+ });
110
+ it('schema conversion falls back to {type: object} when zodToJsonSchema throws', () => {
111
+ const bad = makeDefinition({
112
+ methods: [
113
+ {
114
+ name: 'broken',
115
+ description: 'd',
116
+ // Not a real zod type — intentionally misleads zodToJsonSchema.
117
+ inputSchema: null,
118
+ },
119
+ ],
120
+ });
121
+ const manager = makeManager({
122
+ getRegistry: vi.fn(() => ({ get: vi.fn(() => bad) })),
123
+ });
124
+ const bridge = new MCPConnectorBridge({ manager });
125
+ const tools = bridge.listTools();
126
+ expect(tools[0]?.inputSchema).toEqual({ type: 'object' });
127
+ });
128
+ });
129
+ describe('MCPConnectorBridge.callTool', () => {
130
+ it('unknown tool → isError true + explanatory text', async () => {
131
+ const bridge = new MCPConnectorBridge({ manager: makeManager() });
132
+ const result = await bridge.callTool('nope');
133
+ expect(result.isError).toBe(true);
134
+ expect(result.content[0]).toMatchObject({ type: 'text', text: expect.stringContaining('nope') });
135
+ });
136
+ it('happy path — string output passes through as text', async () => {
137
+ const manager = makeManager();
138
+ vi.mocked(manager.execute).mockResolvedValueOnce({
139
+ success: true,
140
+ output: 'hello',
141
+ durationMs: 5,
142
+ });
143
+ const bridge = new MCPConnectorBridge({ manager });
144
+ bridge.listTools();
145
+ const result = await bridge.callTool(`namzu_${CID}_request`, { url: 'x' });
146
+ expect(result.isError).toBe(false);
147
+ expect(result.content[0]).toEqual({ type: 'text', text: 'hello' });
148
+ });
149
+ it('non-string success output is JSON-stringified', async () => {
150
+ const manager = makeManager();
151
+ vi.mocked(manager.execute).mockResolvedValueOnce({
152
+ success: true,
153
+ output: { status: 200 },
154
+ durationMs: 1,
155
+ });
156
+ const bridge = new MCPConnectorBridge({ manager });
157
+ bridge.listTools();
158
+ const result = await bridge.callTool(`namzu_${CID}_request`);
159
+ expect(result.content[0]).toEqual({
160
+ type: 'text',
161
+ text: JSON.stringify({ status: 200 }, null, 2),
162
+ });
163
+ });
164
+ it('manager failure → isError true with error text; falls back to "Unknown error" when error is undefined', async () => {
165
+ const manager = makeManager();
166
+ vi.mocked(manager.execute).mockResolvedValueOnce({
167
+ success: false,
168
+ output: undefined,
169
+ durationMs: 1,
170
+ });
171
+ const bridge = new MCPConnectorBridge({ manager });
172
+ bridge.listTools();
173
+ const result = await bridge.callTool(`namzu_${CID}_request`);
174
+ expect(result.isError).toBe(true);
175
+ expect(result.content[0]).toEqual({ type: 'text', text: 'Unknown error' });
176
+ });
177
+ it('carries the explicit error message when manager provides one', async () => {
178
+ const manager = makeManager();
179
+ vi.mocked(manager.execute).mockResolvedValueOnce({
180
+ success: false,
181
+ output: undefined,
182
+ durationMs: 1,
183
+ error: 'timeout',
184
+ });
185
+ const bridge = new MCPConnectorBridge({ manager });
186
+ bridge.listTools();
187
+ const result = await bridge.callTool(`namzu_${CID}_request`);
188
+ expect(result.content[0]).toEqual({ type: 'text', text: 'timeout' });
189
+ });
190
+ it('passes empty args through as {} when invoked without a second arg', async () => {
191
+ const manager = makeManager();
192
+ vi.mocked(manager.execute).mockResolvedValueOnce({
193
+ success: true,
194
+ output: 'ok',
195
+ durationMs: 1,
196
+ });
197
+ const bridge = new MCPConnectorBridge({ manager });
198
+ bridge.listTools();
199
+ await bridge.callTool(`namzu_${CID}_request`);
200
+ expect(manager.execute).toHaveBeenCalledWith(expect.objectContaining({ input: {} }));
201
+ });
202
+ });
203
+ //# sourceMappingURL=adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../../../src/bridge/mcp/connector/adapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Current-code invariants asserted (2026-04-21, ses_006 Phase 2):
3
+ *
4
+ * - `mapRunToStreamEvent(event, runId)` returns `{wire, data}` or null.
5
+ * - Wire names match a fixed mapping (one per RunEvent.type):
6
+ * run.started, iteration.started, iteration.completed, message.delta,
7
+ * tool.executing, tool.completed, review.requested, review.completed,
8
+ * checkpoint.created, run.paused, run.resuming, token.usage,
9
+ * activity.created, activity.updated, plan.ready, plan.approved,
10
+ * plan.rejected, plan.step_updated, agent.pending, agent.completed,
11
+ * agent.failed, agent.canceled, task.created, task.updated,
12
+ * plugin.hook_executing, plugin.hook_completed, sandbox.created,
13
+ * sandbox.exec, sandbox.destroyed.
14
+ * - `run_completed` and `run_failed` produce null (final state is
15
+ * delivered by the task.* path, not the SSE delta).
16
+ * - Sub-session lifecycle events (spawned / messaged / idled) produce
17
+ * null — the SSE wire surface does not carry them today.
18
+ * - `data.run_id` is always set from the second arg.
19
+ * - `llm_response` data: `content` falls back to null when empty;
20
+ * `has_tool_calls` is a boolean.
21
+ * - If the event carries `sourceAgentId` or `parentTaskId` fields,
22
+ * they are mirrored onto `data.source_agent_id` / `data.parent_task_id`
23
+ * (snake-cased).
24
+ * - `mapSessionToStreamEvent` is a deprecated alias.
25
+ */
26
+ export {};
27
+ //# sourceMappingURL=mapper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.test.d.ts","sourceRoot":"","sources":["../../../src/bridge/sse/mapper.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG"}