@namzu/sdk 30.2.0 → 31.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. package/CHANGELOG.md +562 -0
  2. package/README.md +43 -2
  3. package/dist/advisory/executor.d.ts +2 -1
  4. package/dist/advisory/executor.d.ts.map +1 -1
  5. package/dist/advisory/executor.js +4 -1
  6. package/dist/advisory/executor.js.map +1 -1
  7. package/dist/agents/ReactiveAgent.d.ts.map +1 -1
  8. package/dist/agents/ReactiveAgent.js +12 -0
  9. package/dist/agents/ReactiveAgent.js.map +1 -1
  10. package/dist/agents/RouterAgent.d.ts.map +1 -1
  11. package/dist/agents/RouterAgent.js +21 -3
  12. package/dist/agents/RouterAgent.js.map +1 -1
  13. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  14. package/dist/agents/SupervisorAgent.js +34 -11
  15. package/dist/agents/SupervisorAgent.js.map +1 -1
  16. package/dist/agents/runAgent.d.ts +12 -0
  17. package/dist/agents/runAgent.d.ts.map +1 -1
  18. package/dist/agents/runAgent.js +26 -2
  19. package/dist/agents/runAgent.js.map +1 -1
  20. package/dist/authorization/command-line.d.ts +81 -0
  21. package/dist/authorization/command-line.d.ts.map +1 -0
  22. package/dist/authorization/command-line.js +347 -0
  23. package/dist/authorization/command-line.js.map +1 -0
  24. package/dist/authorization/rules.d.ts.map +1 -1
  25. package/dist/authorization/rules.js +22 -1
  26. package/dist/authorization/rules.js.map +1 -1
  27. package/dist/bridge/a2a/client.d.ts +23 -5
  28. package/dist/bridge/a2a/client.d.ts.map +1 -1
  29. package/dist/bridge/a2a/client.js +320 -73
  30. package/dist/bridge/a2a/client.js.map +1 -1
  31. package/dist/bridge/a2a/mapper.d.ts.map +1 -1
  32. package/dist/bridge/a2a/mapper.js +4 -0
  33. package/dist/bridge/a2a/mapper.js.map +1 -1
  34. package/dist/bridge/acp/server.d.ts +13 -1
  35. package/dist/bridge/acp/server.d.ts.map +1 -1
  36. package/dist/bridge/acp/server.js +150 -44
  37. package/dist/bridge/acp/server.js.map +1 -1
  38. package/dist/bridge/mcp/connector/adapter.d.ts +3 -2
  39. package/dist/bridge/mcp/connector/adapter.d.ts.map +1 -1
  40. package/dist/bridge/mcp/connector/adapter.js +17 -21
  41. package/dist/bridge/mcp/connector/adapter.js.map +1 -1
  42. package/dist/bridge/sse/mapper.d.ts.map +1 -1
  43. package/dist/bridge/sse/mapper.js +3 -0
  44. package/dist/bridge/sse/mapper.js.map +1 -1
  45. package/dist/compaction/dangling.d.ts +29 -2
  46. package/dist/compaction/dangling.d.ts.map +1 -1
  47. package/dist/compaction/dangling.js +172 -35
  48. package/dist/compaction/dangling.js.map +1 -1
  49. package/dist/compaction/index.d.ts +3 -2
  50. package/dist/compaction/index.d.ts.map +1 -1
  51. package/dist/compaction/index.js +1 -1
  52. package/dist/compaction/index.js.map +1 -1
  53. package/dist/compaction/manual.d.ts +11 -1
  54. package/dist/compaction/manual.d.ts.map +1 -1
  55. package/dist/compaction/manual.js +89 -14
  56. package/dist/compaction/manual.js.map +1 -1
  57. package/dist/compaction/plan.d.ts +19 -6
  58. package/dist/compaction/plan.d.ts.map +1 -1
  59. package/dist/compaction/plan.js +18 -4
  60. package/dist/compaction/plan.js.map +1 -1
  61. package/dist/compaction/retention.d.ts +10 -7
  62. package/dist/compaction/retention.d.ts.map +1 -1
  63. package/dist/compaction/retention.js +26 -8
  64. package/dist/compaction/retention.js.map +1 -1
  65. package/dist/compaction/summary.d.ts +4 -4
  66. package/dist/compaction/summary.js +4 -4
  67. package/dist/compaction/verifier.d.ts +19 -1
  68. package/dist/compaction/verifier.d.ts.map +1 -1
  69. package/dist/compaction/verifier.js +20 -1
  70. package/dist/compaction/verifier.js.map +1 -1
  71. package/dist/config/runtime.d.ts +6 -6
  72. package/dist/connector/BaseConnector.d.ts +6 -4
  73. package/dist/connector/BaseConnector.d.ts.map +1 -1
  74. package/dist/connector/BaseConnector.js +8 -2
  75. package/dist/connector/BaseConnector.js.map +1 -1
  76. package/dist/connector/builtins/http.d.ts +16 -4
  77. package/dist/connector/builtins/http.d.ts.map +1 -1
  78. package/dist/connector/builtins/http.js +177 -44
  79. package/dist/connector/builtins/http.js.map +1 -1
  80. package/dist/connector/builtins/webhook.d.ts +15 -4
  81. package/dist/connector/builtins/webhook.d.ts.map +1 -1
  82. package/dist/connector/builtins/webhook.js +165 -45
  83. package/dist/connector/builtins/webhook.js.map +1 -1
  84. package/dist/connector/execution-contract.d.ts +11 -0
  85. package/dist/connector/execution-contract.d.ts.map +1 -0
  86. package/dist/connector/execution-contract.js +14 -0
  87. package/dist/connector/execution-contract.js.map +1 -0
  88. package/dist/connector/http-operation.d.ts +48 -0
  89. package/dist/connector/http-operation.d.ts.map +1 -0
  90. package/dist/connector/http-operation.js +205 -0
  91. package/dist/connector/http-operation.js.map +1 -0
  92. package/dist/connector/mcp/adapter.d.ts.map +1 -1
  93. package/dist/connector/mcp/adapter.js +8 -3
  94. package/dist/connector/mcp/adapter.js.map +1 -1
  95. package/dist/connector/mcp/client.d.ts +14 -8
  96. package/dist/connector/mcp/client.d.ts.map +1 -1
  97. package/dist/connector/mcp/client.js +160 -44
  98. package/dist/connector/mcp/client.js.map +1 -1
  99. package/dist/connector/mcp/http-sse.d.ts +8 -2
  100. package/dist/connector/mcp/http-sse.d.ts.map +1 -1
  101. package/dist/connector/mcp/http-sse.js +70 -17
  102. package/dist/connector/mcp/http-sse.js.map +1 -1
  103. package/dist/connector/mcp/prompt-adapter.d.ts.map +1 -1
  104. package/dist/connector/mcp/prompt-adapter.js +9 -2
  105. package/dist/connector/mcp/prompt-adapter.js.map +1 -1
  106. package/dist/connector/mcp/stdio.d.ts +2 -2
  107. package/dist/connector/mcp/stdio.d.ts.map +1 -1
  108. package/dist/connector/mcp/stdio.js +14 -50
  109. package/dist/connector/mcp/stdio.js.map +1 -1
  110. package/dist/connector/mcp/streamable-http.d.ts +7 -2
  111. package/dist/connector/mcp/streamable-http.d.ts.map +1 -1
  112. package/dist/connector/mcp/streamable-http.js +66 -18
  113. package/dist/connector/mcp/streamable-http.js.map +1 -1
  114. package/dist/connector/tools/adapter.d.ts +2 -2
  115. package/dist/connector/tools/adapter.d.ts.map +1 -1
  116. package/dist/connector/tools/adapter.js +23 -14
  117. package/dist/connector/tools/adapter.js.map +1 -1
  118. package/dist/connector/tools/definitions.d.ts.map +1 -1
  119. package/dist/connector/tools/definitions.js +5 -2
  120. package/dist/connector/tools/definitions.js.map +1 -1
  121. package/dist/connector/tools/result.d.ts +4 -0
  122. package/dist/connector/tools/result.d.ts.map +1 -0
  123. package/dist/connector/tools/result.js +20 -0
  124. package/dist/connector/tools/result.js.map +1 -0
  125. package/dist/connector/web/guarded-fetch.d.ts +4 -2
  126. package/dist/connector/web/guarded-fetch.d.ts.map +1 -1
  127. package/dist/connector/web/guarded-fetch.js +157 -43
  128. package/dist/connector/web/guarded-fetch.js.map +1 -1
  129. package/dist/constants/sandbox/index.d.ts +3 -2
  130. package/dist/constants/sandbox/index.d.ts.map +1 -1
  131. package/dist/constants/sandbox/index.js +3 -2
  132. package/dist/constants/sandbox/index.js.map +1 -1
  133. package/dist/contracts/api.d.ts +2 -0
  134. package/dist/contracts/api.d.ts.map +1 -1
  135. package/dist/contracts/schemas.d.ts +38 -12
  136. package/dist/contracts/schemas.d.ts.map +1 -1
  137. package/dist/contracts/schemas.js +7 -0
  138. package/dist/contracts/schemas.js.map +1 -1
  139. package/dist/directory/derive-supervisor.d.ts.map +1 -1
  140. package/dist/directory/derive-supervisor.js +8 -0
  141. package/dist/directory/derive-supervisor.js.map +1 -1
  142. package/dist/directory/derive.d.ts.map +1 -1
  143. package/dist/directory/derive.js +8 -0
  144. package/dist/directory/derive.js.map +1 -1
  145. package/dist/directory/load.d.ts.map +1 -1
  146. package/dist/directory/load.js +2 -0
  147. package/dist/directory/load.js.map +1 -1
  148. package/dist/directory/types.d.ts +4 -0
  149. package/dist/directory/types.d.ts.map +1 -1
  150. package/dist/eval/experiment.d.ts +10 -10
  151. package/dist/eval/experiment.d.ts.map +1 -1
  152. package/dist/eval/experiment.js +121 -91
  153. package/dist/eval/experiment.js.map +1 -1
  154. package/dist/eval/judge.d.ts +6 -0
  155. package/dist/eval/judge.d.ts.map +1 -1
  156. package/dist/eval/judge.js +7 -2
  157. package/dist/eval/judge.js.map +1 -1
  158. package/dist/eval/types.d.ts +7 -1
  159. package/dist/eval/types.d.ts.map +1 -1
  160. package/dist/manager/agent/lifecycle.d.ts +12 -10
  161. package/dist/manager/agent/lifecycle.d.ts.map +1 -1
  162. package/dist/manager/agent/lifecycle.js +16 -3
  163. package/dist/manager/agent/lifecycle.js.map +1 -1
  164. package/dist/manager/connector/environment.d.ts +2 -2
  165. package/dist/manager/connector/environment.d.ts.map +1 -1
  166. package/dist/manager/connector/environment.js +2 -2
  167. package/dist/manager/connector/environment.js.map +1 -1
  168. package/dist/manager/connector/lifecycle.d.ts +10 -2
  169. package/dist/manager/connector/lifecycle.d.ts.map +1 -1
  170. package/dist/manager/connector/lifecycle.js +273 -24
  171. package/dist/manager/connector/lifecycle.js.map +1 -1
  172. package/dist/manager/connector/tenant.d.ts +5 -4
  173. package/dist/manager/connector/tenant.d.ts.map +1 -1
  174. package/dist/manager/connector/tenant.js +47 -22
  175. package/dist/manager/connector/tenant.js.map +1 -1
  176. package/dist/manager/goal/activation.d.ts +23 -0
  177. package/dist/manager/goal/activation.d.ts.map +1 -0
  178. package/dist/manager/goal/activation.js +41 -0
  179. package/dist/manager/goal/activation.js.map +1 -0
  180. package/dist/manager/index.d.ts +3 -2
  181. package/dist/manager/index.d.ts.map +1 -1
  182. package/dist/manager/index.js.map +1 -1
  183. package/dist/manager/run/persistence.d.ts +2 -0
  184. package/dist/manager/run/persistence.d.ts.map +1 -1
  185. package/dist/manager/run/persistence.js +5 -1
  186. package/dist/manager/run/persistence.js.map +1 -1
  187. package/dist/manager/topic/dependency.d.ts +24 -0
  188. package/dist/manager/topic/dependency.d.ts.map +1 -0
  189. package/dist/manager/topic/dependency.js +13 -0
  190. package/dist/manager/topic/dependency.js.map +1 -0
  191. package/dist/manager/topic/lifecycle.d.ts +9 -21
  192. package/dist/manager/topic/lifecycle.d.ts.map +1 -1
  193. package/dist/manager/topic/lifecycle.js +17 -29
  194. package/dist/manager/topic/lifecycle.js.map +1 -1
  195. package/dist/plugin/index.d.ts +1 -0
  196. package/dist/plugin/index.d.ts.map +1 -1
  197. package/dist/plugin/index.js.map +1 -1
  198. package/dist/plugin/lifecycle.d.ts +15 -0
  199. package/dist/plugin/lifecycle.d.ts.map +1 -1
  200. package/dist/plugin/lifecycle.js +144 -38
  201. package/dist/plugin/lifecycle.js.map +1 -1
  202. package/dist/plugin/loader.d.ts +3 -3
  203. package/dist/plugin/loader.d.ts.map +1 -1
  204. package/dist/plugin/loader.js +58 -12
  205. package/dist/plugin/loader.js.map +1 -1
  206. package/dist/provider/collect-chat-completion.d.ts.map +1 -1
  207. package/dist/provider/collect-chat-completion.js +4 -0
  208. package/dist/provider/collect-chat-completion.js.map +1 -1
  209. package/dist/provider/fallback.d.ts +3 -1
  210. package/dist/provider/fallback.d.ts.map +1 -1
  211. package/dist/provider/fallback.js +62 -10
  212. package/dist/provider/fallback.js.map +1 -1
  213. package/dist/provider/idle-timeout.d.ts +4 -0
  214. package/dist/provider/idle-timeout.d.ts.map +1 -1
  215. package/dist/provider/idle-timeout.js +131 -15
  216. package/dist/provider/idle-timeout.js.map +1 -1
  217. package/dist/provider/index.d.ts +2 -0
  218. package/dist/provider/index.d.ts.map +1 -1
  219. package/dist/provider/index.js +1 -0
  220. package/dist/provider/index.js.map +1 -1
  221. package/dist/provider/instrumentation.d.ts.map +1 -1
  222. package/dist/provider/instrumentation.js +1 -0
  223. package/dist/provider/instrumentation.js.map +1 -1
  224. package/dist/provider/retry.d.ts.map +1 -1
  225. package/dist/provider/retry.js +13 -1
  226. package/dist/provider/retry.js.map +1 -1
  227. package/dist/public-runtime.d.ts +57 -24
  228. package/dist/public-runtime.d.ts.map +1 -1
  229. package/dist/public-runtime.js +42 -35
  230. package/dist/public-runtime.js.map +1 -1
  231. package/dist/public-tools.d.ts +1 -0
  232. package/dist/public-tools.d.ts.map +1 -1
  233. package/dist/public-tools.js +5 -0
  234. package/dist/public-tools.js.map +1 -1
  235. package/dist/public-types.d.ts +33 -12
  236. package/dist/public-types.d.ts.map +1 -1
  237. package/dist/rag/embedding.d.ts +8 -3
  238. package/dist/rag/embedding.d.ts.map +1 -1
  239. package/dist/rag/embedding.js +120 -9
  240. package/dist/rag/embedding.js.map +1 -1
  241. package/dist/rag/index.d.ts +1 -1
  242. package/dist/rag/index.d.ts.map +1 -1
  243. package/dist/rag/index.js +1 -1
  244. package/dist/rag/index.js.map +1 -1
  245. package/dist/rag/ingestion.d.ts +2 -2
  246. package/dist/rag/ingestion.d.ts.map +1 -1
  247. package/dist/rag/ingestion.js +15 -3
  248. package/dist/rag/ingestion.js.map +1 -1
  249. package/dist/rag/knowledge-base.d.ts +3 -3
  250. package/dist/rag/knowledge-base.d.ts.map +1 -1
  251. package/dist/rag/knowledge-base.js +8 -4
  252. package/dist/rag/knowledge-base.js.map +1 -1
  253. package/dist/rag/operation.d.ts +10 -0
  254. package/dist/rag/operation.d.ts.map +1 -0
  255. package/dist/rag/operation.js +26 -0
  256. package/dist/rag/operation.js.map +1 -0
  257. package/dist/rag/rag-tool.d.ts.map +1 -1
  258. package/dist/rag/rag-tool.js +6 -3
  259. package/dist/rag/rag-tool.js.map +1 -1
  260. package/dist/rag/retriever.d.ts +2 -2
  261. package/dist/rag/retriever.d.ts.map +1 -1
  262. package/dist/rag/retriever.js +31 -15
  263. package/dist/rag/retriever.js.map +1 -1
  264. package/dist/rag/vector-store.d.ts +3 -3
  265. package/dist/rag/vector-store.d.ts.map +1 -1
  266. package/dist/rag/vector-store.js +4 -2
  267. package/dist/rag/vector-store.js.map +1 -1
  268. package/dist/registry/command/kernel-commands.d.ts +16 -4
  269. package/dist/registry/command/kernel-commands.d.ts.map +1 -1
  270. package/dist/registry/command/kernel-commands.js +171 -0
  271. package/dist/registry/command/kernel-commands.js.map +1 -1
  272. package/dist/run/reporter.d.ts.map +1 -1
  273. package/dist/run/reporter.js +9 -0
  274. package/dist/run/reporter.js.map +1 -1
  275. package/dist/run-query/index.d.ts +15 -1
  276. package/dist/run-query/index.d.ts.map +1 -1
  277. package/dist/run-query/index.js +69 -15
  278. package/dist/run-query/index.js.map +1 -1
  279. package/dist/runtime/query/context.d.ts.map +1 -1
  280. package/dist/runtime/query/context.js +10 -3
  281. package/dist/runtime/query/context.js.map +1 -1
  282. package/dist/runtime/query/executor.d.ts +3 -0
  283. package/dist/runtime/query/executor.d.ts.map +1 -1
  284. package/dist/runtime/query/executor.js +80 -18
  285. package/dist/runtime/query/executor.js.map +1 -1
  286. package/dist/runtime/query/guard.d.ts +9 -0
  287. package/dist/runtime/query/guard.d.ts.map +1 -1
  288. package/dist/runtime/query/guard.js +11 -0
  289. package/dist/runtime/query/guard.js.map +1 -1
  290. package/dist/runtime/query/index.d.ts +30 -1
  291. package/dist/runtime/query/index.d.ts.map +1 -1
  292. package/dist/runtime/query/index.js +548 -95
  293. package/dist/runtime/query/index.js.map +1 -1
  294. package/dist/runtime/query/iteration/index.d.ts.map +1 -1
  295. package/dist/runtime/query/iteration/index.js +74 -14
  296. package/dist/runtime/query/iteration/index.js.map +1 -1
  297. package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
  298. package/dist/runtime/query/iteration/phases/compaction.js +94 -53
  299. package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
  300. package/dist/runtime/query/iteration/phases/context.d.ts +3 -0
  301. package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
  302. package/dist/runtime/query/iteration/phases/context.js.map +1 -1
  303. package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
  304. package/dist/runtime/query/iteration/phases/tool-review.js +21 -0
  305. package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
  306. package/dist/runtime/query/iteration/stream-turn.d.ts.map +1 -1
  307. package/dist/runtime/query/iteration/stream-turn.js +4 -0
  308. package/dist/runtime/query/iteration/stream-turn.js.map +1 -1
  309. package/dist/runtime/query/project-instructions.d.ts +69 -0
  310. package/dist/runtime/query/project-instructions.d.ts.map +1 -0
  311. package/dist/runtime/query/project-instructions.js +137 -0
  312. package/dist/runtime/query/project-instructions.js.map +1 -0
  313. package/dist/runtime/query/request-rich-content.d.ts +22 -0
  314. package/dist/runtime/query/request-rich-content.d.ts.map +1 -0
  315. package/dist/runtime/query/request-rich-content.js +122 -0
  316. package/dist/runtime/query/request-rich-content.js.map +1 -0
  317. package/dist/runtime/query/result.d.ts.map +1 -1
  318. package/dist/runtime/query/result.js +12 -1
  319. package/dist/runtime/query/result.js.map +1 -1
  320. package/dist/runtime/query/resume-pending.d.ts.map +1 -1
  321. package/dist/runtime/query/resume-pending.js +19 -20
  322. package/dist/runtime/query/resume-pending.js.map +1 -1
  323. package/dist/runtime/query/resume-run.d.ts.map +1 -1
  324. package/dist/runtime/query/resume-run.js +54 -8
  325. package/dist/runtime/query/resume-run.js.map +1 -1
  326. package/dist/runtime/query/run-state.d.ts +5 -0
  327. package/dist/runtime/query/run-state.d.ts.map +1 -1
  328. package/dist/runtime/query/run-state.js +6 -1
  329. package/dist/runtime/query/run-state.js.map +1 -1
  330. package/dist/runtime/query/sandbox-lifecycle.d.ts +54 -0
  331. package/dist/runtime/query/sandbox-lifecycle.d.ts.map +1 -0
  332. package/dist/runtime/query/sandbox-lifecycle.js +167 -0
  333. package/dist/runtime/query/sandbox-lifecycle.js.map +1 -0
  334. package/dist/sandbox/isolation.d.ts.map +1 -1
  335. package/dist/sandbox/isolation.js +9 -0
  336. package/dist/sandbox/isolation.js.map +1 -1
  337. package/dist/sandbox/provider/local.d.ts +56 -6
  338. package/dist/sandbox/provider/local.d.ts.map +1 -1
  339. package/dist/sandbox/provider/local.js +181 -76
  340. package/dist/sandbox/provider/local.js.map +1 -1
  341. package/dist/sandbox/terminal.d.ts +13 -5
  342. package/dist/sandbox/terminal.d.ts.map +1 -1
  343. package/dist/sandbox/terminal.js +11 -3
  344. package/dist/sandbox/terminal.js.map +1 -1
  345. package/dist/session/errors.d.ts +28 -29
  346. package/dist/session/errors.d.ts.map +1 -1
  347. package/dist/session/errors.js +28 -29
  348. package/dist/session/errors.js.map +1 -1
  349. package/dist/session/handoff/broadcast.d.ts +5 -8
  350. package/dist/session/handoff/broadcast.d.ts.map +1 -1
  351. package/dist/session/handoff/broadcast.js +16 -6
  352. package/dist/session/handoff/broadcast.js.map +1 -1
  353. package/dist/session/handoff/single.d.ts +5 -8
  354. package/dist/session/handoff/single.d.ts.map +1 -1
  355. package/dist/session/handoff/single.js +7 -4
  356. package/dist/session/handoff/single.js.map +1 -1
  357. package/dist/store/attachment/index.d.ts +11 -3
  358. package/dist/store/attachment/index.d.ts.map +1 -1
  359. package/dist/store/attachment/index.js +49 -4
  360. package/dist/store/attachment/index.js.map +1 -1
  361. package/dist/store/feedback/conformance.d.ts.map +1 -1
  362. package/dist/store/feedback/conformance.js +32 -0
  363. package/dist/store/feedback/conformance.js.map +1 -1
  364. package/dist/store/feedback/disk.d.ts +8 -6
  365. package/dist/store/feedback/disk.d.ts.map +1 -1
  366. package/dist/store/feedback/disk.js +111 -76
  367. package/dist/store/feedback/disk.js.map +1 -1
  368. package/dist/store/goal/index.d.ts +111 -0
  369. package/dist/store/goal/index.d.ts.map +1 -0
  370. package/dist/store/goal/index.js +436 -0
  371. package/dist/store/goal/index.js.map +1 -0
  372. package/dist/store/index.d.ts +1 -1
  373. package/dist/store/index.d.ts.map +1 -1
  374. package/dist/store/index.js +1 -1
  375. package/dist/store/index.js.map +1 -1
  376. package/dist/store/kv/revision-record-store.d.ts +70 -0
  377. package/dist/store/kv/revision-record-store.d.ts.map +1 -0
  378. package/dist/store/kv/revision-record-store.js +290 -0
  379. package/dist/store/kv/revision-record-store.js.map +1 -0
  380. package/dist/store/memory/disk.d.ts +9 -7
  381. package/dist/store/memory/disk.d.ts.map +1 -1
  382. package/dist/store/memory/disk.js +256 -98
  383. package/dist/store/memory/disk.js.map +1 -1
  384. package/dist/store/run/disk.d.ts +10 -2
  385. package/dist/store/run/disk.d.ts.map +1 -1
  386. package/dist/store/run/disk.js +70 -4
  387. package/dist/store/run/disk.js.map +1 -1
  388. package/dist/store/run/memory.d.ts +4 -2
  389. package/dist/store/run/memory.d.ts.map +1 -1
  390. package/dist/store/run/memory.js +15 -1
  391. package/dist/store/run/memory.js.map +1 -1
  392. package/dist/store/session/disk.d.ts +9 -0
  393. package/dist/store/session/disk.d.ts.map +1 -1
  394. package/dist/store/session/disk.js +57 -5
  395. package/dist/store/session/disk.js.map +1 -1
  396. package/dist/store/session/memory.d.ts +1 -0
  397. package/dist/store/session/memory.d.ts.map +1 -1
  398. package/dist/store/session/memory.js +14 -0
  399. package/dist/store/session/memory.js.map +1 -1
  400. package/dist/store/topic/memory.d.ts +1 -2
  401. package/dist/store/topic/memory.d.ts.map +1 -1
  402. package/dist/store/topic/memory.js +4 -5
  403. package/dist/store/topic/memory.js.map +1 -1
  404. package/dist/store/topic/objective.d.ts +8 -4
  405. package/dist/store/topic/objective.d.ts.map +1 -1
  406. package/dist/store/topic/objective.js +185 -100
  407. package/dist/store/topic/objective.js.map +1 -1
  408. package/dist/store/topic/state.d.ts +1 -2
  409. package/dist/store/topic/state.d.ts.map +1 -1
  410. package/dist/store/topic/state.js +50 -62
  411. package/dist/store/topic/state.js.map +1 -1
  412. package/dist/tools/builtins/bash.d.ts.map +1 -1
  413. package/dist/tools/builtins/bash.js +20 -0
  414. package/dist/tools/builtins/bash.js.map +1 -1
  415. package/dist/tools/builtins/computer-use.d.ts +9 -1
  416. package/dist/tools/builtins/computer-use.d.ts.map +1 -1
  417. package/dist/tools/builtins/computer-use.js.map +1 -1
  418. package/dist/tools/builtins/content-fingerprint.d.ts +8 -7
  419. package/dist/tools/builtins/content-fingerprint.d.ts.map +1 -1
  420. package/dist/tools/builtins/content-fingerprint.js +9 -10
  421. package/dist/tools/builtins/content-fingerprint.js.map +1 -1
  422. package/dist/tools/builtins/edit.d.ts +6 -1
  423. package/dist/tools/builtins/edit.d.ts.map +1 -1
  424. package/dist/tools/builtins/edit.js +166 -27
  425. package/dist/tools/builtins/edit.js.map +1 -1
  426. package/dist/tools/builtins/write-file.d.ts.map +1 -1
  427. package/dist/tools/builtins/write-file.js +45 -19
  428. package/dist/tools/builtins/write-file.js.map +1 -1
  429. package/dist/tools/command-arguments.d.ts +43 -0
  430. package/dist/tools/command-arguments.d.ts.map +1 -0
  431. package/dist/tools/command-arguments.js +52 -0
  432. package/dist/tools/command-arguments.js.map +1 -0
  433. package/dist/tools/coordinator/index.d.ts +2 -0
  434. package/dist/tools/coordinator/index.d.ts.map +1 -1
  435. package/dist/tools/coordinator/index.js +3 -1
  436. package/dist/tools/coordinator/index.js.map +1 -1
  437. package/dist/tools/defineTool.d.ts +10 -0
  438. package/dist/tools/defineTool.d.ts.map +1 -1
  439. package/dist/tools/defineTool.js +1 -0
  440. package/dist/tools/defineTool.js.map +1 -1
  441. package/dist/tools/env-scrub.d.ts +7 -5
  442. package/dist/tools/env-scrub.d.ts.map +1 -1
  443. package/dist/tools/env-scrub.js +7 -5
  444. package/dist/tools/env-scrub.js.map +1 -1
  445. package/dist/tools/goal/index.d.ts +20 -0
  446. package/dist/tools/goal/index.d.ts.map +1 -0
  447. package/dist/tools/goal/index.js +104 -0
  448. package/dist/tools/goal/index.js.map +1 -0
  449. package/dist/tools/memory/index.d.ts +16 -0
  450. package/dist/tools/memory/index.d.ts.map +1 -1
  451. package/dist/tools/memory/index.js +6 -2
  452. package/dist/tools/memory/index.js.map +1 -1
  453. package/dist/tools/memory/search.d.ts +4 -1
  454. package/dist/tools/memory/search.d.ts.map +1 -1
  455. package/dist/tools/memory/search.js +10 -2
  456. package/dist/tools/memory/search.js.map +1 -1
  457. package/dist/types/agent/base.d.ts +11 -3
  458. package/dist/types/agent/base.d.ts.map +1 -1
  459. package/dist/types/agent/factory.d.ts +2 -0
  460. package/dist/types/agent/factory.d.ts.map +1 -1
  461. package/dist/types/agent/reactive.d.ts +2 -0
  462. package/dist/types/agent/reactive.d.ts.map +1 -1
  463. package/dist/types/agent/supervisor.d.ts +6 -0
  464. package/dist/types/agent/supervisor.d.ts.map +1 -1
  465. package/dist/types/agent/task.d.ts +6 -2
  466. package/dist/types/agent/task.d.ts.map +1 -1
  467. package/dist/types/connector/core.d.ts +13 -8
  468. package/dist/types/connector/core.d.ts.map +1 -1
  469. package/dist/types/connector/definition.d.ts +37 -18
  470. package/dist/types/connector/definition.d.ts.map +1 -1
  471. package/dist/types/connector/http.d.ts +6 -0
  472. package/dist/types/connector/http.d.ts.map +1 -1
  473. package/dist/types/connector/mcp.d.ts +24 -6
  474. package/dist/types/connector/mcp.d.ts.map +1 -1
  475. package/dist/types/connector/tenant.d.ts +17 -7
  476. package/dist/types/connector/tenant.d.ts.map +1 -1
  477. package/dist/types/connector/webhook.d.ts +6 -0
  478. package/dist/types/connector/webhook.d.ts.map +1 -1
  479. package/dist/types/goal/index.d.ts +46 -0
  480. package/dist/types/goal/index.d.ts.map +1 -0
  481. package/dist/types/goal/index.js +2 -0
  482. package/dist/types/goal/index.js.map +1 -0
  483. package/dist/types/ids/index.d.ts +2 -0
  484. package/dist/types/ids/index.d.ts.map +1 -1
  485. package/dist/types/ids/index.js.map +1 -1
  486. package/dist/types/message/index.d.ts +79 -13
  487. package/dist/types/message/index.d.ts.map +1 -1
  488. package/dist/types/message/index.js +49 -3
  489. package/dist/types/message/index.js.map +1 -1
  490. package/dist/types/plugin/index.d.ts +7 -5
  491. package/dist/types/plugin/index.d.ts.map +1 -1
  492. package/dist/types/plugin/index.js.map +1 -1
  493. package/dist/types/provider/chat.d.ts +27 -4
  494. package/dist/types/provider/chat.d.ts.map +1 -1
  495. package/dist/types/provider/index.d.ts +1 -1
  496. package/dist/types/provider/index.d.ts.map +1 -1
  497. package/dist/types/provider/interface.d.ts +18 -7
  498. package/dist/types/provider/interface.d.ts.map +1 -1
  499. package/dist/types/provider/model.d.ts +12 -0
  500. package/dist/types/provider/model.d.ts.map +1 -1
  501. package/dist/types/provider/stream.d.ts +6 -0
  502. package/dist/types/provider/stream.d.ts.map +1 -1
  503. package/dist/types/rag/embedding.d.ts +15 -2
  504. package/dist/types/rag/embedding.d.ts.map +1 -1
  505. package/dist/types/rag/ingestion.d.ts +2 -2
  506. package/dist/types/rag/ingestion.d.ts.map +1 -1
  507. package/dist/types/rag/knowledge-base.d.ts +3 -3
  508. package/dist/types/rag/knowledge-base.d.ts.map +1 -1
  509. package/dist/types/rag/retrieval.d.ts +2 -2
  510. package/dist/types/rag/retrieval.d.ts.map +1 -1
  511. package/dist/types/rag/scope.d.ts +4 -0
  512. package/dist/types/rag/scope.d.ts.map +1 -1
  513. package/dist/types/rag/vector.d.ts +5 -2
  514. package/dist/types/rag/vector.d.ts.map +1 -1
  515. package/dist/types/run/config.d.ts +20 -0
  516. package/dist/types/run/config.d.ts.map +1 -1
  517. package/dist/types/run/events.d.ts +25 -1
  518. package/dist/types/run/events.d.ts.map +1 -1
  519. package/dist/types/run/events.js.map +1 -1
  520. package/dist/types/run/metadata.d.ts +2 -0
  521. package/dist/types/run/metadata.d.ts.map +1 -1
  522. package/dist/types/run/step.d.ts +2 -6
  523. package/dist/types/run/step.d.ts.map +1 -1
  524. package/dist/types/run/step.js.map +1 -1
  525. package/dist/types/run/store.d.ts +55 -2
  526. package/dist/types/run/store.d.ts.map +1 -1
  527. package/dist/types/sandbox/index.d.ts +47 -6
  528. package/dist/types/sandbox/index.d.ts.map +1 -1
  529. package/dist/types/sandbox/index.js +23 -10
  530. package/dist/types/sandbox/index.js.map +1 -1
  531. package/dist/types/session/store.d.ts +13 -0
  532. package/dist/types/session/store.d.ts.map +1 -1
  533. package/dist/types/tool/index.d.ts +33 -11
  534. package/dist/types/tool/index.d.ts.map +1 -1
  535. package/dist/types/tool/index.js.map +1 -1
  536. package/dist/types/topic/entity.d.ts +3 -4
  537. package/dist/types/topic/entity.d.ts.map +1 -1
  538. package/dist/types/topic/store.d.ts +3 -3
  539. package/dist/utils/id.d.ts +3 -1
  540. package/dist/utils/id.d.ts.map +1 -1
  541. package/dist/utils/id.js +4 -0
  542. package/dist/utils/id.js.map +1 -1
  543. package/dist/utils/process-environment.d.ts +26 -0
  544. package/dist/utils/process-environment.d.ts.map +1 -0
  545. package/dist/utils/process-environment.js +78 -0
  546. package/dist/utils/process-environment.js.map +1 -0
  547. package/dist/vault/InMemoryCredentialVault.d.ts +2 -0
  548. package/dist/vault/InMemoryCredentialVault.d.ts.map +1 -1
  549. package/dist/vault/InMemoryCredentialVault.js +24 -4
  550. package/dist/vault/InMemoryCredentialVault.js.map +1 -1
  551. package/dist/vault/instrumentation.d.ts.map +1 -1
  552. package/dist/vault/instrumentation.js +15 -0
  553. package/dist/vault/instrumentation.js.map +1 -1
  554. package/package.json +1 -1
  555. package/src/advisory/executor.ts +4 -1
  556. package/src/agents/ReactiveAgent.ts +12 -0
  557. package/src/agents/RouterAgent.ts +25 -3
  558. package/src/agents/SupervisorAgent.ts +33 -11
  559. package/src/agents/runAgent.ts +38 -2
  560. package/src/authorization/command-line.ts +390 -0
  561. package/src/authorization/rules.ts +22 -1
  562. package/src/bridge/a2a/client.ts +384 -97
  563. package/src/bridge/a2a/mapper.ts +5 -0
  564. package/src/bridge/acp/server.ts +184 -42
  565. package/src/bridge/mcp/connector/adapter.ts +28 -20
  566. package/src/bridge/sse/mapper.ts +3 -0
  567. package/src/compaction/dangling.ts +203 -38
  568. package/src/compaction/index.ts +9 -2
  569. package/src/compaction/manual.ts +125 -18
  570. package/src/compaction/plan.ts +42 -11
  571. package/src/compaction/retention.ts +23 -8
  572. package/src/compaction/summary.ts +4 -4
  573. package/src/compaction/verifier.ts +66 -0
  574. package/src/connector/BaseConnector.ts +19 -4
  575. package/src/connector/builtins/http.ts +236 -46
  576. package/src/connector/builtins/webhook.ts +207 -47
  577. package/src/connector/execution-contract.ts +27 -0
  578. package/src/connector/http-operation.ts +238 -0
  579. package/src/connector/mcp/adapter.ts +8 -3
  580. package/src/connector/mcp/client.ts +207 -58
  581. package/src/connector/mcp/http-sse.ts +91 -23
  582. package/src/connector/mcp/prompt-adapter.ts +8 -2
  583. package/src/connector/mcp/stdio.ts +21 -46
  584. package/src/connector/mcp/streamable-http.ts +86 -22
  585. package/src/connector/tools/adapter.ts +23 -14
  586. package/src/connector/tools/definitions.ts +5 -2
  587. package/src/connector/tools/result.ts +21 -0
  588. package/src/connector/web/guarded-fetch.ts +188 -48
  589. package/src/constants/sandbox/index.ts +3 -2
  590. package/src/contracts/api.ts +2 -0
  591. package/src/contracts/schemas.ts +7 -0
  592. package/src/directory/derive-supervisor.ts +8 -0
  593. package/src/directory/derive.ts +8 -0
  594. package/src/directory/load.ts +2 -0
  595. package/src/directory/types.ts +4 -0
  596. package/src/eval/experiment.ts +160 -111
  597. package/src/eval/judge.ts +13 -2
  598. package/src/eval/types.ts +7 -1
  599. package/src/manager/agent/lifecycle.ts +28 -12
  600. package/src/manager/connector/environment.ts +3 -1
  601. package/src/manager/connector/lifecycle.ts +364 -24
  602. package/src/manager/connector/tenant.ts +56 -23
  603. package/src/manager/goal/activation.ts +52 -0
  604. package/src/manager/index.ts +10 -2
  605. package/src/manager/run/persistence.ts +6 -1
  606. package/src/manager/topic/dependency.ts +39 -0
  607. package/src/manager/topic/lifecycle.ts +19 -31
  608. package/src/plugin/index.ts +1 -0
  609. package/src/plugin/lifecycle.ts +180 -39
  610. package/src/plugin/loader.ts +70 -13
  611. package/src/provider/collect-chat-completion.ts +3 -0
  612. package/src/provider/fallback.ts +79 -11
  613. package/src/provider/idle-timeout.ts +143 -17
  614. package/src/provider/index.ts +2 -0
  615. package/src/provider/instrumentation.ts +1 -0
  616. package/src/provider/retry.ts +16 -1
  617. package/src/public-runtime.ts +190 -32
  618. package/src/public-tools.ts +5 -0
  619. package/src/public-types.ts +85 -11
  620. package/src/rag/embedding.ts +147 -19
  621. package/src/rag/index.ts +1 -1
  622. package/src/rag/ingestion.ts +16 -2
  623. package/src/rag/knowledge-base.ts +13 -4
  624. package/src/rag/operation.ts +28 -0
  625. package/src/rag/rag-tool.ts +6 -3
  626. package/src/rag/retriever.ts +62 -11
  627. package/src/rag/vector-store.ts +8 -2
  628. package/src/registry/command/kernel-commands.ts +223 -4
  629. package/src/run/reporter.ts +10 -0
  630. package/src/run-query/index.ts +84 -15
  631. package/src/runtime/query/context.ts +13 -3
  632. package/src/runtime/query/executor.ts +90 -17
  633. package/src/runtime/query/guard.ts +12 -0
  634. package/src/runtime/query/index.ts +652 -103
  635. package/src/runtime/query/iteration/index.ts +89 -13
  636. package/src/runtime/query/iteration/phases/compaction.ts +120 -55
  637. package/src/runtime/query/iteration/phases/context.ts +4 -0
  638. package/src/runtime/query/iteration/phases/tool-review.ts +28 -0
  639. package/src/runtime/query/iteration/stream-turn.ts +3 -0
  640. package/src/runtime/query/project-instructions.ts +212 -0
  641. package/src/runtime/query/request-rich-content.ts +153 -0
  642. package/src/runtime/query/result.ts +12 -1
  643. package/src/runtime/query/resume-pending.ts +20 -18
  644. package/src/runtime/query/resume-run.ts +52 -8
  645. package/src/runtime/query/run-state.ts +11 -1
  646. package/src/runtime/query/sandbox-lifecycle.ts +210 -0
  647. package/src/sandbox/isolation.ts +9 -0
  648. package/src/sandbox/provider/local.ts +255 -90
  649. package/src/sandbox/terminal.ts +13 -5
  650. package/src/session/errors.ts +68 -42
  651. package/src/session/handoff/broadcast.ts +20 -14
  652. package/src/session/handoff/single.ts +14 -13
  653. package/src/store/attachment/index.ts +65 -3
  654. package/src/store/feedback/conformance.ts +39 -0
  655. package/src/store/feedback/disk.ts +128 -82
  656. package/src/store/goal/index.ts +594 -0
  657. package/src/store/index.ts +1 -1
  658. package/src/store/kv/revision-record-store.ts +346 -0
  659. package/src/store/memory/disk.ts +288 -113
  660. package/src/store/run/disk.ts +96 -5
  661. package/src/store/run/memory.ts +22 -2
  662. package/src/store/session/disk.ts +93 -6
  663. package/src/store/session/memory.ts +22 -0
  664. package/src/store/topic/memory.ts +4 -5
  665. package/src/store/topic/objective.ts +215 -100
  666. package/src/store/topic/state.ts +100 -63
  667. package/src/tools/builtins/bash.ts +21 -0
  668. package/src/tools/builtins/computer-use.ts +9 -1
  669. package/src/tools/builtins/content-fingerprint.ts +9 -12
  670. package/src/tools/builtins/edit.ts +190 -27
  671. package/src/tools/builtins/write-file.ts +55 -19
  672. package/src/tools/command-arguments.ts +54 -0
  673. package/src/tools/coordinator/index.ts +4 -1
  674. package/src/tools/defineTool.ts +11 -0
  675. package/src/tools/env-scrub.ts +7 -5
  676. package/src/tools/goal/index.ts +129 -0
  677. package/src/tools/memory/index.ts +26 -3
  678. package/src/tools/memory/search.ts +20 -3
  679. package/src/types/agent/base.ts +12 -3
  680. package/src/types/agent/factory.ts +2 -0
  681. package/src/types/agent/reactive.ts +2 -0
  682. package/src/types/agent/supervisor.ts +6 -0
  683. package/src/types/agent/task.ts +6 -2
  684. package/src/types/connector/core.ts +13 -8
  685. package/src/types/connector/definition.ts +54 -20
  686. package/src/types/connector/http.ts +7 -0
  687. package/src/types/connector/mcp.ts +27 -6
  688. package/src/types/connector/tenant.ts +21 -7
  689. package/src/types/connector/webhook.ts +7 -0
  690. package/src/types/goal/index.ts +50 -0
  691. package/src/types/ids/index.ts +2 -0
  692. package/src/types/message/index.ts +147 -12
  693. package/src/types/plugin/index.ts +7 -5
  694. package/src/types/provider/chat.ts +35 -4
  695. package/src/types/provider/index.ts +1 -1
  696. package/src/types/provider/interface.ts +22 -7
  697. package/src/types/provider/model.ts +13 -0
  698. package/src/types/provider/stream.ts +6 -0
  699. package/src/types/rag/embedding.ts +16 -2
  700. package/src/types/rag/ingestion.ts +2 -1
  701. package/src/types/rag/knowledge-base.ts +7 -3
  702. package/src/types/rag/retrieval.ts +2 -1
  703. package/src/types/rag/scope.ts +5 -0
  704. package/src/types/rag/vector.ts +5 -2
  705. package/src/types/run/config.ts +20 -0
  706. package/src/types/run/events.ts +28 -3
  707. package/src/types/run/metadata.ts +2 -0
  708. package/src/types/run/step.ts +2 -7
  709. package/src/types/run/store.ts +60 -2
  710. package/src/types/sandbox/index.ts +57 -14
  711. package/src/types/session/store.ts +18 -0
  712. package/src/types/tool/index.ts +33 -11
  713. package/src/types/topic/entity.ts +3 -4
  714. package/src/types/topic/store.ts +3 -3
  715. package/src/utils/id.ts +6 -0
  716. package/src/utils/process-environment.ts +101 -0
  717. package/src/vault/InMemoryCredentialVault.ts +29 -4
  718. package/src/vault/instrumentation.ts +24 -0
@@ -1,13 +1,21 @@
1
1
  import type { BaseConnector } from '../../connector/BaseConnector.js'
2
+ import { managedConnectorOptions } from '../../connector/execution-contract.js'
2
3
  import type { ConnectorRegistry } from '../../registry/connector/definitions.js'
4
+ import { renderToolSchema } from '../../registry/tool/schema.js'
3
5
  import type {
6
+ AuthConfig,
7
+ AuthType,
4
8
  ConnectorConfig,
9
+ ConnectorDefinition,
5
10
  ConnectorEventListener,
6
11
  ConnectorExecuteParams,
7
12
  ConnectorExecuteResult,
8
13
  ConnectorInstance,
9
14
  ConnectorLifecycleEvent,
15
+ ConnectorMethod,
16
+ ConnectorOperationOptions,
10
17
  ConnectorStatus,
18
+ ConnectorTrigger,
11
19
  } from '../../types/connector/index.js'
12
20
  import type { ConnectorId, ConnectorInstanceId } from '../../types/ids/index.js'
13
21
  import { toErrorMessage } from '../../utils/error.js'
@@ -28,16 +36,159 @@ export interface ConnectorManagerConfig {
28
36
  log?: Logger
29
37
  }
30
38
 
39
+ type Settled<T> = { kind: 'fulfilled'; value: T } | { kind: 'rejected'; reason: unknown }
40
+
41
+ interface InstanceAdmission {
42
+ readonly connectorId: ConnectorId
43
+ readonly definition: ConnectorDefinition
44
+ readonly supportedAuth?: ReadonlySet<AuthType>
45
+ }
46
+
47
+ function copyAuth(auth: AuthConfig): AuthConfig {
48
+ return {
49
+ type: auth.type,
50
+ ...(auth.credentials ? { credentials: { ...auth.credentials } } : {}),
51
+ }
52
+ }
53
+
54
+ function sameAuthPolicy(
55
+ registered: readonly AuthType[] | undefined,
56
+ implementation: readonly AuthType[] | undefined,
57
+ ): boolean {
58
+ if (registered === undefined || implementation === undefined) {
59
+ return registered === implementation
60
+ }
61
+ const expected = new Set(registered)
62
+ const actual = new Set(implementation)
63
+ return expected.size === actual.size && [...expected].every((authType) => actual.has(authType))
64
+ }
65
+
66
+ function sameMethodSurface(
67
+ registered: readonly ConnectorMethod[],
68
+ implementation: readonly ConnectorMethod[],
69
+ ): boolean {
70
+ const expected = new Set(registered.map((method) => method.name))
71
+ const actual = new Set(implementation.map((method) => method.name))
72
+ return (
73
+ expected.size === registered.length &&
74
+ actual.size === implementation.length &&
75
+ expected.size === actual.size &&
76
+ [...expected].every((name) => actual.has(name))
77
+ )
78
+ }
79
+
80
+ function copyMethod(method: ConnectorMethod): ConnectorMethod {
81
+ return { ...method }
82
+ }
83
+
84
+ function copyTrigger(trigger: ConnectorTrigger): ConnectorTrigger {
85
+ return { ...trigger }
86
+ }
87
+
88
+ function copyDefinition(definition: ConnectorDefinition): ConnectorDefinition {
89
+ return {
90
+ ...definition,
91
+ ...(definition.supportedAuth ? { supportedAuth: [...definition.supportedAuth] } : {}),
92
+ methods: definition.methods.map(copyMethod),
93
+ ...(definition.triggers ? { triggers: definition.triggers.map(copyTrigger) } : {}),
94
+ }
95
+ }
96
+
97
+ function assertMethodSchemas(definition: ConnectorDefinition): void {
98
+ for (const method of definition.methods) {
99
+ try {
100
+ renderToolSchema(method.inputSchema)
101
+ if (method.outputSchema) renderToolSchema(method.outputSchema)
102
+ } catch (err) {
103
+ throw new Error(
104
+ `Connector method "${method.name}" on "${definition.id}" has a schema that cannot be projected: ${toErrorMessage(err)}`,
105
+ )
106
+ }
107
+ }
108
+ }
109
+
110
+ function formatSchemaIssues(issues: readonly { path: PropertyKey[]; message: string }[]): string {
111
+ return issues.map((issue) => `${issue.path.join('.') || '(root)'}: ${issue.message}`).join('; ')
112
+ }
113
+
114
+ function formatOutputSchemaIssues(
115
+ issues: readonly { path: PropertyKey[]; code: string }[],
116
+ ): string {
117
+ return issues.map((issue) => `${issue.path.join('.') || '(root)'}: ${issue.code}`).join('; ')
118
+ }
119
+
120
+ function notStartedFailure(error: string): ConnectorExecuteResult {
121
+ return {
122
+ success: false,
123
+ output: null,
124
+ error,
125
+ durationMs: 0,
126
+ metadata: { remoteOutcome: 'not_started', retrySafety: 'safe' },
127
+ }
128
+ }
129
+
130
+ async function settleWithSignal<T>(
131
+ operation: Promise<T>,
132
+ signal: AbortSignal | undefined,
133
+ acceptAfterAbort?: (value: T) => boolean,
134
+ ): Promise<T> {
135
+ if (!signal) return operation
136
+ const settled: Promise<Settled<T>> = operation.then(
137
+ (value) => ({ kind: 'fulfilled', value }),
138
+ (reason) => ({ kind: 'rejected', reason }),
139
+ )
140
+ let onAbort: (() => void) | undefined
141
+ const aborted = new Promise<{ kind: 'aborted' }>((resolve) => {
142
+ onAbort = () => resolve({ kind: 'aborted' })
143
+ if (signal.aborted) {
144
+ onAbort()
145
+ return
146
+ }
147
+ signal.addEventListener('abort', onAbort, { once: true })
148
+ })
149
+
150
+ try {
151
+ const winner = await Promise.race([settled, aborted])
152
+ if (winner.kind !== 'aborted') {
153
+ if (winner.kind === 'rejected') throw winner.reason
154
+ if (signal.aborted && !acceptAfterAbort?.(winner.value)) throw signal.reason
155
+ return winner.value
156
+ }
157
+
158
+ // A cooperative connector can preserve richer phase information (for
159
+ // example response headers received but body unavailable). Give its abort
160
+ // continuation one event-loop turn before abandoning an uncooperative
161
+ // custom connector with the caller's reason.
162
+ let timer: ReturnType<typeof setTimeout> | undefined
163
+ const grace = await Promise.race([
164
+ settled,
165
+ new Promise<{ kind: 'grace_elapsed' }>((resolve) => {
166
+ timer = setTimeout(() => resolve({ kind: 'grace_elapsed' }), 0)
167
+ }),
168
+ ]).finally(() => {
169
+ if (timer !== undefined) clearTimeout(timer)
170
+ })
171
+ if (grace.kind === 'fulfilled' && acceptAfterAbort?.(grace.value)) return grace.value
172
+ if (grace.kind === 'rejected') throw grace.reason
173
+ throw signal.reason
174
+ } finally {
175
+ if (onAbort) signal.removeEventListener('abort', onAbort)
176
+ }
177
+ }
178
+
31
179
  export class ConnectorManager {
32
180
  private registry: ConnectorRegistry
33
181
  private instances: Map<ConnectorInstanceId, ConnectorInstance> = new Map()
34
182
  private liveConnectors: Map<ConnectorInstanceId, BaseConnector<unknown>> = new Map()
183
+ private admissions: Map<ConnectorInstanceId, InstanceAdmission> = new Map()
35
184
  private listeners: ConnectorEventListener[] = []
36
185
  private log: Logger
37
186
 
38
187
  constructor(config: ConnectorManagerConfig) {
39
188
  this.registry = config.registry
40
- this.log = resolveLogger(config.log).child({ [SCOPE_ATTRIBUTE]: 'manager/connector' })
189
+ this.log = resolveLogger(config.log).child({
190
+ [SCOPE_ATTRIBUTE]: 'manager/connector',
191
+ })
41
192
  }
42
193
 
43
194
  on(listener: ConnectorEventListener): void {
@@ -54,6 +205,31 @@ export class ConnectorManager {
54
205
  connector: BaseConnector<unknown>,
55
206
  ): Promise<ConnectorInstance> {
56
207
  const definition = this.registry.getOrThrow(config.connectorId)
208
+ if (connector.id !== config.connectorId) {
209
+ throw new Error(
210
+ `Connector implementation id "${connector.id}" does not match requested definition "${config.connectorId}"`,
211
+ )
212
+ }
213
+ if (!sameAuthPolicy(definition.supportedAuth, connector.supportedAuth)) {
214
+ throw new Error(
215
+ `Connector implementation "${connector.id}" does not match its registered auth policy`,
216
+ )
217
+ }
218
+ assertMethodSchemas(definition)
219
+ if (!sameMethodSurface(definition.methods, connector.methods)) {
220
+ throw new Error(
221
+ `Connector implementation "${connector.id}" does not match its registered method surface`,
222
+ )
223
+ }
224
+ const capturedDefinition = copyDefinition(definition)
225
+ const admission: InstanceAdmission = {
226
+ connectorId: config.connectorId,
227
+ definition: capturedDefinition,
228
+ ...(capturedDefinition.supportedAuth
229
+ ? { supportedAuth: new Set(capturedDefinition.supportedAuth) }
230
+ : {}),
231
+ }
232
+ if (config.auth) this.requireSupportedAuth(admission, config.connectorId, config.auth.type)
57
233
 
58
234
  const parsedConfig = definition.configSchema.safeParse(config.options ?? {})
59
235
  if (!parsedConfig.success) {
@@ -74,7 +250,12 @@ export class ConnectorManager {
74
250
 
75
251
  this.instances.set(instanceId, instance)
76
252
  this.liveConnectors.set(instanceId, connector)
77
- this.emit({ type: 'instance_created', instanceId, connectorId: config.connectorId })
253
+ this.admissions.set(instanceId, admission)
254
+ this.emit({
255
+ type: 'instance_created',
256
+ instanceId,
257
+ connectorId: config.connectorId,
258
+ })
78
259
  this.log.info('Connector instance created', {
79
260
  'namzu.connector.instance_id': instanceId,
80
261
  'namzu.connector.id': config.connectorId,
@@ -86,18 +267,24 @@ export class ConnectorManager {
86
267
  async connect(instanceId: ConnectorInstanceId): Promise<void> {
87
268
  const instance = this.getInstanceOrThrow(instanceId)
88
269
  const connector = this.getConnectorOrThrow(instanceId)
89
-
90
- this.updateStatus(instanceId, 'connecting')
91
- this.emit({ type: 'instance_connecting', instanceId })
270
+ const admission = this.getAdmissionOrThrow(instanceId)
92
271
 
93
272
  try {
94
- const definition = this.registry.getOrThrow(instance.connectorId)
95
- const parsedConfig = definition.configSchema.parse(instance.config.options ?? {})
273
+ const parsedConfig = admission.definition.configSchema.parse(instance.config.options ?? {})
274
+ this.requireSupportedAuth(
275
+ admission,
276
+ admission.connectorId,
277
+ instance.config.auth?.type ?? 'none',
278
+ )
279
+ this.updateStatus(instanceId, 'connecting')
280
+ this.emit({ type: 'instance_connecting', instanceId })
96
281
  await connector.connect(parsedConfig, instance.config.auth)
97
282
  this.updateStatus(instanceId, 'connected')
98
283
  instance.connectedAt = Date.now()
99
284
  this.emit({ type: 'instance_connected', instanceId })
100
- this.log.info('Connector connected', { 'namzu.connector.instance_id': instanceId })
285
+ this.log.info('Connector connected', {
286
+ 'namzu.connector.instance_id': instanceId,
287
+ })
101
288
  } catch (err) {
102
289
  const message = toErrorMessage(err)
103
290
  this.updateStatus(instanceId, 'error', message)
@@ -117,7 +304,9 @@ export class ConnectorManager {
117
304
  await connector.disconnect()
118
305
  this.updateStatus(instanceId, 'disconnected')
119
306
  this.emit({ type: 'instance_disconnected', instanceId })
120
- this.log.info('Connector disconnected', { 'namzu.connector.instance_id': instanceId })
307
+ this.log.info('Connector disconnected', {
308
+ 'namzu.connector.instance_id': instanceId,
309
+ })
121
310
  } catch (err) {
122
311
  const message = toErrorMessage(err)
123
312
  this.log.error('Connector disconnect failed', {
@@ -128,10 +317,14 @@ export class ConnectorManager {
128
317
  }
129
318
  }
130
319
 
131
- async healthCheck(instanceId: ConnectorInstanceId): Promise<boolean> {
320
+ async healthCheck(
321
+ instanceId: ConnectorInstanceId,
322
+ options?: ConnectorOperationOptions,
323
+ ): Promise<boolean> {
132
324
  const connector = this.getConnectorOrThrow(instanceId)
325
+ if (options?.signal?.aborted) return false
133
326
  try {
134
- return await connector.healthCheck()
327
+ return await settleWithSignal(connector.healthCheck(options), options?.signal)
135
328
  } catch {
136
329
  return false
137
330
  }
@@ -140,29 +333,119 @@ export class ConnectorManager {
140
333
  async execute(params: ConnectorExecuteParams): Promise<ConnectorExecuteResult> {
141
334
  const instance = this.getInstanceOrThrow(params.instanceId)
142
335
  const connector = this.getConnectorOrThrow(params.instanceId)
336
+ const admission = this.getAdmissionOrThrow(params.instanceId)
337
+ if (params.signal?.aborted) {
338
+ return notStartedFailure(
339
+ `Connector execution was cancelled before it started: ${toErrorMessage(params.signal.reason)}. No remote request was started; retry is safe.`,
340
+ )
341
+ }
342
+
343
+ const method = admission.definition.methods.find(
344
+ (candidate) => candidate.name === params.method,
345
+ )
346
+ if (!method) {
347
+ const available = admission.definition.methods.map((candidate) => candidate.name).join(', ')
348
+ return notStartedFailure(
349
+ `Connector method "${params.method}" is not registered for "${admission.connectorId}". Available: ${available || '(none)'}. No remote request was started; retry is safe after correcting the method.`,
350
+ )
351
+ }
143
352
 
144
353
  if (instance.status !== 'connected') {
145
- return {
146
- success: false,
147
- output: null,
148
- error: `Connector "${params.instanceId}" is not connected (status: ${instance.status})`,
149
- durationMs: 0,
354
+ return notStartedFailure(
355
+ `Connector "${params.instanceId}" is not connected (status: ${instance.status}). No remote request was started; retry is safe after connecting it.`,
356
+ )
357
+ }
358
+
359
+ let canonicalInput: unknown
360
+ try {
361
+ const parsedInput = await settleWithSignal(
362
+ method.inputSchema.safeParseAsync(params.input),
363
+ params.signal,
364
+ )
365
+ if (!parsedInput.success) {
366
+ return notStartedFailure(
367
+ `Invalid input for connector method "${params.method}": ${formatSchemaIssues(parsedInput.error.issues)}. No remote request was started; retry is safe after correcting the input.`,
368
+ )
369
+ }
370
+ canonicalInput = parsedInput.data
371
+ } catch (err) {
372
+ if (params.signal?.aborted) {
373
+ return notStartedFailure(
374
+ `Connector execution was cancelled during input validation: ${toErrorMessage(params.signal.reason)}. No remote request was started; retry is safe.`,
375
+ )
150
376
  }
377
+ return notStartedFailure(
378
+ `Input validation failed for connector method "${params.method}": ${toErrorMessage(err)}. No remote request was started; retry is safe after correcting the connector schema or input.`,
379
+ )
151
380
  }
152
381
 
153
- this.emit({ type: 'action_executing', instanceId: params.instanceId, method: params.method })
382
+ if (params.signal?.aborted) {
383
+ return notStartedFailure(
384
+ `Connector execution was cancelled before it started: ${toErrorMessage(params.signal.reason)}. No remote request was started; retry is safe.`,
385
+ )
386
+ }
387
+
388
+ this.emit({
389
+ type: 'action_executing',
390
+ instanceId: params.instanceId,
391
+ method: params.method,
392
+ })
154
393
  const start = performance.now()
155
394
  try {
156
- const result = await connector.execute(params.method, params.input)
395
+ const result = await settleWithSignal(
396
+ connector.execute(
397
+ params.method,
398
+ canonicalInput,
399
+ managedConnectorOptions({ signal: params.signal }),
400
+ ),
401
+ params.signal,
402
+ (result) =>
403
+ result.metadata?.remoteOutcome === 'response_received' ||
404
+ (!result.success && result.metadata?.remoteOutcome !== undefined),
405
+ )
157
406
  instance.lastUsedAt = Date.now()
407
+ let published = result
408
+ if (result.success && method.outputSchema) {
409
+ try {
410
+ const parsedOutput = await settleWithSignal(
411
+ method.outputSchema.safeParseAsync(result.output),
412
+ params.signal,
413
+ )
414
+ published = parsedOutput.success
415
+ ? { ...result, output: parsedOutput.data }
416
+ : {
417
+ success: false,
418
+ output: null,
419
+ error: `Connector method "${params.method}" returned output that violates its registered schema: ${formatOutputSchemaIssues(parsedOutput.error.issues)}. A remote response was received; do not automatically retry.`,
420
+ durationMs: result.durationMs,
421
+ metadata: {
422
+ ...result.metadata,
423
+ remoteOutcome: 'response_received',
424
+ retrySafety: 'unsafe',
425
+ },
426
+ }
427
+ } catch {
428
+ published = {
429
+ success: false,
430
+ output: null,
431
+ error: `Connector method "${params.method}" output validation could not establish the registered contract. A remote response was received; do not automatically retry.`,
432
+ durationMs: result.durationMs,
433
+ metadata: {
434
+ ...result.metadata,
435
+ remoteOutcome: 'response_received',
436
+ retrySafety: 'unsafe',
437
+ },
438
+ }
439
+ }
440
+ }
158
441
  this.emit({
159
442
  type: 'action_completed',
160
443
  instanceId: params.instanceId,
161
444
  method: params.method,
162
- success: result.success,
163
- durationMs: result.durationMs,
445
+ success: published.success,
446
+ durationMs: published.durationMs,
164
447
  })
165
- return result
448
+ return published
166
449
  } catch (err) {
167
450
  const message = toErrorMessage(err)
168
451
  const durationMs = Math.round(performance.now() - start)
@@ -176,8 +459,18 @@ export class ConnectorManager {
176
459
  return {
177
460
  success: false,
178
461
  output: null,
179
- error: `Execution failed: ${message}`,
462
+ error: params.signal?.aborted
463
+ ? `Connector execution was interrupted: ${message}. The remote outcome is unknown; do not automatically retry.`
464
+ : `Execution failed: ${message}`,
180
465
  durationMs,
466
+ ...(params.signal?.aborted
467
+ ? {
468
+ metadata: {
469
+ remoteOutcome: 'unknown' as const,
470
+ retrySafety: 'unknown' as const,
471
+ },
472
+ }
473
+ : {}),
181
474
  }
182
475
  }
183
476
  }
@@ -197,8 +490,11 @@ export class ConnectorManager {
197
490
 
198
491
  this.instances.delete(instanceId)
199
492
  this.liveConnectors.delete(instanceId)
493
+ this.admissions.delete(instanceId)
200
494
  this.emit({ type: 'instance_removed', instanceId })
201
- this.log.info('Connector instance removed', { 'namzu.connector.instance_id': instanceId })
495
+ this.log.info('Connector instance removed', {
496
+ 'namzu.connector.instance_id': instanceId,
497
+ })
202
498
  }
203
499
 
204
500
  getRegistry(): ConnectorRegistry {
@@ -213,12 +509,35 @@ export class ConnectorManager {
213
509
  return this.liveConnectors.get(instanceId)
214
510
  }
215
511
 
512
+ getInstanceConnectorId(instanceId: ConnectorInstanceId): ConnectorId {
513
+ return this.getAdmissionOrThrow(instanceId).connectorId
514
+ }
515
+
516
+ getInstanceDefinition(instanceId: ConnectorInstanceId): ConnectorDefinition {
517
+ return copyDefinition(this.getAdmissionOrThrow(instanceId).definition)
518
+ }
519
+
520
+ supportsAuth(instanceId: ConnectorInstanceId, authType: AuthType): boolean {
521
+ const supported = this.getAdmissionOrThrow(instanceId).supportedAuth
522
+ return supported === undefined || supported.has(authType)
523
+ }
524
+
525
+ /** Validate before mutating the live instance's effective credential. */
526
+ setInstanceAuth(instanceId: ConnectorInstanceId, auth: AuthConfig): void {
527
+ const instance = this.getInstanceOrThrow(instanceId)
528
+ const admission = this.getAdmissionOrThrow(instanceId)
529
+ this.requireSupportedAuth(admission, admission.connectorId, auth.type)
530
+ instance.config.auth = copyAuth(auth)
531
+ }
532
+
216
533
  listInstances(): ConnectorInstance[] {
217
534
  return Array.from(this.instances.values())
218
535
  }
219
536
 
220
537
  listInstancesByConnector(connectorId: ConnectorId): ConnectorInstance[] {
221
- return this.listInstances().filter((i) => i.connectorId === connectorId)
538
+ return this.listInstances().filter(
539
+ (instance) => this.getAdmissionOrThrow(instance.id).connectorId === connectorId,
540
+ )
222
541
  }
223
542
 
224
543
  listConnectedInstances(): ConnectorInstance[] {
@@ -246,6 +565,27 @@ export class ConnectorManager {
246
565
  return connector
247
566
  }
248
567
 
568
+ private getAdmissionOrThrow(instanceId: ConnectorInstanceId): InstanceAdmission {
569
+ const admission = this.admissions.get(instanceId)
570
+ if (!admission) {
571
+ throw new Error(`Connector admission policy not found for instance: "${instanceId}"`)
572
+ }
573
+ return admission
574
+ }
575
+
576
+ private requireSupportedAuth(
577
+ admission: InstanceAdmission,
578
+ connectorId: ConnectorId,
579
+ authType: AuthType,
580
+ ): void {
581
+ const supported = admission.supportedAuth
582
+ if (supported === undefined || supported.has(authType)) return
583
+ const available = [...supported].join(', ') || 'none'
584
+ throw new Error(
585
+ `Connector "${connectorId}" does not support auth scheme "${authType}". Supported: ${available}`,
586
+ )
587
+ }
588
+
249
589
  private updateStatus(
250
590
  instanceId: ConnectorInstanceId,
251
591
  status: ConnectorStatus,
@@ -2,12 +2,15 @@ import type { BaseConnector } from '../../connector/BaseConnector.js'
2
2
  import { NAMZU } from '../../constants/telemetry/index.js'
3
3
  import type { ConnectorRegistry } from '../../registry/connector/definitions.js'
4
4
  import type {
5
+ AuthConfig,
6
+ AuthType,
5
7
  ConnectorConfig,
6
8
  ConnectorEventListener,
7
9
  ConnectorExecuteParams,
8
10
  ConnectorExecuteResult,
9
11
  ConnectorInstance,
10
12
  ConnectorLifecycleEvent,
13
+ ConnectorOperationOptions,
11
14
  CredentialVault,
12
15
  TenantDescriptor,
13
16
  TenantRateLimitConfig,
@@ -63,17 +66,24 @@ export class TenantConnectorManager {
63
66
  this.registry = config.registry
64
67
  this.credentialVault = config.credentialVault
65
68
  this.defaultRateLimit = config.defaultRateLimit
66
- this.log = resolveLogger(config.log).child({ [SCOPE_ATTRIBUTE]: 'manager/connector' })
69
+ this.log = resolveLogger(config.log).child({
70
+ [SCOPE_ATTRIBUTE]: 'manager/connector',
71
+ })
67
72
  }
68
73
 
69
74
  registerTenant(descriptor: TenantDescriptor, rateLimit?: TenantRateLimitConfig): void {
70
75
  if (this.tenants.has(descriptor.id)) {
71
- this.log.warn('Tenant already registered, skipping', { [NAMZU.TENANT_ID]: descriptor.id })
76
+ this.log.warn('Tenant already registered, skipping', {
77
+ [NAMZU.TENANT_ID]: descriptor.id,
78
+ })
72
79
  return
73
80
  }
74
81
 
75
82
  const tenantLog = this.log.child({ [NAMZU.TENANT_ID]: descriptor.id })
76
- const manager = new ConnectorManager({ registry: this.registry, log: tenantLog })
83
+ const manager = new ConnectorManager({
84
+ registry: this.registry,
85
+ log: tenantLog,
86
+ })
77
87
 
78
88
  manager.on((event) => {
79
89
  this.emitTenantEvent(descriptor.id, event)
@@ -150,18 +160,19 @@ export class TenantConnectorManager {
150
160
  if (this.credentialVault) {
151
161
  const instance = state.manager.getInstance(instanceId)
152
162
  if (instance && !instance.config.auth) {
153
- const creds = await this.credentialVault.list(tenantId, instance.connectorId)
154
- const credId = creds[0]?.id
155
- if (credId) {
156
- const auth = await this.credentialVault.retrieve(credId)
157
- if (auth) {
158
- instance.config.auth = auth
159
- this.log.info('Auto-resolved credential for instance', {
160
- [NAMZU.CREDENTIAL_ID]: credId,
161
- 'namzu.connector.instance_id': instanceId,
162
- [NAMZU.TENANT_ID]: tenantId,
163
- })
164
- }
163
+ const connectorId = state.manager.getInstanceConnectorId(instanceId)
164
+ const creds = await this.credentialVault.list(tenantId, connectorId)
165
+ for (const ref of creds) {
166
+ if (!state.manager.supportsAuth(instanceId, ref.authType)) continue
167
+ const auth = await this.credentialVault.retrieveForScope(tenantId, connectorId, ref.id)
168
+ if (!auth || !state.manager.supportsAuth(instanceId, auth.type)) continue
169
+ state.manager.setInstanceAuth(instanceId, auth)
170
+ this.log.info('Auto-resolved credential for instance', {
171
+ [NAMZU.CREDENTIAL_ID]: ref.id,
172
+ 'namzu.connector.instance_id': instanceId,
173
+ [NAMZU.TENANT_ID]: tenantId,
174
+ })
175
+ break
165
176
  }
166
177
  }
167
178
  }
@@ -183,13 +194,16 @@ export class TenantConnectorManager {
183
194
  if (!instance) {
184
195
  throw new Error(`Connector instance not found: "${instanceId}"`)
185
196
  }
197
+ const connectorId = state.manager.getInstanceConnectorId(instanceId)
186
198
 
187
- const auth = await this.credentialVault.retrieve(credentialId)
199
+ const auth = await this.credentialVault.retrieveForScope(tenantId, connectorId, credentialId)
188
200
  if (!auth) {
189
- throw new Error(`Credential not found: "${credentialId}"`)
201
+ throw new Error(
202
+ `Credential "${credentialId}" is unavailable for tenant "${tenantId}" and connector "${connectorId}"`,
203
+ )
190
204
  }
191
205
 
192
- instance.config.auth = auth
206
+ state.manager.setInstanceAuth(instanceId, auth)
193
207
  this.log.info('Credential applied to instance', {
194
208
  [NAMZU.CREDENTIAL_ID]: credentialId,
195
209
  'namzu.connector.instance_id': instanceId,
@@ -202,12 +216,13 @@ export class TenantConnectorManager {
202
216
  tenantId: TenantId,
203
217
  connectorId: ConnectorId,
204
218
  label: string,
205
- auth: import('../../types/connector/index.js').AuthConfig,
219
+ auth: AuthConfig,
206
220
  ): Promise<import('../../types/connector/index.js').CredentialRef> {
207
221
  if (!this.credentialVault) {
208
222
  throw new Error('No credential vault configured on TenantConnectorManager')
209
223
  }
210
224
  this.getTenantOrThrow(tenantId)
225
+ this.requireDefinitionSupportsAuth(connectorId, auth.type)
211
226
  return this.credentialVault.store(tenantId, connectorId, label, auth)
212
227
  }
213
228
 
@@ -222,11 +237,12 @@ export class TenantConnectorManager {
222
237
  return this.credentialVault.list(tenantId, connectorId)
223
238
  }
224
239
 
225
- async revokeCredential(credentialId: CredentialId): Promise<boolean> {
240
+ async revokeCredential(tenantId: TenantId, credentialId: CredentialId): Promise<boolean> {
226
241
  if (!this.credentialVault) {
227
242
  return false
228
243
  }
229
- return this.credentialVault.revoke(credentialId)
244
+ this.getTenantOrThrow(tenantId)
245
+ return this.credentialVault.revokeForTenant(tenantId, credentialId)
230
246
  }
231
247
 
232
248
  async disconnect(tenantId: TenantId, instanceId: ConnectorInstanceId): Promise<void> {
@@ -239,6 +255,11 @@ export class TenantConnectorManager {
239
255
  params: ConnectorExecuteParams,
240
256
  ): Promise<ConnectorExecuteResult> {
241
257
  const state = this.getTenantOrThrow(tenantId)
258
+ // A caller that has already withdrawn authority did not attempt a remote
259
+ // operation and must not spend the tenant's next admission slot. Delegate
260
+ // first so the ordinary manager still validates the instance and returns
261
+ // the canonical not-started phase result.
262
+ if (params.signal?.aborted) return state.manager.execute(params)
242
263
 
243
264
  if (!this.checkRateLimit(state, params.instanceId)) {
244
265
  return {
@@ -252,9 +273,13 @@ export class TenantConnectorManager {
252
273
  return state.manager.execute(params)
253
274
  }
254
275
 
255
- async healthCheck(tenantId: TenantId, instanceId: ConnectorInstanceId): Promise<boolean> {
276
+ async healthCheck(
277
+ tenantId: TenantId,
278
+ instanceId: ConnectorInstanceId,
279
+ options?: ConnectorOperationOptions,
280
+ ): Promise<boolean> {
256
281
  const state = this.getTenantOrThrow(tenantId)
257
- return state.manager.healthCheck(instanceId)
282
+ return state.manager.healthCheck(instanceId, options)
258
283
  }
259
284
 
260
285
  async removeInstance(tenantId: TenantId, instanceId: ConnectorInstanceId): Promise<void> {
@@ -317,4 +342,12 @@ export class TenantConnectorManager {
317
342
  }
318
343
  return state
319
344
  }
345
+
346
+ private requireDefinitionSupportsAuth(connectorId: ConnectorId, authType: AuthType): void {
347
+ const supported = this.registry.getOrThrow(connectorId).supportedAuth
348
+ if (supported === undefined || supported.includes(authType)) return
349
+ throw new Error(
350
+ `Connector "${connectorId}" does not support auth scheme "${authType}". Supported: ${supported.join(', ') || 'none'}`,
351
+ )
352
+ }
320
353
  }