runwork 0.15.0 → 0.15.2

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 (403) hide show
  1. package/dist/index.js +19272 -116
  2. package/package.json +4 -4
  3. package/dist/__tests__/curl-parser.test.d.ts +0 -1
  4. package/dist/__tests__/curl-parser.test.js +0 -250
  5. package/dist/__tests__/install-scripts.test.d.ts +0 -1
  6. package/dist/__tests__/install-scripts.test.js +0 -280
  7. package/dist/__tests__/types-manager.test.d.ts +0 -1
  8. package/dist/__tests__/types-manager.test.js +0 -89
  9. package/dist/agents/__tests__/chatgpt-registry.test.d.ts +0 -1
  10. package/dist/agents/__tests__/chatgpt-registry.test.js +0 -61
  11. package/dist/agents/__tests__/claude-code-managed-block.test.d.ts +0 -1
  12. package/dist/agents/__tests__/claude-code-managed-block.test.js +0 -97
  13. package/dist/agents/__tests__/claude-code-plugin.test.d.ts +0 -1
  14. package/dist/agents/__tests__/claude-code-plugin.test.js +0 -47
  15. package/dist/agents/__tests__/claude-code-stats.test.d.ts +0 -1
  16. package/dist/agents/__tests__/claude-code-stats.test.js +0 -390
  17. package/dist/agents/__tests__/claude-desktop-memory.test.d.ts +0 -1
  18. package/dist/agents/__tests__/claude-desktop-memory.test.js +0 -154
  19. package/dist/agents/__tests__/claude-desktop-plugin-tree.test.d.ts +0 -1
  20. package/dist/agents/__tests__/claude-desktop-plugin-tree.test.js +0 -161
  21. package/dist/agents/__tests__/claude-desktop-plugin.test.d.ts +0 -1
  22. package/dist/agents/__tests__/claude-desktop-plugin.test.js +0 -117
  23. package/dist/agents/__tests__/claude-desktop-rpm.test.d.ts +0 -1
  24. package/dist/agents/__tests__/claude-desktop-rpm.test.js +0 -126
  25. package/dist/agents/__tests__/claude-desktop-stats.test.d.ts +0 -1
  26. package/dist/agents/__tests__/claude-desktop-stats.test.js +0 -280
  27. package/dist/agents/__tests__/codex-instructions.test.d.ts +0 -1
  28. package/dist/agents/__tests__/codex-instructions.test.js +0 -57
  29. package/dist/agents/__tests__/codex-minimum-permissions.test.d.ts +0 -1
  30. package/dist/agents/__tests__/codex-minimum-permissions.test.js +0 -82
  31. package/dist/agents/__tests__/codex-stats.test.d.ts +0 -1
  32. package/dist/agents/__tests__/codex-stats.test.js +0 -370
  33. package/dist/agents/__tests__/cursor-merge.test.d.ts +0 -1
  34. package/dist/agents/__tests__/cursor-merge.test.js +0 -66
  35. package/dist/agents/__tests__/cursor-stats.test.d.ts +0 -1
  36. package/dist/agents/__tests__/cursor-stats.test.js +0 -183
  37. package/dist/agents/__tests__/defaults-merge.test.d.ts +0 -1
  38. package/dist/agents/__tests__/defaults-merge.test.js +0 -268
  39. package/dist/agents/__tests__/detection.test.d.ts +0 -1
  40. package/dist/agents/__tests__/detection.test.js +0 -89
  41. package/dist/agents/__tests__/graceful-degradation.test.d.ts +0 -1
  42. package/dist/agents/__tests__/graceful-degradation.test.js +0 -129
  43. package/dist/agents/__tests__/instruction-hint.test.d.ts +0 -1
  44. package/dist/agents/__tests__/instruction-hint.test.js +0 -69
  45. package/dist/agents/__tests__/intro-skill.test.d.ts +0 -1
  46. package/dist/agents/__tests__/intro-skill.test.js +0 -193
  47. package/dist/agents/__tests__/schema-validation.test.d.ts +0 -1
  48. package/dist/agents/__tests__/schema-validation.test.js +0 -212
  49. package/dist/agents/__tests__/skill-slug.test.d.ts +0 -1
  50. package/dist/agents/__tests__/skill-slug.test.js +0 -77
  51. package/dist/agents/claude-code.d.ts +0 -53
  52. package/dist/agents/claude-code.js +0 -754
  53. package/dist/agents/claude-desktop-plugin-tree.d.ts +0 -59
  54. package/dist/agents/claude-desktop-plugin-tree.js +0 -143
  55. package/dist/agents/claude-desktop.d.ts +0 -47
  56. package/dist/agents/claude-desktop.js +0 -684
  57. package/dist/agents/cline.d.ts +0 -15
  58. package/dist/agents/cline.js +0 -130
  59. package/dist/agents/codex.d.ts +0 -44
  60. package/dist/agents/codex.js +0 -453
  61. package/dist/agents/conversation-skills.d.ts +0 -18
  62. package/dist/agents/conversation-skills.js +0 -229
  63. package/dist/agents/cursor.d.ts +0 -48
  64. package/dist/agents/cursor.js +0 -324
  65. package/dist/agents/default-config.d.ts +0 -30
  66. package/dist/agents/default-config.js +0 -67
  67. package/dist/agents/defaults-merge.d.ts +0 -72
  68. package/dist/agents/defaults-merge.js +0 -131
  69. package/dist/agents/detect.d.ts +0 -4
  70. package/dist/agents/detect.js +0 -67
  71. package/dist/agents/detection.d.ts +0 -18
  72. package/dist/agents/detection.js +0 -94
  73. package/dist/agents/gemini.d.ts +0 -15
  74. package/dist/agents/gemini.js +0 -122
  75. package/dist/agents/generic-adapter.d.ts +0 -25
  76. package/dist/agents/generic-adapter.js +0 -151
  77. package/dist/agents/intro-skill.d.ts +0 -45
  78. package/dist/agents/intro-skill.js +0 -447
  79. package/dist/agents/registry-data.d.ts +0 -192
  80. package/dist/agents/registry-data.js +0 -669
  81. package/dist/agents/registry.d.ts +0 -13
  82. package/dist/agents/registry.js +0 -36
  83. package/dist/agents/runtime-detection.d.ts +0 -82
  84. package/dist/agents/runtime-detection.js +0 -271
  85. package/dist/agents/session-start-hook.d.ts +0 -37
  86. package/dist/agents/session-start-hook.js +0 -159
  87. package/dist/agents/types.d.ts +0 -171
  88. package/dist/agents/types.js +0 -75
  89. package/dist/agents/utils/instruction-hint.d.ts +0 -21
  90. package/dist/agents/utils/instruction-hint.js +0 -108
  91. package/dist/agents/utils/json-config.d.ts +0 -19
  92. package/dist/agents/utils/json-config.js +0 -69
  93. package/dist/agents/utils/toml-config.d.ts +0 -8
  94. package/dist/agents/utils/toml-config.js +0 -27
  95. package/dist/agents/windsurf.d.ts +0 -14
  96. package/dist/agents/windsurf.js +0 -102
  97. package/dist/api/__tests__/client.test.d.ts +0 -1
  98. package/dist/api/__tests__/client.test.js +0 -272
  99. package/dist/api/client.d.ts +0 -326
  100. package/dist/api/client.js +0 -427
  101. package/dist/auth/__tests__/login-flow.test.d.ts +0 -1
  102. package/dist/auth/__tests__/login-flow.test.js +0 -101
  103. package/dist/auth/__tests__/store.test.d.ts +0 -1
  104. package/dist/auth/__tests__/store.test.js +0 -132
  105. package/dist/auth/login-flow.d.ts +0 -26
  106. package/dist/auth/login-flow.js +0 -137
  107. package/dist/auth/store.d.ts +0 -5
  108. package/dist/auth/store.js +0 -62
  109. package/dist/commands/__tests__/clone-args.test.d.ts +0 -1
  110. package/dist/commands/__tests__/clone-args.test.js +0 -51
  111. package/dist/commands/__tests__/clone-source-result.test.d.ts +0 -1
  112. package/dist/commands/__tests__/clone-source-result.test.js +0 -45
  113. package/dist/commands/__tests__/info-merge.test.d.ts +0 -1
  114. package/dist/commands/__tests__/info-merge.test.js +0 -55
  115. package/dist/commands/__tests__/mcp-entries.test.d.ts +0 -1
  116. package/dist/commands/__tests__/mcp-entries.test.js +0 -48
  117. package/dist/commands/__tests__/setup-persona.test.d.ts +0 -1
  118. package/dist/commands/__tests__/setup-persona.test.js +0 -31
  119. package/dist/commands/__tests__/setup.test.d.ts +0 -1
  120. package/dist/commands/__tests__/setup.test.js +0 -81
  121. package/dist/commands/__tests__/sync-redetect.test.d.ts +0 -1
  122. package/dist/commands/__tests__/sync-redetect.test.js +0 -96
  123. package/dist/commands/__tests__/sync-telemetry.test.d.ts +0 -1
  124. package/dist/commands/__tests__/sync-telemetry.test.js +0 -281
  125. package/dist/commands/__tests__/upgrade.test.d.ts +0 -1
  126. package/dist/commands/__tests__/upgrade.test.js +0 -157
  127. package/dist/commands/agents.d.ts +0 -2
  128. package/dist/commands/agents.js +0 -160
  129. package/dist/commands/api-keys.d.ts +0 -2
  130. package/dist/commands/api-keys.js +0 -95
  131. package/dist/commands/apps.d.ts +0 -2
  132. package/dist/commands/apps.js +0 -82
  133. package/dist/commands/build-plugin.d.ts +0 -2
  134. package/dist/commands/build-plugin.js +0 -135
  135. package/dist/commands/clone.d.ts +0 -60
  136. package/dist/commands/clone.js +0 -271
  137. package/dist/commands/components.d.ts +0 -2
  138. package/dist/commands/components.js +0 -43
  139. package/dist/commands/deploy.d.ts +0 -2
  140. package/dist/commands/deploy.js +0 -279
  141. package/dist/commands/dev.d.ts +0 -11
  142. package/dist/commands/dev.js +0 -1011
  143. package/dist/commands/doctor.d.ts +0 -2
  144. package/dist/commands/doctor.js +0 -230
  145. package/dist/commands/endpoints.d.ts +0 -2
  146. package/dist/commands/endpoints.js +0 -189
  147. package/dist/commands/entities.d.ts +0 -2
  148. package/dist/commands/entities.js +0 -198
  149. package/dist/commands/files.d.ts +0 -2
  150. package/dist/commands/files.js +0 -193
  151. package/dist/commands/inbox.d.ts +0 -11
  152. package/dist/commands/inbox.js +0 -60
  153. package/dist/commands/info.d.ts +0 -178
  154. package/dist/commands/info.js +0 -455
  155. package/dist/commands/init.d.ts +0 -21
  156. package/dist/commands/init.js +0 -185
  157. package/dist/commands/integrations.d.ts +0 -2
  158. package/dist/commands/integrations.js +0 -233
  159. package/dist/commands/login.d.ts +0 -2
  160. package/dist/commands/login.js +0 -44
  161. package/dist/commands/logout.d.ts +0 -2
  162. package/dist/commands/logout.js +0 -13
  163. package/dist/commands/logs.d.ts +0 -2
  164. package/dist/commands/logs.js +0 -232
  165. package/dist/commands/mcp-entries.d.ts +0 -13
  166. package/dist/commands/mcp-entries.js +0 -26
  167. package/dist/commands/mcp.d.ts +0 -2
  168. package/dist/commands/mcp.js +0 -245
  169. package/dist/commands/open.d.ts +0 -2
  170. package/dist/commands/open.js +0 -53
  171. package/dist/commands/resume.d.ts +0 -2
  172. package/dist/commands/resume.js +0 -289
  173. package/dist/commands/save-convo.d.ts +0 -8
  174. package/dist/commands/save-convo.js +0 -20
  175. package/dist/commands/schedules.d.ts +0 -2
  176. package/dist/commands/schedules.js +0 -221
  177. package/dist/commands/setup.d.ts +0 -27
  178. package/dist/commands/setup.js +0 -177
  179. package/dist/commands/share-convo.d.ts +0 -24
  180. package/dist/commands/share-convo.js +0 -167
  181. package/dist/commands/skills.d.ts +0 -2
  182. package/dist/commands/skills.js +0 -352
  183. package/dist/commands/sync-telemetry.d.ts +0 -33
  184. package/dist/commands/sync-telemetry.js +0 -186
  185. package/dist/commands/sync.d.ts +0 -37
  186. package/dist/commands/sync.js +0 -702
  187. package/dist/commands/uninstall.d.ts +0 -2
  188. package/dist/commands/uninstall.js +0 -145
  189. package/dist/commands/upgrade.d.ts +0 -14
  190. package/dist/commands/upgrade.js +0 -217
  191. package/dist/commands/validate.d.ts +0 -2
  192. package/dist/commands/validate.js +0 -89
  193. package/dist/commands/welcome.d.ts +0 -1
  194. package/dist/commands/welcome.js +0 -86
  195. package/dist/commands/workflows.d.ts +0 -2
  196. package/dist/commands/workflows.js +0 -187
  197. package/dist/deploy/__tests__/deploy-state.test.d.ts +0 -1
  198. package/dist/deploy/__tests__/deploy-state.test.js +0 -80
  199. package/dist/deploy/__tests__/deploy-status.test.d.ts +0 -1
  200. package/dist/deploy/__tests__/deploy-status.test.js +0 -41
  201. package/dist/deploy/__tests__/detach-args.test.d.ts +0 -1
  202. package/dist/deploy/__tests__/detach-args.test.js +0 -30
  203. package/dist/deploy/deploy-state.d.ts +0 -36
  204. package/dist/deploy/deploy-state.js +0 -63
  205. package/dist/deploy/deploy-status.d.ts +0 -21
  206. package/dist/deploy/deploy-status.js +0 -36
  207. package/dist/deploy/detach.d.ts +0 -32
  208. package/dist/deploy/detach.js +0 -71
  209. package/dist/dev/__tests__/attach.test.d.ts +0 -1
  210. package/dist/dev/__tests__/attach.test.js +0 -296
  211. package/dist/dev/__tests__/detach.test.d.ts +0 -1
  212. package/dist/dev/__tests__/detach.test.js +0 -404
  213. package/dist/dev/__tests__/preview-url-poller.test.d.ts +0 -1
  214. package/dist/dev/__tests__/preview-url-poller.test.js +0 -149
  215. package/dist/dev/__tests__/session.test.d.ts +0 -1
  216. package/dist/dev/__tests__/session.test.js +0 -446
  217. package/dist/dev/__tests__/startup-sync.test.d.ts +0 -1
  218. package/dist/dev/__tests__/startup-sync.test.js +0 -32
  219. package/dist/dev/__tests__/stop.test.d.ts +0 -1
  220. package/dist/dev/__tests__/stop.test.js +0 -172
  221. package/dist/dev/attach.d.ts +0 -120
  222. package/dist/dev/attach.js +0 -269
  223. package/dist/dev/detach.d.ts +0 -187
  224. package/dist/dev/detach.js +0 -292
  225. package/dist/dev/preview-url-poller.d.ts +0 -35
  226. package/dist/dev/preview-url-poller.js +0 -50
  227. package/dist/dev/session.d.ts +0 -175
  228. package/dist/dev/session.js +0 -258
  229. package/dist/dev/startup-sync.d.ts +0 -23
  230. package/dist/dev/startup-sync.js +0 -14
  231. package/dist/dev/stop.d.ts +0 -52
  232. package/dist/dev/stop.js +0 -101
  233. package/dist/devtools/registry-data.d.ts +0 -46
  234. package/dist/devtools/registry-data.js +0 -40
  235. package/dist/generated/bundled-types.d.ts +0 -1
  236. package/dist/generated/bundled-types.js +0 -46
  237. package/dist/generated/version.d.ts +0 -1
  238. package/dist/generated/version.js +0 -2
  239. package/dist/git/__tests__/auto-commit.test.d.ts +0 -1
  240. package/dist/git/__tests__/auto-commit.test.js +0 -431
  241. package/dist/git/__tests__/classify-sync-error.test.d.ts +0 -1
  242. package/dist/git/__tests__/classify-sync-error.test.js +0 -57
  243. package/dist/git/__tests__/credential-helper-e2e.test.d.ts +0 -21
  244. package/dist/git/__tests__/credential-helper-e2e.test.js +0 -195
  245. package/dist/git/__tests__/credentials.test.d.ts +0 -1
  246. package/dist/git/__tests__/credentials.test.js +0 -141
  247. package/dist/git/__tests__/deploy-guard.test.d.ts +0 -1
  248. package/dist/git/__tests__/deploy-guard.test.js +0 -61
  249. package/dist/git/__tests__/ensure-git-credential-helper.test.d.ts +0 -1
  250. package/dist/git/__tests__/ensure-git-credential-helper.test.js +0 -133
  251. package/dist/git/__tests__/ensure-runwork-remote.test.d.ts +0 -1
  252. package/dist/git/__tests__/ensure-runwork-remote.test.js +0 -109
  253. package/dist/git/__tests__/identity.test.d.ts +0 -1
  254. package/dist/git/__tests__/identity.test.js +0 -146
  255. package/dist/git/__tests__/manifest.test.d.ts +0 -1
  256. package/dist/git/__tests__/manifest.test.js +0 -446
  257. package/dist/git/__tests__/preflight-resolution.test.d.ts +0 -1
  258. package/dist/git/__tests__/preflight-resolution.test.js +0 -366
  259. package/dist/git/__tests__/preflight.test.d.ts +0 -1
  260. package/dist/git/__tests__/preflight.test.js +0 -36
  261. package/dist/git/__tests__/repo-config.test.d.ts +0 -1
  262. package/dist/git/__tests__/repo-config.test.js +0 -26
  263. package/dist/git/__tests__/sync.test.d.ts +0 -1
  264. package/dist/git/__tests__/sync.test.js +0 -405
  265. package/dist/git/auto-commit.d.ts +0 -35
  266. package/dist/git/auto-commit.js +0 -293
  267. package/dist/git/classify-sync-error.d.ts +0 -21
  268. package/dist/git/classify-sync-error.js +0 -111
  269. package/dist/git/credentials.d.ts +0 -75
  270. package/dist/git/credentials.js +0 -164
  271. package/dist/git/critical-files.d.ts +0 -20
  272. package/dist/git/critical-files.js +0 -68
  273. package/dist/git/deploy-guard.d.ts +0 -53
  274. package/dist/git/deploy-guard.js +0 -78
  275. package/dist/git/identity.d.ts +0 -44
  276. package/dist/git/identity.js +0 -133
  277. package/dist/git/preflight.d.ts +0 -57
  278. package/dist/git/preflight.js +0 -276
  279. package/dist/git/remote.d.ts +0 -37
  280. package/dist/git/remote.js +0 -75
  281. package/dist/git/repo-config.d.ts +0 -8
  282. package/dist/git/repo-config.js +0 -29
  283. package/dist/git/sync.d.ts +0 -15
  284. package/dist/git/sync.js +0 -159
  285. package/dist/health/__tests__/checks.test.d.ts +0 -1
  286. package/dist/health/__tests__/checks.test.js +0 -357
  287. package/dist/health/__tests__/cli-distribution-checks.test.d.ts +0 -1
  288. package/dist/health/__tests__/cli-distribution-checks.test.js +0 -196
  289. package/dist/health/__tests__/fix.test.d.ts +0 -1
  290. package/dist/health/__tests__/fix.test.js +0 -72
  291. package/dist/health/__tests__/runner-filter.test.d.ts +0 -1
  292. package/dist/health/__tests__/runner-filter.test.js +0 -61
  293. package/dist/health/checks.d.ts +0 -42
  294. package/dist/health/checks.js +0 -636
  295. package/dist/health/fix.d.ts +0 -22
  296. package/dist/health/fix.js +0 -62
  297. package/dist/health/runner.d.ts +0 -8
  298. package/dist/health/runner.js +0 -47
  299. package/dist/health/types.d.ts +0 -12
  300. package/dist/health/types.js +0 -1
  301. package/dist/index.d.ts +0 -1
  302. package/dist/logs/__tests__/tailer-format.test.d.ts +0 -1
  303. package/dist/logs/__tests__/tailer-format.test.js +0 -43
  304. package/dist/logs/tailer.d.ts +0 -17
  305. package/dist/logs/tailer.js +0 -217
  306. package/dist/sync/__tests__/change-detect.test.d.ts +0 -1
  307. package/dist/sync/__tests__/change-detect.test.js +0 -123
  308. package/dist/sync/__tests__/hash.test.d.ts +0 -1
  309. package/dist/sync/__tests__/hash.test.js +0 -18
  310. package/dist/sync/change-detect.d.ts +0 -19
  311. package/dist/sync/change-detect.js +0 -136
  312. package/dist/sync/conflict-ui.d.ts +0 -5
  313. package/dist/sync/conflict-ui.js +0 -78
  314. package/dist/sync/executor.d.ts +0 -23
  315. package/dist/sync/executor.js +0 -102
  316. package/dist/sync/hash.d.ts +0 -1
  317. package/dist/sync/hash.js +0 -4
  318. package/dist/sync/types.d.ts +0 -24
  319. package/dist/sync/types.js +0 -1
  320. package/dist/template/manifest.d.ts +0 -17
  321. package/dist/template/manifest.js +0 -145
  322. package/dist/tools/types.d.ts +0 -52
  323. package/dist/tools/types.js +0 -8
  324. package/dist/types-manager.d.ts +0 -1
  325. package/dist/types-manager.js +0 -35
  326. package/dist/types.d.ts +0 -349
  327. package/dist/types.js +0 -1
  328. package/dist/ui/__tests__/banner.test.d.ts +0 -1
  329. package/dist/ui/__tests__/banner.test.js +0 -98
  330. package/dist/ui/__tests__/colors.test.d.ts +0 -1
  331. package/dist/ui/__tests__/colors.test.js +0 -22
  332. package/dist/ui/__tests__/keyboard.test.d.ts +0 -1
  333. package/dist/ui/__tests__/keyboard.test.js +0 -34
  334. package/dist/ui/__tests__/status-line.test.d.ts +0 -1
  335. package/dist/ui/__tests__/status-line.test.js +0 -54
  336. package/dist/ui/banner.d.ts +0 -29
  337. package/dist/ui/banner.js +0 -153
  338. package/dist/ui/colors.d.ts +0 -4
  339. package/dist/ui/colors.js +0 -7
  340. package/dist/ui/keyboard.d.ts +0 -12
  341. package/dist/ui/keyboard.js +0 -61
  342. package/dist/ui/status-line.d.ts +0 -6
  343. package/dist/ui/status-line.js +0 -53
  344. package/dist/utils/__tests__/format-error.test.d.ts +0 -1
  345. package/dist/utils/__tests__/format-error.test.js +0 -43
  346. package/dist/utils/__tests__/help-json.test.d.ts +0 -1
  347. package/dist/utils/__tests__/help-json.test.js +0 -39
  348. package/dist/utils/__tests__/http.test.d.ts +0 -1
  349. package/dist/utils/__tests__/http.test.js +0 -381
  350. package/dist/utils/__tests__/ignore-matcher.test.d.ts +0 -1
  351. package/dist/utils/__tests__/ignore-matcher.test.js +0 -205
  352. package/dist/utils/__tests__/output.test.d.ts +0 -1
  353. package/dist/utils/__tests__/output.test.js +0 -38
  354. package/dist/utils/__tests__/prompt.test.d.ts +0 -1
  355. package/dist/utils/__tests__/prompt.test.js +0 -27
  356. package/dist/utils/__tests__/resolve.test.d.ts +0 -1
  357. package/dist/utils/__tests__/resolve.test.js +0 -95
  358. package/dist/utils/__tests__/sqlite.test.d.ts +0 -1
  359. package/dist/utils/__tests__/sqlite.test.js +0 -89
  360. package/dist/utils/agent-guidance.d.ts +0 -47
  361. package/dist/utils/agent-guidance.js +0 -128
  362. package/dist/utils/app-info.d.ts +0 -70
  363. package/dist/utils/app-info.js +0 -167
  364. package/dist/utils/curl-parser.d.ts +0 -12
  365. package/dist/utils/curl-parser.js +0 -162
  366. package/dist/utils/data-input.d.ts +0 -1
  367. package/dist/utils/data-input.js +0 -38
  368. package/dist/utils/format-error.d.ts +0 -10
  369. package/dist/utils/format-error.js +0 -38
  370. package/dist/utils/fs.d.ts +0 -5
  371. package/dist/utils/fs.js +0 -23
  372. package/dist/utils/help-json.d.ts +0 -70
  373. package/dist/utils/help-json.js +0 -88
  374. package/dist/utils/http.d.ts +0 -46
  375. package/dist/utils/http.js +0 -421
  376. package/dist/utils/ignore-matcher.d.ts +0 -47
  377. package/dist/utils/ignore-matcher.js +0 -132
  378. package/dist/utils/output.d.ts +0 -17
  379. package/dist/utils/output.js +0 -27
  380. package/dist/utils/prompt.d.ts +0 -5
  381. package/dist/utils/prompt.js +0 -42
  382. package/dist/utils/resolve.d.ts +0 -12
  383. package/dist/utils/resolve.js +0 -52
  384. package/dist/utils/setup-state.d.ts +0 -3
  385. package/dist/utils/setup-state.js +0 -19
  386. package/dist/utils/sqlite-adapter.d.ts +0 -48
  387. package/dist/utils/sqlite-adapter.js +0 -147
  388. package/dist/utils/sqlite.d.ts +0 -14
  389. package/dist/utils/sqlite.js +0 -14
  390. package/dist/utils/subprocess.d.ts +0 -19
  391. package/dist/utils/subprocess.js +0 -27
  392. package/dist/utils/which.d.ts +0 -14
  393. package/dist/utils/which.js +0 -47
  394. package/dist/utils/zip.d.ts +0 -7
  395. package/dist/utils/zip.js +0 -42
  396. package/dist/validate/__tests__/validate.test.d.ts +0 -1
  397. package/dist/validate/__tests__/validate.test.js +0 -42
  398. package/dist/validate/freshness.d.ts +0 -28
  399. package/dist/validate/freshness.js +0 -48
  400. package/dist/validate/preview.d.ts +0 -21
  401. package/dist/validate/preview.js +0 -39
  402. package/dist/workspace/resolve.d.ts +0 -19
  403. 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 {};