@stigmer/cli 3.35.0 → 3.36.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 (514) hide show
  1. package/auth/auth0.d.ts.map +1 -1
  2. package/auth/auth0.js.map +1 -1
  3. package/auth/callback-server.d.ts.map +1 -1
  4. package/auth/callback-server.js.map +1 -1
  5. package/auth/index.d.ts.map +1 -1
  6. package/auth/index.js.map +1 -1
  7. package/auth/login.d.ts.map +1 -1
  8. package/auth/login.js.map +1 -1
  9. package/auth/pages.d.ts.map +1 -1
  10. package/auth/pages.js.map +1 -1
  11. package/auth/pkce.d.ts.map +1 -1
  12. package/auth/pkce.js.map +1 -1
  13. package/auth/token.d.ts.map +1 -1
  14. package/auth/token.js.map +1 -1
  15. package/backend.d.ts.map +1 -1
  16. package/backend.js.map +1 -1
  17. package/cli/stigmer.d.ts.map +1 -1
  18. package/cli/stigmer.js.map +1 -1
  19. package/client/client.d.ts.map +1 -1
  20. package/client/client.js.map +1 -1
  21. package/client/index.d.ts.map +1 -1
  22. package/client/index.js.map +1 -1
  23. package/commands/agent-exec-flags.d.ts.map +1 -1
  24. package/commands/agent-exec-flags.js.map +1 -1
  25. package/commands/apikey/duration.d.ts.map +1 -1
  26. package/commands/apikey/duration.js.map +1 -1
  27. package/commands/apikey/index.d.ts.map +1 -1
  28. package/commands/apikey/index.js.map +1 -1
  29. package/commands/apply.d.ts.map +1 -1
  30. package/commands/apply.js.map +1 -1
  31. package/commands/auth/index.d.ts.map +1 -1
  32. package/commands/auth/index.js.map +1 -1
  33. package/commands/auth/login.d.ts.map +1 -1
  34. package/commands/auth/login.js.map +1 -1
  35. package/commands/auth/whoami.d.ts.map +1 -1
  36. package/commands/auth/whoami.js.map +1 -1
  37. package/commands/bootstrap.d.ts.map +1 -1
  38. package/commands/bootstrap.js.map +1 -1
  39. package/commands/completion.d.ts.map +1 -1
  40. package/commands/completion.js.map +1 -1
  41. package/commands/config/backend.d.ts.map +1 -1
  42. package/commands/config/backend.js.map +1 -1
  43. package/commands/config/context.d.ts.map +1 -1
  44. package/commands/config/context.js.map +1 -1
  45. package/commands/config/index.d.ts.map +1 -1
  46. package/commands/config/index.js.map +1 -1
  47. package/commands/config/kv.d.ts.map +1 -1
  48. package/commands/config/kv.js.map +1 -1
  49. package/commands/connect.d.ts.map +1 -1
  50. package/commands/connect.js.map +1 -1
  51. package/commands/delete.d.ts.map +1 -1
  52. package/commands/delete.js.map +1 -1
  53. package/commands/diff.d.ts.map +1 -1
  54. package/commands/diff.js.map +1 -1
  55. package/commands/down.d.ts.map +1 -1
  56. package/commands/down.js.map +1 -1
  57. package/commands/download.d.ts.map +1 -1
  58. package/commands/download.js.map +1 -1
  59. package/commands/execution/approve.d.ts.map +1 -1
  60. package/commands/execution/approve.js.map +1 -1
  61. package/commands/execution/control.d.ts.map +1 -1
  62. package/commands/execution/control.js.map +1 -1
  63. package/commands/execution/index.d.ts.map +1 -1
  64. package/commands/execution/index.js.map +1 -1
  65. package/commands/execution/logs.d.ts.map +1 -1
  66. package/commands/execution/logs.js.map +1 -1
  67. package/commands/execution/trace.d.ts.map +1 -1
  68. package/commands/execution/trace.js.map +1 -1
  69. package/commands/get.d.ts.map +1 -1
  70. package/commands/get.js.map +1 -1
  71. package/commands/install.d.ts.map +1 -1
  72. package/commands/install.js.map +1 -1
  73. package/commands/internal-daemon.d.ts.map +1 -1
  74. package/commands/internal-daemon.js.map +1 -1
  75. package/commands/list.d.ts.map +1 -1
  76. package/commands/list.js.map +1 -1
  77. package/commands/logs.d.ts.map +1 -1
  78. package/commands/logs.js.map +1 -1
  79. package/commands/marketplace.d.ts.map +1 -1
  80. package/commands/marketplace.js.map +1 -1
  81. package/commands/mcp-server.d.ts.map +1 -1
  82. package/commands/mcp-server.js.map +1 -1
  83. package/commands/push.d.ts.map +1 -1
  84. package/commands/push.js.map +1 -1
  85. package/commands/reset.d.ts.map +1 -1
  86. package/commands/reset.js.map +1 -1
  87. package/commands/resume.d.ts.map +1 -1
  88. package/commands/resume.js.map +1 -1
  89. package/commands/run.d.ts.map +1 -1
  90. package/commands/run.js.map +1 -1
  91. package/commands/schedule.d.ts.map +1 -1
  92. package/commands/schedule.js.map +1 -1
  93. package/commands/search.d.ts.map +1 -1
  94. package/commands/search.js.map +1 -1
  95. package/commands/setup.d.ts.map +1 -1
  96. package/commands/setup.js.map +1 -1
  97. package/commands/share.d.ts.map +1 -1
  98. package/commands/share.js.map +1 -1
  99. package/commands/shared.d.ts.map +1 -1
  100. package/commands/shared.js.map +1 -1
  101. package/commands/status.d.ts.map +1 -1
  102. package/commands/status.js.map +1 -1
  103. package/commands/tag.d.ts.map +1 -1
  104. package/commands/tag.js.map +1 -1
  105. package/commands/up.d.ts.map +1 -1
  106. package/commands/up.js.map +1 -1
  107. package/commands/usage.d.ts.map +1 -1
  108. package/commands/usage.js.map +1 -1
  109. package/commands/validate.d.ts.map +1 -1
  110. package/commands/validate.js.map +1 -1
  111. package/commands/version.d.ts.map +1 -1
  112. package/commands/version.js.map +1 -1
  113. package/config/config.d.ts.map +1 -1
  114. package/config/config.js.map +1 -1
  115. package/config/index.d.ts.map +1 -1
  116. package/config/index.js.map +1 -1
  117. package/config/keys.d.ts.map +1 -1
  118. package/config/keys.js.map +1 -1
  119. package/config/paths.d.ts.map +1 -1
  120. package/config/paths.js.map +1 -1
  121. package/config/resolve.d.ts.map +1 -1
  122. package/config/resolve.js.map +1 -1
  123. package/errors/classify.d.ts.map +1 -1
  124. package/errors/classify.js.map +1 -1
  125. package/errors/cli-exit-error.d.ts.map +1 -1
  126. package/errors/cli-exit-error.js.map +1 -1
  127. package/errors/exit-codes.d.ts.map +1 -1
  128. package/errors/exit-codes.js.map +1 -1
  129. package/errors/handle.d.ts.map +1 -1
  130. package/errors/handle.js.map +1 -1
  131. package/errors/index.d.ts.map +1 -1
  132. package/errors/index.js.map +1 -1
  133. package/errors/usage-error.d.ts.map +1 -1
  134. package/errors/usage-error.js.map +1 -1
  135. package/index.d.ts.map +1 -1
  136. package/index.js.map +1 -1
  137. package/local/artifact.d.ts.map +1 -1
  138. package/local/artifact.js.map +1 -1
  139. package/local/bootstrap.d.ts.map +1 -1
  140. package/local/bootstrap.js.map +1 -1
  141. package/local/constants.d.ts.map +1 -1
  142. package/local/constants.js.map +1 -1
  143. package/local/daemon/components.d.ts.map +1 -1
  144. package/local/daemon/components.js.map +1 -1
  145. package/local/daemon/env.d.ts.map +1 -1
  146. package/local/daemon/env.js.map +1 -1
  147. package/local/daemon/host.d.ts.map +1 -1
  148. package/local/daemon/host.js.map +1 -1
  149. package/local/daemon/index.d.ts.map +1 -1
  150. package/local/daemon/index.js.map +1 -1
  151. package/local/daemon/launch.d.ts.map +1 -1
  152. package/local/daemon/launch.js.map +1 -1
  153. package/local/daemon/process.d.ts.map +1 -1
  154. package/local/daemon/process.js.map +1 -1
  155. package/local/daemon/supervisor.d.ts.map +1 -1
  156. package/local/daemon/supervisor.js.map +1 -1
  157. package/local/daemon/types.d.ts.map +1 -1
  158. package/local/daemon/types.js.map +1 -1
  159. package/local/llm-config.d.ts.map +1 -1
  160. package/local/llm-config.js.map +1 -1
  161. package/local/logs/tail.d.ts.map +1 -1
  162. package/local/logs/tail.js.map +1 -1
  163. package/local/logs/view.d.ts.map +1 -1
  164. package/local/logs/view.js.map +1 -1
  165. package/local/net/tcp.d.ts.map +1 -1
  166. package/local/net/tcp.js.map +1 -1
  167. package/local/operator-config.d.ts.map +1 -1
  168. package/local/operator-config.js.map +1 -1
  169. package/local/paths.d.ts.map +1 -1
  170. package/local/paths.js.map +1 -1
  171. package/local/reset.d.ts.map +1 -1
  172. package/local/reset.js.map +1 -1
  173. package/local/runtime/index.d.ts.map +1 -1
  174. package/local/runtime/index.js.map +1 -1
  175. package/local/runtime/node.d.ts.map +1 -1
  176. package/local/runtime/node.js.map +1 -1
  177. package/local/runtime/runner.d.ts.map +1 -1
  178. package/local/runtime/runner.js.map +1 -1
  179. package/local/runtime/runtimes-install.d.ts.map +1 -1
  180. package/local/runtime/runtimes-install.js.map +1 -1
  181. package/local/runtime/server.d.ts.map +1 -1
  182. package/local/runtime/server.js.map +1 -1
  183. package/local/runtime/which.d.ts.map +1 -1
  184. package/local/runtime/which.js.map +1 -1
  185. package/local/setup/prompt.d.ts.map +1 -1
  186. package/local/setup/prompt.js.map +1 -1
  187. package/local/setup/wizard.d.ts.map +1 -1
  188. package/local/setup/wizard.js.map +1 -1
  189. package/local/state/health-state.d.ts.map +1 -1
  190. package/local/state/health-state.js.map +1 -1
  191. package/local/state/index.d.ts.map +1 -1
  192. package/local/state/index.js.map +1 -1
  193. package/local/state/lock.d.ts.map +1 -1
  194. package/local/state/lock.js.map +1 -1
  195. package/local/state/log-rotation.d.ts.map +1 -1
  196. package/local/state/log-rotation.js.map +1 -1
  197. package/local/state/pidfile.d.ts.map +1 -1
  198. package/local/state/pidfile.js.map +1 -1
  199. package/local/state/proc.d.ts.map +1 -1
  200. package/local/state/proc.js.map +1 -1
  201. package/local/state/startup-config.d.ts.map +1 -1
  202. package/local/state/startup-config.js.map +1 -1
  203. package/local/status.d.ts.map +1 -1
  204. package/local/status.js.map +1 -1
  205. package/local/temporal/download.d.ts.map +1 -1
  206. package/local/temporal/download.js.map +1 -1
  207. package/local/temporal/index.d.ts.map +1 -1
  208. package/local/temporal/index.js.map +1 -1
  209. package/local/temporal/inspect.d.ts.map +1 -1
  210. package/local/temporal/inspect.js.map +1 -1
  211. package/local/temporal/manager.d.ts.map +1 -1
  212. package/local/temporal/manager.js.map +1 -1
  213. package/local/temporal/supervisor.d.ts.map +1 -1
  214. package/local/temporal/supervisor.js.map +1 -1
  215. package/local/webconsole/index.d.ts.map +1 -1
  216. package/local/webconsole/index.js.map +1 -1
  217. package/logger.d.ts.map +1 -1
  218. package/logger.js.map +1 -1
  219. package/marketplace/config.d.ts.map +1 -1
  220. package/marketplace/config.js.map +1 -1
  221. package/marketplace/github.d.ts.map +1 -1
  222. package/marketplace/github.js.map +1 -1
  223. package/marketplace/index.d.ts.map +1 -1
  224. package/marketplace/index.js.map +1 -1
  225. package/marketplace/install.d.ts.map +1 -1
  226. package/marketplace/install.js.map +1 -1
  227. package/marketplace/materialize.d.ts.map +1 -1
  228. package/marketplace/materialize.js.map +1 -1
  229. package/marketplace/official.d.ts.map +1 -1
  230. package/marketplace/official.js.map +1 -1
  231. package/marketplace/read.d.ts.map +1 -1
  232. package/marketplace/read.js.map +1 -1
  233. package/marketplace/ref.d.ts.map +1 -1
  234. package/marketplace/ref.js.map +1 -1
  235. package/marketplace/render.d.ts.map +1 -1
  236. package/marketplace/render.js.map +1 -1
  237. package/output/command-result.d.ts.map +1 -1
  238. package/output/command-result.js.map +1 -1
  239. package/output/confirm.d.ts.map +1 -1
  240. package/output/confirm.js.map +1 -1
  241. package/output/format.d.ts.map +1 -1
  242. package/output/format.js.map +1 -1
  243. package/output/index.d.ts.map +1 -1
  244. package/output/index.js.map +1 -1
  245. package/output/ndjson.d.ts.map +1 -1
  246. package/output/ndjson.js.map +1 -1
  247. package/output/proto.d.ts.map +1 -1
  248. package/output/proto.js.map +1 -1
  249. package/output/style.d.ts.map +1 -1
  250. package/output/style.js.map +1 -1
  251. package/output/table.d.ts.map +1 -1
  252. package/output/table.js.map +1 -1
  253. package/package.json +7 -7
  254. package/program.d.ts.map +1 -1
  255. package/program.js.map +1 -1
  256. package/registry/aliases.d.ts.map +1 -1
  257. package/registry/aliases.js.map +1 -1
  258. package/registry/index.d.ts.map +1 -1
  259. package/registry/index.js.map +1 -1
  260. package/registry/metadata.d.ts.map +1 -1
  261. package/registry/metadata.js.map +1 -1
  262. package/registry/registry.d.ts.map +1 -1
  263. package/registry/registry.js.map +1 -1
  264. package/registry/verb-support.d.ts.map +1 -1
  265. package/registry/verb-support.js.map +1 -1
  266. package/registry/verbs.d.ts.map +1 -1
  267. package/registry/verbs.js.map +1 -1
  268. package/resources/apply/apply.d.ts.map +1 -1
  269. package/resources/apply/apply.js.map +1 -1
  270. package/resources/apply/discovery.d.ts.map +1 -1
  271. package/resources/apply/discovery.js.map +1 -1
  272. package/resources/apply/handlers.d.ts.map +1 -1
  273. package/resources/apply/handlers.js.map +1 -1
  274. package/resources/connect/connect.d.ts.map +1 -1
  275. package/resources/connect/connect.js.map +1 -1
  276. package/resources/connect/discover.d.ts.map +1 -1
  277. package/resources/connect/discover.js.map +1 -1
  278. package/resources/connect/display.d.ts.map +1 -1
  279. package/resources/connect/display.js.map +1 -1
  280. package/resources/connect/oauth.d.ts.map +1 -1
  281. package/resources/connect/oauth.js.map +1 -1
  282. package/resources/cursor-pages.d.ts.map +1 -1
  283. package/resources/cursor-pages.js.map +1 -1
  284. package/resources/delete.d.ts.map +1 -1
  285. package/resources/delete.js.map +1 -1
  286. package/resources/diff.d.ts.map +1 -1
  287. package/resources/diff.js.map +1 -1
  288. package/resources/documents.d.ts.map +1 -1
  289. package/resources/documents.js.map +1 -1
  290. package/resources/download.d.ts.map +1 -1
  291. package/resources/download.js.map +1 -1
  292. package/resources/execution-approve.d.ts.map +1 -1
  293. package/resources/execution-approve.js.map +1 -1
  294. package/resources/execution-control.d.ts.map +1 -1
  295. package/resources/execution-control.js.map +1 -1
  296. package/resources/execution-format.d.ts.map +1 -1
  297. package/resources/execution-format.js.map +1 -1
  298. package/resources/execution-logs.d.ts.map +1 -1
  299. package/resources/execution-logs.js.map +1 -1
  300. package/resources/execution-trace.d.ts.map +1 -1
  301. package/resources/execution-trace.js.map +1 -1
  302. package/resources/execution.d.ts.map +1 -1
  303. package/resources/execution.js.map +1 -1
  304. package/resources/get-bindings.d.ts.map +1 -1
  305. package/resources/get-bindings.js.map +1 -1
  306. package/resources/get.d.ts.map +1 -1
  307. package/resources/get.js.map +1 -1
  308. package/resources/git.d.ts.map +1 -1
  309. package/resources/git.js.map +1 -1
  310. package/resources/ignore/index.d.ts.map +1 -1
  311. package/resources/ignore/index.js.map +1 -1
  312. package/resources/ignore/matcher.d.ts.map +1 -1
  313. package/resources/ignore/matcher.js.map +1 -1
  314. package/resources/list.d.ts.map +1 -1
  315. package/resources/list.js.map +1 -1
  316. package/resources/mcp/placeholder-resolver.d.ts.map +1 -1
  317. package/resources/mcp/placeholder-resolver.js.map +1 -1
  318. package/resources/mcp/runtime-env.d.ts.map +1 -1
  319. package/resources/mcp/runtime-env.js.map +1 -1
  320. package/resources/picker/ink.d.ts.map +1 -1
  321. package/resources/picker/ink.js.map +1 -1
  322. package/resources/picker/tty.d.ts.map +1 -1
  323. package/resources/picker/tty.js.map +1 -1
  324. package/resources/plugin.d.ts.map +1 -1
  325. package/resources/plugin.js.map +1 -1
  326. package/resources/reference.d.ts.map +1 -1
  327. package/resources/reference.js.map +1 -1
  328. package/resources/render.d.ts.map +1 -1
  329. package/resources/render.js.map +1 -1
  330. package/resources/run/agent-exec.d.ts.map +1 -1
  331. package/resources/run/agent-exec.js.map +1 -1
  332. package/resources/run/attachments.d.ts.map +1 -1
  333. package/resources/run/attachments.js.map +1 -1
  334. package/resources/run/create.d.ts.map +1 -1
  335. package/resources/run/create.js.map +1 -1
  336. package/resources/run/env.d.ts.map +1 -1
  337. package/resources/run/env.js.map +1 -1
  338. package/resources/run/epilogue.d.ts.map +1 -1
  339. package/resources/run/epilogue.js.map +1 -1
  340. package/resources/run/header.d.ts.map +1 -1
  341. package/resources/run/header.js.map +1 -1
  342. package/resources/run/prepare.d.ts.map +1 -1
  343. package/resources/run/prepare.js.map +1 -1
  344. package/resources/run/resolve.d.ts.map +1 -1
  345. package/resources/run/resolve.js.map +1 -1
  346. package/resources/run/resume.d.ts.map +1 -1
  347. package/resources/run/resume.js.map +1 -1
  348. package/resources/run/stream.d.ts.map +1 -1
  349. package/resources/run/stream.js.map +1 -1
  350. package/resources/run/workflow-stream.d.ts.map +1 -1
  351. package/resources/run/workflow-stream.js.map +1 -1
  352. package/resources/run/workspace.d.ts.map +1 -1
  353. package/resources/run/workspace.js.map +1 -1
  354. package/resources/schedule.d.ts.map +1 -1
  355. package/resources/schedule.js.map +1 -1
  356. package/resources/search.d.ts.map +1 -1
  357. package/resources/search.js.map +1 -1
  358. package/resources/session.d.ts.map +1 -1
  359. package/resources/session.js.map +1 -1
  360. package/resources/share.d.ts.map +1 -1
  361. package/resources/share.js.map +1 -1
  362. package/resources/skill.d.ts.map +1 -1
  363. package/resources/skill.js.map +1 -1
  364. package/resources/stream/approval-detect.d.ts.map +1 -1
  365. package/resources/stream/approval-detect.js.map +1 -1
  366. package/resources/stream/convert.d.ts.map +1 -1
  367. package/resources/stream/convert.js.map +1 -1
  368. package/resources/stream/diff.d.ts.map +1 -1
  369. package/resources/stream/diff.js.map +1 -1
  370. package/resources/stream/events.d.ts.map +1 -1
  371. package/resources/stream/events.js.map +1 -1
  372. package/resources/stream/headless.d.ts.map +1 -1
  373. package/resources/stream/headless.js.map +1 -1
  374. package/resources/stream/ink.d.ts.map +1 -1
  375. package/resources/stream/ink.js.map +1 -1
  376. package/resources/stream/render-ndjson.d.ts.map +1 -1
  377. package/resources/stream/render-ndjson.js.map +1 -1
  378. package/resources/stream/render-plaintext.d.ts.map +1 -1
  379. package/resources/stream/render-plaintext.js.map +1 -1
  380. package/resources/stream/snapshot.d.ts.map +1 -1
  381. package/resources/stream/snapshot.js.map +1 -1
  382. package/resources/stream/subagent.d.ts.map +1 -1
  383. package/resources/stream/subagent.js.map +1 -1
  384. package/resources/stream/submit.d.ts.map +1 -1
  385. package/resources/stream/submit.js.map +1 -1
  386. package/resources/stream/todo.d.ts.map +1 -1
  387. package/resources/stream/todo.js.map +1 -1
  388. package/resources/stream/tool-state.d.ts.map +1 -1
  389. package/resources/stream/tool-state.js.map +1 -1
  390. package/resources/stream/tty.d.ts.map +1 -1
  391. package/resources/stream/tty.js.map +1 -1
  392. package/resources/stream/workflow-event-view.d.ts.map +1 -1
  393. package/resources/stream/workflow-event-view.js.map +1 -1
  394. package/resources/stream/workflow-render-ndjson.d.ts.map +1 -1
  395. package/resources/stream/workflow-render-ndjson.js.map +1 -1
  396. package/resources/stream/workflow-render-plaintext.d.ts.map +1 -1
  397. package/resources/stream/workflow-render-plaintext.js.map +1 -1
  398. package/resources/tag.d.ts.map +1 -1
  399. package/resources/tag.js.map +1 -1
  400. package/resources/task-configs.d.ts.map +1 -1
  401. package/resources/task-configs.js.map +1 -1
  402. package/resources/usage.d.ts.map +1 -1
  403. package/resources/usage.js.map +1 -1
  404. package/resources/validate.d.ts.map +1 -1
  405. package/resources/validate.js.map +1 -1
  406. package/resources/version.d.ts.map +1 -1
  407. package/resources/version.js.map +1 -1
  408. package/runtime.d.ts.map +1 -1
  409. package/runtime.js.map +1 -1
  410. package/version.d.ts.map +1 -1
  411. package/version.js.map +1 -1
  412. package/src/auth/pkce.test.ts +0 -37
  413. package/src/auth/token.test.ts +0 -151
  414. package/src/client/client.test.ts +0 -142
  415. package/src/commands/apikey/duration.test.ts +0 -23
  416. package/src/commands/auth/login.test.ts +0 -52
  417. package/src/commands/auth/whoami.test.ts +0 -96
  418. package/src/commands/bootstrap.test.ts +0 -178
  419. package/src/commands/config/backend.test.ts +0 -122
  420. package/src/commands/config/context.test.ts +0 -171
  421. package/src/commands/connect.test.ts +0 -113
  422. package/src/commands/install.test.ts +0 -307
  423. package/src/commands/marketplace.test.ts +0 -205
  424. package/src/commands/mcp-server.test.ts +0 -65
  425. package/src/commands/validate.test.ts +0 -168
  426. package/src/config/config.test.ts +0 -132
  427. package/src/config/keys.test.ts +0 -61
  428. package/src/config/resolve.test.ts +0 -242
  429. package/src/errors/clierr.test.ts +0 -172
  430. package/src/local/artifact.test.ts +0 -54
  431. package/src/local/bootstrap.test.ts +0 -166
  432. package/src/local/daemon/components.test.ts +0 -148
  433. package/src/local/daemon/daemon.integration.test.ts +0 -216
  434. package/src/local/daemon/env.test.ts +0 -108
  435. package/src/local/daemon/launch.test.ts +0 -136
  436. package/src/local/daemon/supervisor.test.ts +0 -260
  437. package/src/local/llm-config.test.ts +0 -66
  438. package/src/local/logs/tail.test.ts +0 -70
  439. package/src/local/logs/view.test.ts +0 -46
  440. package/src/local/operator-config.test.ts +0 -72
  441. package/src/local/reset.test.ts +0 -53
  442. package/src/local/runtime/runtime.test.ts +0 -240
  443. package/src/local/runtime/runtimes-install.test.ts +0 -58
  444. package/src/local/runtime/server.test.ts +0 -253
  445. package/src/local/setup/wizard.test.ts +0 -94
  446. package/src/local/state/state.test.ts +0 -210
  447. package/src/local/status.test.ts +0 -108
  448. package/src/local/temporal/download.test.ts +0 -248
  449. package/src/local/temporal/inspect.test.ts +0 -83
  450. package/src/local/temporal/manager.test.ts +0 -64
  451. package/src/local/temporal/supervisor.test.ts +0 -77
  452. package/src/marketplace/__fixtures__/cursor-marketplace.ts +0 -69
  453. package/src/marketplace/config.test.ts +0 -254
  454. package/src/marketplace/github.test.ts +0 -394
  455. package/src/marketplace/install.test.ts +0 -261
  456. package/src/marketplace/official.test.ts +0 -107
  457. package/src/marketplace/read.test.ts +0 -93
  458. package/src/marketplace/ref.test.ts +0 -179
  459. package/src/output/command-result.test.ts +0 -73
  460. package/src/output/confirm.test.ts +0 -43
  461. package/src/output/format.test.ts +0 -65
  462. package/src/output/proto.test.ts +0 -72
  463. package/src/output/table.test.ts +0 -37
  464. package/src/program.test.ts +0 -62
  465. package/src/registry/aliases.test.ts +0 -142
  466. package/src/registry/registry.test.ts +0 -355
  467. package/src/resources/apply/apply.integration.test.ts +0 -353
  468. package/src/resources/apply/apply.test.ts +0 -134
  469. package/src/resources/apply/discovery.integration.test.ts +0 -99
  470. package/src/resources/connect/__fixtures__/stdio-crash.mjs +0 -6
  471. package/src/resources/connect/__fixtures__/stdio-server.mjs +0 -48
  472. package/src/resources/connect/connect.integration.test.ts +0 -383
  473. package/src/resources/connect/discover.test.ts +0 -84
  474. package/src/resources/connect/oauth.test.ts +0 -158
  475. package/src/resources/cursor-pages.test.ts +0 -55
  476. package/src/resources/diff.integration.test.ts +0 -103
  477. package/src/resources/diff.test.ts +0 -34
  478. package/src/resources/documents.test.ts +0 -67
  479. package/src/resources/execution-approve.test.ts +0 -50
  480. package/src/resources/execution-format.test.ts +0 -48
  481. package/src/resources/execution.integration.test.ts +0 -285
  482. package/src/resources/execution.test.ts +0 -138
  483. package/src/resources/ignore/ignore.test.ts +0 -62
  484. package/src/resources/mcp/placeholder-resolver.test.ts +0 -71
  485. package/src/resources/mcp/runtime-env.test.ts +0 -102
  486. package/src/resources/mutate-verbs.integration.test.ts +0 -455
  487. package/src/resources/picker/tty.test.ts +0 -37
  488. package/src/resources/plugin.test.ts +0 -379
  489. package/src/resources/push-download.integration.test.ts +0 -175
  490. package/src/resources/read-completion.integration.test.ts +0 -164
  491. package/src/resources/read-verbs.integration.test.ts +0 -603
  492. package/src/resources/reference.test.ts +0 -107
  493. package/src/resources/run/agent-exec.test.ts +0 -179
  494. package/src/resources/run/attachments.test.ts +0 -135
  495. package/src/resources/run/create.test.ts +0 -336
  496. package/src/resources/run/env.test.ts +0 -131
  497. package/src/resources/run/header.test.ts +0 -79
  498. package/src/resources/run/prepare.test.ts +0 -428
  499. package/src/resources/run/workflow-stream.integration.test.ts +0 -157
  500. package/src/resources/run/workspace.test.ts +0 -93
  501. package/src/resources/share.test.ts +0 -523
  502. package/src/resources/skill.test.ts +0 -364
  503. package/src/resources/stream/diff.test.ts +0 -338
  504. package/src/resources/stream/headless.test.ts +0 -119
  505. package/src/resources/stream/lazy-import.test.ts +0 -63
  506. package/src/resources/stream/render-ndjson.test.ts +0 -126
  507. package/src/resources/stream/render-plaintext.test.ts +0 -127
  508. package/src/resources/stream/snapshot.test.ts +0 -111
  509. package/src/resources/stream/submit.test.ts +0 -77
  510. package/src/resources/stream/workflow-event-view.test.ts +0 -116
  511. package/src/resources/stream/workflow-render.test.ts +0 -81
  512. package/src/resources/task-configs.test.ts +0 -98
  513. package/src/resources/usage.test.ts +0 -94
  514. package/src/resources/validate.test.ts +0 -79
@@ -1,103 +0,0 @@
1
- // In-process integration test for `diff` against a workflow's remote state.
2
-
3
- import { create } from "@bufbuild/protobuf";
4
- import { Code, ConnectError, type ConnectRouter } from "@connectrpc/connect";
5
- import { connectNodeAdapter } from "@connectrpc/connect-node";
6
- import { WorkflowSchema } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
7
- import { WorkflowQueryController } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/query_pb";
8
- import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
9
- import { createNodeClient, normalizeEndpoint } from "@stigmer/sdk/node";
10
- import type { Stigmer } from "@stigmer/sdk";
11
- import { createServer as createHttp2Server, type Http2Server, type ServerHttp2Session } from "node:http2";
12
- import type { AddressInfo } from "node:net";
13
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
14
- import { renderProtoYaml } from "../output/index.js";
15
- import { diffDocument } from "./diff.js";
16
-
17
- const knownWorkflow = create(WorkflowSchema, {
18
- apiVersion: "agentic.stigmer.ai/v1",
19
- kind: "Workflow",
20
- metadata: { name: "Deploy", slug: "deploy", org: "acme", id: "wfl_1" },
21
- spec: { description: "deploys things" },
22
- });
23
-
24
- let backend: Http2Server;
25
- let client: Stigmer;
26
- const openSessions = new Set<ServerHttp2Session>();
27
-
28
- beforeAll(async () => {
29
- const routes = (router: ConnectRouter) => {
30
- router.service(WorkflowQueryController, {
31
- getByReference: (req) => {
32
- if (req.slug !== "deploy") throw new ConnectError("workflow not found", Code.NotFound);
33
- return knownWorkflow;
34
- },
35
- });
36
- };
37
- backend = createHttp2Server(connectNodeAdapter({ routes }));
38
- backend.on("session", (session) => {
39
- openSessions.add(session);
40
- session.on("close", () => openSessions.delete(session));
41
- });
42
- await new Promise<void>((resolve) => backend.listen(0, "127.0.0.1", resolve));
43
- const port = (backend.address() as AddressInfo).port;
44
- client = createNodeClient({ baseUrl: normalizeEndpoint(`127.0.0.1:${port}`) });
45
- });
46
-
47
- afterAll(async () => {
48
- for (const session of openSessions) session.destroy();
49
- await new Promise<void>((resolve) => backend.close(() => resolve()));
50
- });
51
-
52
- describe("diffDocument (workflow)", () => {
53
- const doc = { kind: "Workflow", metadata: { slug: "deploy" } } as const;
54
-
55
- it("reports an unchanged document as 'same'", async () => {
56
- const remoteYaml = renderProtoYaml(WorkflowSchema, knownWorkflow);
57
- const result = await diffDocument(client, ApiResourceKind.workflow, remoteYaml, doc, "wf.yaml", "acme", 3);
58
- expect(result.status).toBe("same");
59
- });
60
-
61
- it("reports a changed document with a unified diff", async () => {
62
- const result = await diffDocument(
63
- client,
64
- ApiResourceKind.workflow,
65
- "kind: Workflow\nspec:\n description: something else\n",
66
- doc,
67
- "wf.yaml",
68
- "acme",
69
- 3,
70
- );
71
- expect(result.status).toBe("changed");
72
- if (result.status === "changed") {
73
- expect(result.text).toContain("@@");
74
- expect(result.text).toContain("remote/wf.yaml");
75
- }
76
- });
77
-
78
- it("reports a not-yet-deployed workflow as 'new'", async () => {
79
- const result = await diffDocument(
80
- client,
81
- ApiResourceKind.workflow,
82
- "kind: Workflow\nmetadata:\n slug: missing\n",
83
- { kind: "Workflow", metadata: { slug: "missing" } },
84
- "wf.yaml",
85
- "acme",
86
- 3,
87
- );
88
- expect(result.status).toBe("new");
89
- });
90
-
91
- it("treats non-workflow kinds as 'new' (diff not implemented)", async () => {
92
- const result = await diffDocument(
93
- client,
94
- ApiResourceKind.agent,
95
- "kind: Agent\n",
96
- { kind: "Agent", metadata: { slug: "x" } },
97
- "a.yaml",
98
- "acme",
99
- 3,
100
- );
101
- expect(result.status).toBe("new");
102
- });
103
- });
@@ -1,34 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { unifiedDiff } from "./diff.js";
3
-
4
- describe("unifiedDiff", () => {
5
- it("emits the file headers", () => {
6
- const out = unifiedDiff("a", "b", "remote/x.yaml", "local/x.yaml", 3);
7
- expect(out.startsWith("--- remote/x.yaml\n+++ local/x.yaml\n")).toBe(true);
8
- });
9
-
10
- it("produces no hunk for identical input", () => {
11
- const out = unifiedDiff("x\ny\nz", "x\ny\nz", "remote/x", "local/x", 3);
12
- expect(out).not.toContain("@@");
13
- });
14
-
15
- it("renders a single-line change with trailing context", () => {
16
- const out = unifiedDiff("a\nb\nc", "a\nB\nc", "remote/x", "local/x", 3);
17
- expect(out).toContain("@@ -2,2 +2,2 @@");
18
- expect(out).toContain("-b");
19
- expect(out).toContain("+B");
20
- expect(out).toContain(" c");
21
- });
22
-
23
- it("renders a pure addition", () => {
24
- const out = unifiedDiff("a", "a\nb", "remote/x", "local/x", 3);
25
- expect(out).toContain("@@ -2,0 +2,1 @@");
26
- expect(out).toContain("+b");
27
- });
28
-
29
- it("renders a pure deletion", () => {
30
- const out = unifiedDiff("a\nb", "a", "remote/x", "local/x", 3);
31
- expect(out).toContain("-b");
32
- expect(out).not.toContain("+b");
33
- });
34
- });
@@ -1,67 +0,0 @@
1
- import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
5
- import { UsageError } from "../errors/index.js";
6
- import { loadDocuments, resolveYamlFiles } from "./documents.js";
7
-
8
- let dir: string;
9
-
10
- beforeAll(() => {
11
- dir = mkdtempSync(join(tmpdir(), "stigmer-docs-"));
12
- writeFileSync(join(dir, "single.yaml"), "kind: Agent\nmetadata:\n slug: a\n");
13
- writeFileSync(join(dir, "multi.yaml"), "kind: Agent\nmetadata:\n slug: a\n---\nkind: Workflow\nmetadata:\n slug: w\n");
14
- writeFileSync(join(dir, "nokind.yaml"), "metadata:\n slug: a\n");
15
- writeFileSync(join(dir, "broken.yaml"), "kind: Agent\nfoo: [1, 2\n");
16
- writeFileSync(join(dir, "notyaml.txt"), "ignored");
17
- });
18
-
19
- afterAll(() => {
20
- rmSync(dir, { recursive: true, force: true });
21
- });
22
-
23
- describe("resolveYamlFiles", () => {
24
- it("returns a single file directly", () => {
25
- expect(resolveYamlFiles(join(dir, "single.yaml"))).toEqual([join(dir, "single.yaml")]);
26
- });
27
-
28
- it("walks a directory for .yaml/.yml only", () => {
29
- const files = resolveYamlFiles(dir);
30
- expect(files).toContain(join(dir, "single.yaml"));
31
- expect(files).toContain(join(dir, "multi.yaml"));
32
- expect(files.some((f) => f.endsWith(".txt"))).toBe(false);
33
- });
34
-
35
- it("rejects a non-existent path with a usage error", () => {
36
- expect(() => resolveYamlFiles(join(dir, "missing.yaml"))).toThrow(UsageError);
37
- });
38
- });
39
-
40
- describe("loadDocuments", () => {
41
- it("loads a single document with the whole file as raw", () => {
42
- const docs = loadDocuments(join(dir, "single.yaml"));
43
- expect(docs).toHaveLength(1);
44
- expect(docs[0].kind).toBe("Agent");
45
- expect(docs[0].raw).toContain("kind: Agent");
46
- });
47
-
48
- it("splits multi-document files with per-document raw text", () => {
49
- const docs = loadDocuments(join(dir, "multi.yaml"));
50
- expect(docs.map((d) => d.kind)).toEqual(["Agent", "Workflow"]);
51
- expect(docs[0].raw).toContain("slug: a");
52
- expect(docs[0].raw).not.toContain("Workflow");
53
- expect(docs[1].raw).toContain("Workflow");
54
- });
55
-
56
- it("rejects a document missing its kind", () => {
57
- expect(() => loadDocuments(join(dir, "nokind.yaml"))).toThrow(UsageError);
58
- });
59
-
60
- it("rejects malformed YAML in strict mode", () => {
61
- expect(() => loadDocuments(join(dir, "broken.yaml"), { strict: true })).toThrow(UsageError);
62
- });
63
-
64
- it("tolerates malformed YAML in lenient mode (Wave-1 parity)", () => {
65
- expect(() => loadDocuments(join(dir, "broken.yaml"))).not.toThrow();
66
- });
67
- });
@@ -1,50 +0,0 @@
1
- import { mkdtemp, writeFile } from "node:fs/promises";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterAll, describe, expect, it } from "vitest";
5
- import { classify, ExitCode } from "../errors/index.js";
6
- import { readFormData } from "./execution-approve.js";
7
-
8
- const dirs: string[] = [];
9
-
10
- async function tempFile(name: string, contents: string): Promise<string> {
11
- const dir = await mkdtemp(join(tmpdir(), "stigmer-approve-"));
12
- dirs.push(dir);
13
- const path = join(dir, name);
14
- await writeFile(path, contents, "utf8");
15
- return path;
16
- }
17
-
18
- afterAll(() => {
19
- // mkdtemp dirs are small and OS-cleaned; nothing to do but keep the ref alive.
20
- void dirs;
21
- });
22
-
23
- describe("readFormData", () => {
24
- it("returns undefined when no path is given", async () => {
25
- expect(await readFormData(undefined)).toBeUndefined();
26
- expect(await readFormData("")).toBeUndefined();
27
- });
28
-
29
- it("parses a JSON object", async () => {
30
- const path = await tempFile("form.json", JSON.stringify({ approved: true, note: "ok" }));
31
- expect(await readFormData(path)).toEqual({ approved: true, note: "ok" });
32
- });
33
-
34
- it("rejects a missing file with a usage error", async () => {
35
- const err = await readFormData("/no/such/file.json").catch((e) => e);
36
- expect(classify(err)?.exitCode).toBe(ExitCode.Usage);
37
- });
38
-
39
- it("rejects malformed JSON with a usage error", async () => {
40
- const path = await tempFile("bad.json", "{ not valid");
41
- const err = await readFormData(path).catch((e) => e);
42
- expect(classify(err)?.exitCode).toBe(ExitCode.Usage);
43
- });
44
-
45
- it("rejects a non-object JSON value with a usage error", async () => {
46
- const path = await tempFile("array.json", "[1, 2, 3]");
47
- const err = await readFormData(path).catch((e) => e);
48
- expect(classify(err)?.exitCode).toBe(ExitCode.Usage);
49
- });
50
- });
@@ -1,48 +0,0 @@
1
- import { WorkflowTaskType } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
2
- import { describe, expect, it } from "vitest";
3
- import { calculateDuration, formatWorkflowTaskType, truncateWithEllipsis } from "./execution-format.js";
4
-
5
- describe("calculateDuration", () => {
6
- it("returns '-' when a bound is missing or unparseable", () => {
7
- expect(calculateDuration("", "2026-01-01T00:00:01Z")).toBe("-");
8
- expect(calculateDuration("2026-01-01T00:00:00Z", "")).toBe("-");
9
- expect(calculateDuration("not-a-date", "2026-01-01T00:00:01Z")).toBe("-");
10
- });
11
-
12
- it("formats sub-minute durations in seconds", () => {
13
- expect(calculateDuration("2026-01-01T00:00:00Z", "2026-01-01T00:00:42Z")).toBe("42s");
14
- });
15
-
16
- it("formats sub-hour durations as minutes and seconds", () => {
17
- expect(calculateDuration("2026-01-01T00:00:00Z", "2026-01-01T00:05:09Z")).toBe("5m 9s");
18
- });
19
-
20
- it("formats hour-plus durations as hours and minutes", () => {
21
- expect(calculateDuration("2026-01-01T00:00:00Z", "2026-01-01T02:30:00Z")).toBe("2h 30m");
22
- });
23
- });
24
-
25
- describe("truncateWithEllipsis", () => {
26
- it("leaves short strings untouched", () => {
27
- expect(truncateWithEllipsis("short", 10)).toBe("short");
28
- });
29
-
30
- it("truncates and appends an ellipsis", () => {
31
- expect(truncateWithEllipsis("abcdefghij", 8)).toBe("abcde...");
32
- });
33
- });
34
-
35
- describe("formatWorkflowTaskType", () => {
36
- it.each([
37
- [WorkflowTaskType.WORKFLOW_TASK_AGENT_INVOCATION, "agent"],
38
- [WorkflowTaskType.WORKFLOW_TASK_APPROVAL, "approval"],
39
- [WorkflowTaskType.WORKFLOW_TASK_API_CALL, "api_call"],
40
- [WorkflowTaskType.WORKFLOW_TASK_CONDITIONAL, "condition"],
41
- [WorkflowTaskType.WORKFLOW_TASK_PARALLEL, "parallel"],
42
- [WorkflowTaskType.WORKFLOW_TASK_TRANSFORM, "transform"],
43
- [WorkflowTaskType.WORKFLOW_TASK_CUSTOM, "custom"],
44
- [WorkflowTaskType.WORKFLOW_TASK_TYPE_UNSPECIFIED, "unknown"],
45
- ])("%s -> %s", (type, expected) => {
46
- expect(formatWorkflowTaskType(type)).toBe(expected);
47
- });
48
- });
@@ -1,285 +0,0 @@
1
- // In-process integration test for the `execution` group resources.
2
- //
3
- // Stands up a real Connect backend over h2c serving the agent + workflow
4
- // execution query and command controllers (including the server-streaming
5
- // subscribe / subscribeEvents methods), points an SDK node client at it, and
6
- // drives the resource layer end to end: lifecycle control, approval submission
7
- // (asserting D-EX-1 comment carry + D-EX-2 reviewer-unset), trace rendering, and
8
- // log streaming (workflow event stream + agent snapshot diffing).
9
-
10
- import { create } from "@bufbuild/protobuf";
11
- import type { ConnectRouter } from "@connectrpc/connect";
12
- import { connectNodeAdapter } from "@connectrpc/connect-node";
13
- import { AgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
14
- import { AgentExecutionCommandController } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/command_pb";
15
- import { ExecutionPhase, MessageType } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
16
- import type { SubmitApprovalInput } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/io_pb";
17
- import { AgentExecutionQueryController } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/query_pb";
18
- import { WorkflowExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
19
- import { WorkflowExecutionCommandController } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/command_pb";
20
- import { ExecutionPhase as WorkflowExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
21
- import {
22
- GetEventLogResponseSchema,
23
- type SubmitWorkflowTaskApprovalInput,
24
- } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
25
- import {
26
- WorkflowExecutionEventSchema,
27
- WorkflowEventType,
28
- } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
29
- import { WorkflowExecutionQueryController } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/query_pb";
30
- import type { Stigmer } from "@stigmer/sdk";
31
- import { createNodeClient, normalizeEndpoint } from "@stigmer/sdk/node";
32
- import { createServer as createHttp2Server, type Http2Server, type ServerHttp2Session } from "node:http2";
33
- import type { AddressInfo } from "node:net";
34
- import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
35
- import { approveAgentToolCall, approveWorkflowTask } from "./execution-approve.js";
36
- import { cancelExecution, pauseExecution, resumeExecution, terminateExecution } from "./execution-control.js";
37
- import { streamExecutionLogs } from "./execution-logs.js";
38
- import { traceExecution } from "./execution-trace.js";
39
-
40
- let backend: Http2Server;
41
- let client: Stigmer;
42
- const openSessions = new Set<ServerHttp2Session>();
43
-
44
- // Spies for the command-side calls, reset per test.
45
- let agentControl: { verb: string; id: string; reason: string }[] = [];
46
- let workflowControl: { verb: string; id: string; reason: string }[] = [];
47
- let agentApproval: SubmitApprovalInput[] = [];
48
- let workflowApproval: SubmitWorkflowTaskApprovalInput[] = [];
49
-
50
- beforeEach(() => {
51
- agentControl = [];
52
- workflowControl = [];
53
- agentApproval = [];
54
- workflowApproval = [];
55
- });
56
-
57
- // A workflow execution with two tasks (one done, one failed) for the trace view.
58
- const workflowExec = create(WorkflowExecutionSchema, {
59
- metadata: { id: "wex_1", name: "Deploy" },
60
- status: {
61
- phase: WorkflowExecutionPhase.EXECUTION_COMPLETED,
62
- startedAt: "2026-06-12T10:00:00Z",
63
- completedAt: "2026-06-12T10:01:30Z",
64
- tasks: [
65
- { taskName: "build", status: 3, taskType: 1, startedAt: "2026-06-12T10:00:00Z", completedAt: "2026-06-12T10:00:30Z" },
66
- { taskName: "ship", status: 4, taskType: 1, error: "registry down" },
67
- ],
68
- },
69
- });
70
-
71
- // An agent execution carrying two messages for the agent log + trace views.
72
- const agentExec = create(AgentExecutionSchema, {
73
- metadata: { id: "aex_1", name: "Reviewer" },
74
- status: {
75
- phase: ExecutionPhase.EXECUTION_COMPLETED,
76
- startedAt: "2026-06-12T10:00:00Z",
77
- completedAt: "2026-06-12T10:00:20Z",
78
- messages: [
79
- { type: MessageType.MESSAGE_HUMAN, content: "do it" },
80
- { type: MessageType.MESSAGE_AI, content: "done", toolCalls: [{ name: "Shell", result: "ok" }] },
81
- ],
82
- },
83
- });
84
-
85
- function controlResult(phase: ExecutionPhase) {
86
- return create(AgentExecutionSchema, { metadata: { id: "aex_1" }, status: { phase } });
87
- }
88
- function workflowControlResult(phase: WorkflowExecutionPhase) {
89
- return create(WorkflowExecutionSchema, { metadata: { id: "wex_1" }, status: { phase } });
90
- }
91
-
92
- beforeAll(async () => {
93
- const routes = (router: ConnectRouter) => {
94
- router.service(AgentExecutionQueryController, {
95
- get: () => agentExec,
96
- subscribe: async function* () {
97
- yield create(AgentExecutionSchema, {
98
- metadata: { id: "aex_1" },
99
- status: { phase: ExecutionPhase.EXECUTION_IN_PROGRESS, messages: [{ type: MessageType.MESSAGE_AI, content: "thinking" }] },
100
- });
101
- yield create(AgentExecutionSchema, {
102
- metadata: { id: "aex_1" },
103
- status: {
104
- phase: ExecutionPhase.EXECUTION_COMPLETED,
105
- messages: [
106
- { type: MessageType.MESSAGE_AI, content: "thinking" },
107
- { type: MessageType.MESSAGE_AI, content: "final answer" },
108
- ],
109
- },
110
- });
111
- },
112
- });
113
- router.service(AgentExecutionCommandController, {
114
- cancel: (req) => (agentControl.push({ verb: "cancel", id: req.id, reason: req.reason }), controlResult(ExecutionPhase.EXECUTION_CANCELLED)),
115
- terminate: (req) => (agentControl.push({ verb: "terminate", id: req.id, reason: req.reason }), controlResult(ExecutionPhase.EXECUTION_TERMINATED)),
116
- pause: (req) => (agentControl.push({ verb: "pause", id: req.id, reason: req.reason }), controlResult(ExecutionPhase.EXECUTION_PAUSED)),
117
- resume: (req) => (agentControl.push({ verb: "resume", id: req.id, reason: "" }), controlResult(ExecutionPhase.EXECUTION_IN_PROGRESS)),
118
- submitApproval: (req) => (agentApproval.push(req), agentExec),
119
- });
120
-
121
- router.service(WorkflowExecutionQueryController, {
122
- get: () => workflowExec,
123
- getEventLog: () =>
124
- create(GetEventLogResponseSchema, {
125
- hasMore: true,
126
- events: [
127
- create(WorkflowExecutionEventSchema, {
128
- eventType: WorkflowEventType.execution_started,
129
- occurredAt: "2026-06-12T10:00:00Z",
130
- payload: { case: "executionStarted", value: {} as never },
131
- }),
132
- ],
133
- }),
134
- subscribeEvents: async function* () {
135
- yield create(WorkflowExecutionEventSchema, {
136
- eventType: WorkflowEventType.task_started,
137
- occurredAt: "2026-06-12T10:00:01Z",
138
- taskName: "build",
139
- payload: { case: "taskStarted", value: {} as never },
140
- });
141
- yield create(WorkflowExecutionEventSchema, {
142
- eventType: WorkflowEventType.task_completed,
143
- occurredAt: "2026-06-12T10:00:05Z",
144
- taskName: "other",
145
- payload: { case: "taskCompleted", value: {} as never },
146
- });
147
- },
148
- });
149
- router.service(WorkflowExecutionCommandController, {
150
- cancel: (req) => (workflowControl.push({ verb: "cancel", id: req.id, reason: req.reason }), workflowControlResult(WorkflowExecutionPhase.EXECUTION_CANCELLED)),
151
- terminate: (req) => (workflowControl.push({ verb: "terminate", id: req.id, reason: req.reason }), workflowControlResult(WorkflowExecutionPhase.EXECUTION_TERMINATED)),
152
- pause: (req) => (workflowControl.push({ verb: "pause", id: req.id, reason: req.reason }), workflowControlResult(WorkflowExecutionPhase.EXECUTION_PAUSED)),
153
- resume: (req) => (workflowControl.push({ verb: "resume", id: req.id, reason: "" }), workflowControlResult(WorkflowExecutionPhase.EXECUTION_IN_PROGRESS)),
154
- submitWorkflowTaskApproval: (req) => (workflowApproval.push(req), workflowExec),
155
- });
156
- };
157
-
158
- backend = createHttp2Server(connectNodeAdapter({ routes }));
159
- backend.on("session", (session) => {
160
- openSessions.add(session);
161
- session.on("close", () => openSessions.delete(session));
162
- });
163
- await new Promise<void>((resolve) => backend.listen(0, "127.0.0.1", resolve));
164
- const port = (backend.address() as AddressInfo).port;
165
- client = createNodeClient({ baseUrl: normalizeEndpoint(`127.0.0.1:${port}`) });
166
- });
167
-
168
- afterAll(async () => {
169
- for (const session of openSessions) session.destroy();
170
- await new Promise<void>((resolve) => backend.close(() => resolve()));
171
- });
172
-
173
- describe("lifecycle control", () => {
174
- it("cancels an agent execution and reports the phase", async () => {
175
- const result = await cancelExecution(client, "aex_1", "no longer needed");
176
- expect(result).toEqual({ type: "agent", phase: "cancelled" });
177
- expect(agentControl).toEqual([{ verb: "cancel", id: "aex_1", reason: "no longer needed" }]);
178
- });
179
-
180
- it("terminates / pauses an agent execution", async () => {
181
- expect((await terminateExecution(client, "aex_1", "stuck")).phase).toBe("terminated");
182
- expect((await pauseExecution(client, "aex_1", "")).phase).toBe("paused");
183
- expect(agentControl.map((c) => c.verb)).toEqual(["terminate", "pause"]);
184
- });
185
-
186
- it("cancels / resumes a workflow execution", async () => {
187
- expect((await cancelExecution(client, "wex_1", "")).phase).toBe("cancelled");
188
- expect((await resumeExecution(client, "wex_1")).phase).toBe("running");
189
- expect(workflowControl.map((c) => c.verb)).toEqual(["cancel", "resume"]);
190
- });
191
- });
192
-
193
- describe("approval submission", () => {
194
- it("carries --comment onto the agent SubmitApprovalInput (D-EX-1)", async () => {
195
- await approveAgentToolCall(client, { executionId: "aex_1", toolCallId: "tc_1", action: "deny", comment: "unsafe" });
196
- expect(agentApproval).toHaveLength(1);
197
- expect(agentApproval[0].comment).toBe("unsafe");
198
- expect(agentApproval[0].toolCallId).toBe("tc_1");
199
- // "deny" maps to REJECT (3).
200
- expect(agentApproval[0].action).toBe(3);
201
- });
202
-
203
- it("leaves the workflow reviewer unset (D-EX-2 — server-attributed)", async () => {
204
- await approveWorkflowTask(client, { executionId: "wex_1", taskName: "review", outcome: "approve", comment: "lgtm" });
205
- expect(workflowApproval).toHaveLength(1);
206
- expect(workflowApproval[0].reviewer).toBe("");
207
- expect(workflowApproval[0].comment).toBe("lgtm");
208
- expect(workflowApproval[0].outcome).toBe("approve");
209
- });
210
- });
211
-
212
- describe("trace", () => {
213
- function capture() {
214
- const chunks: string[] = [];
215
- return { streams: { write: (t: string) => chunks.push(t), colorize: false }, text: () => chunks.join("") };
216
- }
217
-
218
- it("renders a workflow task table", async () => {
219
- const cap = capture();
220
- await traceExecution(client, "wex_1", "table", cap.streams);
221
- const text = cap.text();
222
- expect(text).toContain("Workflow: Deploy (completed, 1m 30s)");
223
- expect(text).toContain("[done] build");
224
- expect(text).toContain("[fail] ship");
225
- expect(text).toContain("registry down");
226
- });
227
-
228
- it("renders the agent tool-call timeline", async () => {
229
- const cap = capture();
230
- await traceExecution(client, "aex_1", "table", cap.streams);
231
- expect(cap.text()).toContain("Agent: Reviewer (completed, 20s)");
232
- expect(cap.text()).toContain("[done] Shell");
233
- });
234
-
235
- it("emits the full proto envelope for json", async () => {
236
- const cap = capture();
237
- await traceExecution(client, "wex_1", "json", cap.streams);
238
- const json = JSON.parse(cap.text());
239
- expect(json.metadata.id).toBe("wex_1");
240
- expect(json.status.tasks).toHaveLength(2);
241
- });
242
- });
243
-
244
- describe("logs", () => {
245
- function capture() {
246
- const lines: string[] = [];
247
- return { streams: { out: { write: (l: string) => lines.push(l) }, colorize: false }, lines };
248
- }
249
- const never = new AbortController().signal;
250
-
251
- it("prints the workflow event log with a more-available notice", async () => {
252
- const cap = capture();
253
- await streamExecutionLogs(client, { executionId: "wex_1", follow: false }, never, cap.streams);
254
- const text = cap.lines.join("");
255
- expect(text).toContain("execution started");
256
- expect(text).toContain("more events available");
257
- });
258
-
259
- it("drains the workflow event stream on --follow with a task filter", async () => {
260
- const cap = capture();
261
- await streamExecutionLogs(client, { executionId: "wex_1", follow: true, task: "build" }, never, cap.streams);
262
- const text = cap.lines.join("");
263
- expect(text).toContain("task started: build");
264
- // "other" task is filtered out.
265
- expect(text).not.toContain("task completed: other");
266
- expect(text).toContain("--- stream ended ---");
267
- });
268
-
269
- it("prints agent messages from a single snapshot when not following", async () => {
270
- const cap = capture();
271
- await streamExecutionLogs(client, { executionId: "aex_1", follow: false }, never, cap.streams);
272
- const text = cap.lines.join("");
273
- expect(text).toContain("[human] do it");
274
- expect(text).toContain("[ai] done");
275
- });
276
-
277
- it("diffs agent snapshots on --follow and stops on the terminal phase", async () => {
278
- const cap = capture();
279
- await streamExecutionLogs(client, { executionId: "aex_1", follow: true }, never, cap.streams);
280
- const text = cap.lines.join("");
281
- expect(text).toContain("[ai] thinking");
282
- expect(text).toContain("[ai] final answer");
283
- expect(text).toContain("[end] execution completed");
284
- });
285
- });