@growthub/cli 0.6.6 → 0.6.8

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 (896) hide show
  1. package/dist/index.js +30192 -1098
  2. package/package.json +1 -11
  3. package/dist/__tests__/agent-jwt-env.test.d.ts +0 -2
  4. package/dist/__tests__/agent-jwt-env.test.d.ts.map +0 -1
  5. package/dist/__tests__/agent-jwt-env.test.js +0 -57
  6. package/dist/__tests__/agent-jwt-env.test.js.map +0 -1
  7. package/dist/__tests__/allowed-hostname.test.d.ts +0 -2
  8. package/dist/__tests__/allowed-hostname.test.d.ts.map +0 -1
  9. package/dist/__tests__/allowed-hostname.test.js +0 -75
  10. package/dist/__tests__/allowed-hostname.test.js.map +0 -1
  11. package/dist/__tests__/auth-login-flow.test.d.ts +0 -2
  12. package/dist/__tests__/auth-login-flow.test.d.ts.map +0 -1
  13. package/dist/__tests__/auth-login-flow.test.js +0 -62
  14. package/dist/__tests__/auth-login-flow.test.js.map +0 -1
  15. package/dist/__tests__/auth-session.test.d.ts +0 -2
  16. package/dist/__tests__/auth-session.test.d.ts.map +0 -1
  17. package/dist/__tests__/auth-session.test.js +0 -128
  18. package/dist/__tests__/auth-session.test.js.map +0 -1
  19. package/dist/__tests__/common.test.d.ts +0 -2
  20. package/dist/__tests__/common.test.d.ts.map +0 -1
  21. package/dist/__tests__/common.test.js +0 -73
  22. package/dist/__tests__/common.test.js.map +0 -1
  23. package/dist/__tests__/company-delete.test.d.ts +0 -2
  24. package/dist/__tests__/company-delete.test.d.ts.map +0 -1
  25. package/dist/__tests__/company-delete.test.js +0 -78
  26. package/dist/__tests__/company-delete.test.js.map +0 -1
  27. package/dist/__tests__/context.test.d.ts +0 -2
  28. package/dist/__tests__/context.test.d.ts.map +0 -1
  29. package/dist/__tests__/context.test.js +0 -50
  30. package/dist/__tests__/context.test.js.map +0 -1
  31. package/dist/__tests__/create-growthub-local-installer.test.d.ts +0 -21
  32. package/dist/__tests__/create-growthub-local-installer.test.d.ts.map +0 -1
  33. package/dist/__tests__/create-growthub-local-installer.test.js +0 -205
  34. package/dist/__tests__/create-growthub-local-installer.test.js.map +0 -1
  35. package/dist/__tests__/data-dir.test.d.ts +0 -2
  36. package/dist/__tests__/data-dir.test.d.ts.map +0 -1
  37. package/dist/__tests__/data-dir.test.js +0 -61
  38. package/dist/__tests__/data-dir.test.js.map +0 -1
  39. package/dist/__tests__/doctor.test.d.ts +0 -2
  40. package/dist/__tests__/doctor.test.d.ts.map +0 -1
  41. package/dist/__tests__/doctor.test.js +0 -93
  42. package/dist/__tests__/doctor.test.js.map +0 -1
  43. package/dist/__tests__/effective-profile.test.d.ts +0 -2
  44. package/dist/__tests__/effective-profile.test.d.ts.map +0 -1
  45. package/dist/__tests__/effective-profile.test.js +0 -91
  46. package/dist/__tests__/effective-profile.test.js.map +0 -1
  47. package/dist/__tests__/execute-hosted-pipeline.test.d.ts +0 -2
  48. package/dist/__tests__/execute-hosted-pipeline.test.d.ts.map +0 -1
  49. package/dist/__tests__/execute-hosted-pipeline.test.js +0 -131
  50. package/dist/__tests__/execute-hosted-pipeline.test.js.map +0 -1
  51. package/dist/__tests__/fork-policy.test.d.ts +0 -12
  52. package/dist/__tests__/fork-policy.test.d.ts.map +0 -1
  53. package/dist/__tests__/fork-policy.test.js +0 -132
  54. package/dist/__tests__/fork-policy.test.js.map +0 -1
  55. package/dist/__tests__/fork-trace.test.d.ts +0 -12
  56. package/dist/__tests__/fork-trace.test.d.ts.map +0 -1
  57. package/dist/__tests__/fork-trace.test.js +0 -90
  58. package/dist/__tests__/fork-trace.test.js.map +0 -1
  59. package/dist/__tests__/home-paths.test.d.ts +0 -2
  60. package/dist/__tests__/home-paths.test.d.ts.map +0 -1
  61. package/dist/__tests__/home-paths.test.js +0 -32
  62. package/dist/__tests__/home-paths.test.js.map +0 -1
  63. package/dist/__tests__/hosted-execution-client.test.d.ts +0 -2
  64. package/dist/__tests__/hosted-execution-client.test.d.ts.map +0 -1
  65. package/dist/__tests__/hosted-execution-client.test.js +0 -100
  66. package/dist/__tests__/hosted-execution-client.test.js.map +0 -1
  67. package/dist/__tests__/http.test.d.ts +0 -2
  68. package/dist/__tests__/http.test.d.ts.map +0 -1
  69. package/dist/__tests__/http.test.js +0 -42
  70. package/dist/__tests__/http.test.js.map +0 -1
  71. package/dist/__tests__/integrations-github-resolver.test.d.ts +0 -14
  72. package/dist/__tests__/integrations-github-resolver.test.d.ts.map +0 -1
  73. package/dist/__tests__/integrations-github-resolver.test.js +0 -103
  74. package/dist/__tests__/integrations-github-resolver.test.js.map +0 -1
  75. package/dist/__tests__/kit-command.test.d.ts +0 -2
  76. package/dist/__tests__/kit-command.test.d.ts.map +0 -1
  77. package/dist/__tests__/kit-command.test.js +0 -134
  78. package/dist/__tests__/kit-command.test.js.map +0 -1
  79. package/dist/__tests__/kit-core.test.d.ts +0 -17
  80. package/dist/__tests__/kit-core.test.d.ts.map +0 -1
  81. package/dist/__tests__/kit-core.test.js +0 -403
  82. package/dist/__tests__/kit-core.test.js.map +0 -1
  83. package/dist/__tests__/kit-fork-command.test.d.ts +0 -11
  84. package/dist/__tests__/kit-fork-command.test.d.ts.map +0 -1
  85. package/dist/__tests__/kit-fork-command.test.js +0 -183
  86. package/dist/__tests__/kit-fork-command.test.js.map +0 -1
  87. package/dist/__tests__/kit-fork-phase-1.test.d.ts +0 -13
  88. package/dist/__tests__/kit-fork-phase-1.test.d.ts.map +0 -1
  89. package/dist/__tests__/kit-fork-phase-1.test.js +0 -220
  90. package/dist/__tests__/kit-fork-phase-1.test.js.map +0 -1
  91. package/dist/__tests__/kit-fork-registry.test.d.ts +0 -8
  92. package/dist/__tests__/kit-fork-registry.test.d.ts.map +0 -1
  93. package/dist/__tests__/kit-fork-registry.test.js +0 -183
  94. package/dist/__tests__/kit-fork-registry.test.js.map +0 -1
  95. package/dist/__tests__/kit-fork-sync-agent.test.d.ts +0 -13
  96. package/dist/__tests__/kit-fork-sync-agent.test.d.ts.map +0 -1
  97. package/dist/__tests__/kit-fork-sync-agent.test.js +0 -262
  98. package/dist/__tests__/kit-fork-sync-agent.test.js.map +0 -1
  99. package/dist/__tests__/kit-fork-sync.test.d.ts +0 -12
  100. package/dist/__tests__/kit-fork-sync.test.d.ts.map +0 -1
  101. package/dist/__tests__/kit-fork-sync.test.js +0 -455
  102. package/dist/__tests__/kit-fork-sync.test.js.map +0 -1
  103. package/dist/__tests__/kit-zernio-social.test.d.ts +0 -16
  104. package/dist/__tests__/kit-zernio-social.test.d.ts.map +0 -1
  105. package/dist/__tests__/kit-zernio-social.test.js +0 -528
  106. package/dist/__tests__/kit-zernio-social.test.js.map +0 -1
  107. package/dist/__tests__/kit.test.d.ts +0 -2
  108. package/dist/__tests__/kit.test.d.ts.map +0 -1
  109. package/dist/__tests__/kit.test.js +0 -359
  110. package/dist/__tests__/kit.test.js.map +0 -1
  111. package/dist/__tests__/native-intelligence-normalizer.test.d.ts +0 -2
  112. package/dist/__tests__/native-intelligence-normalizer.test.d.ts.map +0 -1
  113. package/dist/__tests__/native-intelligence-normalizer.test.js +0 -200
  114. package/dist/__tests__/native-intelligence-normalizer.test.js.map +0 -1
  115. package/dist/__tests__/native-intelligence-planner.test.d.ts +0 -2
  116. package/dist/__tests__/native-intelligence-planner.test.d.ts.map +0 -1
  117. package/dist/__tests__/native-intelligence-planner.test.js +0 -208
  118. package/dist/__tests__/native-intelligence-planner.test.js.map +0 -1
  119. package/dist/__tests__/native-intelligence-recommender.test.d.ts +0 -2
  120. package/dist/__tests__/native-intelligence-recommender.test.d.ts.map +0 -1
  121. package/dist/__tests__/native-intelligence-recommender.test.js +0 -212
  122. package/dist/__tests__/native-intelligence-recommender.test.js.map +0 -1
  123. package/dist/__tests__/native-intelligence-summarizer.test.d.ts +0 -2
  124. package/dist/__tests__/native-intelligence-summarizer.test.d.ts.map +0 -1
  125. package/dist/__tests__/native-intelligence-summarizer.test.js +0 -195
  126. package/dist/__tests__/native-intelligence-summarizer.test.js.map +0 -1
  127. package/dist/__tests__/open-agents.test.d.ts +0 -2
  128. package/dist/__tests__/open-agents.test.d.ts.map +0 -1
  129. package/dist/__tests__/open-agents.test.js +0 -174
  130. package/dist/__tests__/open-agents.test.js.map +0 -1
  131. package/dist/__tests__/progress.test.d.ts +0 -5
  132. package/dist/__tests__/progress.test.d.ts.map +0 -1
  133. package/dist/__tests__/progress.test.js +0 -55
  134. package/dist/__tests__/progress.test.js.map +0 -1
  135. package/dist/__tests__/qwen-code.test.d.ts +0 -2
  136. package/dist/__tests__/qwen-code.test.d.ts.map +0 -1
  137. package/dist/__tests__/qwen-code.test.js +0 -125
  138. package/dist/__tests__/qwen-code.test.js.map +0 -1
  139. package/dist/__tests__/source-import-agent.test.d.ts +0 -9
  140. package/dist/__tests__/source-import-agent.test.d.ts.map +0 -1
  141. package/dist/__tests__/source-import-agent.test.js +0 -124
  142. package/dist/__tests__/source-import-agent.test.js.map +0 -1
  143. package/dist/__tests__/source-import-detect.test.d.ts +0 -8
  144. package/dist/__tests__/source-import-detect.test.d.ts.map +0 -1
  145. package/dist/__tests__/source-import-detect.test.js +0 -91
  146. package/dist/__tests__/source-import-detect.test.js.map +0 -1
  147. package/dist/__tests__/source-import-plan.test.d.ts +0 -8
  148. package/dist/__tests__/source-import-plan.test.d.ts.map +0 -1
  149. package/dist/__tests__/source-import-plan.test.js +0 -170
  150. package/dist/__tests__/source-import-plan.test.js.map +0 -1
  151. package/dist/__tests__/source-import-security.test.d.ts +0 -8
  152. package/dist/__tests__/source-import-security.test.d.ts.map +0 -1
  153. package/dist/__tests__/source-import-security.test.js +0 -111
  154. package/dist/__tests__/source-import-security.test.js.map +0 -1
  155. package/dist/__tests__/source-import-skills-source.test.d.ts +0 -11
  156. package/dist/__tests__/source-import-skills-source.test.d.ts.map +0 -1
  157. package/dist/__tests__/source-import-skills-source.test.js +0 -181
  158. package/dist/__tests__/source-import-skills-source.test.js.map +0 -1
  159. package/dist/__tests__/table-renderer.test.d.ts +0 -12
  160. package/dist/__tests__/table-renderer.test.d.ts.map +0 -1
  161. package/dist/__tests__/table-renderer.test.js +0 -86
  162. package/dist/__tests__/table-renderer.test.js.map +0 -1
  163. package/dist/__tests__/worktree.test.d.ts +0 -2
  164. package/dist/__tests__/worktree.test.d.ts.map +0 -1
  165. package/dist/__tests__/worktree.test.js +0 -399
  166. package/dist/__tests__/worktree.test.js.map +0 -1
  167. package/dist/adapters/http/format-event.d.ts +0 -2
  168. package/dist/adapters/http/format-event.d.ts.map +0 -1
  169. package/dist/adapters/http/format-event.js +0 -6
  170. package/dist/adapters/http/format-event.js.map +0 -1
  171. package/dist/adapters/http/index.d.ts +0 -3
  172. package/dist/adapters/http/index.d.ts.map +0 -1
  173. package/dist/adapters/http/index.js +0 -6
  174. package/dist/adapters/http/index.js.map +0 -1
  175. package/dist/adapters/index.d.ts +0 -3
  176. package/dist/adapters/index.d.ts.map +0 -1
  177. package/dist/adapters/index.js +0 -2
  178. package/dist/adapters/index.js.map +0 -1
  179. package/dist/adapters/open-agents/format-event.d.ts +0 -2
  180. package/dist/adapters/open-agents/format-event.d.ts.map +0 -1
  181. package/dist/adapters/open-agents/format-event.js +0 -39
  182. package/dist/adapters/open-agents/format-event.js.map +0 -1
  183. package/dist/adapters/open-agents/index.d.ts +0 -3
  184. package/dist/adapters/open-agents/index.d.ts.map +0 -1
  185. package/dist/adapters/open-agents/index.js +0 -6
  186. package/dist/adapters/open-agents/index.js.map +0 -1
  187. package/dist/adapters/process/format-event.d.ts +0 -2
  188. package/dist/adapters/process/format-event.d.ts.map +0 -1
  189. package/dist/adapters/process/format-event.js +0 -6
  190. package/dist/adapters/process/format-event.js.map +0 -1
  191. package/dist/adapters/process/index.d.ts +0 -3
  192. package/dist/adapters/process/index.d.ts.map +0 -1
  193. package/dist/adapters/process/index.js +0 -6
  194. package/dist/adapters/process/index.js.map +0 -1
  195. package/dist/adapters/qwen/format-event.d.ts +0 -8
  196. package/dist/adapters/qwen/format-event.d.ts.map +0 -1
  197. package/dist/adapters/qwen/format-event.js +0 -28
  198. package/dist/adapters/qwen/format-event.js.map +0 -1
  199. package/dist/adapters/qwen/index.d.ts +0 -3
  200. package/dist/adapters/qwen/index.d.ts.map +0 -1
  201. package/dist/adapters/qwen/index.js +0 -6
  202. package/dist/adapters/qwen/index.js.map +0 -1
  203. package/dist/adapters/registry.d.ts +0 -3
  204. package/dist/adapters/registry.d.ts.map +0 -1
  205. package/dist/adapters/registry.js +0 -56
  206. package/dist/adapters/registry.js.map +0 -1
  207. package/dist/auth/effective-profile.d.ts +0 -61
  208. package/dist/auth/effective-profile.d.ts.map +0 -1
  209. package/dist/auth/effective-profile.js +0 -127
  210. package/dist/auth/effective-profile.js.map +0 -1
  211. package/dist/auth/hosted-client.d.ts +0 -107
  212. package/dist/auth/hosted-client.d.ts.map +0 -1
  213. package/dist/auth/hosted-client.js +0 -140
  214. package/dist/auth/hosted-client.js.map +0 -1
  215. package/dist/auth/hosted-integrations.d.ts +0 -33
  216. package/dist/auth/hosted-integrations.d.ts.map +0 -1
  217. package/dist/auth/hosted-integrations.js +0 -51
  218. package/dist/auth/hosted-integrations.js.map +0 -1
  219. package/dist/auth/login-flow.d.ts +0 -27
  220. package/dist/auth/login-flow.d.ts.map +0 -1
  221. package/dist/auth/login-flow.js +0 -212
  222. package/dist/auth/login-flow.js.map +0 -1
  223. package/dist/auth/overlay-store.d.ts +0 -52
  224. package/dist/auth/overlay-store.d.ts.map +0 -1
  225. package/dist/auth/overlay-store.js +0 -123
  226. package/dist/auth/overlay-store.js.map +0 -1
  227. package/dist/auth/paths.d.ts +0 -15
  228. package/dist/auth/paths.d.ts.map +0 -1
  229. package/dist/auth/paths.js +0 -27
  230. package/dist/auth/paths.js.map +0 -1
  231. package/dist/auth/session-store.d.ts +0 -35
  232. package/dist/auth/session-store.d.ts.map +0 -1
  233. package/dist/auth/session-store.js +0 -73
  234. package/dist/auth/session-store.js.map +0 -1
  235. package/dist/auth/workflow-access.d.ts +0 -7
  236. package/dist/auth/workflow-access.d.ts.map +0 -1
  237. package/dist/auth/workflow-access.js +0 -27
  238. package/dist/auth/workflow-access.js.map +0 -1
  239. package/dist/checks/agent-jwt-secret-check.d.ts +0 -3
  240. package/dist/checks/agent-jwt-secret-check.d.ts.map +0 -1
  241. package/dist/checks/agent-jwt-secret-check.js +0 -31
  242. package/dist/checks/agent-jwt-secret-check.js.map +0 -1
  243. package/dist/checks/config-check.d.ts +0 -3
  244. package/dist/checks/config-check.d.ts.map +0 -1
  245. package/dist/checks/config-check.js +0 -31
  246. package/dist/checks/config-check.js.map +0 -1
  247. package/dist/checks/database-check.d.ts +0 -4
  248. package/dist/checks/database-check.d.ts.map +0 -1
  249. package/dist/checks/database-check.js +0 -54
  250. package/dist/checks/database-check.js.map +0 -1
  251. package/dist/checks/deployment-auth-check.d.ts +0 -4
  252. package/dist/checks/deployment-auth-check.d.ts.map +0 -1
  253. package/dist/checks/deployment-auth-check.js +0 -83
  254. package/dist/checks/deployment-auth-check.js.map +0 -1
  255. package/dist/checks/index.d.ts +0 -18
  256. package/dist/checks/index.d.ts.map +0 -1
  257. package/dist/checks/index.js +0 -10
  258. package/dist/checks/index.js.map +0 -1
  259. package/dist/checks/llm-check.d.ts +0 -4
  260. package/dist/checks/llm-check.d.ts.map +0 -1
  261. package/dist/checks/llm-check.js +0 -80
  262. package/dist/checks/llm-check.js.map +0 -1
  263. package/dist/checks/log-check.d.ts +0 -4
  264. package/dist/checks/log-check.d.ts.map +0 -1
  265. package/dist/checks/log-check.js +0 -27
  266. package/dist/checks/log-check.js.map +0 -1
  267. package/dist/checks/path-resolver.d.ts +0 -2
  268. package/dist/checks/path-resolver.d.ts.map +0 -1
  269. package/dist/checks/path-resolver.js +0 -2
  270. package/dist/checks/path-resolver.js.map +0 -1
  271. package/dist/checks/port-check.d.ts +0 -4
  272. package/dist/checks/port-check.d.ts.map +0 -1
  273. package/dist/checks/port-check.js +0 -20
  274. package/dist/checks/port-check.js.map +0 -1
  275. package/dist/checks/secrets-check.d.ts +0 -4
  276. package/dist/checks/secrets-check.d.ts.map +0 -1
  277. package/dist/checks/secrets-check.js +0 -123
  278. package/dist/checks/secrets-check.js.map +0 -1
  279. package/dist/checks/storage-check.d.ts +0 -4
  280. package/dist/checks/storage-check.d.ts.map +0 -1
  281. package/dist/checks/storage-check.js +0 -46
  282. package/dist/checks/storage-check.js.map +0 -1
  283. package/dist/client/context.d.ts +0 -21
  284. package/dist/client/context.d.ts.map +0 -1
  285. package/dist/client/context.js +0 -136
  286. package/dist/client/context.js.map +0 -1
  287. package/dist/client/http.d.ts +0 -29
  288. package/dist/client/http.d.ts.map +0 -1
  289. package/dist/client/http.js +0 -120
  290. package/dist/client/http.js.map +0 -1
  291. package/dist/commands/allowed-hostname.d.ts +0 -4
  292. package/dist/commands/allowed-hostname.d.ts.map +0 -1
  293. package/dist/commands/allowed-hostname.js +0 -31
  294. package/dist/commands/allowed-hostname.js.map +0 -1
  295. package/dist/commands/artifact.d.ts +0 -12
  296. package/dist/commands/artifact.d.ts.map +0 -1
  297. package/dist/commands/artifact.js +0 -167
  298. package/dist/commands/artifact.js.map +0 -1
  299. package/dist/commands/auth-bootstrap-ceo.d.ts +0 -8
  300. package/dist/commands/auth-bootstrap-ceo.d.ts.map +0 -1
  301. package/dist/commands/auth-bootstrap-ceo.js +0 -108
  302. package/dist/commands/auth-bootstrap-ceo.js.map +0 -1
  303. package/dist/commands/auth-login.d.ts +0 -24
  304. package/dist/commands/auth-login.d.ts.map +0 -1
  305. package/dist/commands/auth-login.js +0 -270
  306. package/dist/commands/auth-login.js.map +0 -1
  307. package/dist/commands/capability.d.ts +0 -15
  308. package/dist/commands/capability.d.ts.map +0 -1
  309. package/dist/commands/capability.js +0 -366
  310. package/dist/commands/capability.js.map +0 -1
  311. package/dist/commands/client/activity.d.ts +0 -3
  312. package/dist/commands/client/activity.d.ts.map +0 -1
  313. package/dist/commands/client/activity.js +0 -49
  314. package/dist/commands/client/activity.js.map +0 -1
  315. package/dist/commands/client/agent.d.ts +0 -3
  316. package/dist/commands/client/agent.d.ts.map +0 -1
  317. package/dist/commands/client/agent.js +0 -224
  318. package/dist/commands/client/agent.js.map +0 -1
  319. package/dist/commands/client/approval.d.ts +0 -3
  320. package/dist/commands/client/approval.d.ts.map +0 -1
  321. package/dist/commands/client/approval.js +0 -193
  322. package/dist/commands/client/approval.js.map +0 -1
  323. package/dist/commands/client/common.d.ts +0 -33
  324. package/dist/commands/client/common.d.ts.map +0 -1
  325. package/dist/commands/client/common.js +0 -140
  326. package/dist/commands/client/common.js.map +0 -1
  327. package/dist/commands/client/company.d.ts +0 -14
  328. package/dist/commands/client/company.d.ts.map +0 -1
  329. package/dist/commands/client/company.js +0 -346
  330. package/dist/commands/client/company.js.map +0 -1
  331. package/dist/commands/client/context.d.ts +0 -3
  332. package/dist/commands/client/context.d.ts.map +0 -1
  333. package/dist/commands/client/context.js +0 -92
  334. package/dist/commands/client/context.js.map +0 -1
  335. package/dist/commands/client/dashboard.d.ts +0 -3
  336. package/dist/commands/client/dashboard.d.ts.map +0 -1
  337. package/dist/commands/client/dashboard.js +0 -19
  338. package/dist/commands/client/dashboard.js.map +0 -1
  339. package/dist/commands/client/issue.d.ts +0 -3
  340. package/dist/commands/client/issue.d.ts.map +0 -1
  341. package/dist/commands/client/issue.js +0 -229
  342. package/dist/commands/client/issue.js.map +0 -1
  343. package/dist/commands/client/plugin.d.ts +0 -3
  344. package/dist/commands/client/plugin.d.ts.map +0 -1
  345. package/dist/commands/client/plugin.js +0 -252
  346. package/dist/commands/client/plugin.js.map +0 -1
  347. package/dist/commands/configure.d.ts +0 -5
  348. package/dist/commands/configure.d.ts.map +0 -1
  349. package/dist/commands/configure.js +0 -167
  350. package/dist/commands/configure.js.map +0 -1
  351. package/dist/commands/db-backup.d.ts +0 -10
  352. package/dist/commands/db-backup.d.ts.map +0 -1
  353. package/dist/commands/db-backup.js +0 -74
  354. package/dist/commands/db-backup.js.map +0 -1
  355. package/dist/commands/doctor.d.ts +0 -10
  356. package/dist/commands/doctor.d.ts.map +0 -1
  357. package/dist/commands/doctor.js +0 -154
  358. package/dist/commands/doctor.js.map +0 -1
  359. package/dist/commands/env.d.ts +0 -4
  360. package/dist/commands/env.d.ts.map +0 -1
  361. package/dist/commands/env.js +0 -355
  362. package/dist/commands/env.js.map +0 -1
  363. package/dist/commands/fleet.d.ts +0 -39
  364. package/dist/commands/fleet.d.ts.map +0 -1
  365. package/dist/commands/fleet.js +0 -281
  366. package/dist/commands/fleet.js.map +0 -1
  367. package/dist/commands/github.d.ts +0 -29
  368. package/dist/commands/github.d.ts.map +0 -1
  369. package/dist/commands/github.js +0 -205
  370. package/dist/commands/github.js.map +0 -1
  371. package/dist/commands/gtm.d.ts +0 -3
  372. package/dist/commands/gtm.d.ts.map +0 -1
  373. package/dist/commands/gtm.js +0 -134
  374. package/dist/commands/gtm.js.map +0 -1
  375. package/dist/commands/heartbeat-run.d.ts +0 -16
  376. package/dist/commands/heartbeat-run.d.ts.map +0 -1
  377. package/dist/commands/heartbeat-run.js +0 -294
  378. package/dist/commands/heartbeat-run.js.map +0 -1
  379. package/dist/commands/integrations.d.ts +0 -20
  380. package/dist/commands/integrations.d.ts.map +0 -1
  381. package/dist/commands/integrations.js +0 -98
  382. package/dist/commands/integrations.js.map +0 -1
  383. package/dist/commands/kit-fork-remote.d.ts +0 -46
  384. package/dist/commands/kit-fork-remote.d.ts.map +0 -1
  385. package/dist/commands/kit-fork-remote.js +0 -489
  386. package/dist/commands/kit-fork-remote.js.map +0 -1
  387. package/dist/commands/kit-fork.d.ts +0 -39
  388. package/dist/commands/kit-fork.d.ts.map +0 -1
  389. package/dist/commands/kit-fork.js +0 -1338
  390. package/dist/commands/kit-fork.js.map +0 -1
  391. package/dist/commands/kit.d.ts +0 -7
  392. package/dist/commands/kit.d.ts.map +0 -1
  393. package/dist/commands/kit.js +0 -585
  394. package/dist/commands/kit.js.map +0 -1
  395. package/dist/commands/onboard.d.ts +0 -9
  396. package/dist/commands/onboard.d.ts.map +0 -1
  397. package/dist/commands/onboard.js +0 -425
  398. package/dist/commands/onboard.js.map +0 -1
  399. package/dist/commands/open-agents.d.ts +0 -19
  400. package/dist/commands/open-agents.d.ts.map +0 -1
  401. package/dist/commands/open-agents.js +0 -689
  402. package/dist/commands/open-agents.js.map +0 -1
  403. package/dist/commands/pipeline.d.ts +0 -20
  404. package/dist/commands/pipeline.d.ts.map +0 -1
  405. package/dist/commands/pipeline.js +0 -863
  406. package/dist/commands/pipeline.js.map +0 -1
  407. package/dist/commands/profile.d.ts +0 -3
  408. package/dist/commands/profile.d.ts.map +0 -1
  409. package/dist/commands/profile.js +0 -282
  410. package/dist/commands/profile.js.map +0 -1
  411. package/dist/commands/qwen-code.d.ts +0 -19
  412. package/dist/commands/qwen-code.d.ts.map +0 -1
  413. package/dist/commands/qwen-code.js +0 -286
  414. package/dist/commands/qwen-code.js.map +0 -1
  415. package/dist/commands/run.d.ts +0 -9
  416. package/dist/commands/run.d.ts.map +0 -1
  417. package/dist/commands/run.js +0 -156
  418. package/dist/commands/run.js.map +0 -1
  419. package/dist/commands/source-import-discovery.d.ts +0 -28
  420. package/dist/commands/source-import-discovery.d.ts.map +0 -1
  421. package/dist/commands/source-import-discovery.js +0 -327
  422. package/dist/commands/source-import-discovery.js.map +0 -1
  423. package/dist/commands/starter.d.ts +0 -27
  424. package/dist/commands/starter.d.ts.map +0 -1
  425. package/dist/commands/starter.js +0 -358
  426. package/dist/commands/starter.js.map +0 -1
  427. package/dist/commands/status.d.ts +0 -18
  428. package/dist/commands/status.d.ts.map +0 -1
  429. package/dist/commands/status.js +0 -84
  430. package/dist/commands/status.js.map +0 -1
  431. package/dist/commands/template.d.ts +0 -18
  432. package/dist/commands/template.d.ts.map +0 -1
  433. package/dist/commands/template.js +0 -341
  434. package/dist/commands/template.js.map +0 -1
  435. package/dist/commands/workflow.d.ts +0 -24
  436. package/dist/commands/workflow.d.ts.map +0 -1
  437. package/dist/commands/workflow.js +0 -1350
  438. package/dist/commands/workflow.js.map +0 -1
  439. package/dist/commands/worktree-lib.d.ts +0 -49
  440. package/dist/commands/worktree-lib.d.ts.map +0 -1
  441. package/dist/commands/worktree-lib.js +0 -220
  442. package/dist/commands/worktree-lib.js.map +0 -1
  443. package/dist/commands/worktree.d.ts +0 -60
  444. package/dist/commands/worktree.d.ts.map +0 -1
  445. package/dist/commands/worktree.js +0 -874
  446. package/dist/commands/worktree.js.map +0 -1
  447. package/dist/config/data-dir.d.ts +0 -12
  448. package/dist/config/data-dir.d.ts.map +0 -1
  449. package/dist/config/data-dir.js +0 -25
  450. package/dist/config/data-dir.js.map +0 -1
  451. package/dist/config/env.d.ts +0 -15
  452. package/dist/config/env.d.ts.map +0 -1
  453. package/dist/config/env.js +0 -105
  454. package/dist/config/env.js.map +0 -1
  455. package/dist/config/github-home.d.ts +0 -17
  456. package/dist/config/github-home.d.ts.map +0 -1
  457. package/dist/config/github-home.js +0 -29
  458. package/dist/config/github-home.js.map +0 -1
  459. package/dist/config/home.d.ts +0 -23
  460. package/dist/config/home.d.ts.map +0 -1
  461. package/dist/config/home.js +0 -65
  462. package/dist/config/home.js.map +0 -1
  463. package/dist/config/hostnames.d.ts +0 -3
  464. package/dist/config/hostnames.d.ts.map +0 -1
  465. package/dist/config/hostnames.js +0 -27
  466. package/dist/config/hostnames.js.map +0 -1
  467. package/dist/config/kit-forks-home.d.ts +0 -26
  468. package/dist/config/kit-forks-home.d.ts.map +0 -1
  469. package/dist/config/kit-forks-home.js +0 -44
  470. package/dist/config/kit-forks-home.js.map +0 -1
  471. package/dist/config/schema.d.ts +0 -2
  472. package/dist/config/schema.d.ts.map +0 -1
  473. package/dist/config/schema.js +0 -2
  474. package/dist/config/schema.js.map +0 -1
  475. package/dist/config/secrets-key.d.ts +0 -16
  476. package/dist/config/secrets-key.d.ts.map +0 -1
  477. package/dist/config/secrets-key.js +0 -34
  478. package/dist/config/secrets-key.js.map +0 -1
  479. package/dist/config/store.d.ts +0 -6
  480. package/dist/config/store.d.ts.map +0 -1
  481. package/dist/config/store.js +0 -102
  482. package/dist/config/store.js.map +0 -1
  483. package/dist/fleet/agent-plan.d.ts +0 -20
  484. package/dist/fleet/agent-plan.d.ts.map +0 -1
  485. package/dist/fleet/agent-plan.js +0 -61
  486. package/dist/fleet/agent-plan.js.map +0 -1
  487. package/dist/fleet/approvals.d.ts +0 -10
  488. package/dist/fleet/approvals.d.ts.map +0 -1
  489. package/dist/fleet/approvals.js +0 -33
  490. package/dist/fleet/approvals.js.map +0 -1
  491. package/dist/fleet/drift-summary.d.ts +0 -13
  492. package/dist/fleet/drift-summary.d.ts.map +0 -1
  493. package/dist/fleet/drift-summary.js +0 -120
  494. package/dist/fleet/drift-summary.js.map +0 -1
  495. package/dist/fleet/summary.d.ts +0 -9
  496. package/dist/fleet/summary.d.ts.map +0 -1
  497. package/dist/fleet/summary.js +0 -161
  498. package/dist/fleet/summary.js.map +0 -1
  499. package/dist/fleet/types.d.ts +0 -149
  500. package/dist/fleet/types.d.ts.map +0 -1
  501. package/dist/fleet/types.js +0 -12
  502. package/dist/fleet/types.js.map +0 -1
  503. package/dist/github/client.d.ts +0 -42
  504. package/dist/github/client.d.ts.map +0 -1
  505. package/dist/github/client.js +0 -174
  506. package/dist/github/client.js.map +0 -1
  507. package/dist/github/token-store.d.ts +0 -11
  508. package/dist/github/token-store.d.ts.map +0 -1
  509. package/dist/github/token-store.js +0 -74
  510. package/dist/github/token-store.js.map +0 -1
  511. package/dist/github/types.d.ts +0 -69
  512. package/dist/github/types.d.ts.map +0 -1
  513. package/dist/github/types.js +0 -8
  514. package/dist/github/types.js.map +0 -1
  515. package/dist/index.d.ts +0 -3
  516. package/dist/index.d.ts.map +0 -1
  517. package/dist/index.js.map +0 -1
  518. package/dist/integrations/bridge.d.ts +0 -43
  519. package/dist/integrations/bridge.d.ts.map +0 -1
  520. package/dist/integrations/bridge.js +0 -148
  521. package/dist/integrations/bridge.js.map +0 -1
  522. package/dist/integrations/github-resolver.d.ts +0 -31
  523. package/dist/integrations/github-resolver.d.ts.map +0 -1
  524. package/dist/integrations/github-resolver.js +0 -44
  525. package/dist/integrations/github-resolver.js.map +0 -1
  526. package/dist/integrations/types.d.ts +0 -46
  527. package/dist/integrations/types.d.ts.map +0 -1
  528. package/dist/integrations/types.js +0 -11
  529. package/dist/integrations/types.js.map +0 -1
  530. package/dist/kits/catalog.d.ts +0 -12
  531. package/dist/kits/catalog.d.ts.map +0 -1
  532. package/dist/kits/catalog.js +0 -93
  533. package/dist/kits/catalog.js.map +0 -1
  534. package/dist/kits/contract.d.ts +0 -153
  535. package/dist/kits/contract.d.ts.map +0 -1
  536. package/dist/kits/contract.js +0 -89
  537. package/dist/kits/contract.js.map +0 -1
  538. package/dist/kits/core/adapter-core/contracts.d.ts +0 -108
  539. package/dist/kits/core/adapter-core/contracts.d.ts.map +0 -1
  540. package/dist/kits/core/adapter-core/contracts.js +0 -17
  541. package/dist/kits/core/adapter-core/contracts.js.map +0 -1
  542. package/dist/kits/core/adapter-core/env-gate.d.ts +0 -29
  543. package/dist/kits/core/adapter-core/env-gate.d.ts.map +0 -1
  544. package/dist/kits/core/adapter-core/env-gate.js +0 -143
  545. package/dist/kits/core/adapter-core/env-gate.js.map +0 -1
  546. package/dist/kits/core/adapter-core/fork-inspector.d.ts +0 -42
  547. package/dist/kits/core/adapter-core/fork-inspector.d.ts.map +0 -1
  548. package/dist/kits/core/adapter-core/fork-inspector.js +0 -141
  549. package/dist/kits/core/adapter-core/fork-inspector.js.map +0 -1
  550. package/dist/kits/core/adapter-core/index.d.ts +0 -20
  551. package/dist/kits/core/adapter-core/index.d.ts.map +0 -1
  552. package/dist/kits/core/adapter-core/index.js +0 -13
  553. package/dist/kits/core/adapter-core/index.js.map +0 -1
  554. package/dist/kits/core/adapter-core/output-contract.d.ts +0 -25
  555. package/dist/kits/core/adapter-core/output-contract.d.ts.map +0 -1
  556. package/dist/kits/core/adapter-core/output-contract.js +0 -114
  557. package/dist/kits/core/adapter-core/output-contract.js.map +0 -1
  558. package/dist/kits/core/adapter-core/provider-adapter.d.ts +0 -26
  559. package/dist/kits/core/adapter-core/provider-adapter.d.ts.map +0 -1
  560. package/dist/kits/core/adapter-core/provider-adapter.js +0 -119
  561. package/dist/kits/core/adapter-core/provider-adapter.js.map +0 -1
  562. package/dist/kits/core/adapter-core/runtime-surface.d.ts +0 -25
  563. package/dist/kits/core/adapter-core/runtime-surface.d.ts.map +0 -1
  564. package/dist/kits/core/adapter-core/runtime-surface.js +0 -100
  565. package/dist/kits/core/adapter-core/runtime-surface.js.map +0 -1
  566. package/dist/kits/core/adapter-core/setup-validation.d.ts +0 -28
  567. package/dist/kits/core/adapter-core/setup-validation.d.ts.map +0 -1
  568. package/dist/kits/core/adapter-core/setup-validation.js +0 -145
  569. package/dist/kits/core/adapter-core/setup-validation.js.map +0 -1
  570. package/dist/kits/core/factory/index.d.ts +0 -25
  571. package/dist/kits/core/factory/index.d.ts.map +0 -1
  572. package/dist/kits/core/factory/index.js +0 -21
  573. package/dist/kits/core/factory/index.js.map +0 -1
  574. package/dist/kits/core/factory/operator-kit.d.ts +0 -50
  575. package/dist/kits/core/factory/operator-kit.d.ts.map +0 -1
  576. package/dist/kits/core/factory/operator-kit.js +0 -88
  577. package/dist/kits/core/factory/operator-kit.js.map +0 -1
  578. package/dist/kits/core/factory/ops-kit.d.ts +0 -57
  579. package/dist/kits/core/factory/ops-kit.d.ts.map +0 -1
  580. package/dist/kits/core/factory/ops-kit.js +0 -115
  581. package/dist/kits/core/factory/ops-kit.js.map +0 -1
  582. package/dist/kits/core/factory/studio-kit.d.ts +0 -39
  583. package/dist/kits/core/factory/studio-kit.d.ts.map +0 -1
  584. package/dist/kits/core/factory/studio-kit.js +0 -96
  585. package/dist/kits/core/factory/studio-kit.js.map +0 -1
  586. package/dist/kits/core/factory/workflow-kit.d.ts +0 -57
  587. package/dist/kits/core/factory/workflow-kit.d.ts.map +0 -1
  588. package/dist/kits/core/factory/workflow-kit.js +0 -107
  589. package/dist/kits/core/factory/workflow-kit.js.map +0 -1
  590. package/dist/kits/core/index.d.ts +0 -25
  591. package/dist/kits/core/index.d.ts.map +0 -1
  592. package/dist/kits/core/index.js +0 -111
  593. package/dist/kits/core/index.js.map +0 -1
  594. package/dist/kits/core/types/index.d.ts +0 -65
  595. package/dist/kits/core/types/index.d.ts.map +0 -1
  596. package/dist/kits/core/types/index.js +0 -49
  597. package/dist/kits/core/types/index.js.map +0 -1
  598. package/dist/kits/core/validation/index.d.ts +0 -42
  599. package/dist/kits/core/validation/index.d.ts.map +0 -1
  600. package/dist/kits/core/validation/index.js +0 -128
  601. package/dist/kits/core/validation/index.js.map +0 -1
  602. package/dist/kits/fork-policy.d.ts +0 -78
  603. package/dist/kits/fork-policy.d.ts.map +0 -1
  604. package/dist/kits/fork-policy.js +0 -92
  605. package/dist/kits/fork-policy.js.map +0 -1
  606. package/dist/kits/fork-registry.d.ts +0 -54
  607. package/dist/kits/fork-registry.d.ts.map +0 -1
  608. package/dist/kits/fork-registry.js +0 -201
  609. package/dist/kits/fork-registry.js.map +0 -1
  610. package/dist/kits/fork-remote.d.ts +0 -52
  611. package/dist/kits/fork-remote.d.ts.map +0 -1
  612. package/dist/kits/fork-remote.js +0 -116
  613. package/dist/kits/fork-remote.js.map +0 -1
  614. package/dist/kits/fork-sync-agent.d.ts +0 -51
  615. package/dist/kits/fork-sync-agent.d.ts.map +0 -1
  616. package/dist/kits/fork-sync-agent.js +0 -435
  617. package/dist/kits/fork-sync-agent.js.map +0 -1
  618. package/dist/kits/fork-sync.d.ts +0 -32
  619. package/dist/kits/fork-sync.d.ts.map +0 -1
  620. package/dist/kits/fork-sync.js +0 -590
  621. package/dist/kits/fork-sync.js.map +0 -1
  622. package/dist/kits/fork-trace.d.ts +0 -29
  623. package/dist/kits/fork-trace.d.ts.map +0 -1
  624. package/dist/kits/fork-trace.js +0 -54
  625. package/dist/kits/fork-trace.js.map +0 -1
  626. package/dist/kits/fork-types.d.ts +0 -198
  627. package/dist/kits/fork-types.d.ts.map +0 -1
  628. package/dist/kits/fork-types.js +0 -16
  629. package/dist/kits/fork-types.js.map +0 -1
  630. package/dist/kits/service.d.ts +0 -63
  631. package/dist/kits/service.d.ts.map +0 -1
  632. package/dist/kits/service.js +0 -630
  633. package/dist/kits/service.js.map +0 -1
  634. package/dist/prompts/database.d.ts +0 -3
  635. package/dist/prompts/database.d.ts.map +0 -1
  636. package/dist/prompts/database.js +0 -144
  637. package/dist/prompts/database.js.map +0 -1
  638. package/dist/prompts/llm.d.ts +0 -3
  639. package/dist/prompts/llm.d.ts.map +0 -1
  640. package/dist/prompts/llm.js +0 -37
  641. package/dist/prompts/llm.js.map +0 -1
  642. package/dist/prompts/logging.d.ts +0 -3
  643. package/dist/prompts/logging.d.ts.map +0 -1
  644. package/dist/prompts/logging.js +0 -31
  645. package/dist/prompts/logging.js.map +0 -1
  646. package/dist/prompts/secrets.d.ts +0 -4
  647. package/dist/prompts/secrets.d.ts.map +0 -1
  648. package/dist/prompts/secrets.js +0 -85
  649. package/dist/prompts/secrets.js.map +0 -1
  650. package/dist/prompts/server.d.ts +0 -9
  651. package/dist/prompts/server.d.ts.map +0 -1
  652. package/dist/prompts/server.js +0 -154
  653. package/dist/prompts/server.js.map +0 -1
  654. package/dist/prompts/storage.d.ts +0 -4
  655. package/dist/prompts/storage.d.ts.map +0 -1
  656. package/dist/prompts/storage.js +0 -129
  657. package/dist/prompts/storage.js.map +0 -1
  658. package/dist/runtime/agent-harness/auth-store.d.ts +0 -8
  659. package/dist/runtime/agent-harness/auth-store.d.ts.map +0 -1
  660. package/dist/runtime/agent-harness/auth-store.js +0 -92
  661. package/dist/runtime/agent-harness/auth-store.js.map +0 -1
  662. package/dist/runtime/artifact-contracts/index.d.ts +0 -47
  663. package/dist/runtime/artifact-contracts/index.d.ts.map +0 -1
  664. package/dist/runtime/artifact-contracts/index.js +0 -153
  665. package/dist/runtime/artifact-contracts/index.js.map +0 -1
  666. package/dist/runtime/artifact-contracts/types.d.ts +0 -82
  667. package/dist/runtime/artifact-contracts/types.d.ts.map +0 -1
  668. package/dist/runtime/artifact-contracts/types.js +0 -16
  669. package/dist/runtime/artifact-contracts/types.js.map +0 -1
  670. package/dist/runtime/cms-capability-registry/index.d.ts +0 -30
  671. package/dist/runtime/cms-capability-registry/index.d.ts.map +0 -1
  672. package/dist/runtime/cms-capability-registry/index.js +0 -183
  673. package/dist/runtime/cms-capability-registry/index.js.map +0 -1
  674. package/dist/runtime/cms-capability-registry/types.d.ts +0 -109
  675. package/dist/runtime/cms-capability-registry/types.d.ts.map +0 -1
  676. package/dist/runtime/cms-capability-registry/types.js +0 -19
  677. package/dist/runtime/cms-capability-registry/types.js.map +0 -1
  678. package/dist/runtime/cms-node-contracts/compile.d.ts +0 -6
  679. package/dist/runtime/cms-node-contracts/compile.d.ts.map +0 -1
  680. package/dist/runtime/cms-node-contracts/compile.js +0 -57
  681. package/dist/runtime/cms-node-contracts/compile.js.map +0 -1
  682. package/dist/runtime/cms-node-contracts/index.d.ts +0 -6
  683. package/dist/runtime/cms-node-contracts/index.d.ts.map +0 -1
  684. package/dist/runtime/cms-node-contracts/index.js +0 -5
  685. package/dist/runtime/cms-node-contracts/index.js.map +0 -1
  686. package/dist/runtime/cms-node-contracts/introspect.d.ts +0 -5
  687. package/dist/runtime/cms-node-contracts/introspect.d.ts.map +0 -1
  688. package/dist/runtime/cms-node-contracts/introspect.js +0 -61
  689. package/dist/runtime/cms-node-contracts/introspect.js.map +0 -1
  690. package/dist/runtime/cms-node-contracts/normalize.d.ts +0 -5
  691. package/dist/runtime/cms-node-contracts/normalize.d.ts.map +0 -1
  692. package/dist/runtime/cms-node-contracts/normalize.js +0 -112
  693. package/dist/runtime/cms-node-contracts/normalize.js.map +0 -1
  694. package/dist/runtime/cms-node-contracts/presenter.d.ts +0 -9
  695. package/dist/runtime/cms-node-contracts/presenter.d.ts.map +0 -1
  696. package/dist/runtime/cms-node-contracts/presenter.js +0 -117
  697. package/dist/runtime/cms-node-contracts/presenter.js.map +0 -1
  698. package/dist/runtime/cms-node-contracts/types.d.ts +0 -76
  699. package/dist/runtime/cms-node-contracts/types.d.ts.map +0 -1
  700. package/dist/runtime/cms-node-contracts/types.js +0 -2
  701. package/dist/runtime/cms-node-contracts/types.js.map +0 -1
  702. package/dist/runtime/dynamic-registry-pipeline/index.d.ts +0 -41
  703. package/dist/runtime/dynamic-registry-pipeline/index.d.ts.map +0 -1
  704. package/dist/runtime/dynamic-registry-pipeline/index.js +0 -224
  705. package/dist/runtime/dynamic-registry-pipeline/index.js.map +0 -1
  706. package/dist/runtime/dynamic-registry-pipeline/types.d.ts +0 -61
  707. package/dist/runtime/dynamic-registry-pipeline/types.d.ts.map +0 -1
  708. package/dist/runtime/dynamic-registry-pipeline/types.js +0 -14
  709. package/dist/runtime/dynamic-registry-pipeline/types.js.map +0 -1
  710. package/dist/runtime/hosted-execution-client/index.d.ts +0 -45
  711. package/dist/runtime/hosted-execution-client/index.d.ts.map +0 -1
  712. package/dist/runtime/hosted-execution-client/index.js +0 -527
  713. package/dist/runtime/hosted-execution-client/index.js.map +0 -1
  714. package/dist/runtime/hosted-execution-client/types.d.ts +0 -125
  715. package/dist/runtime/hosted-execution-client/types.d.ts.map +0 -1
  716. package/dist/runtime/hosted-execution-client/types.js +0 -9
  717. package/dist/runtime/hosted-execution-client/types.js.map +0 -1
  718. package/dist/runtime/index.d.ts +0 -24
  719. package/dist/runtime/index.d.ts.map +0 -1
  720. package/dist/runtime/index.js +0 -24
  721. package/dist/runtime/index.js.map +0 -1
  722. package/dist/runtime/machine-capability-resolver/index.d.ts +0 -32
  723. package/dist/runtime/machine-capability-resolver/index.d.ts.map +0 -1
  724. package/dist/runtime/machine-capability-resolver/index.js +0 -131
  725. package/dist/runtime/machine-capability-resolver/index.js.map +0 -1
  726. package/dist/runtime/machine-capability-resolver/types.d.ts +0 -46
  727. package/dist/runtime/machine-capability-resolver/types.d.ts.map +0 -1
  728. package/dist/runtime/machine-capability-resolver/types.js +0 -13
  729. package/dist/runtime/machine-capability-resolver/types.js.map +0 -1
  730. package/dist/runtime/native-intelligence/contract.d.ts +0 -174
  731. package/dist/runtime/native-intelligence/contract.d.ts.map +0 -1
  732. package/dist/runtime/native-intelligence/contract.js +0 -23
  733. package/dist/runtime/native-intelligence/contract.js.map +0 -1
  734. package/dist/runtime/native-intelligence/index.d.ts +0 -38
  735. package/dist/runtime/native-intelligence/index.d.ts.map +0 -1
  736. package/dist/runtime/native-intelligence/index.js +0 -121
  737. package/dist/runtime/native-intelligence/index.js.map +0 -1
  738. package/dist/runtime/native-intelligence/normalizer.d.ts +0 -22
  739. package/dist/runtime/native-intelligence/normalizer.d.ts.map +0 -1
  740. package/dist/runtime/native-intelligence/normalizer.js +0 -307
  741. package/dist/runtime/native-intelligence/normalizer.js.map +0 -1
  742. package/dist/runtime/native-intelligence/planner.d.ts +0 -22
  743. package/dist/runtime/native-intelligence/planner.d.ts.map +0 -1
  744. package/dist/runtime/native-intelligence/planner.js +0 -312
  745. package/dist/runtime/native-intelligence/planner.js.map +0 -1
  746. package/dist/runtime/native-intelligence/provider.d.ts +0 -27
  747. package/dist/runtime/native-intelligence/provider.d.ts.map +0 -1
  748. package/dist/runtime/native-intelligence/provider.js +0 -221
  749. package/dist/runtime/native-intelligence/provider.js.map +0 -1
  750. package/dist/runtime/native-intelligence/recommender.d.ts +0 -23
  751. package/dist/runtime/native-intelligence/recommender.d.ts.map +0 -1
  752. package/dist/runtime/native-intelligence/recommender.js +0 -299
  753. package/dist/runtime/native-intelligence/recommender.js.map +0 -1
  754. package/dist/runtime/native-intelligence/summarizer.d.ts +0 -22
  755. package/dist/runtime/native-intelligence/summarizer.d.ts.map +0 -1
  756. package/dist/runtime/native-intelligence/summarizer.js +0 -228
  757. package/dist/runtime/native-intelligence/summarizer.js.map +0 -1
  758. package/dist/runtime/open-agents/contract.d.ts +0 -58
  759. package/dist/runtime/open-agents/contract.d.ts.map +0 -1
  760. package/dist/runtime/open-agents/contract.js +0 -26
  761. package/dist/runtime/open-agents/contract.js.map +0 -1
  762. package/dist/runtime/open-agents/index.d.ts +0 -15
  763. package/dist/runtime/open-agents/index.d.ts.map +0 -1
  764. package/dist/runtime/open-agents/index.js +0 -72
  765. package/dist/runtime/open-agents/index.js.map +0 -1
  766. package/dist/runtime/open-agents/provider.d.ts +0 -32
  767. package/dist/runtime/open-agents/provider.d.ts.map +0 -1
  768. package/dist/runtime/open-agents/provider.js +0 -190
  769. package/dist/runtime/open-agents/provider.js.map +0 -1
  770. package/dist/runtime/qwen-code/contract.d.ts +0 -79
  771. package/dist/runtime/qwen-code/contract.d.ts.map +0 -1
  772. package/dist/runtime/qwen-code/contract.js +0 -40
  773. package/dist/runtime/qwen-code/contract.js.map +0 -1
  774. package/dist/runtime/qwen-code/health.d.ts +0 -11
  775. package/dist/runtime/qwen-code/health.d.ts.map +0 -1
  776. package/dist/runtime/qwen-code/health.js +0 -111
  777. package/dist/runtime/qwen-code/health.js.map +0 -1
  778. package/dist/runtime/qwen-code/index.d.ts +0 -26
  779. package/dist/runtime/qwen-code/index.d.ts.map +0 -1
  780. package/dist/runtime/qwen-code/index.js +0 -93
  781. package/dist/runtime/qwen-code/index.js.map +0 -1
  782. package/dist/runtime/qwen-code/provider.d.ts +0 -23
  783. package/dist/runtime/qwen-code/provider.d.ts.map +0 -1
  784. package/dist/runtime/qwen-code/provider.js +0 -134
  785. package/dist/runtime/qwen-code/provider.js.map +0 -1
  786. package/dist/runtime/workflow-hygiene/index.d.ts +0 -4
  787. package/dist/runtime/workflow-hygiene/index.d.ts.map +0 -1
  788. package/dist/runtime/workflow-hygiene/index.js +0 -3
  789. package/dist/runtime/workflow-hygiene/index.js.map +0 -1
  790. package/dist/runtime/workflow-hygiene/labels.d.ts +0 -4
  791. package/dist/runtime/workflow-hygiene/labels.d.ts.map +0 -1
  792. package/dist/runtime/workflow-hygiene/labels.js +0 -64
  793. package/dist/runtime/workflow-hygiene/labels.js.map +0 -1
  794. package/dist/runtime/workflow-hygiene/summaries.d.ts +0 -11
  795. package/dist/runtime/workflow-hygiene/summaries.d.ts.map +0 -1
  796. package/dist/runtime/workflow-hygiene/summaries.js +0 -17
  797. package/dist/runtime/workflow-hygiene/summaries.js.map +0 -1
  798. package/dist/runtime/workflow-hygiene/types.d.ts +0 -12
  799. package/dist/runtime/workflow-hygiene/types.d.ts.map +0 -1
  800. package/dist/runtime/workflow-hygiene/types.js +0 -2
  801. package/dist/runtime/workflow-hygiene/types.js.map +0 -1
  802. package/dist/starter/init.d.ts +0 -18
  803. package/dist/starter/init.d.ts.map +0 -1
  804. package/dist/starter/init.js +0 -108
  805. package/dist/starter/init.js.map +0 -1
  806. package/dist/starter/source-import/agent.d.ts +0 -60
  807. package/dist/starter/source-import/agent.d.ts.map +0 -1
  808. package/dist/starter/source-import/agent.js +0 -302
  809. package/dist/starter/source-import/agent.js.map +0 -1
  810. package/dist/starter/source-import/detect.d.ts +0 -20
  811. package/dist/starter/source-import/detect.d.ts.map +0 -1
  812. package/dist/starter/source-import/detect.js +0 -197
  813. package/dist/starter/source-import/detect.js.map +0 -1
  814. package/dist/starter/source-import/github-source.d.ts +0 -66
  815. package/dist/starter/source-import/github-source.d.ts.map +0 -1
  816. package/dist/starter/source-import/github-source.js +0 -233
  817. package/dist/starter/source-import/github-source.js.map +0 -1
  818. package/dist/starter/source-import/index.d.ts +0 -31
  819. package/dist/starter/source-import/index.d.ts.map +0 -1
  820. package/dist/starter/source-import/index.js +0 -31
  821. package/dist/starter/source-import/index.js.map +0 -1
  822. package/dist/starter/source-import/materialize.d.ts +0 -61
  823. package/dist/starter/source-import/materialize.d.ts.map +0 -1
  824. package/dist/starter/source-import/materialize.js +0 -260
  825. package/dist/starter/source-import/materialize.js.map +0 -1
  826. package/dist/starter/source-import/plan.d.ts +0 -39
  827. package/dist/starter/source-import/plan.d.ts.map +0 -1
  828. package/dist/starter/source-import/plan.js +0 -158
  829. package/dist/starter/source-import/plan.js.map +0 -1
  830. package/dist/starter/source-import/security.d.ts +0 -42
  831. package/dist/starter/source-import/security.d.ts.map +0 -1
  832. package/dist/starter/source-import/security.js +0 -323
  833. package/dist/starter/source-import/security.js.map +0 -1
  834. package/dist/starter/source-import/skills-source.d.ts +0 -28
  835. package/dist/starter/source-import/skills-source.d.ts.map +0 -1
  836. package/dist/starter/source-import/skills-source.js +0 -419
  837. package/dist/starter/source-import/skills-source.js.map +0 -1
  838. package/dist/starter/source-import/summarize.d.ts +0 -25
  839. package/dist/starter/source-import/summarize.d.ts.map +0 -1
  840. package/dist/starter/source-import/summarize.js +0 -107
  841. package/dist/starter/source-import/summarize.js.map +0 -1
  842. package/dist/starter/source-import/types.d.ts +0 -357
  843. package/dist/starter/source-import/types.d.ts.map +0 -1
  844. package/dist/starter/source-import/types.js +0 -28
  845. package/dist/starter/source-import/types.js.map +0 -1
  846. package/dist/starter/types.d.ts +0 -46
  847. package/dist/starter/types.d.ts.map +0 -1
  848. package/dist/starter/types.js +0 -11
  849. package/dist/starter/types.js.map +0 -1
  850. package/dist/status/probes.d.ts +0 -25
  851. package/dist/status/probes.d.ts.map +0 -1
  852. package/dist/status/probes.js +0 -297
  853. package/dist/status/probes.js.map +0 -1
  854. package/dist/status/runner.d.ts +0 -18
  855. package/dist/status/runner.d.ts.map +0 -1
  856. package/dist/status/runner.js +0 -185
  857. package/dist/status/runner.js.map +0 -1
  858. package/dist/status/types.d.ts +0 -60
  859. package/dist/status/types.d.ts.map +0 -1
  860. package/dist/status/types.js +0 -13
  861. package/dist/status/types.js.map +0 -1
  862. package/dist/templates/catalog.d.ts +0 -12
  863. package/dist/templates/catalog.d.ts.map +0 -1
  864. package/dist/templates/catalog.js +0 -226
  865. package/dist/templates/catalog.js.map +0 -1
  866. package/dist/templates/contract.d.ts +0 -62
  867. package/dist/templates/contract.d.ts.map +0 -1
  868. package/dist/templates/contract.js +0 -12
  869. package/dist/templates/contract.js.map +0 -1
  870. package/dist/templates/index.d.ts +0 -5
  871. package/dist/templates/index.d.ts.map +0 -1
  872. package/dist/templates/index.js +0 -2
  873. package/dist/templates/index.js.map +0 -1
  874. package/dist/templates/service.d.ts +0 -19
  875. package/dist/templates/service.d.ts.map +0 -1
  876. package/dist/templates/service.js +0 -132
  877. package/dist/templates/service.js.map +0 -1
  878. package/dist/utils/banner.d.ts +0 -2
  879. package/dist/utils/banner.d.ts.map +0 -1
  880. package/dist/utils/banner.js.map +0 -1
  881. package/dist/utils/net.d.ts +0 -5
  882. package/dist/utils/net.d.ts.map +0 -1
  883. package/dist/utils/net.js +0 -19
  884. package/dist/utils/net.js.map +0 -1
  885. package/dist/utils/path-resolver.d.ts +0 -2
  886. package/dist/utils/path-resolver.d.ts.map +0 -1
  887. package/dist/utils/path-resolver.js +0 -22
  888. package/dist/utils/path-resolver.js.map +0 -1
  889. package/dist/utils/progress.d.ts +0 -24
  890. package/dist/utils/progress.d.ts.map +0 -1
  891. package/dist/utils/progress.js +0 -57
  892. package/dist/utils/progress.js.map +0 -1
  893. package/dist/utils/table-renderer.d.ts +0 -28
  894. package/dist/utils/table-renderer.d.ts.map +0 -1
  895. package/dist/utils/table-renderer.js +0 -83
  896. package/dist/utils/table-renderer.js.map +0 -1
@@ -1,1350 +0,0 @@
1
- /**
2
- * CLI Commands — workflow
3
- *
4
- * Auth-gated workflow discovery and pipeline assembly.
5
- *
6
- * If the user is not authenticated (no active growthub auth session),
7
- * the workflow path remains greyed out in the discovery hub. When
8
- * authenticated, the user sees:
9
- *
10
- * 🔗 Workflows
11
- * ├── CMS Node Contracts (contract discovery + inspection)
12
- * ├── Dynamic Pipelines (hosted assembly + execution)
13
- * └── Saved Workflows (user-persisted pipelines)
14
- *
15
- * Templates are the real production CMS workflow_node records.
16
- * Only top-level items get emoji; sub-items have clean titles.
17
- * Pagination at 10 options with extended view and search.
18
- */
19
- import fs from "node:fs";
20
- import path from "node:path";
21
- import * as p from "@clack/prompts";
22
- import pc from "picocolors";
23
- import { getWorkflowAccess } from "../auth/workflow-access.js";
24
- import { readSession, isSessionExpired } from "../auth/session-store.js";
25
- import { archiveHostedWorkflow, deleteHostedWorkflow, fetchHostedWorkflow, listHostedWorkflows, saveHostedWorkflow, HostedEndpointUnavailableError, } from "../auth/hosted-client.js";
26
- import { createCmsCapabilityRegistryClient, CAPABILITY_FAMILIES, } from "../runtime/cms-capability-registry/index.js";
27
- import { createMachineCapabilityResolver, } from "../runtime/machine-capability-resolver/index.js";
28
- import { createPipelineBuilder, deserializePipeline, } from "../runtime/dynamic-registry-pipeline/index.js";
29
- import { introspectNodeContract, normalizeNodeBindings, compileToHostedWorkflowConfig, buildPreExecutionSummary, renderContractCard, renderPreExecutionSummary, renderPreSaveReview, } from "../runtime/cms-node-contracts/index.js";
30
- import { createWorkflowHygieneStore, enrichWorkflowSummaries, renderWorkflowLabel, } from "../runtime/workflow-hygiene/index.js";
31
- import { createNativeIntelligenceProvider, } from "../runtime/native-intelligence/index.js";
32
- import { executeHostedPipeline, runPipelineAssembler } from "./pipeline.js";
33
- import { printPaperclipCliBanner } from "../utils/banner.js";
34
- import { resolvePaperclipHomeDir } from "../config/home.js";
35
- // ---------------------------------------------------------------------------
36
- // Constants
37
- // ---------------------------------------------------------------------------
38
- const PAGE_SIZE = 10;
39
- // ---------------------------------------------------------------------------
40
- // Display helpers
41
- // ---------------------------------------------------------------------------
42
- const FAMILY_CONFIG = {
43
- video: { color: pc.magenta, label: "Video" },
44
- image: { color: pc.cyan, label: "Image" },
45
- slides: { color: pc.yellow, label: "Slides" },
46
- text: { color: pc.green, label: "Text" },
47
- data: { color: pc.blue, label: "Data" },
48
- ops: { color: pc.red, label: "Ops" },
49
- research: { color: pc.blue, label: "Research" },
50
- vision: { color: pc.cyan, label: "Vision" },
51
- };
52
- const FAMILY_EMOJI = {
53
- video: "🎬",
54
- image: "🖼️",
55
- slides: "🧩",
56
- text: "📝",
57
- data: "📊",
58
- ops: "🛠️",
59
- research: "🔎",
60
- vision: "👁️",
61
- };
62
- function familyLabel(family) {
63
- const cfg = FAMILY_CONFIG[family];
64
- return cfg ? cfg.color(cfg.label) : family;
65
- }
66
- function hr(width = 72) {
67
- return pc.dim("─".repeat(width));
68
- }
69
- function stripAnsi(str) {
70
- // eslint-disable-next-line no-control-regex
71
- return str.replace(/\x1B\[[0-9;]*m/g, "");
72
- }
73
- function box(lines) {
74
- const padded = lines.map((l) => " " + l);
75
- const width = Math.max(...padded.map((l) => stripAnsi(l).length)) + 4;
76
- const top = pc.dim("┌" + "─".repeat(width) + "┐");
77
- const bottom = pc.dim("└" + "─".repeat(width) + "┘");
78
- const body = padded.map((l) => {
79
- const pad = width - stripAnsi(l).length;
80
- return pc.dim("│") + l + " ".repeat(pad) + pc.dim("│");
81
- });
82
- return [top, ...body, bottom].join("\n");
83
- }
84
- // ---------------------------------------------------------------------------
85
- // Auth gate
86
- // ---------------------------------------------------------------------------
87
- function isAuthenticated() {
88
- const session = readSession();
89
- if (!session)
90
- return false;
91
- return !isSessionExpired(session);
92
- }
93
- // ---------------------------------------------------------------------------
94
- // Saved workflows directory
95
- // ---------------------------------------------------------------------------
96
- function resolveSavedWorkflowsDir() {
97
- return path.resolve(resolvePaperclipHomeDir(), "workflows");
98
- }
99
- function resolveDeletedWorkflowIdsPath() {
100
- return path.resolve(resolvePaperclipHomeDir(), "workflow-hygiene", "deleted-workflows.json");
101
- }
102
- function readDeletedWorkflowIds() {
103
- const filePath = resolveDeletedWorkflowIdsPath();
104
- if (!fs.existsSync(filePath))
105
- return new Set();
106
- try {
107
- const raw = JSON.parse(fs.readFileSync(filePath, "utf-8"));
108
- if (!Array.isArray(raw?.workflowIds))
109
- return new Set();
110
- return new Set(raw.workflowIds.filter((value) => typeof value === "string"));
111
- }
112
- catch {
113
- return new Set();
114
- }
115
- }
116
- function writeDeletedWorkflowIds(ids) {
117
- const filePath = resolveDeletedWorkflowIdsPath();
118
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
119
- fs.writeFileSync(filePath, `${JSON.stringify({ workflowIds: [...ids] }, null, 2)}\n`, "utf-8");
120
- }
121
- function markWorkflowDeletedLocally(workflowId) {
122
- const ids = readDeletedWorkflowIds();
123
- ids.add(workflowId);
124
- writeDeletedWorkflowIds(ids);
125
- }
126
- function isWorkflowDeletedLocally(workflowId) {
127
- return readDeletedWorkflowIds().has(workflowId);
128
- }
129
- function effectiveWorkflowLabel(entry, hygieneStore) {
130
- const explicitLabel = hygieneStore.getLabel(entry.workflowId);
131
- if (explicitLabel)
132
- return explicitLabel;
133
- if (entry.isActive === false)
134
- return "archived";
135
- return entry.workflowLabel ?? "experimental";
136
- }
137
- function withEffectiveWorkflowLabels(entries, hygieneStore) {
138
- return entries.map((entry) => ({
139
- ...entry,
140
- workflowLabel: effectiveWorkflowLabel(entry, hygieneStore),
141
- }));
142
- }
143
- function filterLocallyDeletedWorkflows(entries) {
144
- const deletedIds = readDeletedWorkflowIds();
145
- return entries.filter((entry) => !deletedIds.has(entry.workflowId));
146
- }
147
- async function runBulkArchive(entries, hygieneStore) {
148
- if (entries.length === 0) {
149
- p.note("No workflows selected for archive.", "Bulk archive skipped");
150
- return;
151
- }
152
- const spinner = p.spinner();
153
- spinner.start(`Archiving ${entries.length} workflow${entries.length === 1 ? "" : "s"}...`);
154
- let ok = 0;
155
- let failed = 0;
156
- let localFallback = 0;
157
- for (const entry of entries) {
158
- try {
159
- await archiveSavedWorkflow(entry);
160
- hygieneStore.setLabel(entry.workflowId, "archived");
161
- ok += 1;
162
- }
163
- catch {
164
- // Never dead-end archive cleanup: preserve archived state locally.
165
- hygieneStore.setLabel(entry.workflowId, "archived");
166
- ok += 1;
167
- localFallback += 1;
168
- }
169
- }
170
- spinner.stop(`Archive complete: ${ok} succeeded, ${failed} failed${localFallback > 0 ? ` (${localFallback} local fallback)` : ""}.`);
171
- }
172
- async function runBulkDelete(entries) {
173
- if (entries.length === 0) {
174
- p.note("No workflows selected for deletion.", "Bulk delete skipped");
175
- return;
176
- }
177
- const spinner = p.spinner();
178
- spinner.start(`Deleting ${entries.length} workflow${entries.length === 1 ? "" : "s"}...`);
179
- let ok = 0;
180
- let failed = 0;
181
- let localFallback = 0;
182
- for (const entry of entries) {
183
- try {
184
- await deleteSavedWorkflow(entry);
185
- ok += 1;
186
- }
187
- catch {
188
- // Never dead-end delete cleanup: hide locally when hosted delete fails.
189
- markWorkflowDeletedLocally(entry.workflowId);
190
- ok += 1;
191
- localFallback += 1;
192
- }
193
- }
194
- spinner.stop(`Delete complete: ${ok} succeeded, ${failed} failed${localFallback > 0 ? ` (${localFallback} local fallback)` : ""}.`);
195
- }
196
- function runBulkUnarchive(entries, hygieneStore, restoreLabel) {
197
- if (entries.length === 0) {
198
- p.note("No workflows selected for unarchive.", "Bulk unarchive skipped");
199
- return;
200
- }
201
- for (const entry of entries) {
202
- hygieneStore.setLabel(entry.workflowId, restoreLabel);
203
- }
204
- p.log.success(`Unarchived ${entries.length} workflow${entries.length === 1 ? "" : "s"} to ${renderWorkflowLabel(restoreLabel)}.`);
205
- }
206
- function listLocalSavedWorkflows() {
207
- const dir = resolveSavedWorkflowsDir();
208
- if (!fs.existsSync(dir))
209
- return [];
210
- const entries = fs.readdirSync(dir, { withFileTypes: true })
211
- .filter((e) => e.isFile() && e.name.endsWith(".json"))
212
- .map((e) => {
213
- try {
214
- const raw = JSON.parse(fs.readFileSync(path.resolve(dir, e.name), "utf-8"));
215
- const pipeline = raw.pipeline ?? raw;
216
- return {
217
- filename: e.name,
218
- workflowId: pipeline.metadata?.hostedWorkflowId ?? pipeline.pipelineId ?? e.name.replace(".json", ""),
219
- pipelineId: pipeline.pipelineId ?? e.name.replace(".json", ""),
220
- name: pipeline.metadata?.workflowName ?? pipeline.pipelineId ?? e.name.replace(".json", ""),
221
- nodeCount: Array.isArray(pipeline.nodes) ? pipeline.nodes.length : 0,
222
- executionMode: pipeline.executionMode ?? "hosted",
223
- createdAt: raw.createdAt ?? "",
224
- source: "local",
225
- };
226
- }
227
- catch {
228
- return null;
229
- }
230
- });
231
- return entries
232
- .filter((entry) => entry !== null)
233
- .sort((a, b) => b.createdAt.localeCompare(a.createdAt));
234
- }
235
- async function listSavedWorkflows() {
236
- const session = readSession();
237
- if (!session || isSessionExpired(session)) {
238
- return listLocalSavedWorkflows();
239
- }
240
- try {
241
- const response = await listHostedWorkflows(session);
242
- if (!response || !Array.isArray(response.workflows))
243
- return listLocalSavedWorkflows();
244
- return response.workflows.map((workflow) => ({
245
- workflowId: workflow.workflowId,
246
- pipelineId: workflow.workflowId,
247
- name: workflow.name,
248
- nodeCount: workflow.latestVersion?.nodeCount ?? 0,
249
- executionMode: "hosted",
250
- createdAt: workflow.createdAt,
251
- updatedAt: workflow.updatedAt,
252
- versionCount: workflow.versionCount,
253
- source: "hosted",
254
- isActive: workflow.isActive,
255
- }));
256
- }
257
- catch (err) {
258
- if (err instanceof HostedEndpointUnavailableError) {
259
- return listLocalSavedWorkflows();
260
- }
261
- throw err;
262
- }
263
- }
264
- async function archiveSavedWorkflow(entry) {
265
- if (entry.source === "hosted") {
266
- const session = readSession();
267
- if (!session || isSessionExpired(session)) {
268
- throw new Error("Hosted session expired while archiving workflow.");
269
- }
270
- const result = await archiveHostedWorkflow(session, { workflowId: entry.workflowId });
271
- if (!result?.ok) {
272
- throw new Error(`Failed to archive hosted workflow ${entry.workflowId}.`);
273
- }
274
- return;
275
- }
276
- if (!entry.filename) {
277
- throw new Error("Local workflow entry is missing filename.");
278
- }
279
- const dir = resolveSavedWorkflowsDir();
280
- const archiveDir = path.resolve(dir, "archived");
281
- fs.mkdirSync(archiveDir, { recursive: true });
282
- fs.renameSync(path.resolve(dir, entry.filename), path.resolve(archiveDir, entry.filename));
283
- }
284
- async function deleteSavedWorkflow(entry) {
285
- if (entry.source === "hosted") {
286
- const session = readSession();
287
- if (!session || isSessionExpired(session)) {
288
- throw new Error("Hosted session expired while deleting workflow.");
289
- }
290
- try {
291
- const result = await deleteHostedWorkflow(session, { workflowId: entry.workflowId });
292
- if (!result?.ok) {
293
- throw new Error(`Failed to delete hosted workflow ${entry.workflowId}.`);
294
- }
295
- markWorkflowDeletedLocally(entry.workflowId);
296
- return;
297
- }
298
- catch {
299
- // Persist local delete intent so this workflow is hidden in CLI even when
300
- // hosted lifecycle endpoints fail on this surface.
301
- markWorkflowDeletedLocally(entry.workflowId);
302
- return;
303
- }
304
- }
305
- if (!entry.filename) {
306
- throw new Error("Local workflow entry is missing filename.");
307
- }
308
- fs.rmSync(path.resolve(resolveSavedWorkflowsDir(), entry.filename), { force: true });
309
- markWorkflowDeletedLocally(entry.workflowId);
310
- }
311
- async function loadSavedWorkflowDetail(entry) {
312
- if (entry.source === "hosted") {
313
- const session = readSession();
314
- if (!session || isSessionExpired(session)) {
315
- throw new Error("Hosted session expired while loading workflow detail.");
316
- }
317
- const detail = await fetchHostedWorkflow(session, entry.workflowId);
318
- if (!detail) {
319
- throw new Error(`Hosted workflow ${entry.workflowId} not found.`);
320
- }
321
- return {
322
- pipeline: (detail.latestVersion.config ?? {}),
323
- createdAt: detail.latestVersion.createdAt,
324
- };
325
- }
326
- const dir = resolveSavedWorkflowsDir();
327
- const content = fs.readFileSync(path.resolve(dir, entry.filename), "utf-8");
328
- const raw = JSON.parse(content);
329
- return {
330
- pipeline: (raw.pipeline ?? raw),
331
- createdAt: raw.createdAt ?? "",
332
- };
333
- }
334
- function toDynamicPipelineFromHostedWorkflow(entry, pipeline) {
335
- const rawNodes = Array.isArray(pipeline.nodes) ? pipeline.nodes : [];
336
- const rawEdges = Array.isArray(pipeline.edges) ? pipeline.edges : [];
337
- const cmsNodes = rawNodes.filter((node) => {
338
- return typeof node === "object" && node !== null && node.type === "cmsNode";
339
- });
340
- const upstreamNodeIdsByTarget = new Map();
341
- for (const edge of rawEdges) {
342
- if (typeof edge !== "object" || edge === null)
343
- continue;
344
- const source = typeof edge.source === "string"
345
- ? edge.source
346
- : null;
347
- const target = typeof edge.target === "string"
348
- ? edge.target
349
- : null;
350
- if (!source || !target || source === "start-1" || target === "end-1")
351
- continue;
352
- const existing = upstreamNodeIdsByTarget.get(target) ?? [];
353
- existing.push(source);
354
- upstreamNodeIdsByTarget.set(target, existing);
355
- }
356
- return {
357
- pipelineId: entry.pipelineId,
358
- executionMode: "hosted",
359
- nodes: cmsNodes.map((node) => {
360
- const id = typeof node.id === "string" ? node.id : `node-${Math.random().toString(36).slice(2, 8)}`;
361
- const data = typeof node.data === "object" && node.data !== null
362
- ? node.data
363
- : {};
364
- return {
365
- id,
366
- slug: typeof data.slug === "string" ? data.slug : id,
367
- bindings: typeof data.inputs === "object" && data.inputs !== null
368
- ? data.inputs
369
- : {},
370
- upstreamNodeIds: upstreamNodeIdsByTarget.get(id),
371
- };
372
- }),
373
- metadata: {
374
- hostedWorkflowId: entry.workflowId,
375
- workflowName: entry.name,
376
- },
377
- };
378
- }
379
- function toExecutableSavedWorkflowPipeline(entry, pipeline) {
380
- const looksLikeDynamicPipeline = Array.isArray(pipeline.nodes) &&
381
- pipeline.nodes.every((node) => {
382
- if (typeof node !== "object" || node === null)
383
- return false;
384
- const record = node;
385
- return typeof record.id === "string" && typeof record.slug === "string";
386
- });
387
- if (looksLikeDynamicPipeline) {
388
- const parsed = deserializePipeline(pipeline);
389
- return {
390
- ...parsed,
391
- metadata: {
392
- ...(parsed.metadata ?? {}),
393
- hostedWorkflowId: entry.workflowId,
394
- workflowName: entry.name,
395
- },
396
- };
397
- }
398
- return toDynamicPipelineFromHostedWorkflow(entry, pipeline);
399
- }
400
- async function paginatedSelect(message, allOptions, opts) {
401
- let offset = 0;
402
- let filtered = allOptions;
403
- while (true) {
404
- const page = filtered.slice(offset, offset + PAGE_SIZE);
405
- const hasMore = offset + PAGE_SIZE < filtered.length;
406
- const hasPrev = offset > 0;
407
- const totalPages = Math.ceil(filtered.length / PAGE_SIZE);
408
- const currentPage = Math.floor(offset / PAGE_SIZE) + 1;
409
- const pageInfo = filtered.length > PAGE_SIZE
410
- ? pc.dim(` (${currentPage}/${totalPages} · ${filtered.length} total)`)
411
- : "";
412
- const options = [
413
- ...page.map((o) => ({
414
- value: o.value,
415
- label: o.label,
416
- hint: o.hint,
417
- })),
418
- ];
419
- if (hasMore) {
420
- options.push({ value: "__next_page", label: pc.dim("→ Next page") });
421
- }
422
- if (hasPrev) {
423
- options.push({ value: "__prev_page", label: pc.dim("← Previous page") });
424
- }
425
- if (opts?.searchEnabled) {
426
- options.push({ value: "__search", label: pc.dim("🔎 Search") });
427
- }
428
- options.push({
429
- value: opts?.backValue ?? "__back",
430
- label: opts?.backLabel ?? "← Back",
431
- });
432
- const choice = await p.select({
433
- message: message + pageInfo,
434
- options,
435
- });
436
- if (p.isCancel(choice))
437
- return choice;
438
- if (choice === "__next_page") {
439
- offset += PAGE_SIZE;
440
- continue;
441
- }
442
- if (choice === "__prev_page") {
443
- offset = Math.max(0, offset - PAGE_SIZE);
444
- continue;
445
- }
446
- if (choice === "__search") {
447
- const term = await p.text({
448
- message: "Search items",
449
- placeholder: "Type to filter...",
450
- });
451
- if (p.isCancel(term))
452
- return term;
453
- const searchStr = term.toLowerCase().trim();
454
- if (searchStr) {
455
- filtered = allOptions.filter((o) => {
456
- const haystack = `${o.value} ${o.label} ${o.hint ?? ""}`.toLowerCase();
457
- return haystack.includes(searchStr);
458
- });
459
- offset = 0;
460
- if (filtered.length === 0) {
461
- p.note(`No results for "${term}".`, "No matches");
462
- filtered = allOptions;
463
- }
464
- }
465
- else {
466
- filtered = allOptions;
467
- offset = 0;
468
- }
469
- continue;
470
- }
471
- return choice;
472
- }
473
- }
474
- // ---------------------------------------------------------------------------
475
- // Template detail card
476
- // ---------------------------------------------------------------------------
477
- function printTemplateCard(node) {
478
- const contract = introspectNodeContract(node);
479
- const lines = renderContractCard(contract);
480
- lines.splice(1, 0, `${familyLabel(node.family)} ${node.enabled ? pc.green("enabled") : pc.red("disabled")}`);
481
- if (node.description)
482
- lines.push("", pc.dim(node.description));
483
- console.log("");
484
- console.log(box(lines));
485
- console.log("");
486
- }
487
- function renderTemplateTree(templates) {
488
- const byFamily = new Map();
489
- for (const template of templates) {
490
- const key = template.family;
491
- const existing = byFamily.get(key) ?? [];
492
- existing.push(template);
493
- byFamily.set(key, existing);
494
- }
495
- const families = [...byFamily.entries()].sort((a, b) => a[0].localeCompare(b[0]));
496
- const lines = [pc.bold("Public CMS Node Tree")];
497
- for (const [family, nodes] of families) {
498
- lines.push(`${pc.cyan("•")} ${pc.bold(family)}`);
499
- const sorted = [...nodes].sort((a, b) => a.slug.localeCompare(b.slug));
500
- for (const [index, node] of sorted.entries()) {
501
- const branch = index === sorted.length - 1 ? "└─" : "├─";
502
- const contract = introspectNodeContract(node);
503
- const requiredInputs = contract.inputs.filter((input) => input.required).length;
504
- const optionalInputs = contract.inputs.length - requiredInputs;
505
- lines.push(` ${branch} ${node.slug} ${pc.dim(`(req:${requiredInputs} opt:${optionalInputs} out:${contract.outputTypes.length})`)}`);
506
- }
507
- }
508
- lines.push("");
509
- lines.push(pc.dim("Shortcut: growthub workflow saved --json"));
510
- return lines;
511
- }
512
- function renderWorkflowContractDiscoveryTree(nodes) {
513
- const byFamily = new Map();
514
- for (const node of nodes) {
515
- const key = node.family;
516
- const group = byFamily.get(key) ?? [];
517
- group.push(node);
518
- byFamily.set(key, group);
519
- }
520
- const families = [...byFamily.entries()].sort((a, b) => a[0].localeCompare(b[0]));
521
- const lines = [pc.bold("CMS Node Contract Discovery")];
522
- for (const [family, familyNodes] of families) {
523
- const emoji = FAMILY_EMOJI[family] ?? "•";
524
- lines.push(`${emoji} ${pc.bold(familyLabel(family))} ${pc.dim(`(${familyNodes.length})`)}`);
525
- const sorted = [...familyNodes].sort((a, b) => a.slug.localeCompare(b.slug));
526
- for (const [index, node] of sorted.entries()) {
527
- const branch = index === sorted.length - 1 ? "└─" : "├─";
528
- const contract = introspectNodeContract(node);
529
- const requiredInputs = contract.inputs.filter((input) => input.required).length;
530
- const optionalInputs = contract.inputs.length - requiredInputs;
531
- lines.push(` ${branch} ${node.slug} ${pc.dim(`req:${requiredInputs} opt:${optionalInputs} bindings:${contract.requiredBindings.length} outputs:${contract.outputTypes.length}`)}`);
532
- }
533
- }
534
- return lines;
535
- }
536
- function buildTemplateOption(template, viewMode) {
537
- const contract = introspectNodeContract(template);
538
- const requiredInputs = contract.inputs.filter((input) => input.required).length;
539
- const optionalInputs = contract.inputs.length - requiredInputs;
540
- if (viewMode === "expanded") {
541
- return {
542
- value: template.slug,
543
- label: `${template.icon} ${template.displayName} ${pc.dim(template.slug)}`,
544
- hint: `req:${requiredInputs} opt:${optionalInputs} outputs:${contract.outputTypes.join(", ") || "none"} exec:${contract.executionStrategy}`,
545
- };
546
- }
547
- if (viewMode === "tree") {
548
- return {
549
- value: template.slug,
550
- label: `${template.family} / ${template.slug}`,
551
- hint: `req:${requiredInputs} opt:${optionalInputs}`,
552
- };
553
- }
554
- return {
555
- value: template.slug,
556
- label: `${template.icon} ${template.displayName}`,
557
- hint: template.description?.slice(0, 55),
558
- };
559
- }
560
- // ---------------------------------------------------------------------------
561
- // Interactive workflow picker — main entry
562
- // ---------------------------------------------------------------------------
563
- export async function runWorkflowPicker(opts) {
564
- printPaperclipCliBanner();
565
- const hygieneStore = createWorkflowHygieneStore();
566
- const access = getWorkflowAccess();
567
- if (access.state === "unauthenticated") {
568
- p.intro(pc.bold("Workflows") + pc.dim(" (not connected)"));
569
- p.note([
570
- "Workflow assembly requires an authenticated Growthub session.",
571
- "Run " + pc.cyan("growthub auth login") + " to connect your account.",
572
- "",
573
- "Once connected you can:",
574
- " - Browse CMS node contracts",
575
- " - Assemble dynamic hosted pipelines",
576
- " - Save and execute workflows",
577
- ].join("\n"), "Authentication Required");
578
- if (opts.allowBackToHub)
579
- return "back";
580
- return "done";
581
- }
582
- p.intro(pc.bold("Workflows"));
583
- while (true) {
584
- const refreshedAccess = getWorkflowAccess();
585
- const topChoice = await p.select({
586
- message: "What would you like to do?",
587
- options: [
588
- {
589
- value: "contracts",
590
- label: refreshedAccess.state === "ready"
591
- ? "0. CMS Node Contracts"
592
- : pc.dim("0. CMS Node Contracts (locked)"),
593
- hint: refreshedAccess.state === "ready"
594
- ? "Discovery tree for CMS node primitives"
595
- : refreshedAccess.reason,
596
- },
597
- {
598
- value: "pipelines",
599
- label: refreshedAccess.state === "ready"
600
- ? "1. Dynamic Pipelines"
601
- : pc.dim("1. Dynamic Pipelines (locked)"),
602
- hint: refreshedAccess.state === "ready"
603
- ? "Create new pipelines and route into Saved Workflows"
604
- : refreshedAccess.reason,
605
- },
606
- {
607
- value: "saved",
608
- label: "2. Saved Workflows",
609
- hint: "Execute, label, archive, delete",
610
- },
611
- ...(opts.allowBackToHub ? [{ value: "__back_to_hub", label: "← Back to main menu" }] : []),
612
- ],
613
- });
614
- if (p.isCancel(topChoice)) {
615
- p.cancel("Cancelled.");
616
- process.exit(0);
617
- }
618
- if (topChoice === "__back_to_hub")
619
- return "back";
620
- if (topChoice === "contracts" && refreshedAccess.state !== "ready") {
621
- p.note([
622
- "CMS Node Contracts are only available when the hosted user is linked to this local machine.",
623
- refreshedAccess.reason,
624
- ].join("\n"), "Growthub Local Machine Required");
625
- continue;
626
- }
627
- if (topChoice === "contracts") {
628
- const contractsSpinner = p.spinner();
629
- contractsSpinner.start("Loading CMS node contracts...");
630
- try {
631
- const registry = createCmsCapabilityRegistryClient();
632
- const { nodes } = await registry.listCapabilities({ enabledOnly: false });
633
- contractsSpinner.stop(`Loaded ${nodes.length} CMS node contract${nodes.length === 1 ? "" : "s"}.`);
634
- if (nodes.length === 0) {
635
- p.note("No CMS node contracts available.", "Nothing found");
636
- continue;
637
- }
638
- let showDiscoveryTree = false;
639
- while (true) {
640
- if (showDiscoveryTree) {
641
- console.log("");
642
- console.log(box(renderWorkflowContractDiscoveryTree(nodes)));
643
- console.log("");
644
- showDiscoveryTree = false;
645
- }
646
- const contractsMenuChoice = await p.select({
647
- message: "CMS Node Contracts",
648
- options: [
649
- { value: "browse", label: "Browse contract list", hint: "Select a node and view full contract" },
650
- { value: "show_tree", label: "Show discovery tree", hint: "Family primitives and contract counts" },
651
- { value: "__back_to_workflow", label: "← Back to workflow menu" },
652
- ],
653
- });
654
- if (p.isCancel(contractsMenuChoice)) {
655
- p.cancel("Cancelled.");
656
- process.exit(0);
657
- }
658
- if (contractsMenuChoice === "__back_to_workflow")
659
- break;
660
- if (contractsMenuChoice === "show_tree") {
661
- showDiscoveryTree = true;
662
- continue;
663
- }
664
- const contractOptions = [...nodes]
665
- .sort((a, b) => a.slug.localeCompare(b.slug))
666
- .map((node) => {
667
- const contract = introspectNodeContract(node);
668
- const requiredInputs = contract.inputs.filter((input) => input.required).length;
669
- return {
670
- value: node.slug,
671
- label: `${node.icon} ${node.displayName} ${pc.dim(node.slug)}`,
672
- hint: `${node.family} · required:${requiredInputs} · bindings:${contract.requiredBindings.length} · outputs:${contract.outputTypes.length}`,
673
- };
674
- });
675
- const contractChoice = await paginatedSelect("Select CMS node contract", contractOptions, {
676
- backLabel: "← Back to CMS contracts menu",
677
- searchEnabled: true,
678
- });
679
- if (p.isCancel(contractChoice)) {
680
- p.cancel("Cancelled.");
681
- process.exit(0);
682
- }
683
- if (contractChoice === "__back")
684
- continue;
685
- const selected = nodes.find((node) => node.slug === contractChoice);
686
- if (!selected)
687
- continue;
688
- printTemplateCard(selected);
689
- const contractAction = await p.select({
690
- message: "Contract actions",
691
- options: [
692
- { value: "inspect_json", label: "Inspect raw input template JSON" },
693
- { value: "back_to_contracts_menu", label: "← Back to CMS contracts menu" },
694
- { value: "back_to_workflow_menu", label: "← Back to workflow menu" },
695
- ],
696
- });
697
- if (p.isCancel(contractAction)) {
698
- p.cancel("Cancelled.");
699
- process.exit(0);
700
- }
701
- if (contractAction === "inspect_json") {
702
- console.log(JSON.stringify(selected.executionTokens.input_template, null, 2));
703
- continue;
704
- }
705
- if (contractAction === "back_to_workflow_menu") {
706
- break;
707
- }
708
- }
709
- }
710
- catch (err) {
711
- contractsSpinner.stop(pc.red("Failed to load CMS node contracts."));
712
- p.log.error("Failed to load CMS node contracts: " + err.message);
713
- }
714
- continue;
715
- }
716
- if (topChoice === "pipelines") {
717
- if (refreshedAccess.state !== "ready") {
718
- p.note([
719
- "Dynamic Pipelines are only available when the hosted user is linked to this local machine.",
720
- refreshedAccess.reason,
721
- ].join("\n"), "Growthub Local Machine Required");
722
- continue;
723
- }
724
- const result = await runPipelineAssembler({ allowBackToHub: true });
725
- if (result === "back") {
726
- continue;
727
- }
728
- return "done";
729
- }
730
- // ── Saved Workflows ──────────────────────────────────────────────────
731
- if (topChoice === "saved") {
732
- while (true) {
733
- const savedSpinner = p.spinner();
734
- savedSpinner.start("Loading saved workflows...");
735
- let saved;
736
- try {
737
- const enriched = enrichWorkflowSummaries(filterLocallyDeletedWorkflows(await listSavedWorkflows()), hygieneStore);
738
- saved = withEffectiveWorkflowLabels(enriched, hygieneStore);
739
- savedSpinner.stop(`Loaded ${saved.length} saved workflow${saved.length === 1 ? "" : "s"}.`);
740
- }
741
- catch (err) {
742
- savedSpinner.stop(pc.red("Failed to load saved workflows."));
743
- throw err;
744
- }
745
- if (saved.length === 0) {
746
- p.note([
747
- "No saved workflows found.",
748
- "Use " + pc.cyan("growthub pipeline assemble") + " to create a new workflow pipeline.",
749
- ].join("\n"), "Nothing saved");
750
- break;
751
- }
752
- const allOptions = saved.map((w) => ({
753
- value: w.workflowId,
754
- label: `${w.name} ${pc.dim(`[${renderWorkflowLabel(w.workflowLabel)}]`)} ${pc.dim(`${w.nodeCount} node${w.nodeCount !== 1 ? "s" : ""}`)}`,
755
- hint: `${w.executionMode} · ${w.updatedAt?.slice(0, 10) ?? w.createdAt.slice(0, 10)}`,
756
- }));
757
- const choice = await paginatedSelect("Select a saved workflow", allOptions, {
758
- backLabel: "← Back to workflow menu",
759
- searchEnabled: true,
760
- });
761
- if (p.isCancel(choice)) {
762
- p.cancel("Cancelled.");
763
- process.exit(0);
764
- }
765
- if (choice === "__back")
766
- break;
767
- // Show workflow detail
768
- const entry = saved.find((w) => w.workflowId === choice);
769
- if (entry) {
770
- const detailSpinner = p.spinner();
771
- detailSpinner.start(`Loading ${entry.name}...`);
772
- let detail;
773
- try {
774
- detail = await loadSavedWorkflowDetail(entry);
775
- detailSpinner.stop(`Loaded ${entry.name}.`);
776
- }
777
- catch (err) {
778
- detailSpinner.stop(pc.red(`Failed to load ${entry.name}.`));
779
- p.log.error(err.message);
780
- continue;
781
- }
782
- const pipeline = detail.pipeline;
783
- const nodes = Array.isArray(pipeline.nodes) ? pipeline.nodes : [];
784
- console.log("");
785
- console.log(box([
786
- `${pc.bold("Workflow:")} ${entry.name}`,
787
- `${pc.dim("ID:")} ${entry.workflowId}`,
788
- `${pc.dim("Mode:")} hosted ${pc.dim("Nodes:")} ${nodes.length}`,
789
- `${pc.dim("Label:")} ${renderWorkflowLabel(entry.workflowLabel ?? "experimental")}`,
790
- `${pc.dim("Created:")} ${detail.createdAt || "—"}`,
791
- "",
792
- ...nodes.map((n, i) => `${pc.dim(String(i + 1) + ".")} ${pc.bold(n.data?.slug ?? n.slug ?? n.id)} ${pc.dim(n.id)}`),
793
- ]));
794
- console.log("");
795
- const nextAction = await p.select({
796
- message: "Action",
797
- options: [
798
- { value: "execute", label: "Execute saved workflow" },
799
- { value: "set_label", label: "Set workflow label" },
800
- { value: "archive", label: "Archive workflow" },
801
- { value: "unarchive", label: "Unarchive workflow" },
802
- { value: "delete", label: pc.red("Delete workflow") },
803
- { value: "back_to_saved", label: "← Back to saved workflows" },
804
- ],
805
- });
806
- if (p.isCancel(nextAction)) {
807
- p.cancel("Cancelled.");
808
- process.exit(0);
809
- }
810
- if (nextAction === "execute") {
811
- const confirmed = await p.confirm({
812
- message: `Execute ${entry.name} now?`,
813
- initialValue: false,
814
- });
815
- if (p.isCancel(confirmed) || !confirmed) {
816
- continue;
817
- }
818
- const finalConfirmed = await p.confirm({
819
- message: "This will run the hosted workflow and may spend credits. Continue?",
820
- initialValue: false,
821
- });
822
- if (p.isCancel(finalConfirmed) || !finalConfirmed) {
823
- continue;
824
- }
825
- try {
826
- const executablePipeline = toExecutableSavedWorkflowPipeline(entry, pipeline);
827
- const registry = createCmsCapabilityRegistryClient();
828
- const { nodes: capabilities } = await registry.listCapabilities({ enabledOnly: false });
829
- const capabilityMap = new Map(capabilities.map((n) => [n.slug, n]));
830
- const preSummary = buildPreExecutionSummary({
831
- pipeline: executablePipeline,
832
- registryBySlug: capabilityMap,
833
- });
834
- console.log("");
835
- console.log(box(renderPreExecutionSummary(preSummary)));
836
- console.log("");
837
- const intelligenceSummary = await renderWorkflowIntelligenceSummary(executablePipeline, capabilities, "pre-execution");
838
- if (intelligenceSummary) {
839
- console.log(box(intelligenceSummary));
840
- console.log("");
841
- }
842
- await executeHostedPipeline(executablePipeline);
843
- p.log.success(`Saved workflow execution completed for ${pc.bold(entry.name)}.`);
844
- }
845
- catch (err) {
846
- p.log.error("Saved workflow execution failed: " + err.message);
847
- }
848
- }
849
- if (nextAction === "set_label") {
850
- const labelChoice = await p.select({
851
- message: `Set label for ${entry.name}`,
852
- options: [
853
- { value: "canonical", label: "Canonical" },
854
- { value: "experimental", label: "Experimental" },
855
- { value: "archived", label: "Archived" },
856
- { value: "__back", label: "← Back" },
857
- ],
858
- });
859
- if (p.isCancel(labelChoice) || labelChoice === "__back") {
860
- continue;
861
- }
862
- hygieneStore.setLabel(entry.workflowId, labelChoice);
863
- p.log.success(`Updated label for ${pc.bold(entry.name)} to ${renderWorkflowLabel(labelChoice)}.`);
864
- continue;
865
- }
866
- if (nextAction === "archive") {
867
- const confirmed = await p.confirm({
868
- message: `Archive ${entry.name}?`,
869
- initialValue: false,
870
- });
871
- if (p.isCancel(confirmed) || !confirmed) {
872
- continue;
873
- }
874
- try {
875
- await archiveSavedWorkflow(entry);
876
- hygieneStore.setLabel(entry.workflowId, "archived");
877
- p.log.success(`Archived ${pc.bold(entry.name)}.`);
878
- }
879
- catch {
880
- hygieneStore.setLabel(entry.workflowId, "archived");
881
- p.log.success(`Archived ${pc.bold(entry.name)} (local fallback).`);
882
- }
883
- continue;
884
- }
885
- if (nextAction === "unarchive") {
886
- if ((entry.workflowLabel ?? "experimental") !== "archived") {
887
- p.note("Workflow is already live.", "Unarchive skipped");
888
- continue;
889
- }
890
- const restoreChoice = await p.select({
891
- message: `Set label after unarchive for ${entry.name}`,
892
- options: [
893
- { value: "experimental", label: "Experimental" },
894
- { value: "canonical", label: "Canonical" },
895
- { value: "__back", label: "← Back" },
896
- ],
897
- });
898
- if (p.isCancel(restoreChoice) || restoreChoice === "__back") {
899
- continue;
900
- }
901
- hygieneStore.setLabel(entry.workflowId, restoreChoice);
902
- p.log.success(`Unarchived ${pc.bold(entry.name)} to ${renderWorkflowLabel(restoreChoice)}.`);
903
- continue;
904
- }
905
- if (nextAction === "delete") {
906
- const confirmed = await p.confirm({
907
- message: `Delete ${entry.name}? This cannot be undone.`,
908
- initialValue: false,
909
- });
910
- if (p.isCancel(confirmed) || !confirmed) {
911
- continue;
912
- }
913
- const finalConfirmed = await p.confirm({
914
- message: "Final confirmation: permanently delete this workflow?",
915
- initialValue: false,
916
- });
917
- if (p.isCancel(finalConfirmed) || !finalConfirmed) {
918
- continue;
919
- }
920
- try {
921
- await deleteSavedWorkflow(entry);
922
- p.log.success(`Deleted ${pc.bold(entry.name)}.`);
923
- }
924
- catch {
925
- markWorkflowDeletedLocally(entry.workflowId);
926
- p.log.success(`Deleted ${pc.bold(entry.name)} (local fallback).`);
927
- }
928
- continue;
929
- }
930
- }
931
- }
932
- continue;
933
- }
934
- // ── Templates ────────────────────────────────────────────────────────
935
- if (topChoice === "templates") {
936
- const registry = createCmsCapabilityRegistryClient();
937
- let hostedTemplates = [];
938
- let templateViewMode = "condensed";
939
- try {
940
- const hosted = await registry.listCapabilities({ enabledOnly: false });
941
- hostedTemplates = hosted.nodes;
942
- }
943
- catch (err) {
944
- p.log.error("Hosted capability registry unavailable: " + err.message);
945
- continue;
946
- }
947
- while (true) {
948
- // Family filter
949
- const availableFamilies = CAPABILITY_FAMILIES.filter((f) => {
950
- const nodes = hostedTemplates.filter((node) => node.family === f);
951
- return nodes.length > 0;
952
- });
953
- const familyChoice = await p.select({
954
- message: "Filter by family",
955
- options: [
956
- { value: "all", label: "All Templates" },
957
- { value: "__tree_view", label: "Tree View (all public nodes)" },
958
- { value: "__toggle_view_mode", label: `View Mode: ${templateViewMode}` },
959
- ...availableFamilies.map((f) => {
960
- const cfg = FAMILY_CONFIG[f];
961
- return {
962
- value: f,
963
- label: cfg ? cfg.label : f,
964
- };
965
- }),
966
- { value: "__back_to_workflow_menu", label: "← Back to workflow menu" },
967
- ],
968
- });
969
- if (p.isCancel(familyChoice)) {
970
- p.cancel("Cancelled.");
971
- process.exit(0);
972
- }
973
- if (familyChoice === "__back_to_workflow_menu")
974
- break;
975
- if (familyChoice === "__toggle_view_mode") {
976
- const viewChoice = await p.select({
977
- message: "Select template view mode",
978
- options: [
979
- { value: "condensed", label: "Condensed", hint: "Fast scan" },
980
- { value: "expanded", label: "Expanded", hint: "Contract hints in list" },
981
- { value: "tree", label: "Tree", hint: "Family/tree style list" },
982
- ],
983
- });
984
- if (p.isCancel(viewChoice)) {
985
- p.cancel("Cancelled.");
986
- process.exit(0);
987
- }
988
- templateViewMode = viewChoice;
989
- continue;
990
- }
991
- if (familyChoice === "__tree_view") {
992
- console.log("");
993
- console.log(box(renderTemplateTree(hostedTemplates)));
994
- console.log("");
995
- continue;
996
- }
997
- const query = familyChoice === "all"
998
- ? undefined
999
- : { family: familyChoice };
1000
- let templates;
1001
- try {
1002
- templates = query
1003
- ? hostedTemplates.filter((node) => node.family === query.family)
1004
- : hostedTemplates;
1005
- }
1006
- catch (err) {
1007
- p.log.error("Failed to load templates: " + err.message);
1008
- continue;
1009
- }
1010
- if (templates.length === 0) {
1011
- p.note("No templates for that family.", "Nothing found");
1012
- continue;
1013
- }
1014
- // Template list with pagination and search
1015
- while (true) {
1016
- const templateOptions = templates.map((t) => buildTemplateOption(t, templateViewMode));
1017
- const templateChoice = await paginatedSelect("Select a template", templateOptions, {
1018
- backLabel: "← Back to family filter",
1019
- searchEnabled: true,
1020
- });
1021
- if (p.isCancel(templateChoice)) {
1022
- p.cancel("Cancelled.");
1023
- process.exit(0);
1024
- }
1025
- if (templateChoice === "__back")
1026
- break;
1027
- const selected = templates.find((t) => t.slug === templateChoice);
1028
- if (!selected)
1029
- continue;
1030
- printTemplateCard(selected);
1031
- // Template actions
1032
- while (true) {
1033
- const action = await p.select({
1034
- message: "What would you like to do with this template?",
1035
- options: [
1036
- { value: "assemble", label: "Assemble a pipeline from this template" },
1037
- { value: "resolve", label: "Check machine binding" },
1038
- { value: "inspect_json", label: "Print input template as JSON" },
1039
- { value: "back_to_templates", label: "← Back to template list" },
1040
- ],
1041
- });
1042
- if (p.isCancel(action)) {
1043
- p.cancel("Cancelled.");
1044
- process.exit(0);
1045
- }
1046
- if (action === "back_to_templates")
1047
- break;
1048
- if (action === "resolve") {
1049
- try {
1050
- const resolver = createMachineCapabilityResolver();
1051
- const binding = await resolver.resolveCapability(selected.slug);
1052
- if (binding) {
1053
- const statusColor = binding.allowed ? pc.green : pc.red;
1054
- console.log("");
1055
- console.log(box([
1056
- `${pc.bold("Machine Binding:")} ${selected.slug}`,
1057
- `${pc.dim("Allowed:")} ${statusColor(String(binding.allowed))}`,
1058
- `${pc.dim("Reason:")} ${binding.reason ?? "—"}`,
1059
- ]));
1060
- console.log("");
1061
- }
1062
- }
1063
- catch (err) {
1064
- p.log.error("Resolution failed: " + err.message);
1065
- }
1066
- continue;
1067
- }
1068
- if (action === "inspect_json") {
1069
- console.log(JSON.stringify(selected.executionTokens.input_template, null, 2));
1070
- continue;
1071
- }
1072
- if (action === "assemble") {
1073
- // Quick pipeline assembly from template
1074
- const builder = createPipelineBuilder({ executionMode: "hosted" });
1075
- const contract = introspectNodeContract(selected);
1076
- const rawBindings = {};
1077
- for (const input of contract.inputs) {
1078
- if (!input.required)
1079
- continue;
1080
- const value = await p.text({
1081
- message: `${selected.displayName} → ${input.key}`,
1082
- placeholder: `Enter ${input.key}`,
1083
- });
1084
- if (p.isCancel(value)) {
1085
- p.cancel("Cancelled.");
1086
- process.exit(0);
1087
- }
1088
- rawBindings[input.key] = value;
1089
- }
1090
- const normalized = normalizeNodeBindings(rawBindings, selected);
1091
- p.note(`Provided ${normalized.providedCount}, defaulted ${normalized.defaultedCount}, normalized ${normalized.normalizedCount}.`, "Input normalization");
1092
- const nodeId = builder.addNode(selected.slug, normalized.bindings);
1093
- p.log.success(`Added ${pc.bold(selected.displayName)} (${pc.dim(nodeId)})`);
1094
- // Ask if they want to add more nodes or save
1095
- const next = await p.select({
1096
- message: "Pipeline has 1 node. What next?",
1097
- options: [
1098
- { value: "save", label: "Save pipeline" },
1099
- { value: "back_to_templates", label: "← Back to templates" },
1100
- ],
1101
- });
1102
- if (p.isCancel(next)) {
1103
- p.cancel("Cancelled.");
1104
- process.exit(0);
1105
- }
1106
- if (next === "save") {
1107
- const pipeline = builder.build();
1108
- const session = readSession();
1109
- if (!session || isSessionExpired(session)) {
1110
- throw new Error("Hosted session expired. Run `growthub auth login` again.");
1111
- }
1112
- const workflowName = `${selected.displayName} Workflow`;
1113
- const pipelineSummary = buildPreExecutionSummary({
1114
- pipeline,
1115
- registryBySlug: new Map([[selected.slug, selected]]),
1116
- });
1117
- console.log("");
1118
- console.log(box(renderPreSaveReview({
1119
- workflowName,
1120
- summary: pipelineSummary,
1121
- })));
1122
- console.log("");
1123
- const saveResult = await saveHostedWorkflow(session, {
1124
- name: workflowName,
1125
- description: selected.description ?? "",
1126
- config: compileToHostedWorkflowConfig(pipeline, { workflowName }),
1127
- });
1128
- if (!saveResult || typeof saveResult.workflowId !== "string") {
1129
- throw new Error("Hosted workflow save returned no payload.");
1130
- }
1131
- p.log.success(`Hosted workflow saved as ${pc.bold(workflowName)} (${pc.dim(saveResult.workflowId)} · v${saveResult.version})`);
1132
- }
1133
- break;
1134
- }
1135
- }
1136
- }
1137
- }
1138
- continue;
1139
- }
1140
- }
1141
- }
1142
- // ---------------------------------------------------------------------------
1143
- // Native Intelligence summary helper
1144
- // ---------------------------------------------------------------------------
1145
- async function renderWorkflowIntelligenceSummary(pipeline, capabilities, phase) {
1146
- try {
1147
- const provider = createNativeIntelligenceProvider();
1148
- const registryContext = capabilities.map((cap) => introspectNodeContract(cap));
1149
- const capabilityMap = new Map(capabilities.map((n) => [n.slug, n]));
1150
- const pipelineSummary = {
1151
- pipelineId: pipeline.pipelineId,
1152
- executionMode: pipeline.executionMode,
1153
- nodes: pipeline.nodes.map((node) => {
1154
- const cap = capabilityMap.get(node.slug);
1155
- const contract = cap ? introspectNodeContract(cap) : null;
1156
- const missingRequired = [];
1157
- if (contract) {
1158
- for (const input of contract.inputs) {
1159
- if (!input.required)
1160
- continue;
1161
- const value = node.bindings[input.key];
1162
- if (value === undefined || value === null || value === "") {
1163
- missingRequired.push(input.key);
1164
- }
1165
- }
1166
- }
1167
- return {
1168
- slug: node.slug,
1169
- bindingCount: Object.keys(node.bindings).length,
1170
- missingRequired,
1171
- outputTypes: contract?.outputTypes ?? [],
1172
- assetCount: 0,
1173
- };
1174
- }),
1175
- warnings: [],
1176
- };
1177
- const input = {
1178
- pipeline: pipelineSummary,
1179
- registryContext,
1180
- phase,
1181
- };
1182
- const result = await provider.summarizeExecution(input);
1183
- const lines = [
1184
- `${pc.bold("Intelligence Summary")} ${pc.dim(result.title)}`,
1185
- result.explanation,
1186
- ];
1187
- if (result.runtimeModeNote) {
1188
- lines.push(`${pc.dim("Runtime:")} ${result.runtimeModeNote}`);
1189
- }
1190
- if (result.outputExpectation) {
1191
- lines.push(`${pc.dim("Expected:")} ${result.outputExpectation}`);
1192
- }
1193
- if (result.missingBindingGuidance.length > 0) {
1194
- lines.push("", pc.yellow("Missing Binding Guidance"));
1195
- for (const guidance of result.missingBindingGuidance) {
1196
- lines.push(` ${pc.dim("·")} ${guidance}`);
1197
- }
1198
- }
1199
- if (result.costLatencyCautions.length > 0) {
1200
- lines.push("", pc.yellow("Cost/Latency Notes"));
1201
- for (const caution of result.costLatencyCautions) {
1202
- lines.push(` ${pc.dim("·")} ${caution}`);
1203
- }
1204
- }
1205
- if (result.warnings.length > 0) {
1206
- lines.push("", pc.yellow("Warnings"));
1207
- for (const warning of result.warnings) {
1208
- lines.push(` ${pc.dim("·")} ${warning}`);
1209
- }
1210
- }
1211
- return lines;
1212
- }
1213
- catch {
1214
- return null;
1215
- }
1216
- }
1217
- // ---------------------------------------------------------------------------
1218
- // Command registration
1219
- // ---------------------------------------------------------------------------
1220
- export function registerWorkflowCommands(program) {
1221
- const wf = program
1222
- .command("workflow")
1223
- .description("Browse CMS contracts, dynamic pipelines, and saved workflows (requires auth)")
1224
- .addHelpText("after", `
1225
- Examples:
1226
- $ growthub workflow # interactive workflow browser
1227
- $ growthub pipeline assemble # create new dynamic pipeline workflow
1228
- $ growthub workflow saved # list saved workflows
1229
- `);
1230
- wf.action(async () => {
1231
- await runWorkflowPicker({});
1232
- });
1233
- // ── templates ───────────────────────────────────────────────────────────
1234
- const templatesCommandEnabled = false;
1235
- if (templatesCommandEnabled) {
1236
- wf
1237
- .command("templates")
1238
- .description("List CMS workflow node starter templates")
1239
- .option("--family <family>", "Filter by family")
1240
- .option("--search <term>", "Search templates")
1241
- .option("--view <mode>", "List view mode: condensed | expanded | tree")
1242
- .option("--json", "Output raw JSON")
1243
- .action(async (opts) => {
1244
- const access = getWorkflowAccess();
1245
- if (access.state !== "ready") {
1246
- console.error(pc.red(`${access.reason}.`));
1247
- process.exitCode = 1;
1248
- return;
1249
- }
1250
- const registry = createCmsCapabilityRegistryClient();
1251
- const query = {};
1252
- if (opts.family)
1253
- query.family = opts.family;
1254
- if (opts.search)
1255
- query.search = opts.search;
1256
- try {
1257
- const { nodes, meta } = await registry.listCapabilities(Object.keys(query).length > 0 ? query : undefined);
1258
- if (opts.json) {
1259
- console.log(JSON.stringify({ nodes, meta }, null, 2));
1260
- return;
1261
- }
1262
- if (nodes.length === 0) {
1263
- console.error(pc.yellow("No templates found."));
1264
- process.exitCode = 1;
1265
- return;
1266
- }
1267
- const viewMode = (opts.view ?? "condensed");
1268
- console.log("");
1269
- console.log(pc.bold("Workflow Node Templates") +
1270
- pc.dim(` ${nodes.length} template${nodes.length !== 1 ? "s" : ""}`));
1271
- console.log(hr());
1272
- console.log(pc.bold("Step 1: CMS Node Contract Validation"));
1273
- console.log(pc.dim("Validate contract visibility before template selection."));
1274
- console.log(pc.dim(`View mode: ${viewMode}`));
1275
- console.log("");
1276
- if (viewMode === "tree") {
1277
- console.log(box(renderTemplateTree(nodes)));
1278
- console.log(hr());
1279
- console.log(pc.dim(` Source: ${meta.source} · growthub workflow`));
1280
- console.log("");
1281
- return;
1282
- }
1283
- for (const node of nodes) {
1284
- const contract = introspectNodeContract(node);
1285
- const requiredInputs = contract.inputs.filter((input) => input.required).length;
1286
- const optionalInputs = contract.inputs.length - requiredInputs;
1287
- const enabledTag = node.enabled ? pc.green("enabled") : pc.red("disabled");
1288
- console.log(` ${node.icon} ${pc.bold(node.displayName)} ${pc.dim(node.slug)} ${enabledTag}`);
1289
- console.log(` ${pc.dim("Contract:")} ` +
1290
- `${pc.dim("required")}=${requiredInputs} ` +
1291
- `${pc.dim("optional")}=${optionalInputs} ` +
1292
- `${pc.dim("bindings")}=${contract.requiredBindings.length} ` +
1293
- `${pc.dim("outputs")}=${contract.outputTypes.length}`);
1294
- console.log(` ${pc.dim("Execution:")} ${contract.executionStrategy} · ${contract.executionKind}`);
1295
- if (node.description) {
1296
- console.log(` ${pc.dim(node.description)}`);
1297
- }
1298
- console.log("");
1299
- }
1300
- console.log(hr());
1301
- console.log(pc.dim(` Source: ${meta.source} · growthub workflow`));
1302
- console.log("");
1303
- }
1304
- catch (err) {
1305
- console.error(pc.red("Failed: " + err.message));
1306
- process.exitCode = 1;
1307
- }
1308
- });
1309
- }
1310
- // ── saved ───────────────────────────────────────────────────────────────
1311
- wf
1312
- .command("saved")
1313
- .description("List saved workflow pipelines")
1314
- .option("--include-archived", "Include archived workflows in output")
1315
- .option("--json", "Output raw JSON")
1316
- .action(async (opts) => {
1317
- const hygieneStore = createWorkflowHygieneStore();
1318
- const saved = withEffectiveWorkflowLabels(enrichWorkflowSummaries(filterLocallyDeletedWorkflows(await listSavedWorkflows()), hygieneStore), hygieneStore);
1319
- const visibleSaved = opts.includeArchived
1320
- ? saved
1321
- : saved.filter((entry) => entry.workflowLabel !== "archived");
1322
- if (opts.json) {
1323
- console.log(JSON.stringify(visibleSaved, null, 2));
1324
- return;
1325
- }
1326
- if (visibleSaved.length === 0) {
1327
- console.log(pc.dim("No saved workflows. Run `growthub workflow` to assemble one."));
1328
- return;
1329
- }
1330
- console.log("");
1331
- console.log(pc.bold("Saved Workflows") +
1332
- pc.dim(` ${visibleSaved.length} workflow${visibleSaved.length !== 1 ? "s" : ""}`));
1333
- if (!opts.includeArchived) {
1334
- const hiddenArchivedCount = saved.length - visibleSaved.length;
1335
- if (hiddenArchivedCount > 0) {
1336
- console.log(pc.dim(` Archived hidden: ${hiddenArchivedCount} (use --include-archived to show)`));
1337
- }
1338
- }
1339
- console.log(hr());
1340
- for (const w of visibleSaved) {
1341
- console.log(` ${pc.bold(w.name)} ` +
1342
- pc.dim(`[${renderWorkflowLabel(w.workflowLabel)}] `) +
1343
- pc.dim(`${w.nodeCount} node${w.nodeCount !== 1 ? "s" : ""} · ${w.executionMode} · ${w.updatedAt?.slice(0, 10) ?? w.createdAt.slice(0, 10)}`));
1344
- }
1345
- console.log("");
1346
- console.log(pc.dim(` Source: ${visibleSaved[0]?.source === "hosted" ? "hosted workflow registry" : resolveSavedWorkflowsDir()}`));
1347
- console.log("");
1348
- });
1349
- }
1350
- //# sourceMappingURL=workflow.js.map