@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,168 +0,0 @@
1
- // Command-level contract for `validate`. Drives the real commander program
2
- // against temp files and asserts the classified exit code and, for the plugin
3
- // route, the rendered output. The contract: 0 = valid (a plugin with warnings
4
- // is still 0), 2 = invalid input (bad path, bad YAML, unknown kind, schema
5
- // failure, a plugin the reader refuses), 1 = unexpected. This is a
6
- // deliberate, documented refinement over the Go CLI, which returned a
7
- // generic exit 1 for all validate failures. The YAML cases are unchanged by
8
- // the plugin route and pin that it stays out of their way.
9
-
10
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
11
- import { tmpdir } from "node:os";
12
- import { join } from "node:path";
13
- import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
14
- import { classify, ExitCode } from "../errors/index.js";
15
- import { buildProgram } from "../program.js";
16
-
17
- let dir: string;
18
- let plugin: string;
19
- let brokenPlugin: string;
20
-
21
- function write(root: string, rel: string, content: string): void {
22
- const full = join(root, rel);
23
- mkdirSync(join(full, ".."), { recursive: true });
24
- writeFileSync(full, content);
25
- }
26
-
27
- beforeAll(() => {
28
- dir = mkdtempSync(join(tmpdir(), "stigmer-validate-"));
29
- writeFileSync(
30
- join(dir, "valid.yaml"),
31
- [
32
- "apiVersion: agentic.stigmer.ai/v1",
33
- "kind: Agent",
34
- "metadata:",
35
- " name: Reviewer",
36
- " slug: reviewer",
37
- " org: acme",
38
- "spec:",
39
- " description: reviews code",
40
- "",
41
- ].join("\n"),
42
- );
43
- writeFileSync(join(dir, "bad-schema.yaml"), ["kind: Agent", "metadata: not-an-object", ""].join("\n"));
44
- writeFileSync(join(dir, "unknown.yaml"), ["kind: Banana", "metadata:", " name: x", ""].join("\n"));
45
-
46
- // A Cursor plugin with a header token the manifest does not declare: valid,
47
- // with one warning, and an ai.stigmer/ document that must not be validated
48
- // as a loose resource.
49
- plugin = mkdtempSync(join(tmpdir(), "stigmer-validate-plugin-"));
50
- write(plugin, ".cursor-plugin/plugin.json", JSON.stringify({ name: "github", version: "1.0.0", mcpServers: "./mcp.json", logo: "assets/logo.svg" }));
51
- write(plugin, "mcp.json", JSON.stringify({ mcpServers: { github: { type: "http", url: "https://api.example.com/mcp/", headers: { Authorization: "Bearer ${GITHUB_TOKEN}" } } } }));
52
- write(plugin, "ai.stigmer/agent.yaml", "not: a valid resource document\n");
53
- write(plugin, "assets/logo.svg", "<svg/>");
54
-
55
- // The same plugin with the URL made a variable: the one refusal.
56
- brokenPlugin = mkdtempSync(join(tmpdir(), "stigmer-validate-broken-"));
57
- write(brokenPlugin, ".cursor-plugin/plugin.json", JSON.stringify({ name: "Broken Name", mcpServers: "./mcp.json" }));
58
- write(brokenPlugin, "mcp.json", JSON.stringify({ mcpServers: { crm: { type: "http", url: "${CRM_URL}", auth: { scopes: ["a"] } } } }));
59
- });
60
-
61
- afterAll(() => {
62
- for (const path of [dir, plugin, brokenPlugin]) rmSync(path, { recursive: true, force: true });
63
- });
64
-
65
- interface Run {
66
- readonly exitCode: number;
67
- readonly stdout: string;
68
- readonly stderr: string;
69
- readonly error: unknown;
70
- }
71
-
72
- // Runs `validate <args>` with output captured, returning the classified exit
73
- // code (0 on success) and what reached each stream.
74
- async function runValidate(...args: string[]): Promise<Run> {
75
- const program = buildProgram();
76
- program.exitOverride();
77
- let stdout = "";
78
- let stderr = "";
79
- const outSpy = vi.spyOn(process.stdout, "write").mockImplementation((chunk) => {
80
- stdout += String(chunk);
81
- return true;
82
- });
83
- const errSpy = vi.spyOn(process.stderr, "write").mockImplementation((chunk) => {
84
- stderr += String(chunk);
85
- return true;
86
- });
87
- try {
88
- await program.parseAsync(["node", "stigmer", "validate", ...args]);
89
- return { exitCode: ExitCode.Success, stdout, stderr, error: undefined };
90
- } catch (err) {
91
- return { exitCode: classify(err)?.exitCode ?? -1, stdout, stderr, error: err };
92
- } finally {
93
- outSpy.mockRestore();
94
- errSpy.mockRestore();
95
- }
96
- }
97
-
98
- describe("validate exit codes (YAML)", () => {
99
- it("exits 0 for a valid resource", async () => {
100
- expect((await runValidate("-f", join(dir, "valid.yaml"))).exitCode).toBe(ExitCode.Success);
101
- });
102
-
103
- it("fails the batch when a directory holds an invalid file", async () => {
104
- expect((await runValidate("-f", dir)).exitCode).not.toBe(ExitCode.Success);
105
- });
106
-
107
- it("exits 2 for a schema-invalid resource", async () => {
108
- expect((await runValidate("-f", join(dir, "bad-schema.yaml"))).exitCode).toBe(ExitCode.Usage);
109
- });
110
-
111
- it("exits 2 for an unknown resource kind", async () => {
112
- expect((await runValidate("-f", join(dir, "unknown.yaml"))).exitCode).toBe(ExitCode.Usage);
113
- });
114
-
115
- it("exits 2 for a path that does not exist", async () => {
116
- expect((await runValidate("-f", join(dir, "missing.yaml"))).exitCode).toBe(ExitCode.Usage);
117
- });
118
- });
119
-
120
- describe("validate on a plugin directory", () => {
121
- it("accepts the plugin with a warning status, exit 0, everything on stderr", async () => {
122
- const run = await runValidate("-f", plugin);
123
- expect(run.exitCode).toBe(ExitCode.Success);
124
- expect(run.stdout).toBe("");
125
- expect(run.stderr).toContain("Plugin 'github' is valid with 1 warning");
126
- expect(run.stderr).toContain("Cursor plugin");
127
- // Section keys are padded to the widest key, so match key and value loosely.
128
- expect(run.stderr).toMatch(/MCP servers\s+1: github \(http\)/);
129
- expect(run.stderr).toMatch(/Variables\s+1: GITHUB_TOKEN \(inferred\)/);
130
- expect(run.stderr).toMatch(/Files\s+4 read, 0 excluded by ignore rules/);
131
- expect(run.stderr).toMatch(/Stigmer overlay\s+agent/);
132
- expect(run.stderr).toContain("variable 'GITHUB_TOKEN' is referenced by MCP server 'github' but not declared");
133
- expect(run.stderr).toContain("- logo (.cursor-plugin/plugin.json#logo)");
134
- });
135
-
136
- it("emits the normalised package as JSON data on stdout with --json", async () => {
137
- const run = await runValidate("-f", plugin, "--json");
138
- expect(run.exitCode).toBe(ExitCode.Success);
139
- expect(run.stderr).toBe("");
140
- const parsed = JSON.parse(run.stdout);
141
- expect(parsed.status).toBe("warning");
142
- expect(parsed.data.plugin).toMatchObject({
143
- name: "github",
144
- dialect: "cursor",
145
- mcpServers: [{ name: "github", transport: "http", env: ["GITHUB_TOKEN"] }],
146
- variables: [{ name: "GITHUB_TOKEN", isSecret: true, optional: false, declaredBy: "inferred" }],
147
- overlay: { agent: "ai.stigmer/agent.yaml", workflows: [], mcpServers: [] },
148
- });
149
- expect(parsed.data.warnings.map((w: { kind: string }) => w.kind)).toEqual(["variable-inferred"]);
150
- });
151
-
152
- it("prints only the status line with --quiet", async () => {
153
- const run = await runValidate("-f", plugin, "--quiet");
154
- expect(run.stderr.trim()).toBe("⚠ Plugin 'github' is valid with 1 warning");
155
- });
156
-
157
- it("refuses with exit 2 and every problem's sentence", async () => {
158
- const run = await runValidate("-f", brokenPlugin);
159
- expect(run.exitCode).toBe(ExitCode.Usage);
160
- const message = (run.error as Error).message;
161
- expect(message).toContain("plugin cannot be installed, 2 problems found:");
162
- expect(message).toContain("plugin name 'Broken Name' in '.cursor-plugin/plugin.json' is invalid");
163
- expect(message).toContain("MCP server 'crm' in 'mcp.json' has a variable in its 'url'");
164
- // Warnings ride along under the refusal so one run says everything.
165
- expect(message).toContain("and 1 warning:");
166
- expect(message).toContain("MCP server 'crm' in 'mcp.json' has an 'auth' block Stigmer does not read");
167
- });
168
- });
@@ -1,132 +0,0 @@
1
- import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
4
- import { afterEach, describe, expect, it } from "vitest";
5
- import { setStandalone } from "../runtime.js";
6
- import { getDefault, isCloudMode, load, save } from "./config.js";
7
-
8
- function tempConfigPath(): string {
9
- const dir = mkdtempSync(join(tmpdir(), "stigmer-cli-config-"));
10
- return join(dir, "config.yaml");
11
- }
12
-
13
- afterEach(() => {
14
- setStandalone(false);
15
- });
16
-
17
- describe("load", () => {
18
- it("returns the local default when the file is missing", () => {
19
- const config = load(join(tempConfigPath(), "does-not-exist.yaml"));
20
- expect(config).toEqual(getDefault());
21
- expect(isCloudMode(config)).toBe(false);
22
- });
23
-
24
- it("returns the default in standalone mode without reading the file", () => {
25
- const path = tempConfigPath();
26
- writeFileSync(path, "backend:\n type: cloud\n");
27
- setStandalone(true);
28
- expect(load(path)).toEqual(getDefault());
29
- });
30
-
31
- it("migrates a legacy cloud config into the named model on load", () => {
32
- const path = tempConfigPath();
33
- writeFileSync(
34
- path,
35
- "backend:\n type: cloud\n cloud:\n endpoint: api.stigmer.ai:443\n org_id: acme\ncontext:\n organization: acme\n",
36
- );
37
- const config = load(path);
38
- // The legacy slot becomes the reserved "cloud" entry; the legacy type
39
- // selects it as current. The slot itself is not carried forward.
40
- expect(config.current_backend).toBe("cloud");
41
- expect(config.backends?.["cloud"]).toEqual({
42
- type: "cloud",
43
- endpoint: "api.stigmer.ai:443",
44
- org_id: "acme",
45
- });
46
- expect(config.backend.cloud).toBeUndefined();
47
- expect(config.context?.organization).toBe("acme");
48
- expect(isCloudMode(config)).toBe(true);
49
- });
50
-
51
- it("parses a named-model config with selfhost entries", () => {
52
- const path = tempConfigPath();
53
- writeFileSync(
54
- path,
55
- "backend:\n type: cloud\nbackends:\n staging:\n type: selfhost\n endpoint: stigmer.example.com:7234\n api_key: stk_x\ncurrent_backend: staging\n",
56
- );
57
- const config = load(path);
58
- expect(config.current_backend).toBe("staging");
59
- expect(config.backends?.["staging"]?.type).toBe("selfhost");
60
- expect(config.backends?.["staging"]?.api_key).toBe("stk_x");
61
- expect(isCloudMode(config)).toBe(false);
62
- });
63
- });
64
-
65
- describe("save", () => {
66
- it("round-trips a config and writes a 0600 file with the doc header", () => {
67
- const path = tempConfigPath();
68
- const config = getDefault();
69
- (config.backends ??= {})["cloud"] = {
70
- type: "cloud",
71
- endpoint: "api.stigmer.ai:443",
72
- token: "t",
73
- org_id: "acme",
74
- };
75
- config.current_backend = "cloud";
76
- save(config, path);
77
-
78
- const text = readFileSync(path, "utf8");
79
- expect(text).toContain("# Stigmer CLI Configuration");
80
- const reloaded = load(path);
81
- expect(reloaded.backends).toEqual(config.backends);
82
- expect(reloaded.current_backend).toBe("cloud");
83
- // The legacy mirror is written for older readers.
84
- expect(reloaded.backend.type).toBe("cloud");
85
-
86
- rmSync(path);
87
- });
88
-
89
- it("writes a legacy-loaded cloud config in the named shape (the one-time migration)", () => {
90
- const path = tempConfigPath();
91
- writeFileSync(
92
- path,
93
- "backend:\n type: cloud\n cloud:\n endpoint: api.stigmer.ai:443\n token: t\n",
94
- );
95
- save(load(path), path);
96
-
97
- const text = readFileSync(path, "utf8");
98
- expect(text).toContain("backends:");
99
- expect(text).toContain("current_backend: cloud");
100
- // The legacy slot is gone; its content lives in backends.cloud.
101
- expect(text).not.toContain(" cloud:\n endpoint");
102
- const reloaded = load(path);
103
- expect(reloaded.backends?.["cloud"]?.token).toBe("t");
104
- });
105
-
106
- it("keeps a pristine local config byte-stable (no named-model keys appear)", () => {
107
- const path = tempConfigPath();
108
- save(getDefault(), path);
109
- const text = readFileSync(path, "utf8");
110
- expect(text).not.toContain("backends:");
111
- expect(text).not.toContain("current_backend:");
112
- expect(text).toContain("type: local");
113
- });
114
-
115
- it("preserves the opaque local backend section across a load/save round-trip", () => {
116
- const path = tempConfigPath();
117
- writeFileSync(
118
- path,
119
- "backend:\n type: local\n local:\n temporal:\n managed: true\n execution:\n mode: local\n",
120
- );
121
-
122
- const config = load(path);
123
- // Mutate an unrelated field, then save.
124
- (config.context ??= {}).organization = "acme";
125
- save(config, path);
126
-
127
- const reloaded = readFileSync(path, "utf8");
128
- expect(reloaded).toContain("managed: true");
129
- expect(reloaded).toContain("mode: local");
130
- expect(reloaded).toContain("organization: acme");
131
- });
132
- });
@@ -1,61 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { UsageError } from "../errors/usage-error.js";
3
- import { getDefault } from "./config.js";
4
- import { configKeyNames, getConfigValue, setConfigValue } from "./keys.js";
5
-
6
- describe("config keys", () => {
7
- it("lists the known keys sorted", () => {
8
- expect(configKeyNames()).toEqual([
9
- "backend.cloud.endpoint",
10
- "backend.cloud.org_id",
11
- "backend.type",
12
- "context.organization",
13
- "current_backend",
14
- ]);
15
- });
16
-
17
- it("gets the backend type", () => {
18
- expect(getConfigValue(getDefault(), "backend.type")).toBe("local");
19
- });
20
-
21
- it("returns empty string for unset nested keys", () => {
22
- expect(getConfigValue(getDefault(), "backend.cloud.org_id")).toBe("");
23
- });
24
-
25
- it("sets a nested key, creating the reserved cloud entry", () => {
26
- const config = getDefault();
27
- setConfigValue(config, "backend.cloud.org_id", "acme");
28
- expect(config.backends?.["cloud"]?.org_id).toBe("acme");
29
- expect(getConfigValue(config, "backend.cloud.org_id")).toBe("acme");
30
- });
31
-
32
- it("backend.type set to cloud selects the reserved cloud entry", () => {
33
- const config = getDefault();
34
- setConfigValue(config, "backend.type", "cloud");
35
- expect(config.current_backend).toBe("cloud");
36
- expect(config.backends?.["cloud"]?.type).toBe("cloud");
37
- expect(getConfigValue(config, "backend.type")).toBe("cloud");
38
- });
39
-
40
- it("current_backend switches only to known names", () => {
41
- const config = getDefault();
42
- expect(() => setConfigValue(config, "current_backend", "nope")).toThrow(
43
- UsageError,
44
- );
45
- setConfigValue(config, "current_backend", "local");
46
- expect(getConfigValue(config, "current_backend")).toBe("local");
47
- });
48
-
49
- it("validates backend.type values", () => {
50
- expect(() => setConfigValue(getDefault(), "backend.type", "bogus")).toThrow(
51
- UsageError,
52
- );
53
- });
54
-
55
- it("rejects unknown keys", () => {
56
- expect(() => getConfigValue(getDefault(), "nope.nope")).toThrow(UsageError);
57
- expect(() => setConfigValue(getDefault(), "nope.nope", "x")).toThrow(
58
- UsageError,
59
- );
60
- });
61
- });
@@ -1,242 +0,0 @@
1
- // Pins the effective-value resolvers over the named-backend model (O3):
2
- // env > active entry > defaults for endpoint/token/org/console-URL, the
3
- // selfhost credential lane (api_key), and the auth gate's three postures
4
- // (local never, selfhost never client-side, cloud requires a credential).
5
-
6
- import { afterEach, describe, expect, it } from "vitest";
7
- import { CliExitError } from "../errors/index.js";
8
- import type { Config, NamedBackendConfig } from "./config.js";
9
- import {
10
- DEFAULT_CLOUD_CONSOLE_URL,
11
- ensureAuthenticated,
12
- resolveConsoleURL,
13
- resolveContextOrganization,
14
- resolveEndpoint,
15
- resolveOrganization,
16
- resolveToken,
17
- } from "./resolve.js";
18
-
19
- const ENV_KEYS = [
20
- "STIGMER_SERVER_ADDRESS",
21
- "STIGMER_API_KEY",
22
- "STIGMER_ORG_ID",
23
- ] as const;
24
-
25
- afterEach(() => {
26
- for (const key of ENV_KEYS) delete process.env[key];
27
- });
28
-
29
- function localConfig(context?: Config["context"]): Config {
30
- return {
31
- backend: { type: "local" },
32
- backends: {},
33
- current_backend: "local",
34
- context,
35
- };
36
- }
37
-
38
- function cloudConfig(
39
- overrides: Partial<NamedBackendConfig> = {},
40
- context?: Config["context"],
41
- ): Config {
42
- return {
43
- backend: { type: "cloud" },
44
- backends: {
45
- cloud: { type: "cloud", endpoint: "cloud.example:443", ...overrides },
46
- },
47
- current_backend: "cloud",
48
- context,
49
- };
50
- }
51
-
52
- function selfhostConfig(overrides: Partial<NamedBackendConfig> = {}): Config {
53
- return {
54
- backend: { type: "cloud" },
55
- backends: {
56
- staging: {
57
- type: "selfhost",
58
- endpoint: "stigmer.example.com:7234",
59
- ...overrides,
60
- },
61
- },
62
- current_backend: "staging",
63
- };
64
- }
65
-
66
- describe("resolveEndpoint", () => {
67
- it("defaults to the local daemon address in local mode", () => {
68
- expect(resolveEndpoint(localConfig())).toBe("localhost:7234");
69
- });
70
-
71
- it("uses the cloud default when no endpoint is configured", () => {
72
- expect(resolveEndpoint(cloudConfig({ endpoint: undefined }))).toBe(
73
- "api.stigmer.ai:443",
74
- );
75
- });
76
-
77
- it("prefers the configured cloud endpoint", () => {
78
- expect(resolveEndpoint(cloudConfig())).toBe("cloud.example:443");
79
- });
80
-
81
- it("uses the selfhost entry's endpoint", () => {
82
- expect(resolveEndpoint(selfhostConfig())).toBe("stigmer.example.com:7234");
83
- });
84
-
85
- it("refuses a selfhost entry without an endpoint (hand-edited config)", () => {
86
- expect(() =>
87
- resolveEndpoint(selfhostConfig({ endpoint: undefined })),
88
- ).toThrow(CliExitError);
89
- });
90
-
91
- it("lets STIGMER_SERVER_ADDRESS override everything", () => {
92
- process.env.STIGMER_SERVER_ADDRESS = "override:7234";
93
- expect(resolveEndpoint(cloudConfig())).toBe("override:7234");
94
- });
95
- });
96
-
97
- describe("resolveToken", () => {
98
- it("prefers STIGMER_API_KEY over the config token", () => {
99
- process.env.STIGMER_API_KEY = "env-key";
100
- expect(resolveToken(cloudConfig({ token: "config-token" }))).toBe(
101
- "env-key",
102
- );
103
- });
104
-
105
- it("falls back to the cloud entry's login token", () => {
106
- expect(resolveToken(cloudConfig({ token: "config-token" }))).toBe(
107
- "config-token",
108
- );
109
- });
110
-
111
- it("uses the selfhost entry's api_key", () => {
112
- expect(resolveToken(selfhostConfig({ api_key: "stk_stored" }))).toBe(
113
- "stk_stored",
114
- );
115
- });
116
-
117
- it("returns empty string when unauthenticated", () => {
118
- expect(resolveToken(cloudConfig({ endpoint: undefined }))).toBe("");
119
- expect(resolveToken(selfhostConfig())).toBe("");
120
- expect(resolveToken(localConfig())).toBe("");
121
- });
122
- });
123
-
124
- describe("resolveOrganization", () => {
125
- it("prefers the --org flag override", () => {
126
- process.env.STIGMER_ORG_ID = "env-org";
127
- const config = cloudConfig({ org_id: "config-org" });
128
- expect(resolveOrganization(config, "flag-org")).toBe("flag-org");
129
- });
130
-
131
- it("falls back to STIGMER_ORG_ID, then context, then the entry's org_id", () => {
132
- process.env.STIGMER_ORG_ID = "env-org";
133
- expect(resolveOrganization(cloudConfig({ org_id: "config-org" }))).toBe(
134
- "env-org",
135
- );
136
- });
137
-
138
- it("uses context organization when no flag/env is set", () => {
139
- const config = cloudConfig(
140
- { org_id: "legacy" },
141
- { organization: "ctx-org" },
142
- );
143
- expect(resolveOrganization(config)).toBe("ctx-org");
144
- expect(resolveContextOrganization(config)).toBe("ctx-org");
145
- });
146
-
147
- it("falls back to the entry's org_id", () => {
148
- expect(resolveContextOrganization(cloudConfig({ org_id: "legacy" }))).toBe(
149
- "legacy",
150
- );
151
- });
152
-
153
- it("defaults to the stigmer org in local mode when nothing is configured", () => {
154
- expect(resolveOrganization(localConfig())).toBe("stigmer");
155
- });
156
-
157
- it("defaults to the stigmer org on a selfhost backend (it IS the OSS server)", () => {
158
- expect(resolveOrganization(selfhostConfig())).toBe("stigmer");
159
- });
160
-
161
- it("prefers an explicit context org over the local default", () => {
162
- expect(
163
- resolveOrganization(localConfig({ organization: "my-local-org" })),
164
- ).toBe("my-local-org");
165
- });
166
-
167
- it("does not apply the local default in cloud mode (org stays empty)", () => {
168
- expect(resolveOrganization(cloudConfig({ endpoint: undefined }))).toBe("");
169
- });
170
-
171
- it("reports an unset local org as empty via resolveContextOrganization (no implicit default)", () => {
172
- // The implicit local default lives only in resolveOrganization (effective
173
- // org for operations); the context query must stay faithful so config/context
174
- // display can show "(not set)".
175
- expect(resolveContextOrganization(localConfig())).toBe("");
176
- });
177
- });
178
-
179
- describe("resolveConsoleURL", () => {
180
- it("prefers the STIGMER_CONSOLE_URL override", () => {
181
- expect(
182
- resolveConsoleURL(cloudConfig(), {
183
- STIGMER_CONSOLE_URL: "https://console.example",
184
- } as NodeJS.ProcessEnv),
185
- ).toBe("https://console.example");
186
- });
187
-
188
- it("uses the local web-console port for the local backend", () => {
189
- expect(resolveConsoleURL(localConfig(), {} as NodeJS.ProcessEnv)).toBe(
190
- "http://localhost:7234",
191
- );
192
- });
193
-
194
- it("uses the cloud console URL for the cloud backend", () => {
195
- expect(resolveConsoleURL(cloudConfig(), {} as NodeJS.ProcessEnv)).toBe(
196
- DEFAULT_CLOUD_CONSOLE_URL,
197
- );
198
- });
199
-
200
- it("derives the selfhost console from the entry's endpoint (one-origin rule)", () => {
201
- expect(resolveConsoleURL(selfhostConfig(), {} as NodeJS.ProcessEnv)).toBe(
202
- "http://stigmer.example.com:7234",
203
- );
204
- expect(
205
- resolveConsoleURL(
206
- selfhostConfig({ endpoint: "stigmer.example.com:443" }),
207
- {} as NodeJS.ProcessEnv,
208
- ),
209
- ).toBe("https://stigmer.example.com");
210
- });
211
- });
212
-
213
- describe("ensureAuthenticated", () => {
214
- it("never requires auth in local mode", () => {
215
- expect(() => ensureAuthenticated(localConfig())).not.toThrow();
216
- });
217
-
218
- it("never gates selfhost client-side (the server owns that decision)", () => {
219
- expect(() => ensureAuthenticated(selfhostConfig())).not.toThrow();
220
- });
221
-
222
- it("throws in cloud mode with no credentials", () => {
223
- expect(() => ensureAuthenticated(cloudConfig())).toThrow(CliExitError);
224
- });
225
-
226
- it("passes with a stored access token", () => {
227
- expect(() =>
228
- ensureAuthenticated(cloudConfig({ token: "t" })),
229
- ).not.toThrow();
230
- });
231
-
232
- it("passes with only a refresh token (silent refresh will mint one)", () => {
233
- expect(() =>
234
- ensureAuthenticated(cloudConfig({ refresh_token: "r" })),
235
- ).not.toThrow();
236
- });
237
-
238
- it("passes with STIGMER_API_KEY in the environment", () => {
239
- process.env.STIGMER_API_KEY = "stk_env";
240
- expect(() => ensureAuthenticated(cloudConfig())).not.toThrow();
241
- });
242
- });