@stigmer/cli 3.35.0 → 3.37.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,428 +0,0 @@
1
- // Unit tests for the prelude orchestrator: flag validation helpers and the
2
- // STIGMER_ORG_ID injection rule. Attachment uploading is covered in
3
- // attachments.test.ts, so these tests use no attachments.
4
-
5
- import { describe, expect, it } from "vitest";
6
- import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
7
- import type { Stigmer } from "@stigmer/sdk";
8
- import { type AgentExecFlags, parseApprovalAction, prepareAgentExec, validateHarness, validateMode, validateServiceTier, validateThinking } from "./prepare.js";
9
-
10
- describe("parseApprovalAction", () => {
11
- it("maps each accepted value (case-insensitive)", () => {
12
- expect(parseApprovalAction("")).toBe(ApprovalAction.UNSPECIFIED);
13
- expect(parseApprovalAction("approve")).toBe(ApprovalAction.APPROVE);
14
- expect(parseApprovalAction("SKIP")).toBe(ApprovalAction.SKIP);
15
- expect(parseApprovalAction("reject")).toBe(ApprovalAction.REJECT);
16
- expect(parseApprovalAction("approve-all")).toBe(ApprovalAction.APPROVE_ALL);
17
- expect(parseApprovalAction("approve_all")).toBe(ApprovalAction.APPROVE_ALL);
18
- expect(parseApprovalAction("approveall")).toBe(ApprovalAction.APPROVE_ALL);
19
- });
20
-
21
- it("rejects an unknown value", () => {
22
- expect(() => parseApprovalAction("maybe")).toThrow(/must be one of/);
23
- });
24
- });
25
-
26
- describe("validateMode", () => {
27
- it("accepts empty, agent, and plan", () => {
28
- expect(() => validateMode("")).not.toThrow();
29
- expect(() => validateMode("agent")).not.toThrow();
30
- expect(() => validateMode("plan")).not.toThrow();
31
- });
32
-
33
- it("rejects anything else", () => {
34
- expect(() => validateMode("yolo")).toThrow(/must be "agent" or "plan"/);
35
- });
36
- });
37
-
38
- describe("validateServiceTier", () => {
39
- it("accepts empty, standard, and fast", () => {
40
- expect(() => validateServiceTier("")).not.toThrow();
41
- expect(() => validateServiceTier("standard")).not.toThrow();
42
- expect(() => validateServiceTier("fast")).not.toThrow();
43
- });
44
-
45
- it("rejects anything else before a network round trip", () => {
46
- expect(() => validateServiceTier("turbo")).toThrow(/must be "standard" or "fast"/);
47
- });
48
- });
49
-
50
- describe("validateThinking", () => {
51
- it("accepts empty, disabled, and enabled", () => {
52
- expect(() => validateThinking("")).not.toThrow();
53
- expect(() => validateThinking("disabled")).not.toThrow();
54
- expect(() => validateThinking("enabled")).not.toThrow();
55
- });
56
-
57
- it("rejects anything else before a network round trip", () => {
58
- expect(() => validateThinking("harder")).toThrow(/must be "disabled" or "enabled"/);
59
- });
60
- });
61
-
62
- describe("validateHarness", () => {
63
- it("accepts empty, native, and cursor", () => {
64
- expect(() => validateHarness("")).not.toThrow();
65
- expect(() => validateHarness("native")).not.toThrow();
66
- expect(() => validateHarness("cursor")).not.toThrow();
67
- });
68
-
69
- it("rejects anything else before a network round trip", () => {
70
- expect(() => validateHarness("turbo")).toThrow(/must be "native" or "cursor"/);
71
- });
72
-
73
- it("rejects UI-only harness names that have no proto mapping", () => {
74
- // copilot/codex/etc. exist in display metadata but not on the wire —
75
- // accepting them here would stamp UNSPECIFIED and silently run native.
76
- expect(() => validateHarness("copilot")).toThrow(/must be "native" or "cursor"/);
77
- });
78
- });
79
-
80
- const BASE_FLAGS: AgentExecFlags = {
81
- message: "hi",
82
- attach: [],
83
- approveDefault: "",
84
- verbose: false,
85
- detach: false,
86
- workspace: [],
87
- branch: "",
88
- commit: "",
89
- env: [],
90
- envFile: [],
91
- secret: [],
92
- secretFile: [],
93
- model: "",
94
- autoApprove: false,
95
- mode: "",
96
- serviceTier: "",
97
- thinking: "",
98
- harness: "",
99
- };
100
-
101
- // prepareAgentExec only touches client.agentExecution for attachment uploads;
102
- // with no attachments a bare stub suffices.
103
- const STUB_CLIENT = { agentExecution: {} } as unknown as Stigmer;
104
-
105
- /** The shape of IdentityAccountPreferences the stubs below expose. */
106
- interface StubPreferences {
107
- readonly defaultHarness?: string;
108
- readonly defaultNativeModel?: string;
109
- readonly defaultCursorModel?: string;
110
- }
111
-
112
- /** Stub whose whoAmI resolves an account carrying the given preferences. */
113
- function clientWithPreferences(preferences: StubPreferences): Stigmer {
114
- return {
115
- agentExecution: {},
116
- identityAccount: {
117
- whoAmI: () => Promise.resolve({ spec: { preferences } }),
118
- },
119
- } as unknown as Stigmer;
120
- }
121
-
122
- /** Back-compat shorthand for the original native-model-only stub. */
123
- function clientWithPreference(defaultNativeModel: string): Stigmer {
124
- return clientWithPreferences({ defaultNativeModel });
125
- }
126
-
127
- /** Stub whose whoAmI rejects (auth failure, backend without the RPC, ...). */
128
- function clientWithFailingWhoAmI(): Stigmer {
129
- return {
130
- agentExecution: {},
131
- identityAccount: {
132
- whoAmI: () => Promise.reject(new Error("unimplemented")),
133
- },
134
- } as unknown as Stigmer;
135
- }
136
-
137
- /** Preference stub that also counts whoAmI invocations (round-trip pin). */
138
- function countingClient(preferences: StubPreferences): { client: Stigmer; calls: () => number } {
139
- let calls = 0;
140
- const client = {
141
- agentExecution: {},
142
- identityAccount: {
143
- whoAmI: () => {
144
- calls += 1;
145
- return Promise.resolve({ spec: { preferences } });
146
- },
147
- },
148
- } as unknown as Stigmer;
149
- return { client, calls: () => calls };
150
- }
151
-
152
- /** prepareAgentExec options as `run` passes them: the kind is served here. */
153
- const SERVED_RUN_OPTIONS = { accountPreferencesAvailable: true } as const;
154
-
155
- describe("prepareAgentExec env injection", () => {
156
- it("injects STIGMER_ORG_ID when absent", async () => {
157
- const prepared = await prepareAgentExec(BASE_FLAGS, STUB_CLIENT, "acme");
158
- expect(prepared.runtimeEnv.STIGMER_ORG_ID).toEqual({ value: "acme", isSecret: false });
159
- });
160
-
161
- it("does not override an explicit STIGMER_ORG_ID", async () => {
162
- const prepared = await prepareAgentExec(
163
- { ...BASE_FLAGS, env: ["STIGMER_ORG_ID=explicit"] },
164
- STUB_CLIENT,
165
- "acme",
166
- );
167
- expect(prepared.runtimeEnv.STIGMER_ORG_ID).toEqual({ value: "explicit", isSecret: false });
168
- });
169
-
170
- it("skips injection when org is empty", async () => {
171
- const prepared = await prepareAgentExec(BASE_FLAGS, STUB_CLIENT, "");
172
- expect(prepared.runtimeEnv.STIGMER_ORG_ID).toBeUndefined();
173
- });
174
-
175
- it("carries through scalar flags", async () => {
176
- const prepared = await prepareAgentExec(
177
- { ...BASE_FLAGS, message: "go", model: "claude", autoApprove: true, detach: true, mode: "plan" },
178
- STUB_CLIENT,
179
- "acme",
180
- );
181
- expect(prepared.message).toBe("go");
182
- expect(prepared.model).toBe("claude");
183
- expect(prepared.autoApproveAll).toBe(true);
184
- expect(prepared.detach).toBe(true);
185
- expect(prepared.mode).toBe("plan");
186
- });
187
- });
188
-
189
- describe("prepareAgentExec account-preference model fill (oss#293 Phase 1.5)", () => {
190
- it("fills an omitted --model from the account preference on cloud", async () => {
191
- const prepared = await prepareAgentExec(
192
- BASE_FLAGS,
193
- clientWithPreference("claude-sonnet-4.6"),
194
- "acme",
195
- undefined,
196
- { accountPreferencesAvailable: true },
197
- );
198
- expect(prepared.model).toBe("claude-sonnet-4.6");
199
- });
200
-
201
- it("an explicit --model always outranks the preference", async () => {
202
- const prepared = await prepareAgentExec(
203
- { ...BASE_FLAGS, model: "gpt-5.3" },
204
- clientWithPreference("claude-sonnet-4.6"),
205
- "acme",
206
- undefined,
207
- { accountPreferencesAvailable: true },
208
- );
209
- expect(prepared.model).toBe("gpt-5.3");
210
- });
211
-
212
- it("never consults identity where the kind is not served", async () => {
213
- // The failing stub doubles as a call detector: a backend that does not
214
- // serve identity accounts must not even attempt whoAmI, so a rejecting
215
- // client cannot affect the result. (20260911.11 A3: the gate is the
216
- // kind's tier, not the backend type — client/edition.ts resourceServedOn.)
217
- const prepared = await prepareAgentExec(
218
- BASE_FLAGS,
219
- clientWithFailingWhoAmI(),
220
- "acme",
221
- undefined,
222
- { accountPreferencesAvailable: false },
223
- );
224
- expect(prepared.model).toBe("");
225
- });
226
-
227
- it("falls through silently when whoAmI fails — a missing preference never fails a run", async () => {
228
- const prepared = await prepareAgentExec(
229
- BASE_FLAGS,
230
- clientWithFailingWhoAmI(),
231
- "acme",
232
- undefined,
233
- { accountPreferencesAvailable: true },
234
- );
235
- expect(prepared.model).toBe("");
236
- });
237
-
238
- it("stays empty when the account declares no native default", async () => {
239
- const prepared = await prepareAgentExec(
240
- BASE_FLAGS,
241
- clientWithPreference(""),
242
- "acme",
243
- undefined,
244
- { accountPreferencesAvailable: true },
245
- );
246
- expect(prepared.model).toBe("");
247
- });
248
- });
249
-
250
- describe("prepareAgentExec harness resolution (oss#293)", () => {
251
- it("fills an omitted --harness from the account preference on cloud when the caller opts in (run)", async () => {
252
- const prepared = await prepareAgentExec(
253
- BASE_FLAGS,
254
- clientWithPreferences({ defaultHarness: "cursor" }),
255
- "acme",
256
- undefined,
257
- SERVED_RUN_OPTIONS,
258
- );
259
- expect(prepared.harness).toBe("cursor");
260
- });
261
-
262
- it("an explicit --harness always outranks the account preference", async () => {
263
- // The per-run escape hatch: a cursor-preference user can still force a
264
- // native run without touching their settings.
265
- const prepared = await prepareAgentExec(
266
- { ...BASE_FLAGS, harness: "native" },
267
- clientWithPreferences({ defaultHarness: "cursor" }),
268
- "acme",
269
- undefined,
270
- SERVED_RUN_OPTIONS,
271
- );
272
- expect(prepared.harness).toBe("native");
273
- });
274
-
275
- it("an explicit --harness resolves as given when the server serves no account preferences", async () => {
276
- const prepared = await prepareAgentExec(
277
- { ...BASE_FLAGS, harness: "cursor" },
278
- STUB_CLIENT,
279
- "acme",
280
- undefined,
281
- { accountPreferencesAvailable: false },
282
- );
283
- expect(prepared.harness).toBe("cursor");
284
- });
285
-
286
- it("treats a malformed persisted harness as undeclared", async () => {
287
- // A client must not trust stored data it did not write: anything outside
288
- // the shipped allowlist resolves as if no preference existed.
289
- const prepared = await prepareAgentExec(
290
- BASE_FLAGS,
291
- clientWithPreferences({ defaultHarness: "devin" }),
292
- "acme",
293
- undefined,
294
- SERVED_RUN_OPTIONS,
295
- );
296
- expect(prepared.harness).toBe("");
297
- });
298
-
299
- it("resolves empty when whoAmI fails — a missing preference never fails a run", async () => {
300
- const prepared = await prepareAgentExec(
301
- BASE_FLAGS,
302
- clientWithFailingWhoAmI(),
303
- "acme",
304
- undefined,
305
- SERVED_RUN_OPTIONS,
306
- );
307
- expect(prepared.harness).toBe("");
308
- expect(prepared.model).toBe("");
309
- });
310
-
311
- it("never consults identity on a local backend, even with the opt-in", async () => {
312
- // The failing stub doubles as a call detector, as in the model-fill suite.
313
- const prepared = await prepareAgentExec(
314
- BASE_FLAGS,
315
- clientWithFailingWhoAmI(),
316
- "acme",
317
- undefined,
318
- { accountPreferencesAvailable: false },
319
- );
320
- expect(prepared.harness).toBe("");
321
- });
322
-
323
- it("resolves empty when nothing is declared anywhere", async () => {
324
- const prepared = await prepareAgentExec(
325
- BASE_FLAGS,
326
- clientWithPreferences({}),
327
- "acme",
328
- undefined,
329
- SERVED_RUN_OPTIONS,
330
- );
331
- expect(prepared.harness).toBe("");
332
- });
333
- });
334
-
335
- describe("prepareAgentExec harness-aware model fill (oss#293)", () => {
336
- const BOTH_MODELS: StubPreferences = {
337
- defaultNativeModel: "claude-sonnet-4.6",
338
- defaultCursorModel: "composer-2.5",
339
- };
340
-
341
- it("fills the cursor model when the explicit harness is cursor", async () => {
342
- const prepared = await prepareAgentExec(
343
- { ...BASE_FLAGS, harness: "cursor" },
344
- clientWithPreferences(BOTH_MODELS),
345
- "acme",
346
- undefined,
347
- SERVED_RUN_OPTIONS,
348
- );
349
- expect(prepared.model).toBe("composer-2.5");
350
- });
351
-
352
- it("fills the cursor model when the preference resolves the harness to cursor", async () => {
353
- const prepared = await prepareAgentExec(
354
- BASE_FLAGS,
355
- clientWithPreferences({ ...BOTH_MODELS, defaultHarness: "cursor" }),
356
- "acme",
357
- undefined,
358
- SERVED_RUN_OPTIONS,
359
- );
360
- expect(prepared.harness).toBe("cursor");
361
- expect(prepared.model).toBe("composer-2.5");
362
- });
363
-
364
- it("fills the native model when the harness resolves native or empty", async () => {
365
- const explicit = await prepareAgentExec(
366
- { ...BASE_FLAGS, harness: "native" },
367
- clientWithPreferences(BOTH_MODELS),
368
- "acme",
369
- undefined,
370
- SERVED_RUN_OPTIONS,
371
- );
372
- expect(explicit.model).toBe("claude-sonnet-4.6");
373
-
374
- const unset = await prepareAgentExec(
375
- BASE_FLAGS,
376
- clientWithPreferences(BOTH_MODELS),
377
- "acme",
378
- undefined,
379
- SERVED_RUN_OPTIONS,
380
- );
381
- expect(unset.model).toBe("claude-sonnet-4.6");
382
- });
383
-
384
- it("an explicit --model outranks the harness-matched preference", async () => {
385
- const prepared = await prepareAgentExec(
386
- { ...BASE_FLAGS, harness: "cursor", model: "gpt-5.3" },
387
- clientWithPreferences(BOTH_MODELS),
388
- "acme",
389
- undefined,
390
- SERVED_RUN_OPTIONS,
391
- );
392
- expect(prepared.model).toBe("gpt-5.3");
393
- });
394
-
395
- it("draft with an explicit --harness cursor fills the cursor model despite no harness opt-in (D5)", async () => {
396
- // D5 scopes only the silent preference fill; the model fill follows
397
- // whatever harness the user explicitly chose.
398
- const prepared = await prepareAgentExec(
399
- { ...BASE_FLAGS, harness: "cursor" },
400
- clientWithPreferences(BOTH_MODELS),
401
- "acme",
402
- undefined,
403
- { accountPreferencesAvailable: true },
404
- );
405
- expect(prepared.harness).toBe("cursor");
406
- expect(prepared.model).toBe("composer-2.5");
407
- });
408
-
409
- it("serves both fills from one whoAmI round trip, and none when both flags are explicit", async () => {
410
- const single = countingClient({ ...BOTH_MODELS, defaultHarness: "cursor" });
411
- const filled = await prepareAgentExec(BASE_FLAGS, single.client, "acme", undefined, SERVED_RUN_OPTIONS);
412
- expect(filled.harness).toBe("cursor");
413
- expect(filled.model).toBe("composer-2.5");
414
- expect(single.calls(), "harness + model fills share one whoAmI").toBe(1);
415
-
416
- const skipped = countingClient(BOTH_MODELS);
417
- const explicit = await prepareAgentExec(
418
- { ...BASE_FLAGS, harness: "native", model: "gpt-5.3" },
419
- skipped.client,
420
- "acme",
421
- undefined,
422
- SERVED_RUN_OPTIONS,
423
- );
424
- expect(explicit.harness).toBe("native");
425
- expect(explicit.model).toBe("gpt-5.3");
426
- expect(skipped.calls(), "explicit flags leave nothing to fill — no round trip").toBe(0);
427
- });
428
- });
@@ -1,157 +0,0 @@
1
- // In-process integration test for live `run workflow` streaming.
2
- //
3
- // Stands up a real Connect backend serving workflowExecution.subscribeEvents
4
- // (the canonical event stream) plus get + submitApproval, points an SDK node
5
- // client at it, and drives streamWorkflowExecution end to end: NDJSON vs inline
6
- // rendering (D-WF-1), policy-driven approval submission on approval_requested,
7
- // terminal-event stop, and the final-Get epilogue summary.
8
-
9
- import { create } from "@bufbuild/protobuf";
10
- import type { ConnectRouter } from "@connectrpc/connect";
11
- import { connectNodeAdapter } from "@connectrpc/connect-node";
12
- import { ApprovalAction } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
13
- import { WorkflowExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/api_pb";
14
- import { WorkflowExecutionCommandController } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/command_pb";
15
- import { ExecutionPhase, WorkflowTaskStatus } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
16
- import {
17
- type WorkflowExecutionEvent,
18
- WorkflowExecutionEventSchema,
19
- WorkflowEventType,
20
- } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/event_pb";
21
- import type { SubmitWorkflowApprovalInput } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/io_pb";
22
- import { WorkflowExecutionQueryController } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/query_pb";
23
- import type { Stigmer } from "@stigmer/sdk";
24
- import { createNodeClient, normalizeEndpoint } from "@stigmer/sdk/node";
25
- import { createServer as createHttp2Server, type Http2Server, type ServerHttp2Session } from "node:http2";
26
- import type { AddressInfo } from "node:net";
27
- import { afterAll, beforeAll, beforeEach, describe, expect, it } from "vitest";
28
- import { streamWorkflowExecution, type WorkflowStreamStreams } from "./workflow-stream.js";
29
-
30
- let backend: Http2Server;
31
- let client: Stigmer;
32
- const openSessions = new Set<ServerHttp2Session>();
33
- let approvals: SubmitWorkflowApprovalInput[] = [];
34
-
35
- beforeEach(() => {
36
- approvals = [];
37
- });
38
-
39
- // Final state returned by the epilogue Get: one task done, one failed.
40
- const finalExec = create(WorkflowExecutionSchema, {
41
- metadata: { id: "wex_1", name: "Deploy" },
42
- status: {
43
- phase: ExecutionPhase.EXECUTION_COMPLETED,
44
- startedAt: "2026-06-12T10:00:00Z",
45
- completedAt: "2026-06-12T10:01:30Z",
46
- tasks: [
47
- { taskName: "build", status: WorkflowTaskStatus.WORKFLOW_TASK_COMPLETED },
48
- { taskName: "ship", status: WorkflowTaskStatus.WORKFLOW_TASK_FAILED },
49
- ],
50
- },
51
- });
52
-
53
- function event(type: WorkflowEventType, payload: WorkflowExecutionEvent["payload"], taskName = "") {
54
- return create(WorkflowExecutionEventSchema, { eventType: type, occurredAt: "2026-06-12T10:00:01Z", taskName, payload });
55
- }
56
-
57
- beforeAll(async () => {
58
- const routes = (router: ConnectRouter) => {
59
- router.service(WorkflowExecutionQueryController, {
60
- get: () => finalExec,
61
- subscribeEvents: async function* () {
62
- yield event(WorkflowEventType.execution_started, { case: "executionStarted", value: {} as never });
63
- yield event(WorkflowEventType.task_started, { case: "taskStarted", value: {} as never }, "build");
64
- yield event(
65
- WorkflowEventType.approval_requested,
66
- { case: "approvalRequested", value: { toolCallId: "tc_99", prompt: "delete prod?" } as never },
67
- "ship",
68
- );
69
- yield event(WorkflowEventType.execution_completed, { case: "executionCompleted", value: {} as never });
70
- },
71
- });
72
- router.service(WorkflowExecutionCommandController, {
73
- submitApproval: (req) => (approvals.push(req), finalExec),
74
- });
75
- };
76
-
77
- backend = createHttp2Server(connectNodeAdapter({ routes }));
78
- backend.on("session", (session) => {
79
- openSessions.add(session);
80
- session.on("close", () => openSessions.delete(session));
81
- });
82
- await new Promise<void>((resolve) => backend.listen(0, "127.0.0.1", resolve));
83
- const port = (backend.address() as AddressInfo).port;
84
- client = createNodeClient({ baseUrl: normalizeEndpoint(`127.0.0.1:${port}`) });
85
- });
86
-
87
- afterAll(async () => {
88
- for (const session of openSessions) session.destroy();
89
- await new Promise<void>((resolve) => backend.close(() => resolve()));
90
- });
91
-
92
- function capture(): { streams: WorkflowStreamStreams; data: () => string; status: () => string } {
93
- const out: string[] = [];
94
- const err: string[] = [];
95
- return {
96
- streams: { data: (l) => out.push(l), status: (l) => err.push(l), colorize: false },
97
- data: () => out.join(""),
98
- status: () => err.join("\n"),
99
- };
100
- }
101
-
102
- describe("live run workflow streaming", () => {
103
- it("renders inline plaintext, auto-resolves approval, and prints the epilogue", async () => {
104
- const cap = capture();
105
- const result = await streamWorkflowExecution(
106
- { client, executionId: "wex_1", outputMode: "inline", defaultAction: ApprovalAction.APPROVE },
107
- cap.streams,
108
- );
109
-
110
- const data = cap.data();
111
- expect(data).toContain("execution started");
112
- expect(data).toContain("task started: build");
113
- expect(data).toContain("approval requested: ship — delete prod?");
114
- expect(data).toContain("execution completed");
115
-
116
- // Policy resolved the approval: one submit with the right tool call + action.
117
- expect(approvals).toHaveLength(1);
118
- expect(approvals[0].toolCallId).toBe("tc_99");
119
- expect(approvals[0].action).toBe(ApprovalAction.APPROVE);
120
- expect(cap.status()).toContain("Approval auto-resolved (approve) for tc_99");
121
-
122
- // Epilogue summary from the final Get.
123
- expect(cap.status()).toContain("Workflow completed");
124
- expect(cap.status()).toContain("1 completed");
125
- expect(cap.status()).toContain("1 failed");
126
- expect(result.metadata?.id).toBe("wex_1");
127
- });
128
-
129
- it("emits NDJSON event envelopes with canonical type names (D-WF-1)", async () => {
130
- const cap = capture();
131
- await streamWorkflowExecution(
132
- { client, executionId: "wex_1", outputMode: "json", defaultAction: ApprovalAction.APPROVE },
133
- cap.streams,
134
- );
135
-
136
- const lines = cap.data().trim().split("\n").map((l) => JSON.parse(l));
137
- expect(lines.map((e) => e.type)).toEqual([
138
- "execution_started",
139
- "task_started",
140
- "approval_requested",
141
- "execution_completed",
142
- ]);
143
- const approval = lines.find((e) => e.type === "approval_requested");
144
- expect(approval.payload.task).toBe("ship");
145
- });
146
-
147
- it("leaves the approval for the user when no policy is configured", async () => {
148
- const cap = capture();
149
- await streamWorkflowExecution(
150
- { client, executionId: "wex_1", outputMode: "inline", defaultAction: ApprovalAction.UNSPECIFIED },
151
- cap.streams,
152
- );
153
-
154
- expect(approvals).toHaveLength(0);
155
- expect(cap.status()).toContain("stigmer execution approve wex_1 --tool-call tc_99 --action approve");
156
- });
157
- });
@@ -1,93 +0,0 @@
1
- // Unit tests for workspace flag parsing: git vs local variant selection, SSH
2
- // rejection, branch/commit applicability rules, name derivation, and duplicate
3
- // detection.
4
-
5
- import { mkdtempSync, rmSync } from "node:fs";
6
- import { tmpdir } from "node:os";
7
- import { basename, join } from "node:path";
8
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
9
- import { localWorkspaceRoots, parseWorkspaceEntries, workspaceNames } from "./workspace.js";
10
-
11
- let dir: string;
12
- beforeEach(() => {
13
- dir = mkdtempSync(join(tmpdir(), "ws-test-"));
14
- });
15
- afterEach(() => {
16
- rmSync(dir, { recursive: true, force: true });
17
- });
18
-
19
- describe("parseWorkspaceEntries (git)", () => {
20
- it("builds a GitRepoSource with branch and commit", () => {
21
- const entries = parseWorkspaceEntries(["https://github.com/acme/my-app.git"], "main", "abc123");
22
- expect(entries).toHaveLength(1);
23
- expect(entries[0].name).toBe("my-app");
24
- const source = entries[0].source;
25
- expect(source?.source.case).toBe("gitRepo");
26
- if (source?.source.case === "gitRepo") {
27
- expect(source.source.value.url).toBe("https://github.com/acme/my-app.git");
28
- expect(source.source.value.branch).toBe("main");
29
- expect(source.source.value.commit).toBe("abc123");
30
- }
31
- });
32
-
33
- it("derives the repo name from a URL without .git or trailing slash", () => {
34
- expect(parseWorkspaceEntries(["https://github.com/acme/repo/"], "", "")[0].name).toBe("repo");
35
- });
36
-
37
- it("rejects SSH git URLs with HTTPS guidance", () => {
38
- expect(() => parseWorkspaceEntries(["git@github.com:acme/x.git"], "", "")).toThrow(/SSH git URLs are not supported/);
39
- });
40
- });
41
-
42
- describe("parseWorkspaceEntries (local)", () => {
43
- it("builds a LocalPathSource from an existing directory", () => {
44
- const entries = parseWorkspaceEntries([dir], "", "");
45
- expect(entries[0].name).toBe(basename(dir));
46
- expect(entries[0].source?.source.case).toBe("localPath");
47
- if (entries[0].source?.source.case === "localPath") {
48
- expect(entries[0].source.source.value.path).toBe(dir);
49
- }
50
- });
51
-
52
- it("rejects a non-existent local path", () => {
53
- expect(() => parseWorkspaceEntries([join(dir, "missing")], "", "")).toThrow(/does not exist/);
54
- });
55
-
56
- it("rejects --branch/--commit on a local workspace", () => {
57
- expect(() => parseWorkspaceEntries([dir], "main", "")).toThrow(/only valid with git workspace/);
58
- });
59
- });
60
-
61
- describe("parseWorkspaceEntries (rules)", () => {
62
- it("returns an empty list when no workspace is given", () => {
63
- expect(parseWorkspaceEntries([], "", "")).toEqual([]);
64
- });
65
-
66
- it("rejects --branch/--commit without --workspace", () => {
67
- expect(() => parseWorkspaceEntries([], "main", "")).toThrow(/require --workspace/);
68
- });
69
-
70
- it("rejects --branch/--commit with more than one workspace", () => {
71
- expect(() =>
72
- parseWorkspaceEntries(["https://github.com/a/b.git", "https://github.com/c/d.git"], "main", ""),
73
- ).toThrow(/single git workspace/);
74
- });
75
-
76
- it("rejects duplicate derived names", () => {
77
- expect(() =>
78
- parseWorkspaceEntries(["https://github.com/a/dup.git", "https://github.com/b/dup.git"], "", ""),
79
- ).toThrow(/duplicate workspace name/);
80
- });
81
- });
82
-
83
- describe("derived helpers", () => {
84
- it("localWorkspaceRoots returns only local paths", () => {
85
- const entries = parseWorkspaceEntries([dir, "https://github.com/a/b.git"], "", "");
86
- expect(localWorkspaceRoots(entries)).toEqual([dir]);
87
- });
88
-
89
- it("workspaceNames returns every entry name", () => {
90
- const entries = parseWorkspaceEntries([dir, "https://github.com/a/b.git"], "", "");
91
- expect(workspaceNames(entries)).toEqual([basename(dir), "b"]);
92
- });
93
- });