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,87 +0,0 @@
1
- /**
2
- * Pure functions for the default-rules merge algorithm.
3
- *
4
- * The sync loop (commands/sync.ts) wires these together with per-adapter I/O.
5
- * Keeping the logic side-effect-free here makes it cheap to unit-test the
6
- * tricky lifecycle (bootstrap, opt-out detection, set shrinking) without
7
- * mocking filesystem layers.
8
- */
9
- import type { AgentDefaultsState } from '../types.js';
10
- import type { BakedDefaults } from './default-config.js';
11
- /** Items present in `lastInjected` but not in `onDisk`. These are entries the user removed since the previous sync. */
12
- export declare function detectRemovals(lastInjected: string[], onDisk: string[]): string[];
13
- /** Defaults filtered to exclude anything the user has opted out of. */
14
- export declare function computeApplicable(baked: string[], optOuts: string[]): string[];
15
- /**
16
- * Dedupe-silently merge of defaults and team rules. Team rules appear after
17
- * defaults in the output (the marker block's team-managed half), and dedupe
18
- * keeps the team-positioned copy when a default and a team rule are identical
19
- * strings. Stable ordering is preserved.
20
- */
21
- export declare function mergeAllow(applicableDefaults: string[], teamRules: string[]): string[];
22
- export declare function unique(items: string[]): string[];
23
- /**
24
- * Merge a new managed list into a markerless on-disk array while preserving
25
- * user-added entries. Shared by all markerless adapters (Cursor, Claude Code).
26
- *
27
- * existing = what's currently on disk
28
- * baseline = what we wrote on the previous sync (state.lastInjected). Items
29
- * present here are assumed to be ours; subtracting them from
30
- * existing leaves entries the user added themselves.
31
- * incoming = the new managed set to inject (defaults already filtered for
32
- * opt-outs, merged with team rules)
33
- *
34
- * If baseline is empty (bootstrap or first run with this CLI version), we
35
- * assume nothing currently on disk is ours and preserve all existing entries.
36
- */
37
- export declare function mergeMarkerless(existing: string[], baseline: string[], incoming: string[]): string[];
38
- /** True if no per-agent state has ever been recorded — first sync after upgrade or fresh install. */
39
- export declare function isBootstrap(state: AgentDefaultsState | undefined): boolean;
40
- export interface ResolveResult {
41
- /**
42
- * Final merged list to write into the managed block.
43
- * For marker-based agents (Claude Code): goes after the marker.
44
- * For markerless agents (Cursor): becomes part of the array,
45
- * with `baseline` used by the adapter to identify and preserve user entries.
46
- */
47
- managedAllow: string[];
48
- managedDeny: string[];
49
- /** Defaults that we actually injected this sync. Stored as next sync's lastInjected. */
50
- applicableAllow: string[];
51
- applicableDeny: string[];
52
- /** New sticky opt-out set. Stored as next sync's userOptOuts. */
53
- newOptOutsAllow: string[];
54
- newOptOutsDeny: string[];
55
- /** Diagnostic counts for the sync log. */
56
- removalsThisSync: {
57
- allow: number;
58
- deny: number;
59
- };
60
- /** True when this sync is the bootstrap pass and skipped default injection. */
61
- bootstrapped: boolean;
62
- }
63
- export interface ResolveInput {
64
- baked: BakedDefaults | undefined;
65
- state: AgentDefaultsState | undefined;
66
- onDisk: {
67
- allow?: string[];
68
- deny?: string[];
69
- } | undefined;
70
- team: {
71
- allow?: string[];
72
- deny?: string[];
73
- } | undefined;
74
- }
75
- /**
76
- * Single-call resolver for one agent. Consumes the full input set and emits
77
- * the merged managed lists plus the next-sync state values. Pure: no I/O.
78
- *
79
- * Cases:
80
- * 1. No baked defaults for this agent → emits team rules only (no defaults
81
- * logic kicks in). State stays undefined.
82
- * 2. Bootstrap (state undefined) → applies team rules but does NOT inject
83
- * defaults this sync. Caller initializes empty state for next time.
84
- * 3. Normal → detects removals against lastInjected, accumulates opt-outs,
85
- * filters baked by opt-outs, merges with team rules.
86
- */
87
- export declare function resolveAgentDefaults(input: ResolveInput): ResolveResult;
@@ -1,150 +0,0 @@
1
- /**
2
- * Pure functions for the default-rules merge algorithm.
3
- *
4
- * The sync loop (commands/sync.ts) wires these together with per-adapter I/O.
5
- * Keeping the logic side-effect-free here makes it cheap to unit-test the
6
- * tricky lifecycle (bootstrap, opt-out detection, set shrinking) without
7
- * mocking filesystem layers.
8
- */
9
- /** Items present in `lastInjected` but not in `onDisk`. These are entries the user removed since the previous sync. */
10
- export function detectRemovals(lastInjected, onDisk) {
11
- const onDiskSet = new Set(onDisk);
12
- return lastInjected.filter((item) => !onDiskSet.has(item));
13
- }
14
- /** Defaults filtered to exclude anything the user has opted out of. */
15
- export function computeApplicable(baked, optOuts) {
16
- const optOutSet = new Set(optOuts);
17
- return baked.filter((item) => !optOutSet.has(item));
18
- }
19
- /**
20
- * Dedupe-silently merge of defaults and team rules. Team rules appear after
21
- * defaults in the output (the marker block's team-managed half), and dedupe
22
- * keeps the team-positioned copy when a default and a team rule are identical
23
- * strings. Stable ordering is preserved.
24
- */
25
- export function mergeAllow(applicableDefaults, teamRules) {
26
- const teamSet = new Set(teamRules);
27
- const result = [];
28
- for (const item of applicableDefaults) {
29
- if (!teamSet.has(item))
30
- result.push(item);
31
- }
32
- for (const item of teamRules) {
33
- result.push(item);
34
- }
35
- return result;
36
- }
37
- export function unique(items) {
38
- const seen = new Set();
39
- const out = [];
40
- for (const item of items) {
41
- if (!seen.has(item)) {
42
- seen.add(item);
43
- out.push(item);
44
- }
45
- }
46
- return out;
47
- }
48
- /**
49
- * Merge a new managed list into a markerless on-disk array while preserving
50
- * user-added entries. Shared by all markerless adapters (Cursor, Claude Code).
51
- *
52
- * existing = what's currently on disk
53
- * baseline = what we wrote on the previous sync (state.lastInjected). Items
54
- * present here are assumed to be ours; subtracting them from
55
- * existing leaves entries the user added themselves.
56
- * incoming = the new managed set to inject (defaults already filtered for
57
- * opt-outs, merged with team rules)
58
- *
59
- * If baseline is empty (bootstrap or first run with this CLI version), we
60
- * assume nothing currently on disk is ours and preserve all existing entries.
61
- */
62
- export function mergeMarkerless(existing, baseline, incoming) {
63
- const baselineSet = new Set(baseline);
64
- const userEntries = existing.filter((item) => !baselineSet.has(item));
65
- return unique([...userEntries, ...incoming]);
66
- }
67
- /** True if no per-agent state has ever been recorded — first sync after upgrade or fresh install. */
68
- export function isBootstrap(state) {
69
- return state === undefined;
70
- }
71
- /**
72
- * Single-call resolver for one agent. Consumes the full input set and emits
73
- * the merged managed lists plus the next-sync state values. Pure: no I/O.
74
- *
75
- * Cases:
76
- * 1. No baked defaults for this agent → emits team rules only (no defaults
77
- * logic kicks in). State stays undefined.
78
- * 2. Bootstrap (state undefined) → applies team rules but does NOT inject
79
- * defaults this sync. Caller initializes empty state for next time.
80
- * 3. Normal → detects removals against lastInjected, accumulates opt-outs,
81
- * filters baked by opt-outs, merges with team rules.
82
- */
83
- export function resolveAgentDefaults(input) {
84
- const team = input.team ?? {};
85
- const teamAllow = team.allow ?? [];
86
- const teamDeny = team.deny ?? [];
87
- // Case 1: no baked defaults — emit team rules unchanged, no state to track.
88
- if (!input.baked) {
89
- return {
90
- managedAllow: unique(teamAllow),
91
- managedDeny: unique(teamDeny),
92
- applicableAllow: [],
93
- applicableDeny: [],
94
- newOptOutsAllow: [],
95
- newOptOutsDeny: [],
96
- removalsThisSync: { allow: 0, deny: 0 },
97
- bootstrapped: false,
98
- };
99
- }
100
- // Case 2: bootstrap — do not inject defaults this pass.
101
- if (isBootstrap(input.state)) {
102
- return {
103
- managedAllow: unique(teamAllow),
104
- managedDeny: unique(teamDeny),
105
- applicableAllow: [],
106
- applicableDeny: [],
107
- newOptOutsAllow: [],
108
- newOptOutsDeny: [],
109
- removalsThisSync: { allow: 0, deny: 0 },
110
- bootstrapped: true,
111
- };
112
- }
113
- // Case 3: normal merge.
114
- const state = input.state;
115
- const lastInjectedAllow = state.lastInjected.allow ?? [];
116
- const lastInjectedDeny = state.lastInjected.deny ?? [];
117
- const existingOptOutsAllow = state.userOptOuts.allow ?? [];
118
- const existingOptOutsDeny = state.userOptOuts.deny ?? [];
119
- // Removal detection requires a reliable on-disk read. Markerless adapters
120
- // (Cursor) cannot distinguish injected entries from user entries on disk, so
121
- // they return `undefined` from readManagedBlock. Treating `undefined` as an
122
- // empty array would fabricate a "user removed everything" signal on every
123
- // subsequent sync and incorrectly convert every default into a sticky opt-out.
124
- // When we cannot read managed state, we trust the baseline mechanism in the
125
- // adapter and skip removal detection for this sync.
126
- const canDetectRemovals = input.onDisk !== undefined;
127
- const newRemovalsAllow = canDetectRemovals
128
- ? detectRemovals(lastInjectedAllow, input.onDisk?.allow ?? [])
129
- : [];
130
- const newRemovalsDeny = canDetectRemovals
131
- ? detectRemovals(lastInjectedDeny, input.onDisk?.deny ?? [])
132
- : [];
133
- const newOptOutsAllow = unique([...existingOptOutsAllow, ...newRemovalsAllow]);
134
- const newOptOutsDeny = unique([...existingOptOutsDeny, ...newRemovalsDeny]);
135
- const applicableAllow = computeApplicable(input.baked.allow, newOptOutsAllow);
136
- const applicableDeny = computeApplicable(input.baked.deny, newOptOutsDeny);
137
- return {
138
- managedAllow: mergeAllow(applicableAllow, teamAllow),
139
- managedDeny: mergeAllow(applicableDeny, teamDeny),
140
- applicableAllow,
141
- applicableDeny,
142
- newOptOutsAllow,
143
- newOptOutsDeny,
144
- removalsThisSync: {
145
- allow: newRemovalsAllow.length,
146
- deny: newRemovalsDeny.length,
147
- },
148
- bootstrapped: false,
149
- };
150
- }
@@ -1,4 +0,0 @@
1
- import type { AgentAdapter } from './types.js';
2
- export declare function detectAgents(): Promise<AgentAdapter[]>;
3
- export declare function getAdapterBySlug(slug: string): AgentAdapter | undefined;
4
- export declare function printNoAgentsMessage(): void;
@@ -1,67 +0,0 @@
1
- import { ClaudeCodeAdapter } from './claude-code.js';
2
- import { ClaudeDesktopAdapter } from './claude-desktop.js';
3
- import { CursorAdapter } from './cursor.js';
4
- import { WindsurfAdapter } from './windsurf.js';
5
- import { CodexAdapter, CodexDesktopAdapter } from './codex.js';
6
- import { ClineAdapter } from './cline.js';
7
- import { GeminiAdapter } from './gemini.js';
8
- import { GenericAgentAdapter } from './generic-adapter.js';
9
- import { getRegistryAgents, getCustomAdapterSlugs } from './registry.js';
10
- /**
11
- * Agents with custom adapter implementations (plugin systems, special formats).
12
- * These override the generic adapter for their slug.
13
- */
14
- const CUSTOM_ADAPTERS = [
15
- new ClaudeCodeAdapter(),
16
- new ClaudeDesktopAdapter(),
17
- new CursorAdapter(),
18
- new WindsurfAdapter(),
19
- new CodexAdapter(),
20
- new CodexDesktopAdapter(),
21
- new ClineAdapter(),
22
- new GeminiAdapter(),
23
- ];
24
- const customSlugs = getCustomAdapterSlugs();
25
- const customMap = new Map(CUSTOM_ADAPTERS.map(a => [a.slug, a]));
26
- /**
27
- * Build the full list of adapters: custom adapters for special agents,
28
- * generic adapters for everything else in the registry.
29
- */
30
- function buildAllAdapters() {
31
- const adapters = [...CUSTOM_ADAPTERS];
32
- for (const def of getRegistryAgents()) {
33
- if (customSlugs.has(def.slug))
34
- continue;
35
- adapters.push(new GenericAgentAdapter(def));
36
- }
37
- return adapters;
38
- }
39
- const ALL_ADAPTERS = buildAllAdapters();
40
- export async function detectAgents() {
41
- const results = await Promise.all(ALL_ADAPTERS.map(async (adapter) => {
42
- try {
43
- const detected = await adapter.detect();
44
- return detected ? adapter : null;
45
- }
46
- catch {
47
- return null;
48
- }
49
- }));
50
- return results.filter((a) => a !== null);
51
- }
52
- export function getAdapterBySlug(slug) {
53
- // Check custom adapters first, then fall back to generic
54
- if (customMap.has(slug))
55
- return customMap.get(slug);
56
- return ALL_ADAPTERS.find(a => a.slug === slug);
57
- }
58
- export function printNoAgentsMessage() {
59
- console.log('No supported AI coding agents detected.\n');
60
- console.log('Install one to get started:\n');
61
- console.log(' Claude Code: npm i -g @anthropic-ai/claude-code');
62
- console.log(' Cursor: https://cursor.com');
63
- console.log(' Codex CLI: npm i -g @openai/codex');
64
- console.log(' Gemini CLI: https://github.com/google-gemini/gemini-cli');
65
- console.log(' Windsurf: https://windsurf.com');
66
- console.log('');
67
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * Shared agent-installation detection used by the generic adapter and by
3
- * custom adapters that opt in to the registry's declared detection rules
4
- * (e.g. Codex Desktop, which detects via `/Applications/Codex.app` on macOS
5
- * and the AppX package on Windows rather than a `codex` binary on PATH).
6
- *
7
- * Mirrors the desktop's agent-detection.ts logic but uses Node APIs instead
8
- * of Tauri plugins.
9
- */
10
- import type { AgentDetection } from './registry-data.js';
11
- /**
12
- * Detection — returns true when the agent is installed according to its
13
- * registry `detection` rules. Supports `binary`, `path`, `windows-appx`,
14
- * `windows-start-app`, and nested `any` combinators. PowerShell-backed
15
- * Windows probes run in parallel so a multi-target `any { windows-appx }`
16
- * pays one PowerShell startup, not N.
17
- */
18
- export declare function runAgentDetection(detection: AgentDetection): Promise<boolean>;
@@ -1,94 +0,0 @@
1
- /**
2
- * Shared agent-installation detection used by the generic adapter and by
3
- * custom adapters that opt in to the registry's declared detection rules
4
- * (e.g. Codex Desktop, which detects via `/Applications/Codex.app` on macOS
5
- * and the AppX package on Windows rather than a `codex` binary on PATH).
6
- *
7
- * Mirrors the desktop's agent-detection.ts logic but uses Node APIs instead
8
- * of Tauri plugins.
9
- */
10
- import { execFile } from 'child_process';
11
- import { existsSync } from 'fs';
12
- import { homedir, platform } from 'os';
13
- import { isAbsolute, join } from 'path';
14
- import { promisify } from 'util';
15
- import { whichBinary } from '../utils/which.js';
16
- import { resolvePlatformString } from './registry.js';
17
- const execFileAsync = promisify(execFile);
18
- function isWindows() {
19
- return platform() === 'win32';
20
- }
21
- function powershellQuote(value) {
22
- return `'${value.replace(/'/g, "''")}'`;
23
- }
24
- function toList(value) {
25
- return Array.isArray(value) ? value : [value];
26
- }
27
- async function runPowerShell(script) {
28
- try {
29
- await execFileAsync('powershell', ['-NoProfile', '-Command', script]);
30
- return true;
31
- }
32
- catch {
33
- return false;
34
- }
35
- }
36
- function checkPath(target) {
37
- const resolved = resolvePlatformString(target);
38
- if (!resolved)
39
- return false;
40
- if (isAbsolute(resolved))
41
- return existsSync(resolved);
42
- return existsSync(join(homedir(), resolved));
43
- }
44
- async function checkWindowsAppxPackage(target) {
45
- if (!isWindows())
46
- return false;
47
- // Probe all candidate package names in parallel; resolve true on first hit.
48
- const probes = toList(target).map((pkg) => {
49
- const script = `$p = Get-AppxPackage -Name ${powershellQuote(pkg)} -ErrorAction SilentlyContinue; if ($null -ne $p) { exit 0 } exit 1`;
50
- return runPowerShell(script);
51
- });
52
- const results = await Promise.all(probes);
53
- return results.some(Boolean);
54
- }
55
- async function checkWindowsStartApp(target) {
56
- if (!isWindows())
57
- return false;
58
- const probes = toList(target).map((pattern) => {
59
- const script = `$a = Get-StartApps -Name ${powershellQuote(pattern)} -ErrorAction SilentlyContinue | Select-Object -First 1; if ($null -ne $a) { exit 0 } exit 1`;
60
- return runPowerShell(script);
61
- });
62
- const results = await Promise.all(probes);
63
- return results.some(Boolean);
64
- }
65
- /**
66
- * Detection — returns true when the agent is installed according to its
67
- * registry `detection` rules. Supports `binary`, `path`, `windows-appx`,
68
- * `windows-start-app`, and nested `any` combinators. PowerShell-backed
69
- * Windows probes run in parallel so a multi-target `any { windows-appx }`
70
- * pays one PowerShell startup, not N.
71
- */
72
- export async function runAgentDetection(detection) {
73
- switch (detection.method) {
74
- case 'binary': {
75
- const target = resolvePlatformString(detection.target);
76
- return !!target && !!whichBinary(target);
77
- }
78
- case 'path':
79
- return checkPath(detection.target);
80
- case 'windows-appx':
81
- return checkWindowsAppxPackage(detection.target);
82
- case 'windows-start-app':
83
- return checkWindowsStartApp(detection.target);
84
- case 'any': {
85
- const probes = await Promise.all(detection.target.map((p) => runAgentDetection(p)));
86
- return probes.some(Boolean);
87
- }
88
- case 'always':
89
- // Web-only agents have no local footprint; always treated as available.
90
- return true;
91
- default:
92
- return false;
93
- }
94
- }
@@ -1,15 +0,0 @@
1
- import type { AgentAdapter, AgentConfigOverride, CleanupManifest, McpServerEntry, SkillFile } from './types.js';
2
- export declare class GeminiAdapter 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
- writeInstructionHint(hint: string, scope: 'project' | 'user'): Promise<void>;
12
- writeTeamInstructions(instructions: string, scope: 'project' | 'user'): Promise<void>;
13
- writeAgentConfig(config: AgentConfigOverride, scope: 'project' | 'user'): Promise<void>;
14
- cleanup(scope: 'project' | 'user', manifest?: CleanupManifest): Promise<void>;
15
- }
@@ -1,122 +0,0 @@
1
- import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'fs';
2
- import { join } from 'path';
3
- import { homedir } from 'os';
4
- import { whichBinary } from '../utils/which.js';
5
- import { buildSkillMd } from './types.js';
6
- import { writeHintToFile, writeTeamInstructionsToFile, removeHintFromFile, removeTeamInstructionsFromFile } from './utils/instruction-hint.js';
7
- import { mergeJsonMcpServers, removeRunworkMcpServers } from './utils/json-config.js';
8
- export class GeminiAdapter {
9
- name = 'Gemini CLI';
10
- slug = 'gemini';
11
- mcpProvidesSkills = true;
12
- async detect() {
13
- return !!whichBinary('gemini');
14
- }
15
- supportsMcpScope(scope) {
16
- return scope === 'user';
17
- }
18
- supportsSkills() {
19
- return true;
20
- }
21
- async writeMcpServers(servers, _scope) {
22
- const configPath = join(homedir(), '.gemini', 'settings.json');
23
- const entries = {};
24
- for (const s of servers) {
25
- entries[s.name] = {
26
- url: s.url,
27
- ...(s.headers ? { headers: s.headers } : {}),
28
- };
29
- }
30
- mergeJsonMcpServers(configPath, entries, 'mcpServers');
31
- }
32
- async writeSkills(skills, scope) {
33
- const baseDir = scope === 'project'
34
- ? join(process.cwd(), '.gemini', 'skills')
35
- : join(homedir(), '.gemini', 'skills');
36
- for (const skill of skills) {
37
- if (skill.name !== skill.filename) {
38
- const oldDir = join(baseDir, skill.name);
39
- if (existsSync(oldDir)) {
40
- try {
41
- rmSync(oldDir, { recursive: true, force: true });
42
- }
43
- catch { /* best-effort */ }
44
- }
45
- }
46
- const skillDir = join(baseDir, skill.filename);
47
- mkdirSync(skillDir, { recursive: true });
48
- writeFileSync(join(skillDir, 'SKILL.md'), buildSkillMd(skill));
49
- }
50
- }
51
- async writeInstructionHint(hint, scope) {
52
- const filePath = scope === 'project'
53
- ? join(process.cwd(), 'GEMINI.md')
54
- : join(homedir(), '.gemini', 'GEMINI.md');
55
- writeHintToFile(filePath, hint);
56
- }
57
- async writeTeamInstructions(instructions, scope) {
58
- const filePath = scope === 'project'
59
- ? join(process.cwd(), 'GEMINI.md')
60
- : join(homedir(), '.gemini', 'GEMINI.md');
61
- writeTeamInstructionsToFile(filePath, instructions);
62
- }
63
- // ── Agent config (settings.json) ──────────────────────────────────
64
- async writeAgentConfig(config, scope) {
65
- const settingsPath = scope === 'project'
66
- ? join(process.cwd(), '.gemini', 'settings.json')
67
- : join(homedir(), '.gemini', 'settings.json');
68
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
- let settings = {};
70
- if (existsSync(settingsPath)) {
71
- try {
72
- settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
73
- }
74
- catch { /* start fresh */ }
75
- }
76
- if (config.modelPreference) {
77
- if (!settings.model)
78
- settings.model = {};
79
- settings.model.name = config.modelPreference;
80
- }
81
- if (config.permissionRules?.allow) {
82
- if (!settings.tools)
83
- settings.tools = {};
84
- settings.tools.allowed = config.permissionRules.allow;
85
- }
86
- if (config.permissionRules?.deny) {
87
- if (!settings.tools)
88
- settings.tools = {};
89
- settings.tools.exclude = config.permissionRules.deny;
90
- }
91
- mkdirSync(join(settingsPath, '..'), { recursive: true });
92
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
93
- }
94
- // ── Cleanup (uninstall) ────────────────────────────────────────────
95
- async cleanup(scope, manifest) {
96
- // 1. Remove MCP entries (user scope only)
97
- if (scope === 'user') {
98
- removeRunworkMcpServers(join(homedir(), '.gemini', 'settings.json'), 'mcpServers');
99
- }
100
- // 2. Remove only skill directories that we synced (listed in manifest)
101
- const skillsDir = scope === 'project'
102
- ? join(process.cwd(), '.gemini', 'skills')
103
- : join(homedir(), '.gemini', 'skills');
104
- if (existsSync(skillsDir) && manifest?.skillFilenames.length) {
105
- const allowed = new Set(manifest.skillFilenames);
106
- for (const entry of readdirSync(skillsDir)) {
107
- if (!allowed.has(entry))
108
- continue;
109
- try {
110
- rmSync(join(skillsDir, entry), { recursive: true, force: true });
111
- }
112
- catch { /* best-effort */ }
113
- }
114
- }
115
- // 3. Remove instruction hints and team instructions
116
- const instructionFile = scope === 'project'
117
- ? join(process.cwd(), 'GEMINI.md')
118
- : join(homedir(), '.gemini', 'GEMINI.md');
119
- removeHintFromFile(instructionFile);
120
- removeTeamInstructionsFromFile(instructionFile);
121
- }
122
- }
@@ -1,25 +0,0 @@
1
- import type { AgentAdapter, CleanupManifest, McpServerEntry, SkillFile } from './types.js';
2
- import type { AgentDefinition } from './registry.js';
3
- /**
4
- * Generic adapter that handles any agent from the registry using its
5
- * skillsPaths, mcpConfigPath, and instructionFile metadata.
6
- *
7
- * This covers the long tail of community agents. Agents with custom behavior
8
- * (plugin systems, special config formats, usage stats reading) use their
9
- * own dedicated adapter classes instead.
10
- */
11
- export declare class GenericAgentAdapter implements AgentAdapter {
12
- name: string;
13
- slug: string;
14
- mcpProvidesSkills: boolean;
15
- private def;
16
- constructor(def: AgentDefinition);
17
- detect(): Promise<boolean>;
18
- supportsMcpScope(scope: 'project' | 'user'): boolean;
19
- supportsSkills(): boolean;
20
- writeMcpServers(servers: McpServerEntry[], _scope: 'project' | 'user'): Promise<void>;
21
- writeSkills(skills: SkillFile[], scope: 'project' | 'user'): Promise<void>;
22
- writeInstructionHint(hint: string, scope: 'project' | 'user'): Promise<void>;
23
- writeTeamInstructions(instructions: string, scope: 'project' | 'user'): Promise<void>;
24
- cleanup(scope: 'project' | 'user', manifest?: CleanupManifest): Promise<void>;
25
- }