runwork 0.15.1 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/bundled-types/task-delegation/task-delegation/types.d.ts +6 -0
  2. package/dist/index.js +20237 -116
  3. package/package.json +4 -4
  4. package/dist/__tests__/curl-parser.test.d.ts +0 -1
  5. package/dist/__tests__/curl-parser.test.js +0 -250
  6. package/dist/__tests__/install-scripts.test.d.ts +0 -1
  7. package/dist/__tests__/install-scripts.test.js +0 -280
  8. package/dist/__tests__/types-manager.test.d.ts +0 -1
  9. package/dist/__tests__/types-manager.test.js +0 -89
  10. package/dist/agents/__tests__/chatgpt-registry.test.d.ts +0 -1
  11. package/dist/agents/__tests__/chatgpt-registry.test.js +0 -61
  12. package/dist/agents/__tests__/claude-code-managed-block.test.d.ts +0 -1
  13. package/dist/agents/__tests__/claude-code-managed-block.test.js +0 -105
  14. package/dist/agents/__tests__/claude-code-plugin.test.d.ts +0 -1
  15. package/dist/agents/__tests__/claude-code-plugin.test.js +0 -47
  16. package/dist/agents/__tests__/claude-code-stats.test.d.ts +0 -1
  17. package/dist/agents/__tests__/claude-code-stats.test.js +0 -390
  18. package/dist/agents/__tests__/claude-desktop-memory.test.d.ts +0 -1
  19. package/dist/agents/__tests__/claude-desktop-memory.test.js +0 -154
  20. package/dist/agents/__tests__/claude-desktop-plugin-tree.test.d.ts +0 -1
  21. package/dist/agents/__tests__/claude-desktop-plugin-tree.test.js +0 -161
  22. package/dist/agents/__tests__/claude-desktop-plugin.test.d.ts +0 -1
  23. package/dist/agents/__tests__/claude-desktop-plugin.test.js +0 -117
  24. package/dist/agents/__tests__/claude-desktop-rpm.test.d.ts +0 -1
  25. package/dist/agents/__tests__/claude-desktop-rpm.test.js +0 -126
  26. package/dist/agents/__tests__/claude-desktop-stats.test.d.ts +0 -1
  27. package/dist/agents/__tests__/claude-desktop-stats.test.js +0 -280
  28. package/dist/agents/__tests__/codex-instructions.test.d.ts +0 -1
  29. package/dist/agents/__tests__/codex-instructions.test.js +0 -57
  30. package/dist/agents/__tests__/codex-minimum-permissions.test.d.ts +0 -1
  31. package/dist/agents/__tests__/codex-minimum-permissions.test.js +0 -82
  32. package/dist/agents/__tests__/codex-stats.test.d.ts +0 -1
  33. package/dist/agents/__tests__/codex-stats.test.js +0 -370
  34. package/dist/agents/__tests__/cursor-merge.test.d.ts +0 -1
  35. package/dist/agents/__tests__/cursor-merge.test.js +0 -66
  36. package/dist/agents/__tests__/cursor-stats.test.d.ts +0 -1
  37. package/dist/agents/__tests__/cursor-stats.test.js +0 -183
  38. package/dist/agents/__tests__/defaults-merge.test.d.ts +0 -1
  39. package/dist/agents/__tests__/defaults-merge.test.js +0 -268
  40. package/dist/agents/__tests__/detection.test.d.ts +0 -1
  41. package/dist/agents/__tests__/detection.test.js +0 -89
  42. package/dist/agents/__tests__/graceful-degradation.test.d.ts +0 -1
  43. package/dist/agents/__tests__/graceful-degradation.test.js +0 -129
  44. package/dist/agents/__tests__/instruction-hint.test.d.ts +0 -1
  45. package/dist/agents/__tests__/instruction-hint.test.js +0 -69
  46. package/dist/agents/__tests__/intro-skill.test.d.ts +0 -1
  47. package/dist/agents/__tests__/intro-skill.test.js +0 -193
  48. package/dist/agents/__tests__/schema-validation.test.d.ts +0 -1
  49. package/dist/agents/__tests__/schema-validation.test.js +0 -212
  50. package/dist/agents/__tests__/skill-slug.test.d.ts +0 -1
  51. package/dist/agents/__tests__/skill-slug.test.js +0 -77
  52. package/dist/agents/claude-code.d.ts +0 -59
  53. package/dist/agents/claude-code.js +0 -753
  54. package/dist/agents/claude-desktop-plugin-tree.d.ts +0 -59
  55. package/dist/agents/claude-desktop-plugin-tree.js +0 -143
  56. package/dist/agents/claude-desktop.d.ts +0 -47
  57. package/dist/agents/claude-desktop.js +0 -684
  58. package/dist/agents/cline.d.ts +0 -15
  59. package/dist/agents/cline.js +0 -130
  60. package/dist/agents/codex.d.ts +0 -44
  61. package/dist/agents/codex.js +0 -453
  62. package/dist/agents/conversation-skills.d.ts +0 -18
  63. package/dist/agents/conversation-skills.js +0 -229
  64. package/dist/agents/cursor.d.ts +0 -35
  65. package/dist/agents/cursor.js +0 -294
  66. package/dist/agents/default-config.d.ts +0 -30
  67. package/dist/agents/default-config.js +0 -67
  68. package/dist/agents/defaults-merge.d.ts +0 -87
  69. package/dist/agents/defaults-merge.js +0 -150
  70. package/dist/agents/detect.d.ts +0 -4
  71. package/dist/agents/detect.js +0 -67
  72. package/dist/agents/detection.d.ts +0 -18
  73. package/dist/agents/detection.js +0 -94
  74. package/dist/agents/gemini.d.ts +0 -15
  75. package/dist/agents/gemini.js +0 -122
  76. package/dist/agents/generic-adapter.d.ts +0 -25
  77. package/dist/agents/generic-adapter.js +0 -151
  78. package/dist/agents/intro-skill.d.ts +0 -45
  79. package/dist/agents/intro-skill.js +0 -447
  80. package/dist/agents/registry-data.d.ts +0 -192
  81. package/dist/agents/registry-data.js +0 -669
  82. package/dist/agents/registry.d.ts +0 -13
  83. package/dist/agents/registry.js +0 -36
  84. package/dist/agents/runtime-detection.d.ts +0 -82
  85. package/dist/agents/runtime-detection.js +0 -271
  86. package/dist/agents/session-start-hook.d.ts +0 -37
  87. package/dist/agents/session-start-hook.js +0 -159
  88. package/dist/agents/types.d.ts +0 -171
  89. package/dist/agents/types.js +0 -75
  90. package/dist/agents/utils/instruction-hint.d.ts +0 -21
  91. package/dist/agents/utils/instruction-hint.js +0 -108
  92. package/dist/agents/utils/json-config.d.ts +0 -19
  93. package/dist/agents/utils/json-config.js +0 -69
  94. package/dist/agents/utils/toml-config.d.ts +0 -8
  95. package/dist/agents/utils/toml-config.js +0 -27
  96. package/dist/agents/windsurf.d.ts +0 -14
  97. package/dist/agents/windsurf.js +0 -102
  98. package/dist/api/__tests__/client.test.d.ts +0 -1
  99. package/dist/api/__tests__/client.test.js +0 -272
  100. package/dist/api/client.d.ts +0 -326
  101. package/dist/api/client.js +0 -427
  102. package/dist/auth/__tests__/login-flow.test.d.ts +0 -1
  103. package/dist/auth/__tests__/login-flow.test.js +0 -101
  104. package/dist/auth/__tests__/store.test.d.ts +0 -1
  105. package/dist/auth/__tests__/store.test.js +0 -132
  106. package/dist/auth/login-flow.d.ts +0 -26
  107. package/dist/auth/login-flow.js +0 -137
  108. package/dist/auth/store.d.ts +0 -5
  109. package/dist/auth/store.js +0 -62
  110. package/dist/commands/__tests__/clone-args.test.d.ts +0 -1
  111. package/dist/commands/__tests__/clone-args.test.js +0 -51
  112. package/dist/commands/__tests__/clone-source-result.test.d.ts +0 -1
  113. package/dist/commands/__tests__/clone-source-result.test.js +0 -45
  114. package/dist/commands/__tests__/info-merge.test.d.ts +0 -1
  115. package/dist/commands/__tests__/info-merge.test.js +0 -55
  116. package/dist/commands/__tests__/mcp-entries.test.d.ts +0 -1
  117. package/dist/commands/__tests__/mcp-entries.test.js +0 -48
  118. package/dist/commands/__tests__/setup-persona.test.d.ts +0 -1
  119. package/dist/commands/__tests__/setup-persona.test.js +0 -31
  120. package/dist/commands/__tests__/setup.test.d.ts +0 -1
  121. package/dist/commands/__tests__/setup.test.js +0 -81
  122. package/dist/commands/__tests__/sync-redetect.test.d.ts +0 -1
  123. package/dist/commands/__tests__/sync-redetect.test.js +0 -96
  124. package/dist/commands/__tests__/sync-telemetry.test.d.ts +0 -1
  125. package/dist/commands/__tests__/sync-telemetry.test.js +0 -281
  126. package/dist/commands/__tests__/upgrade.test.d.ts +0 -1
  127. package/dist/commands/__tests__/upgrade.test.js +0 -157
  128. package/dist/commands/agents.d.ts +0 -2
  129. package/dist/commands/agents.js +0 -160
  130. package/dist/commands/api-keys.d.ts +0 -2
  131. package/dist/commands/api-keys.js +0 -95
  132. package/dist/commands/apps.d.ts +0 -2
  133. package/dist/commands/apps.js +0 -82
  134. package/dist/commands/build-plugin.d.ts +0 -2
  135. package/dist/commands/build-plugin.js +0 -135
  136. package/dist/commands/clone.d.ts +0 -60
  137. package/dist/commands/clone.js +0 -271
  138. package/dist/commands/components.d.ts +0 -2
  139. package/dist/commands/components.js +0 -43
  140. package/dist/commands/deploy.d.ts +0 -2
  141. package/dist/commands/deploy.js +0 -279
  142. package/dist/commands/dev.d.ts +0 -11
  143. package/dist/commands/dev.js +0 -1011
  144. package/dist/commands/doctor.d.ts +0 -2
  145. package/dist/commands/doctor.js +0 -230
  146. package/dist/commands/endpoints.d.ts +0 -2
  147. package/dist/commands/endpoints.js +0 -189
  148. package/dist/commands/entities.d.ts +0 -2
  149. package/dist/commands/entities.js +0 -198
  150. package/dist/commands/files.d.ts +0 -2
  151. package/dist/commands/files.js +0 -193
  152. package/dist/commands/inbox.d.ts +0 -11
  153. package/dist/commands/inbox.js +0 -60
  154. package/dist/commands/info.d.ts +0 -178
  155. package/dist/commands/info.js +0 -455
  156. package/dist/commands/init.d.ts +0 -21
  157. package/dist/commands/init.js +0 -185
  158. package/dist/commands/integrations.d.ts +0 -2
  159. package/dist/commands/integrations.js +0 -233
  160. package/dist/commands/login.d.ts +0 -2
  161. package/dist/commands/login.js +0 -44
  162. package/dist/commands/logout.d.ts +0 -2
  163. package/dist/commands/logout.js +0 -13
  164. package/dist/commands/logs.d.ts +0 -2
  165. package/dist/commands/logs.js +0 -232
  166. package/dist/commands/mcp-entries.d.ts +0 -13
  167. package/dist/commands/mcp-entries.js +0 -26
  168. package/dist/commands/mcp.d.ts +0 -2
  169. package/dist/commands/mcp.js +0 -245
  170. package/dist/commands/open.d.ts +0 -2
  171. package/dist/commands/open.js +0 -53
  172. package/dist/commands/resume.d.ts +0 -2
  173. package/dist/commands/resume.js +0 -289
  174. package/dist/commands/save-convo.d.ts +0 -8
  175. package/dist/commands/save-convo.js +0 -20
  176. package/dist/commands/schedules.d.ts +0 -2
  177. package/dist/commands/schedules.js +0 -221
  178. package/dist/commands/setup.d.ts +0 -27
  179. package/dist/commands/setup.js +0 -177
  180. package/dist/commands/share-convo.d.ts +0 -24
  181. package/dist/commands/share-convo.js +0 -167
  182. package/dist/commands/skills.d.ts +0 -2
  183. package/dist/commands/skills.js +0 -352
  184. package/dist/commands/sync-telemetry.d.ts +0 -33
  185. package/dist/commands/sync-telemetry.js +0 -186
  186. package/dist/commands/sync.d.ts +0 -37
  187. package/dist/commands/sync.js +0 -702
  188. package/dist/commands/uninstall.d.ts +0 -2
  189. package/dist/commands/uninstall.js +0 -145
  190. package/dist/commands/upgrade.d.ts +0 -14
  191. package/dist/commands/upgrade.js +0 -217
  192. package/dist/commands/validate.d.ts +0 -2
  193. package/dist/commands/validate.js +0 -89
  194. package/dist/commands/welcome.d.ts +0 -1
  195. package/dist/commands/welcome.js +0 -86
  196. package/dist/commands/workflows.d.ts +0 -2
  197. package/dist/commands/workflows.js +0 -187
  198. package/dist/deploy/__tests__/deploy-state.test.d.ts +0 -1
  199. package/dist/deploy/__tests__/deploy-state.test.js +0 -80
  200. package/dist/deploy/__tests__/deploy-status.test.d.ts +0 -1
  201. package/dist/deploy/__tests__/deploy-status.test.js +0 -41
  202. package/dist/deploy/__tests__/detach-args.test.d.ts +0 -1
  203. package/dist/deploy/__tests__/detach-args.test.js +0 -30
  204. package/dist/deploy/deploy-state.d.ts +0 -36
  205. package/dist/deploy/deploy-state.js +0 -63
  206. package/dist/deploy/deploy-status.d.ts +0 -21
  207. package/dist/deploy/deploy-status.js +0 -36
  208. package/dist/deploy/detach.d.ts +0 -32
  209. package/dist/deploy/detach.js +0 -71
  210. package/dist/dev/__tests__/attach.test.d.ts +0 -1
  211. package/dist/dev/__tests__/attach.test.js +0 -296
  212. package/dist/dev/__tests__/detach.test.d.ts +0 -1
  213. package/dist/dev/__tests__/detach.test.js +0 -404
  214. package/dist/dev/__tests__/preview-url-poller.test.d.ts +0 -1
  215. package/dist/dev/__tests__/preview-url-poller.test.js +0 -149
  216. package/dist/dev/__tests__/session.test.d.ts +0 -1
  217. package/dist/dev/__tests__/session.test.js +0 -446
  218. package/dist/dev/__tests__/startup-sync.test.d.ts +0 -1
  219. package/dist/dev/__tests__/startup-sync.test.js +0 -32
  220. package/dist/dev/__tests__/stop.test.d.ts +0 -1
  221. package/dist/dev/__tests__/stop.test.js +0 -172
  222. package/dist/dev/attach.d.ts +0 -120
  223. package/dist/dev/attach.js +0 -269
  224. package/dist/dev/detach.d.ts +0 -187
  225. package/dist/dev/detach.js +0 -292
  226. package/dist/dev/preview-url-poller.d.ts +0 -35
  227. package/dist/dev/preview-url-poller.js +0 -50
  228. package/dist/dev/session.d.ts +0 -175
  229. package/dist/dev/session.js +0 -258
  230. package/dist/dev/startup-sync.d.ts +0 -23
  231. package/dist/dev/startup-sync.js +0 -14
  232. package/dist/dev/stop.d.ts +0 -52
  233. package/dist/dev/stop.js +0 -101
  234. package/dist/devtools/registry-data.d.ts +0 -46
  235. package/dist/devtools/registry-data.js +0 -40
  236. package/dist/generated/bundled-types.d.ts +0 -1
  237. package/dist/generated/bundled-types.js +0 -46
  238. package/dist/generated/version.d.ts +0 -1
  239. package/dist/generated/version.js +0 -2
  240. package/dist/git/__tests__/auto-commit.test.d.ts +0 -1
  241. package/dist/git/__tests__/auto-commit.test.js +0 -431
  242. package/dist/git/__tests__/classify-sync-error.test.d.ts +0 -1
  243. package/dist/git/__tests__/classify-sync-error.test.js +0 -57
  244. package/dist/git/__tests__/credential-helper-e2e.test.d.ts +0 -21
  245. package/dist/git/__tests__/credential-helper-e2e.test.js +0 -195
  246. package/dist/git/__tests__/credentials.test.d.ts +0 -1
  247. package/dist/git/__tests__/credentials.test.js +0 -141
  248. package/dist/git/__tests__/deploy-guard.test.d.ts +0 -1
  249. package/dist/git/__tests__/deploy-guard.test.js +0 -61
  250. package/dist/git/__tests__/ensure-git-credential-helper.test.d.ts +0 -1
  251. package/dist/git/__tests__/ensure-git-credential-helper.test.js +0 -133
  252. package/dist/git/__tests__/ensure-runwork-remote.test.d.ts +0 -1
  253. package/dist/git/__tests__/ensure-runwork-remote.test.js +0 -109
  254. package/dist/git/__tests__/identity.test.d.ts +0 -1
  255. package/dist/git/__tests__/identity.test.js +0 -146
  256. package/dist/git/__tests__/manifest.test.d.ts +0 -1
  257. package/dist/git/__tests__/manifest.test.js +0 -446
  258. package/dist/git/__tests__/preflight-resolution.test.d.ts +0 -1
  259. package/dist/git/__tests__/preflight-resolution.test.js +0 -366
  260. package/dist/git/__tests__/preflight.test.d.ts +0 -1
  261. package/dist/git/__tests__/preflight.test.js +0 -36
  262. package/dist/git/__tests__/repo-config.test.d.ts +0 -1
  263. package/dist/git/__tests__/repo-config.test.js +0 -26
  264. package/dist/git/__tests__/sync.test.d.ts +0 -1
  265. package/dist/git/__tests__/sync.test.js +0 -405
  266. package/dist/git/auto-commit.d.ts +0 -35
  267. package/dist/git/auto-commit.js +0 -293
  268. package/dist/git/classify-sync-error.d.ts +0 -21
  269. package/dist/git/classify-sync-error.js +0 -111
  270. package/dist/git/credentials.d.ts +0 -75
  271. package/dist/git/credentials.js +0 -164
  272. package/dist/git/critical-files.d.ts +0 -20
  273. package/dist/git/critical-files.js +0 -68
  274. package/dist/git/deploy-guard.d.ts +0 -53
  275. package/dist/git/deploy-guard.js +0 -78
  276. package/dist/git/identity.d.ts +0 -44
  277. package/dist/git/identity.js +0 -133
  278. package/dist/git/preflight.d.ts +0 -57
  279. package/dist/git/preflight.js +0 -276
  280. package/dist/git/remote.d.ts +0 -37
  281. package/dist/git/remote.js +0 -75
  282. package/dist/git/repo-config.d.ts +0 -8
  283. package/dist/git/repo-config.js +0 -29
  284. package/dist/git/sync.d.ts +0 -15
  285. package/dist/git/sync.js +0 -159
  286. package/dist/health/__tests__/checks.test.d.ts +0 -1
  287. package/dist/health/__tests__/checks.test.js +0 -357
  288. package/dist/health/__tests__/cli-distribution-checks.test.d.ts +0 -1
  289. package/dist/health/__tests__/cli-distribution-checks.test.js +0 -196
  290. package/dist/health/__tests__/fix.test.d.ts +0 -1
  291. package/dist/health/__tests__/fix.test.js +0 -72
  292. package/dist/health/__tests__/runner-filter.test.d.ts +0 -1
  293. package/dist/health/__tests__/runner-filter.test.js +0 -61
  294. package/dist/health/checks.d.ts +0 -42
  295. package/dist/health/checks.js +0 -636
  296. package/dist/health/fix.d.ts +0 -22
  297. package/dist/health/fix.js +0 -62
  298. package/dist/health/runner.d.ts +0 -8
  299. package/dist/health/runner.js +0 -47
  300. package/dist/health/types.d.ts +0 -12
  301. package/dist/health/types.js +0 -1
  302. package/dist/index.d.ts +0 -1
  303. package/dist/logs/__tests__/tailer-format.test.d.ts +0 -1
  304. package/dist/logs/__tests__/tailer-format.test.js +0 -43
  305. package/dist/logs/tailer.d.ts +0 -17
  306. package/dist/logs/tailer.js +0 -217
  307. package/dist/sync/__tests__/change-detect.test.d.ts +0 -1
  308. package/dist/sync/__tests__/change-detect.test.js +0 -123
  309. package/dist/sync/__tests__/hash.test.d.ts +0 -1
  310. package/dist/sync/__tests__/hash.test.js +0 -18
  311. package/dist/sync/change-detect.d.ts +0 -19
  312. package/dist/sync/change-detect.js +0 -136
  313. package/dist/sync/conflict-ui.d.ts +0 -5
  314. package/dist/sync/conflict-ui.js +0 -78
  315. package/dist/sync/executor.d.ts +0 -23
  316. package/dist/sync/executor.js +0 -102
  317. package/dist/sync/hash.d.ts +0 -1
  318. package/dist/sync/hash.js +0 -4
  319. package/dist/sync/types.d.ts +0 -24
  320. package/dist/sync/types.js +0 -1
  321. package/dist/template/manifest.d.ts +0 -17
  322. package/dist/template/manifest.js +0 -145
  323. package/dist/tools/types.d.ts +0 -52
  324. package/dist/tools/types.js +0 -8
  325. package/dist/types-manager.d.ts +0 -1
  326. package/dist/types-manager.js +0 -35
  327. package/dist/types.d.ts +0 -349
  328. package/dist/types.js +0 -1
  329. package/dist/ui/__tests__/banner.test.d.ts +0 -1
  330. package/dist/ui/__tests__/banner.test.js +0 -98
  331. package/dist/ui/__tests__/colors.test.d.ts +0 -1
  332. package/dist/ui/__tests__/colors.test.js +0 -22
  333. package/dist/ui/__tests__/keyboard.test.d.ts +0 -1
  334. package/dist/ui/__tests__/keyboard.test.js +0 -34
  335. package/dist/ui/__tests__/status-line.test.d.ts +0 -1
  336. package/dist/ui/__tests__/status-line.test.js +0 -54
  337. package/dist/ui/banner.d.ts +0 -29
  338. package/dist/ui/banner.js +0 -153
  339. package/dist/ui/colors.d.ts +0 -4
  340. package/dist/ui/colors.js +0 -7
  341. package/dist/ui/keyboard.d.ts +0 -12
  342. package/dist/ui/keyboard.js +0 -61
  343. package/dist/ui/status-line.d.ts +0 -6
  344. package/dist/ui/status-line.js +0 -53
  345. package/dist/utils/__tests__/format-error.test.d.ts +0 -1
  346. package/dist/utils/__tests__/format-error.test.js +0 -43
  347. package/dist/utils/__tests__/help-json.test.d.ts +0 -1
  348. package/dist/utils/__tests__/help-json.test.js +0 -39
  349. package/dist/utils/__tests__/http.test.d.ts +0 -1
  350. package/dist/utils/__tests__/http.test.js +0 -381
  351. package/dist/utils/__tests__/ignore-matcher.test.d.ts +0 -1
  352. package/dist/utils/__tests__/ignore-matcher.test.js +0 -205
  353. package/dist/utils/__tests__/output.test.d.ts +0 -1
  354. package/dist/utils/__tests__/output.test.js +0 -38
  355. package/dist/utils/__tests__/prompt.test.d.ts +0 -1
  356. package/dist/utils/__tests__/prompt.test.js +0 -27
  357. package/dist/utils/__tests__/resolve.test.d.ts +0 -1
  358. package/dist/utils/__tests__/resolve.test.js +0 -95
  359. package/dist/utils/__tests__/sqlite.test.d.ts +0 -1
  360. package/dist/utils/__tests__/sqlite.test.js +0 -89
  361. package/dist/utils/agent-guidance.d.ts +0 -47
  362. package/dist/utils/agent-guidance.js +0 -128
  363. package/dist/utils/app-info.d.ts +0 -70
  364. package/dist/utils/app-info.js +0 -167
  365. package/dist/utils/curl-parser.d.ts +0 -12
  366. package/dist/utils/curl-parser.js +0 -162
  367. package/dist/utils/data-input.d.ts +0 -1
  368. package/dist/utils/data-input.js +0 -38
  369. package/dist/utils/format-error.d.ts +0 -10
  370. package/dist/utils/format-error.js +0 -38
  371. package/dist/utils/fs.d.ts +0 -5
  372. package/dist/utils/fs.js +0 -23
  373. package/dist/utils/help-json.d.ts +0 -70
  374. package/dist/utils/help-json.js +0 -88
  375. package/dist/utils/http.d.ts +0 -46
  376. package/dist/utils/http.js +0 -421
  377. package/dist/utils/ignore-matcher.d.ts +0 -47
  378. package/dist/utils/ignore-matcher.js +0 -132
  379. package/dist/utils/output.d.ts +0 -17
  380. package/dist/utils/output.js +0 -27
  381. package/dist/utils/prompt.d.ts +0 -5
  382. package/dist/utils/prompt.js +0 -42
  383. package/dist/utils/resolve.d.ts +0 -12
  384. package/dist/utils/resolve.js +0 -52
  385. package/dist/utils/setup-state.d.ts +0 -3
  386. package/dist/utils/setup-state.js +0 -19
  387. package/dist/utils/sqlite-adapter.d.ts +0 -48
  388. package/dist/utils/sqlite-adapter.js +0 -147
  389. package/dist/utils/sqlite.d.ts +0 -14
  390. package/dist/utils/sqlite.js +0 -14
  391. package/dist/utils/subprocess.d.ts +0 -19
  392. package/dist/utils/subprocess.js +0 -27
  393. package/dist/utils/which.d.ts +0 -14
  394. package/dist/utils/which.js +0 -47
  395. package/dist/utils/zip.d.ts +0 -7
  396. package/dist/utils/zip.js +0 -42
  397. package/dist/validate/__tests__/validate.test.d.ts +0 -1
  398. package/dist/validate/__tests__/validate.test.js +0 -42
  399. package/dist/validate/freshness.d.ts +0 -28
  400. package/dist/validate/freshness.js +0 -48
  401. package/dist/validate/preview.d.ts +0 -21
  402. package/dist/validate/preview.js +0 -39
  403. package/dist/workspace/resolve.d.ts +0 -19
  404. package/dist/workspace/resolve.js +0 -100
@@ -1,233 +0,0 @@
1
- import { Command } from 'commander';
2
- import { readFileSync, existsSync } from 'fs';
3
- import { requireAuth } from '../auth/store.js';
4
- import { ApiClient } from '../api/client.js';
5
- import { shouldOutputJson, jsonOut } from '../utils/output.js';
6
- import { resolveWorkspace } from '../workspace/resolve.js';
7
- import { parseCurlToRequest } from '../utils/curl-parser.js';
8
- const searchCommand = new Command('search')
9
- .description('Search available integrations from the platform catalog')
10
- .argument('<query>', 'Search query (e.g., "google drive", "hubspot", "slack")')
11
- .option('--limit <n>', 'Maximum results to show', '20')
12
- .option('--workspace <id>', 'Workspace ID (enables team usage info)')
13
- .action(async (query, opts, command) => {
14
- const useJson = shouldOutputJson(command.optsWithGlobals().json);
15
- const credentials = requireAuth();
16
- const client = new ApiClient(credentials);
17
- const limit = parseInt(opts.limit, 10);
18
- try {
19
- // Resolve workspace for enriched search results (connectedByUser, usedByTeammates)
20
- let workspaceId;
21
- try {
22
- const resolved = await resolveWorkspace(client, opts);
23
- workspaceId = resolved.workspaceId;
24
- }
25
- catch {
26
- // Workspace not available, search without enrichment
27
- }
28
- const { results } = await client.searchIntegrations(query, limit, workspaceId);
29
- if (useJson) {
30
- const items = results.map(({ provider: _p, ...rest }) => rest);
31
- jsonOut({ results: items });
32
- return;
33
- }
34
- if (results.length === 0) {
35
- console.log(`No integrations found for "${query}".`);
36
- console.log('Try broader terms (e.g., "calendar" instead of "google calendar").');
37
- return;
38
- }
39
- console.log(`Found ${results.length} integration(s) for "${query}":\n`);
40
- for (const r of results) {
41
- const tags = [];
42
- if (r.connectedByUser)
43
- tags.push('[connected]');
44
- else if (r.usedByTeammates)
45
- tags.push('[used by teammates]');
46
- const tagStr = tags.length > 0 ? ` ${tags.join(' ')}` : '';
47
- console.log(` ${r.id} - ${r.name} (${r.provider})${tagStr}`);
48
- if (r.docs) {
49
- console.log(` Base URL: ${r.docs.baseUrl}`);
50
- console.log(` Path format: ${r.docs.pathFormat}`);
51
- if (r.docs.examples && r.docs.examples.length > 0) {
52
- console.log(` Endpoints:`);
53
- for (const example of r.docs.examples) {
54
- console.log(` ${example}`);
55
- }
56
- }
57
- if (r.docs.notes && r.docs.notes.length > 0) {
58
- for (const note of r.docs.notes) {
59
- console.log(` Note: ${note}`);
60
- }
61
- }
62
- if (r.docs.requiredSetup) {
63
- console.log(` Setup: ${r.docs.requiredSetup}`);
64
- }
65
- }
66
- console.log('');
67
- }
68
- console.log('\nUsage: Add the integration ID to APP_INTEGRATION_REQUIREMENTS in worker/integration-requirements.ts');
69
- }
70
- catch (err) {
71
- console.error('Failed to search integrations:', err instanceof Error ? err.message : err);
72
- process.exit(1);
73
- }
74
- });
75
- const listCommand = new Command('list')
76
- .description('List connected workspace integrations')
77
- .option('--workspace <id>', 'Workspace ID')
78
- .action(async (opts, command) => {
79
- const useJson = shouldOutputJson(command.optsWithGlobals().json);
80
- const credentials = requireAuth();
81
- const client = new ApiClient(credentials);
82
- const { workspaceId } = await resolveWorkspace(client, opts);
83
- try {
84
- const integrations = await client.listConnectedIntegrations(workspaceId);
85
- const teamUsage = await client.getTeamIntegrationUsage(workspaceId);
86
- if (useJson) {
87
- const items = integrations.map(i => ({
88
- id: i.canonicalId || i.integrationId,
89
- status: i.status || 'connected',
90
- createdAt: i.createdAt || null,
91
- }));
92
- const teamItems = teamUsage
93
- .filter(t => !t.connectedByMe && t.userCount > 0)
94
- .map(t => ({
95
- canonicalId: t.canonicalId,
96
- userCount: t.userCount,
97
- users: t.users.map(u => u.name),
98
- }));
99
- jsonOut({ items, teamUsage: teamItems });
100
- return;
101
- }
102
- if (integrations.length === 0) {
103
- console.log('No integrations connected in this workspace.');
104
- console.log('Connect integrations at https://runwork.ai/workspace-settings');
105
- }
106
- else {
107
- console.log(`Connected integrations (${integrations.length}):\n`);
108
- for (const i of integrations) {
109
- const id = i.canonicalId || i.integrationId;
110
- const status = i.status || 'connected';
111
- const date = i.createdAt ? ` (since ${new Date(i.createdAt).toLocaleDateString()})` : '';
112
- console.log(` ${id} - ${i.provider}${date} [${status}]`);
113
- }
114
- }
115
- const teamOnly = teamUsage.filter(t => !t.connectedByMe && t.userCount > 0);
116
- if (teamOnly.length > 0) {
117
- console.log(`\nUsed by your team (${teamOnly.length} more):\n`);
118
- for (const t of teamOnly) {
119
- const names = t.users.map(u => u.name);
120
- const display = names.length <= 3
121
- ? names.join(', ')
122
- : `${names.slice(0, 2).join(', ')}, and ${names.length - 2} other${names.length - 2 !== 1 ? 's' : ''}`;
123
- console.log(` ${t.canonicalId} - Used by ${display}`);
124
- }
125
- console.log(`\n Connect at https://runwork.ai/workspace-settings?section=integrations`);
126
- }
127
- }
128
- catch (err) {
129
- console.error('Failed to list integrations:', err instanceof Error ? err.message : err);
130
- process.exit(1);
131
- }
132
- });
133
- const callCommand = new Command('call')
134
- .description('Make a proxy call to a connected integration')
135
- .argument('<integration>', 'Integration name (e.g., hubspot, slack)')
136
- .argument('[method]', 'HTTP method (GET, POST, PUT, DELETE)')
137
- .argument('[path]', 'API path (e.g., /crm/v3/contacts)')
138
- .option('--workspace <id>', 'Workspace ID')
139
- .option('--body <json>', 'Request body JSON')
140
- .option('--header <header>', 'Request header (repeatable)', (val, prev) => [...prev, val], [])
141
- .option('--query <query>', 'Query string (e.g., limit=10&offset=0)')
142
- .option('--curl <command>', 'Parse a curl command (paste from Chrome DevTools "Copy as cURL")')
143
- .option('--curl-file <file>', 'Read curl command from a file')
144
- .action(async (integration, method, path, opts, command) => {
145
- const useJson = shouldOutputJson(command.optsWithGlobals().json);
146
- const credentials = requireAuth();
147
- const client = new ApiClient(credentials);
148
- const { workspaceId } = await resolveWorkspace(client, opts);
149
- let finalMethod;
150
- let finalPath;
151
- const headers = {};
152
- let body;
153
- let query = opts.query;
154
- // Mode 1: --curl or --curl-file
155
- if (opts.curl || opts.curlFile) {
156
- let curlStr = opts.curl;
157
- if (opts.curlFile) {
158
- const filePath = opts.curlFile;
159
- if (!existsSync(filePath)) {
160
- console.error(`File not found: ${filePath}`);
161
- process.exit(1);
162
- }
163
- curlStr = readFileSync(filePath, 'utf-8');
164
- }
165
- try {
166
- const result = await parseCurlToRequest(curlStr);
167
- finalMethod = result.method;
168
- finalPath = result.path;
169
- if (result.query)
170
- query = query || result.query;
171
- Object.assign(headers, result.headers);
172
- body = result.body;
173
- }
174
- catch (err) {
175
- console.error('Failed to parse curl command:', err instanceof Error ? err.message : err);
176
- process.exit(1);
177
- }
178
- }
179
- // Mode 2: explicit method + path args
180
- else if (method && path) {
181
- finalMethod = method.toUpperCase();
182
- finalPath = path;
183
- // Parse headers from repeatable --header flags
184
- for (const h of (opts.header || [])) {
185
- const [key, ...rest] = h.split(':');
186
- headers[key.trim()] = rest.join(':').trim();
187
- }
188
- // Parse body
189
- if (opts.body) {
190
- try {
191
- body = JSON.parse(opts.body);
192
- }
193
- catch {
194
- console.error('Invalid JSON in --body');
195
- process.exit(1);
196
- }
197
- }
198
- }
199
- else {
200
- console.error('Usage: runwork integrations call <integration> <method> <path>');
201
- console.error(' or: runwork integrations call <integration> --curl "curl ..."');
202
- process.exit(1);
203
- }
204
- try {
205
- // Find the integration's database row ID from connected integrations
206
- const integrations = await client.listConnectedIntegrations(workspaceId);
207
- const match = integrations.find(i => (i.canonicalId || i.integrationId) === integration || i.provider === integration);
208
- if (!match) {
209
- console.error(`Integration "${integration}" not found. Run "runwork integrations list" to see connected integrations.`);
210
- process.exit(1);
211
- }
212
- const result = await client.callIntegrationProxy(match.integrationId, finalMethod, finalPath, { body, headers: Object.keys(headers).length > 0 ? headers : undefined, query });
213
- if (useJson) {
214
- jsonOut(result);
215
- return;
216
- }
217
- if (typeof result === 'string') {
218
- console.log(result);
219
- }
220
- else {
221
- console.log(JSON.stringify(result, null, 2));
222
- }
223
- }
224
- catch (err) {
225
- console.error('Failed to call integration:', err instanceof Error ? err.message : err);
226
- process.exit(1);
227
- }
228
- });
229
- export const integrationsCommand = new Command('integrations')
230
- .description('Search and manage workspace integrations')
231
- .addCommand(searchCommand)
232
- .addCommand(listCommand)
233
- .addCommand(callCommand);
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const loginCommand: Command;
@@ -1,44 +0,0 @@
1
- import { Command } from 'commander';
2
- import { performLogin, performLoginNoOpen, performLoginFromUrl, performLoginWithApiKey, } from '../auth/login-flow.js';
3
- import { bold, cyan } from '../ui/colors.js';
4
- export const loginCommand = new Command('login')
5
- .description('Authenticate with Runwork platform')
6
- .argument('[url]', 'Login URL from a previous --no-open session')
7
- .option('--base-url <url>', 'Platform URL', 'https://runwork.ai')
8
- .option('--no-open', 'Print login URL without opening browser (polls for completion)')
9
- .option('--print-only', 'With --no-open: print URL and exit without polling')
10
- .option('--api-key <key>', 'Authenticate directly with an API key (for CI)')
11
- .action(async (url, options) => {
12
- if (!options)
13
- return;
14
- // Mode 1: Direct API key auth
15
- if (options.apiKey) {
16
- await performLoginWithApiKey(options.apiKey, options.baseUrl);
17
- return;
18
- }
19
- // Mode 2: Resume from a previously printed URL
20
- if (url) {
21
- await performLoginFromUrl(url);
22
- printNextSteps();
23
- return;
24
- }
25
- // Mode 3: No-open (print URL, optionally poll)
26
- if (!options.open) {
27
- const result = await performLoginNoOpen(options.baseUrl, options.printOnly);
28
- if (result)
29
- printNextSteps();
30
- return;
31
- }
32
- // Mode 4: Default browser flow
33
- await performLogin(options.baseUrl);
34
- printNextSteps();
35
- });
36
- function printNextSteps() {
37
- console.log('');
38
- console.log(bold('What next?'));
39
- console.log('');
40
- console.log(` ${cyan('runwork init')} Create a new app`);
41
- console.log(` ${cyan('runwork clone')} Clone an existing app`);
42
- console.log(` ${cyan('runwork dev')} Start developing (inside an app directory)`);
43
- console.log('');
44
- }
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const logoutCommand: Command;
@@ -1,13 +0,0 @@
1
- import { Command } from 'commander';
2
- import { clearCredentials, getCredentials } from '../auth/store.js';
3
- import { removeGitCredentials } from '../git/credentials.js';
4
- export const logoutCommand = new Command('logout')
5
- .description('Remove stored Runwork credentials')
6
- .action(async () => {
7
- const creds = getCredentials();
8
- if (creds) {
9
- await removeGitCredentials(creds.baseUrl);
10
- }
11
- clearCredentials();
12
- console.log('Logged out.');
13
- });
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const logsCommand: Command;
@@ -1,232 +0,0 @@
1
- import { Command } from 'commander';
2
- import { readFileSync, existsSync } from 'fs';
3
- import { requireAuth } from '../auth/store.js';
4
- import { ApiClient } from '../api/client.js';
5
- import { shouldOutputJson, jsonLine } from '../utils/output.js';
6
- function readConfig() {
7
- if (!existsSync('.runwork.json')) {
8
- console.error('No .runwork.json found. Run `runwork init` first.');
9
- process.exit(1);
10
- }
11
- return JSON.parse(readFileSync('.runwork.json', 'utf-8'));
12
- }
13
- function formatEvent(event) {
14
- const time = new Date(event.timestamp).toLocaleTimeString();
15
- const label = `[${event.source}/${event.type}]`;
16
- const message = event.summary || event.content;
17
- return `${time} ${label} ${message}`;
18
- }
19
- export const logsCommand = new Command('logs')
20
- .description('View app logs and events')
21
- .option('--production', 'Show production runtime logs')
22
- .option('--events', 'Show app activity/events')
23
- .option('--all', 'Show both runtime logs and events')
24
- .option('--follow', 'Poll for new logs every 3s (TTY only; ignored when piped or with --json)')
25
- .option('--once', 'Fetch once and exit, even if --follow is set (forced in non-TTY/agent contexts)')
26
- .option('--limit <n>', 'Number of log entries to show', '25')
27
- .option('--level <level>', 'Filter by log level (production only)')
28
- .option('--search <text>', 'Search log content (production only)')
29
- .option('--type <type>', 'Filter by event type (events only)')
30
- .action(async (opts, command) => {
31
- const useJson = shouldOutputJson(command.optsWithGlobals().json);
32
- // Follow mode blocks forever (until SIGINT/SIGTERM), which deadlocks
33
- // non-interactive callers: piped shells, CI, and AI agents never send
34
- // those signals and hang waiting for the command to exit. Only follow
35
- // when explicitly requested AND stdout is an interactive TTY AND we are
36
- // not emitting JSON. `--once` forces single-shot even on a TTY.
37
- const shouldFollow = Boolean(opts.follow) && !opts.once && !useJson && Boolean(process.stdout.isTTY);
38
- const config = readConfig();
39
- const creds = requireAuth();
40
- const client = new ApiClient(creds);
41
- const appId = config.appId;
42
- const limit = parseInt(opts.limit, 10);
43
- // --all means "show preview logs + events together"
44
- // --production must be explicitly set for production logs
45
- const showPreview = opts.all || (!opts.production && !opts.events);
46
- const showProduction = opts.production || false;
47
- const showEvents = opts.events || opts.all || false;
48
- const showRuntime = showPreview || showProduction;
49
- // Incremental cursor state for --follow mode preview logs
50
- let lastStdoutLength = 0;
51
- let lastStderrLength = 0;
52
- let isFirstPoll = true;
53
- const fetchAndPrint = async () => {
54
- if (showRuntime) {
55
- if (showProduction) {
56
- try {
57
- const { logs, pagination } = await client.getProductionLogs(appId, {
58
- limit,
59
- level: opts.level,
60
- search: opts.search,
61
- });
62
- if (useJson) {
63
- for (const entry of logs) {
64
- jsonLine(entry);
65
- }
66
- }
67
- else {
68
- if (logs.length === 0) {
69
- console.log('No production logs found.');
70
- }
71
- else {
72
- for (const entry of logs) {
73
- console.log(JSON.stringify(entry));
74
- }
75
- if (pagination?.hasMore) {
76
- console.log(`... ${pagination.total ? `${pagination.total} total entries` : 'more entries available'}`);
77
- }
78
- }
79
- }
80
- }
81
- catch (err) {
82
- console.error('Failed to fetch production logs:', err.message);
83
- }
84
- }
85
- if (showPreview) {
86
- // Preview logs (default)
87
- try {
88
- const { stdout, stderr } = await client.getPreviewLogs(appId);
89
- if (shouldFollow && !isFirstPoll) {
90
- // Incremental mode: only print new content since last poll
91
- // Reset detection: if buffer was truncated (sandbox restart), reset cursor
92
- if (stdout && stdout.length < lastStdoutLength) {
93
- lastStdoutLength = 0;
94
- }
95
- if (stderr && stderr.length < lastStderrLength) {
96
- lastStderrLength = 0;
97
- }
98
- if (stdout && stdout.length > lastStdoutLength) {
99
- const newContent = stdout.slice(lastStdoutLength);
100
- if (useJson) {
101
- for (const line of newContent.split('\n')) {
102
- if (line) {
103
- jsonLine({ type: 'runtime', message: line, timestamp: new Date().toISOString() });
104
- }
105
- }
106
- }
107
- else {
108
- process.stdout.write(newContent);
109
- }
110
- }
111
- if (stderr && stderr.length > lastStderrLength) {
112
- const newContent = stderr.slice(lastStderrLength);
113
- if (useJson) {
114
- for (const line of newContent.split('\n')) {
115
- if (line) {
116
- jsonLine({ type: 'error', message: line, timestamp: new Date().toISOString() });
117
- }
118
- }
119
- }
120
- else {
121
- process.stderr.write(newContent);
122
- }
123
- }
124
- lastStdoutLength = stdout ? stdout.length : 0;
125
- lastStderrLength = stderr ? stderr.length : 0;
126
- }
127
- else {
128
- // First poll or non-follow: print everything
129
- if (useJson) {
130
- if (stdout) {
131
- for (const line of stdout.split('\n')) {
132
- if (line) {
133
- jsonLine({ type: 'runtime', message: line, timestamp: new Date().toISOString() });
134
- }
135
- }
136
- }
137
- if (stderr) {
138
- for (const line of stderr.split('\n')) {
139
- if (line) {
140
- jsonLine({ type: 'error', message: line, timestamp: new Date().toISOString() });
141
- }
142
- }
143
- }
144
- }
145
- else {
146
- if (stdout) {
147
- console.log(stdout);
148
- }
149
- if (stderr) {
150
- console.error(stderr);
151
- }
152
- if (!stdout && !stderr) {
153
- console.log('No preview logs available.');
154
- }
155
- }
156
- // Initialize cursors for subsequent follow polls
157
- lastStdoutLength = stdout ? stdout.length : 0;
158
- lastStderrLength = stderr ? stderr.length : 0;
159
- }
160
- }
161
- catch (err) {
162
- console.error('Failed to fetch preview logs:', err.message);
163
- }
164
- }
165
- }
166
- if (showEvents) {
167
- if (!useJson && showRuntime && isFirstPoll) {
168
- console.log('\n--- Events ---\n');
169
- }
170
- try {
171
- const { events, totalCount, hasMore } = await client.getAppEvents(appId, {
172
- limit,
173
- type: opts.type,
174
- });
175
- if (useJson) {
176
- for (const event of events) {
177
- jsonLine({
178
- type: 'event',
179
- eventType: event.type,
180
- source: event.source,
181
- detail: event.summary || event.content,
182
- metadata: event.metadata || {},
183
- timestamp: event.timestamp,
184
- });
185
- }
186
- }
187
- else {
188
- if (events.length === 0 && isFirstPoll) {
189
- console.log('No events found.');
190
- }
191
- else {
192
- for (const event of events) {
193
- console.log(formatEvent(event));
194
- }
195
- if (hasMore && isFirstPoll) {
196
- console.log(`... ${totalCount} total events`);
197
- }
198
- }
199
- }
200
- }
201
- catch (err) {
202
- console.error('Failed to fetch events:', err.message);
203
- }
204
- }
205
- isFirstPoll = false;
206
- };
207
- await fetchAndPrint();
208
- if (shouldFollow) {
209
- let stopped = false;
210
- let timer;
211
- const scheduleNext = () => {
212
- if (!stopped) {
213
- timer = setTimeout(async () => {
214
- await fetchAndPrint();
215
- scheduleNext();
216
- }, 3000);
217
- }
218
- };
219
- scheduleNext();
220
- const cleanup = () => {
221
- stopped = true;
222
- if (timer) {
223
- clearTimeout(timer);
224
- }
225
- process.exit(0);
226
- };
227
- process.on('SIGINT', cleanup);
228
- process.on('SIGTERM', cleanup);
229
- // Keep alive
230
- await new Promise(() => { });
231
- }
232
- });
@@ -1,13 +0,0 @@
1
- import type { McpServerConfig } from '../types.js';
2
- import type { McpServerEntry } from '../agents/types.js';
3
- /**
4
- * Build local-agent MCP entries for external (third-party) servers added to the
5
- * workspace. Auth handling by `authType`:
6
- * - 'header': inject the user's resolved per-server headers (decrypted server-side).
7
- * - 'oauth': emit no auth header so the local agent runs its own browser flow.
8
- * - 'none'/unset: no auth header.
9
- *
10
- * Critically, external entries never receive the Runwork platform API key. That key
11
- * belongs only on the Runwork workspace-tools entry, which is added separately.
12
- */
13
- export declare function buildExternalMcpEntries(mcpServers: McpServerConfig[], resolvedCredentials: Record<string, Record<string, string>>): McpServerEntry[];
@@ -1,26 +0,0 @@
1
- import { RUNWORK_MCP_PREFIX } from '../agents/types.js';
2
- /**
3
- * Build local-agent MCP entries for external (third-party) servers added to the
4
- * workspace. Auth handling by `authType`:
5
- * - 'header': inject the user's resolved per-server headers (decrypted server-side).
6
- * - 'oauth': emit no auth header so the local agent runs its own browser flow.
7
- * - 'none'/unset: no auth header.
8
- *
9
- * Critically, external entries never receive the Runwork platform API key. That key
10
- * belongs only on the Runwork workspace-tools entry, which is added separately.
11
- */
12
- export function buildExternalMcpEntries(mcpServers, resolvedCredentials) {
13
- return mcpServers
14
- .filter(s => s.enabled)
15
- .map(s => {
16
- const resolved = s.authType === 'header' ? resolvedCredentials[s.id] : undefined;
17
- const headers = resolved && Object.keys(resolved).length > 0 ? resolved : undefined;
18
- return {
19
- name: `${RUNWORK_MCP_PREFIX}${s.name}`,
20
- url: s.url,
21
- transport: s.transport,
22
- ...(headers ? { headers } : {}),
23
- description: `Runwork MCP server: ${s.name}. Provides tools for interacting with this workspace resource.`,
24
- };
25
- });
26
- }
@@ -1,2 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const mcpCommand: Command;