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,171 +0,0 @@
1
- export interface McpServerEntry {
2
- name: string;
3
- url: string;
4
- transport: 'sse' | 'streamable-http';
5
- headers?: Record<string, string>;
6
- description?: string;
7
- }
8
- export interface SkillFile {
9
- name: string;
10
- filename: string;
11
- content: string;
12
- description: string;
13
- appId?: string;
14
- }
15
- export interface AgentAdapter {
16
- /** Display name, e.g. "Claude Code" */
17
- name: string;
18
- /** CLI identifier, e.g. "claude-code" */
19
- slug: string;
20
- /** Check if this agent is installed */
21
- detect(): Promise<boolean>;
22
- /** Write MCP server configs (merge with existing, only touch runwork-* entries) */
23
- writeMcpServers(servers: McpServerEntry[], scope: 'project' | 'user'): Promise<void>;
24
- /** Write skill files to agent's skills directory */
25
- writeSkills(skills: SkillFile[], scope: 'project' | 'user'): Promise<void>;
26
- /** Write a minimal Runwork hint to the agent's instruction file (CLAUDE.md, AGENTS.md, etc.) */
27
- writeInstructionHint(hint: string, scope: 'project' | 'user'): Promise<void>;
28
- /** Whether this agent supports skills/commands */
29
- supportsSkills(): boolean;
30
- /** Whether this agent supports MCP config at the given scope */
31
- supportsMcpScope(scope: 'project' | 'user'): boolean;
32
- /** True when this agent's skill files overlap with MCP skill_* tools (skip writing app skills when MCP is configured) */
33
- mcpProvidesSkills?: boolean;
34
- /** Write team-managed instructions (separate marker block from auto-generated hint) */
35
- writeTeamInstructions?(instructions: string, scope: 'project' | 'user'): Promise<void>;
36
- /**
37
- * Install the runwork SessionStart hook (or any equivalent platform-managed
38
- * hook) into the agent's hook directory. Called once per (adapter, scope) by
39
- * the main sync loop, AFTER writeSkills has fully populated the plugin tree.
40
- * Separate from writeSkills because writeSkills is also invoked per-skill by
41
- * the diff executor during push/pull, and hook installation must not be
42
- * repeated for every skill.
43
- *
44
- * Optional - only adapters with a hook system implement it (Claude Code,
45
- * eventually Claude Desktop Cowork plugin tree).
46
- */
47
- writeBuiltInHooks?(scope: 'project' | 'user'): Promise<void>;
48
- /**
49
- * Write agent-specific config overrides from workspace admin (model, permissions).
50
- *
51
- * @param config - The full resolved config to apply this sync (already merged
52
- * with baked defaults and network/minimum settings by the sync loop).
53
- * @param scope - Project- or user-scope configuration target.
54
- * @param baseline - Optional. The set of managed entries the previous sync
55
- * wrote (lastInjected from setup.json). Adapters that lack on-disk markers
56
- * to distinguish runwork-managed entries from user-added entries (e.g.
57
- * Cursor's yoloCommandAllowlist) use this to subtract our previous
58
- * contribution before re-injecting, preserving user edits. Marker-based
59
- * adapters (Claude Code) can ignore this parameter.
60
- */
61
- writeAgentConfig?(config: AgentConfigOverride, scope: 'project' | 'user', baseline?: {
62
- allow?: string[];
63
- deny?: string[];
64
- }): Promise<void>;
65
- /**
66
- * Read the currently-injected managed-block entries for this scope.
67
- * Used by sync to detect when the user has removed an entry that we
68
- * previously injected (so we can record it as a sticky opt-out).
69
- *
70
- * For marker-based adapters (Claude Code): returns items after the marker.
71
- * For markerless adapters (Cursor): may return undefined; the sync loop
72
- * falls back to the `baseline` mechanism (state.lastInjected) for those.
73
- * Optional — adapters without a permission file at all (Cline) skip this.
74
- */
75
- readManagedBlock?(scope: 'project' | 'user'): Promise<{
76
- allow?: string[];
77
- deny?: string[];
78
- } | undefined>;
79
- /** Remove all Runwork-managed config, skills, MCP entries, and instruction hints.
80
- * The manifest lists exactly which resources were synced so only those are removed. */
81
- cleanup?(scope: 'project' | 'user', manifest?: CleanupManifest): Promise<void>;
82
- /** Read passive usage stats from local agent files (best-effort, no hooks) */
83
- readUsageStats?(lastSyncAt: string | null): Promise<AgentUsageStats | null>;
84
- /** Read which skills were used locally since last sync (best-effort) */
85
- readSkillUsage?(lastSyncAt: string | null): Promise<SkillUsageEntry[] | null>;
86
- /** Get the agent's version string (best-effort) */
87
- readVersion?(): Promise<string | null>;
88
- /**
89
- * Build an installable plugin archive for this agent. Implementations
90
- * generate their agent-specific plugin layout into a temporary directory
91
- * and zip it to `outputPath`. `teamInstructions` is the merged string of
92
- * workspace team instructions + per-agent extra instructions (or null if
93
- * none are configured) — adapters should embed them in the archive so
94
- * uploaded zips match what a normal sync would write. Only adapters whose
95
- * target agent has a plugin upload flow implement this (e.g. Claude Desktop).
96
- */
97
- buildPluginZip?(skills: SkillFile[], mcpServers: McpServerEntry[], teamInstructions: string | null, outputPath: string): Promise<void>;
98
- }
99
- /**
100
- * Exact list of resources that Runwork synced to this agent.
101
- * Cleanup must only remove these specific items, nothing else.
102
- */
103
- export interface CleanupManifest {
104
- /** Skill directory/file names that were written (kebab-case slugs) */
105
- skillFilenames: string[];
106
- /** MCP server entry names that were registered */
107
- mcpServerNames: string[];
108
- }
109
- export interface AgentConfigOverride {
110
- extraInstructions?: string;
111
- modelPreference?: string;
112
- permissionRules?: {
113
- allow?: string[];
114
- deny?: string[];
115
- defaultMode?: string;
116
- };
117
- /** Domains to allowlist in the agent's sandbox/network config (e.g. for Cursor CLI sandbox) */
118
- networkAllowlist?: string[];
119
- /**
120
- * Minimum permission levels required for Runwork tools to function.
121
- * Adapters should only UPGRADE restrictive settings, never downgrade
122
- * more permissive ones. Keys are agent-specific config field names,
123
- * values are ordered arrays from most restrictive to least, plus
124
- * the minimum required value.
125
- */
126
- minimumPermissions?: Array<{
127
- field: string;
128
- order: string[];
129
- minimum: string;
130
- }>;
131
- }
132
- export interface AgentUsageStats {
133
- hasNewActivity: boolean;
134
- sessionCount: number;
135
- messageCount: number;
136
- toolCallCount: number;
137
- tokensUsed: number;
138
- aiLinesAdded: number;
139
- aiLinesRemoved: number;
140
- lastActiveAt: string | null;
141
- modelsUsed?: string[];
142
- mcpToolCount?: number;
143
- extra?: Record<string, unknown>;
144
- }
145
- export interface SkillUsageEntry {
146
- skillName: string;
147
- count: number;
148
- lastUsedAt: string;
149
- }
150
- /** Prefix for MCP server entries managed by runwork */
151
- export declare const RUNWORK_MCP_PREFIX = "Runwork: ";
152
- /** Legacy prefix used before human-readable names were introduced */
153
- export declare const RUNWORK_MCP_PREFIX_LEGACY = "runwork-";
154
- /**
155
- * Top-level name for the Runwork workspace tools MCP server.
156
- * Kept short (no prefix) so agents surface tools as `mcp__Runwork__*`
157
- * instead of the visually noisy `mcp__Runwork_Workspace_Tools__*`.
158
- */
159
- export declare const RUNWORK_WORKSPACE_MCP_NAME = "Runwork";
160
- /**
161
- * Append an auth token to a URL as a query parameter.
162
- * The server extracts this via its standard token extraction (query param fallback).
163
- */
164
- export declare function appendTokenToUrl(url: string, token: string): string;
165
- /**
166
- * Convert a skill display name to a kebab-case slug safe for slash commands.
167
- * Spaces in skill names break slash command parsing (e.g. "/Write Cold Email"
168
- * gets parsed as skill "Write" with args "Cold Email").
169
- */
170
- export declare function toSlug(name: string): string;
171
- export declare function buildSkillMd(skill: SkillFile): string;
@@ -1,75 +0,0 @@
1
- /** Prefix for MCP server entries managed by runwork */
2
- export const RUNWORK_MCP_PREFIX = 'Runwork: ';
3
- /** Legacy prefix used before human-readable names were introduced */
4
- export const RUNWORK_MCP_PREFIX_LEGACY = 'runwork-';
5
- /**
6
- * Top-level name for the Runwork workspace tools MCP server.
7
- * Kept short (no prefix) so agents surface tools as `mcp__Runwork__*`
8
- * instead of the visually noisy `mcp__Runwork_Workspace_Tools__*`.
9
- */
10
- export const RUNWORK_WORKSPACE_MCP_NAME = 'Runwork';
11
- /**
12
- * Append an auth token to a URL as a query parameter.
13
- * The server extracts this via its standard token extraction (query param fallback).
14
- */
15
- export function appendTokenToUrl(url, token) {
16
- const parsed = new URL(url);
17
- parsed.searchParams.set('token', token);
18
- return parsed.toString();
19
- }
20
- /**
21
- * Convert a skill display name to a kebab-case slug safe for slash commands.
22
- * Spaces in skill names break slash command parsing (e.g. "/Write Cold Email"
23
- * gets parsed as skill "Write" with args "Cold Email").
24
- */
25
- export function toSlug(name) {
26
- return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
27
- }
28
- /**
29
- * Build a SKILL.md file with YAML frontmatter.
30
- * Ensures the content always has proper frontmatter for agent discovery.
31
- * The name field is always kebab-cased to work as a slash command.
32
- */
33
- /**
34
- * Quote a YAML value if it contains characters that would break parsing
35
- * (colons, brackets, quotes, leading/trailing spaces, etc.)
36
- */
37
- function yamlQuote(value) {
38
- if (/[:#\[\]{}|>&*!,?'"]/.test(value) || value !== value.trim()) {
39
- // Use double quotes, escaping internal double quotes and backslashes
40
- const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
41
- return `"${escaped}"`;
42
- }
43
- return value;
44
- }
45
- export function buildSkillMd(skill) {
46
- const description = skill.description || `${skill.name} skill`;
47
- const slug = toSlug(skill.name);
48
- const safeDescription = yamlQuote(description);
49
- if (skill.content.trimStart().startsWith('---\n')) {
50
- let content = skill.content;
51
- // Normalize name to kebab-case slug (spaces break slash command parsing)
52
- content = content.replace(/^(name:\s*)["']?[^"'\n]+["']?\s*$/m, `$1${slug}`);
53
- // Normalize description: ensure space after colon, strip nested quotes, and quote if needed
54
- content = content.replace(/^description:\s*(.+)$/m, (_match, rawValue) => {
55
- // Strip wrapping quotes and escaped quotes from the raw value
56
- let cleaned = rawValue.trim();
57
- // Remove outer quotes if present (single or double)
58
- if ((cleaned.startsWith('"') && cleaned.endsWith('"')) || (cleaned.startsWith("'") && cleaned.endsWith("'"))) {
59
- cleaned = cleaned.slice(1, -1);
60
- }
61
- // Remove escaped quotes left from double-wrapping (e.g. \"value\")
62
- cleaned = cleaned.replace(/\\"/g, '"');
63
- // Strip any remaining wrapping quotes after unescaping
64
- if ((cleaned.startsWith('"') && cleaned.endsWith('"')) || (cleaned.startsWith("'") && cleaned.endsWith("'"))) {
65
- cleaned = cleaned.slice(1, -1);
66
- }
67
- return `description: ${yamlQuote(cleaned)}`;
68
- });
69
- const hasDescription = /^description:\s*.+$/m.test(content);
70
- if (hasDescription)
71
- return content;
72
- return content.replace(/^---\n/, `---\nname: ${slug}\ndescription: ${safeDescription}\n`);
73
- }
74
- return `---\nname: ${slug}\ndescription: ${safeDescription}\n---\n\n${skill.content}`;
75
- }
@@ -1,21 +0,0 @@
1
- /**
2
- * Append or replace a Runwork instruction hint in an agent's instruction file.
3
- * If the file contains existing Runwork markers, replaces that section.
4
- * Otherwise appends the hint at the end.
5
- */
6
- export declare function writeHintToFile(filePath: string, hint: string): void;
7
- /**
8
- * Append or replace team instructions in an agent's instruction file.
9
- * Uses separate markers from the auto-generated hint so both coexist.
10
- */
11
- /**
12
- * Remove the Runwork instruction hint from an agent's instruction file.
13
- * Returns true if something was removed.
14
- */
15
- export declare function removeHintFromFile(filePath: string): boolean;
16
- /**
17
- * Remove Runwork team instructions from an agent's instruction file.
18
- * Returns true if something was removed.
19
- */
20
- export declare function removeTeamInstructionsFromFile(filePath: string): boolean;
21
- export declare function writeTeamInstructionsToFile(filePath: string, instructions: string): void;
@@ -1,108 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
2
- import { dirname } from 'path';
3
- const START_MARKER = '<!-- runwork:start -->';
4
- const END_MARKER = '<!-- runwork:end -->';
5
- const TEAM_START_MARKER = '<!-- runwork-team:start -->';
6
- const TEAM_END_MARKER = '<!-- runwork-team:end -->';
7
- /**
8
- * Append or replace a Runwork instruction hint in an agent's instruction file.
9
- * If the file contains existing Runwork markers, replaces that section.
10
- * Otherwise appends the hint at the end.
11
- */
12
- export function writeHintToFile(filePath, hint) {
13
- mkdirSync(dirname(filePath), { recursive: true });
14
- let content = '';
15
- if (existsSync(filePath)) {
16
- content = readFileSync(filePath, 'utf-8');
17
- }
18
- const startIdx = content.indexOf(START_MARKER);
19
- const endIdx = content.indexOf(END_MARKER);
20
- if (startIdx >= 0 && endIdx >= 0) {
21
- // Replace existing section
22
- content = content.substring(0, startIdx) + hint + content.substring(endIdx + END_MARKER.length);
23
- }
24
- else {
25
- // Append with spacing
26
- if (content.length > 0 && !content.endsWith('\n')) {
27
- content += '\n';
28
- }
29
- if (content.length > 0) {
30
- content += '\n';
31
- }
32
- content += hint + '\n';
33
- }
34
- writeFileSync(filePath, content);
35
- }
36
- /**
37
- * Append or replace team instructions in an agent's instruction file.
38
- * Uses separate markers from the auto-generated hint so both coexist.
39
- */
40
- /**
41
- * Remove the Runwork instruction hint from an agent's instruction file.
42
- * Returns true if something was removed.
43
- */
44
- export function removeHintFromFile(filePath) {
45
- if (!existsSync(filePath))
46
- return false;
47
- let content = readFileSync(filePath, 'utf-8');
48
- const startIdx = content.indexOf(START_MARKER);
49
- const endIdx = content.indexOf(END_MARKER);
50
- if (startIdx < 0 || endIdx < 0)
51
- return false;
52
- content = content.substring(0, startIdx) + content.substring(endIdx + END_MARKER.length);
53
- // Clean up extra blank lines left behind
54
- content = content.replace(/\n{3,}/g, '\n\n').trimEnd() + '\n';
55
- if (content.trim() === '') {
56
- // File is now empty, could remove it but safer to leave a minimal file
57
- writeFileSync(filePath, '');
58
- }
59
- else {
60
- writeFileSync(filePath, content);
61
- }
62
- return true;
63
- }
64
- /**
65
- * Remove Runwork team instructions from an agent's instruction file.
66
- * Returns true if something was removed.
67
- */
68
- export function removeTeamInstructionsFromFile(filePath) {
69
- if (!existsSync(filePath))
70
- return false;
71
- let content = readFileSync(filePath, 'utf-8');
72
- const startIdx = content.indexOf(TEAM_START_MARKER);
73
- const endIdx = content.indexOf(TEAM_END_MARKER);
74
- if (startIdx < 0 || endIdx < 0)
75
- return false;
76
- content = content.substring(0, startIdx) + content.substring(endIdx + TEAM_END_MARKER.length);
77
- content = content.replace(/\n{3,}/g, '\n\n').trimEnd() + '\n';
78
- if (content.trim() === '') {
79
- writeFileSync(filePath, '');
80
- }
81
- else {
82
- writeFileSync(filePath, content);
83
- }
84
- return true;
85
- }
86
- export function writeTeamInstructionsToFile(filePath, instructions) {
87
- mkdirSync(dirname(filePath), { recursive: true });
88
- let content = '';
89
- if (existsSync(filePath)) {
90
- content = readFileSync(filePath, 'utf-8');
91
- }
92
- const block = `${TEAM_START_MARKER}\n${instructions}\n${TEAM_END_MARKER}`;
93
- const startIdx = content.indexOf(TEAM_START_MARKER);
94
- const endIdx = content.indexOf(TEAM_END_MARKER);
95
- if (startIdx >= 0 && endIdx >= 0) {
96
- content = content.substring(0, startIdx) + block + content.substring(endIdx + TEAM_END_MARKER.length);
97
- }
98
- else {
99
- if (content.length > 0 && !content.endsWith('\n')) {
100
- content += '\n';
101
- }
102
- if (content.length > 0) {
103
- content += '\n';
104
- }
105
- content += block + '\n';
106
- }
107
- writeFileSync(filePath, content);
108
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Read a JSON config file. Returns empty object if file doesn't exist.
3
- */
4
- export declare function readJsonConfig(filePath: string): Record<string, unknown>;
5
- /**
6
- * Write a JSON config file, creating parent directories as needed.
7
- */
8
- export declare function writeJsonConfig(filePath: string, config: Record<string, unknown>): void;
9
- /**
10
- * Remove all Runwork-managed MCP server entries from a JSON config file.
11
- * Returns true if any entries were removed.
12
- */
13
- export declare function removeRunworkMcpServers(filePath: string, topKey: string): boolean;
14
- /**
15
- * Merge MCP server entries into a JSON config file.
16
- * Removes all existing runwork-managed entries, adds new ones.
17
- * Preserves user's non-runwork entries.
18
- */
19
- export declare function mergeJsonMcpServers(filePath: string, servers: Record<string, Record<string, unknown>>, topKey: string): void;
@@ -1,69 +0,0 @@
1
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
2
- import { dirname } from 'path';
3
- import { RUNWORK_MCP_PREFIX, RUNWORK_MCP_PREFIX_LEGACY, RUNWORK_WORKSPACE_MCP_NAME, } from '../types.js';
4
- function isRunworkManagedKey(key) {
5
- return (key === RUNWORK_WORKSPACE_MCP_NAME ||
6
- key.startsWith(RUNWORK_MCP_PREFIX) ||
7
- key.startsWith(RUNWORK_MCP_PREFIX_LEGACY));
8
- }
9
- /**
10
- * Read a JSON config file. Returns empty object if file doesn't exist.
11
- */
12
- export function readJsonConfig(filePath) {
13
- if (!existsSync(filePath))
14
- return {};
15
- try {
16
- return JSON.parse(readFileSync(filePath, 'utf-8'));
17
- }
18
- catch {
19
- return {};
20
- }
21
- }
22
- /**
23
- * Write a JSON config file, creating parent directories as needed.
24
- */
25
- export function writeJsonConfig(filePath, config) {
26
- mkdirSync(dirname(filePath), { recursive: true });
27
- writeFileSync(filePath, JSON.stringify(config, null, 2) + '\n');
28
- }
29
- /**
30
- * Remove all Runwork-managed MCP server entries from a JSON config file.
31
- * Returns true if any entries were removed.
32
- */
33
- export function removeRunworkMcpServers(filePath, topKey) {
34
- if (!existsSync(filePath))
35
- return false;
36
- const config = readJsonConfig(filePath);
37
- const existing = (config[topKey] || {});
38
- let removed = false;
39
- for (const key of Object.keys(existing)) {
40
- if (isRunworkManagedKey(key)) {
41
- delete existing[key];
42
- removed = true;
43
- }
44
- }
45
- if (removed) {
46
- config[topKey] = existing;
47
- writeJsonConfig(filePath, config);
48
- }
49
- return removed;
50
- }
51
- /**
52
- * Merge MCP server entries into a JSON config file.
53
- * Removes all existing runwork-managed entries, adds new ones.
54
- * Preserves user's non-runwork entries.
55
- */
56
- export function mergeJsonMcpServers(filePath, servers, topKey) {
57
- const config = readJsonConfig(filePath);
58
- const existing = (config[topKey] || {});
59
- // Remove all Runwork-managed entries (current, legacy, and the bare "Runwork" name)
60
- for (const key of Object.keys(existing)) {
61
- if (isRunworkManagedKey(key)) {
62
- delete existing[key];
63
- }
64
- }
65
- // Add new runwork entries
66
- Object.assign(existing, servers);
67
- config[topKey] = existing;
68
- writeJsonConfig(filePath, config);
69
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Merge MCP servers into a Codex config.toml file.
3
- * Removes existing [mcp_servers.runwork-*] sections, adds new ones.
4
- */
5
- export declare function mergeTomlMcpServers(filePath: string, servers: Record<string, {
6
- url: string;
7
- bearerTokenEnvVar?: string;
8
- }>): void;
@@ -1,27 +0,0 @@
1
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
2
- import { dirname } from 'path';
3
- /**
4
- * Merge MCP servers into a Codex config.toml file.
5
- * Removes existing [mcp_servers.runwork-*] sections, adds new ones.
6
- */
7
- export function mergeTomlMcpServers(filePath, servers) {
8
- mkdirSync(dirname(filePath), { recursive: true });
9
- let content = existsSync(filePath) ? readFileSync(filePath, 'utf-8') : '';
10
- // Remove existing runwork-* mcp_servers sections
11
- content = content.replace(/\[mcp_servers\.runwork-[^\]]*\]\n(?:[^\[]*\n?)*/g, '');
12
- // Remove trailing blank lines
13
- content = content.trimEnd();
14
- // Append new sections
15
- const sections = [];
16
- for (const [name, config] of Object.entries(servers)) {
17
- const lines = [`[mcp_servers.${name}]`, `url = "${config.url}"`];
18
- if (config.bearerTokenEnvVar) {
19
- lines.push(`bearer_token_env_var = "${config.bearerTokenEnvVar}"`);
20
- }
21
- sections.push(lines.join('\n'));
22
- }
23
- if (sections.length > 0) {
24
- content += '\n\n' + sections.join('\n\n') + '\n';
25
- }
26
- writeFileSync(filePath, content);
27
- }
@@ -1,14 +0,0 @@
1
- import type { AgentAdapter, CleanupManifest, McpServerEntry, SkillFile } from './types.js';
2
- export declare class WindsurfAdapter implements AgentAdapter {
3
- name: string;
4
- slug: string;
5
- mcpProvidesSkills: boolean;
6
- detect(): Promise<boolean>;
7
- supportsMcpScope(scope: 'project' | 'user'): boolean;
8
- supportsSkills(): boolean;
9
- writeMcpServers(servers: McpServerEntry[], _scope: 'project' | 'user'): Promise<void>;
10
- writeSkills(skills: SkillFile[], scope: 'project' | 'user'): Promise<void>;
11
- writeTeamInstructions(instructions: string, scope: 'project' | 'user'): Promise<void>;
12
- writeInstructionHint(hint: string, scope: 'project' | 'user'): Promise<void>;
13
- cleanup(scope: 'project' | 'user', manifest?: CleanupManifest): Promise<void>;
14
- }
@@ -1,102 +0,0 @@
1
- import { existsSync, mkdirSync, readdirSync, unlinkSync, writeFileSync } from 'fs';
2
- import { join } from 'path';
3
- import { homedir, platform } from 'os';
4
- import { whichBinary } from '../utils/which.js';
5
- import { mergeJsonMcpServers, removeRunworkMcpServers } from './utils/json-config.js';
6
- function getWindsurfDataDir() {
7
- if (platform() === 'win32') {
8
- return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Codeium', 'windsurf');
9
- }
10
- return join(homedir(), '.codeium', 'windsurf');
11
- }
12
- function getConfigPath() {
13
- return join(getWindsurfDataDir(), 'mcp_config.json');
14
- }
15
- export class WindsurfAdapter {
16
- name = 'Windsurf';
17
- slug = 'windsurf';
18
- mcpProvidesSkills = true;
19
- async detect() {
20
- const os = platform();
21
- if (os === 'darwin' && existsSync('/Applications/Windsurf.app'))
22
- return true;
23
- return !!whichBinary('windsurf');
24
- }
25
- supportsMcpScope(scope) {
26
- return scope === 'user';
27
- }
28
- supportsSkills() {
29
- return true;
30
- }
31
- async writeMcpServers(servers, _scope) {
32
- const entries = {};
33
- for (const s of servers) {
34
- entries[s.name] = {
35
- serverUrl: s.url,
36
- ...(s.headers ? { headers: s.headers } : {}),
37
- };
38
- }
39
- mergeJsonMcpServers(getConfigPath(), entries, 'mcpServers');
40
- }
41
- async writeSkills(skills, scope) {
42
- if (scope === 'user')
43
- return;
44
- const rulesDir = join(process.cwd(), '.windsurf', 'rules');
45
- mkdirSync(rulesDir, { recursive: true });
46
- for (const skill of skills) {
47
- const content = `---\ntrigger: manual\n---\n\n${skill.content}`;
48
- writeFileSync(join(rulesDir, `${skill.filename}.md`), content);
49
- }
50
- }
51
- async writeTeamInstructions(instructions, scope) {
52
- const filePath = scope === 'project'
53
- ? join(process.cwd(), '.windsurf', 'rules', 'runwork-team.md')
54
- : join(getWindsurfDataDir(), 'rules', 'runwork-team.md');
55
- const content = `---\ntrigger: always_on\ndescription: "Team instructions from Runwork workspace"\n---\n\n${instructions}`;
56
- mkdirSync(join(filePath, '..'), { recursive: true });
57
- writeFileSync(filePath, content);
58
- }
59
- async writeInstructionHint(hint, scope) {
60
- // Windsurf uses rules files
61
- const filePath = scope === 'project'
62
- ? join(process.cwd(), '.windsurf', 'rules', 'runwork.md')
63
- : join(getWindsurfDataDir(), 'rules', 'runwork.md');
64
- const content = `---\ntrigger: always\n---\n\n${hint}`;
65
- mkdirSync(join(filePath, '..'), { recursive: true });
66
- writeFileSync(filePath, content);
67
- }
68
- // ── Cleanup (uninstall) ────────────────────────────────────────────
69
- async cleanup(scope, manifest) {
70
- // 1. Remove MCP entries (user scope only)
71
- if (scope === 'user') {
72
- removeRunworkMcpServers(getConfigPath(), 'mcpServers');
73
- }
74
- // 2. Remove rule files
75
- const rulesDir = scope === 'project'
76
- ? join(process.cwd(), '.windsurf', 'rules')
77
- : join(getWindsurfDataDir(), 'rules');
78
- if (existsSync(rulesDir)) {
79
- for (const file of ['runwork.md', 'runwork-team.md']) {
80
- const filePath = join(rulesDir, file);
81
- if (existsSync(filePath)) {
82
- try {
83
- unlinkSync(filePath);
84
- }
85
- catch { /* best-effort */ }
86
- }
87
- }
88
- // Remove only skill .md files that we synced
89
- if (manifest?.skillFilenames.length) {
90
- const allowed = new Set(manifest.skillFilenames.map(f => `${f}.md`));
91
- for (const entry of readdirSync(rulesDir)) {
92
- if (allowed.has(entry)) {
93
- try {
94
- unlinkSync(join(rulesDir, entry));
95
- }
96
- catch { /* best-effort */ }
97
- }
98
- }
99
- }
100
- }
101
- }
102
- }
@@ -1 +0,0 @@
1
- export {};