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,229 +0,0 @@
1
- /**
2
- * Names of every skill the CLI ships as a built-in (written to user machines
3
- * on each sync from code, never pulled from or pushed to the workspace).
4
- *
5
- * Sync uses this list to:
6
- * 1. Skip these names when computing the local-vs-remote diff so they
7
- * never appear in pull/push/conflict plans.
8
- * 2. Warn the user (and offer cleanup) if a workspace skill with the same
9
- * name exists -- it would be shadowed by the built-in locally and is
10
- * probably a stale duplicate.
11
- *
12
- * Keep this list in sync with: intro-skill.ts (`runwork`) and the two
13
- * `buildXConversationSkill` functions below.
14
- */
15
- export const BUILT_IN_SKILL_NAMES = [
16
- 'runwork',
17
- 'share-conversation',
18
- 'save-conversation',
19
- ];
20
- /**
21
- * Built-in skills shipped by the runwork CLI on every sync. These are
22
- * fundamental capabilities every user should have regardless of which
23
- * workspace they belong to, so they live in the CLI codebase (like
24
- * the dynamic `runwork` intro skill in ./intro-skill.ts) rather than
25
- * as workspace-managed skills uploaded via the `save_skill` MCP tool.
26
- *
27
- * share-conversation: hand off the current AI conversation to a teammate
28
- * save-conversation: personal checkpoint of the current AI conversation
29
- *
30
- * Both are paired with the CLI commands `runwork share-convo` and
31
- * `runwork save-convo`. The skill body teaches the host LLM how to compose
32
- * the verbatim transcript + metadata and invoke the CLI.
33
- */
34
- const SHARE_CONVERSATION_CONTENT = `# Share Conversation Skill
35
-
36
- This skill hands off the user's CURRENT AI conversation (the live chat you and the user are in) to a teammate so they can resume it natively in their own AI agent.
37
-
38
- ## When to trigger
39
-
40
- The user said something like:
41
- - "share this convo with X"
42
- - "share this conversation with X@example.com"
43
- - "send this to Mehmet"
44
- - "hand off this thread to Alice"
45
- - "forward this conversation to user@motaword.com"
46
-
47
- X may be a workspace member name, an email, or a list. ASK if ambiguous.
48
-
49
- ## What you must do
50
-
51
- **Step 1: Confirm the recipients.** Read the user's message, extract the email(s) or name(s). Confirm them back to the user before sending. Multiple recipients are allowed (comma-separated or multiple --to flags).
52
-
53
- **Step 2: Compose a VERBATIM transcript of this conversation.** Write a complete markdown transcription of everything that has happened in this chat session so far. CRITICAL RULES:
54
-
55
- - Transcribe EVERY message: user, assistant, tool calls, tool results.
56
- - DO NOT summarize. DO NOT abbreviate. DO NOT skip anything you think is unimportant.
57
- - Preserve the actual content of every assistant message, every Bash command, every Read result, every Edit, every Web search, every reasoning block you can recall, in chronological order.
58
- - Use this structure:
59
-
60
- \`\`\`markdown
61
- # Conversation: <one-line title>
62
-
63
- ## Conversation
64
-
65
- ### Turn 1 - User
66
- <user's exact message>
67
-
68
- ### Turn 2 - Assistant
69
- <your exact response text>
70
-
71
- #### Tool call: Read
72
- **Input**: { "file_path": "..." }
73
- **Result**: <full result, truncated only if absolutely necessary>
74
-
75
- ### Turn 3 - User
76
- ...
77
- \`\`\`
78
-
79
- - If you literally cannot remember every single tool result word-for-word (e.g., very long files), include as much as you have in context. Note explicitly when content is partial: \`[truncated for brevity; original was N lines]\`.
80
- - The goal is full fidelity. If the context is too long, FAIL LOUDLY by telling the user "the conversation is too long to transcribe completely; please confirm you want me to proceed with a best-effort transcription" rather than silently dropping content.
81
-
82
- Write the transcript to a temp file: \`/tmp/runwork-share-transcript-<random>.md\`.
83
-
84
- **Step 3: Generate metadata.** Compose a JSON object with these fields based on this conversation's actual content:
85
-
86
- \`\`\`json
87
- {
88
- "workMode": "coding | research | writing | planning | ops | communication | general",
89
- "topicKeywords": ["3-5 short tags"],
90
- "lastUserIntent": "one sentence describing what the user was trying to do at handoff time",
91
- "primaryArtifacts": ["files / URLs / docs touched during the conversation"],
92
- "openQuestions": ["unresolved questions or decisions at handoff time"],
93
- "suggestedNextStep": "one sentence about what the recipient should do next",
94
- "language": "programming or natural language used"
95
- }
96
- \`\`\`
97
-
98
- Write this to \`/tmp/runwork-share-metadata-<random>.json\`.
99
-
100
- **Step 4: Invoke the CLI.** Run:
101
-
102
- \`\`\`bash
103
- runwork share-convo \\
104
- --to <email1> \\
105
- --to <email2> \\
106
- --transcript-file /tmp/runwork-share-transcript-<random>.md \\
107
- --metadata-file /tmp/runwork-share-metadata-<random>.json \\
108
- --title "<short title derived from the conversation>"
109
- \`\`\`
110
-
111
- The CLI auto-detects your host agent (Claude Code, Codex, etc.) and locates the native session file via \`$CLAUDE_CODE_SESSION_ID\` / \`$CODEX_THREAD_ID\` env vars. You typically don't need to pass \`--source-agent\` or \`--native-file\`.
112
-
113
- If the user provided a personal note for the recipient, also pass \`--note "<message>"\`.
114
-
115
- **Step 5: Tell the user.** Report the share ID and inbox URL returned by the CLI. Mention any non-workspace recipients that were invited.
116
-
117
- ## Fallback: when the CLI is not available
118
-
119
- If \`runwork\` is not on PATH (rare; the CLI ships with workspace onboarding), use the Runwork MCP \`share_conversation\` tool instead. Pass the transcript content inline (lossier - no native bundle - but always works).
120
-
121
- ## Safety
122
-
123
- - Never include credentials, API keys, or secrets in the transcript if you can identify them. Replace with \`[REDACTED]\`.
124
- - If the conversation contained sensitive customer data, confirm with the user before sharing.
125
- - Workspace permissions: non-member recipients trigger an invite, which requires the sender to have the \`members.invite\` permission (owner or admin). The CLI will error out clearly if not allowed.
126
-
127
- ## What this skill is NOT for
128
-
129
- - Sharing files, apps, links, or screenshots. Use \`share-app\` or copy-paste.
130
- - Continuing a paused conversation yourself. Use \`runwork resume <id>\` after the recipient runs it.
131
- - Sharing a different conversation that's not the one you're currently in. The transcript is built from your live context.
132
- `;
133
- const SAVE_CONVERSATION_CONTENT = `# Save Conversation Skill
134
-
135
- This skill creates a personal checkpoint of the user's CURRENT AI conversation. The user is the sole recipient; no notifications are sent to anyone else. They can resume it later in any of their AI agents on any of their machines.
136
-
137
- ## When to trigger
138
-
139
- The user said something like:
140
- - "save this convo"
141
- - "checkpoint this"
142
- - "bookmark this conversation"
143
- - "save this for later"
144
- - "save this for tomorrow"
145
- - "stash this so I can pick it up at home"
146
-
147
- If the user mentions ANOTHER PERSON or an email, use the \`share-conversation\` skill instead, not this one.
148
-
149
- ## What you must do
150
-
151
- **Step 1: Confirm the intent.** A simple confirmation is enough: "Saving this conversation as a personal checkpoint."
152
-
153
- **Step 2: Compose a VERBATIM transcript of this conversation.** Same rules as the share-conversation skill - faithful, complete, no summarization. Write to \`/tmp/runwork-save-transcript-<random>.md\`.
154
-
155
- \`\`\`markdown
156
- # Conversation: <one-line title>
157
-
158
- ## Conversation
159
-
160
- ### Turn 1 - User
161
- <exact user message>
162
-
163
- ### Turn 2 - Assistant
164
- <exact assistant response>
165
-
166
- #### Tool call: <name>
167
- **Input**: ...
168
- **Result**: ...
169
- \`\`\`
170
-
171
- **Step 3: Generate metadata.** Same shape as share-conversation:
172
-
173
- \`\`\`json
174
- {
175
- "workMode": "coding | research | writing | planning | ops | communication | general",
176
- "topicKeywords": ["3-5 tags"],
177
- "lastUserIntent": "what the user was trying to do at checkpoint time",
178
- "primaryArtifacts": ["files / URLs touched"],
179
- "openQuestions": ["unresolved items"],
180
- "suggestedNextStep": "what to do when picking back up",
181
- "language": "programming or natural language"
182
- }
183
- \`\`\`
184
-
185
- Write to \`/tmp/runwork-save-metadata-<random>.json\`.
186
-
187
- **Step 4: Invoke the CLI.**
188
-
189
- \`\`\`bash
190
- runwork save-convo \\
191
- --transcript-file /tmp/runwork-save-transcript-<random>.md \\
192
- --metadata-file /tmp/runwork-save-metadata-<random>.json \\
193
- --title "<short title>"
194
- \`\`\`
195
-
196
- If the user provided a personal note ("save this with note: pick up after lunch"), pass \`--note "<message>"\`.
197
-
198
- **Step 5: Tell the user.** Report the share ID. Mention they can resume from any machine with:
199
-
200
- \`\`\`
201
- runwork resume <share-id>
202
- \`\`\`
203
-
204
- ## Fallback: when the CLI is not available
205
-
206
- Use the Runwork MCP \`save_conversation\` tool with the transcript inline.
207
-
208
- ## What this skill is NOT for
209
-
210
- - Sharing with another person. Use \`share-conversation\`.
211
- - Saving files or code. Use the file system or git.
212
- - Note-taking. Use a notes app or write to disk directly.
213
- `;
214
- export function buildShareConversationSkill() {
215
- return {
216
- name: 'share-conversation',
217
- filename: 'share-conversation',
218
- content: SHARE_CONVERSATION_CONTENT,
219
- description: 'TRIGGERS when the user asks to share, send, hand off, or forward the CURRENT AI conversation (the live chat you are in right now) to a teammate by name or email. Examples: "share this convo with oytun@motaword.com", "send this conversation to Mehmet", "hand off this thread to Alice". Use ONLY when the user wants the OTHER PERSON to be able to continue this exact conversation in their own AI agent. Do NOT trigger for sharing files, apps, links, or unrelated content. For personal checkpoint (sharing to yourself), use the `save-conversation` skill instead.',
220
- };
221
- }
222
- export function buildSaveConversationSkill() {
223
- return {
224
- name: 'save-conversation',
225
- filename: 'save-conversation',
226
- content: SAVE_CONVERSATION_CONTENT,
227
- description: 'TRIGGERS when the user wants to save, checkpoint, bookmark, or stash the CURRENT AI conversation for themselves (not for a teammate). Examples: "save this convo", "checkpoint this", "bookmark this conversation", "save this for later", "save this so I can pick it up tomorrow", "save this for my other machine". Use ONLY when the user is the sole intended recipient. For sharing with a teammate (different person), use the `share-conversation` skill instead.',
228
- };
229
- }
@@ -1,35 +0,0 @@
1
- import type { AgentAdapter, AgentConfigOverride, AgentUsageStats, CleanupManifest, McpServerEntry, SkillFile } from './types.js';
2
- import { mergeMarkerless } from './defaults-merge.js';
3
- export { mergeMarkerless };
4
- export declare class CursorAdapter implements AgentAdapter {
5
- name: string;
6
- slug: string;
7
- mcpProvidesSkills: boolean;
8
- detect(): Promise<boolean>;
9
- supportsMcpScope(_scope: 'project' | 'user'): boolean;
10
- supportsSkills(): boolean;
11
- writeMcpServers(servers: McpServerEntry[], scope: 'project' | 'user'): Promise<void>;
12
- writeSkills(skills: SkillFile[], scope: 'project' | 'user'): Promise<void>;
13
- writeInstructionHint(hint: string, scope: 'project' | 'user'): Promise<void>;
14
- writeTeamInstructions(instructions: string, scope: 'project' | 'user'): Promise<void>;
15
- writeAgentConfig(config: AgentConfigOverride, scope: 'project' | 'user', baseline?: {
16
- allow?: string[];
17
- deny?: string[];
18
- }): Promise<void>;
19
- readManagedBlock(_scope: 'project' | 'user'): Promise<{
20
- allow?: string[];
21
- deny?: string[];
22
- } | undefined>;
23
- /**
24
- * Merge domains into Cursor's sandbox network policy (~/.cursor/sandbox.json).
25
- * Schema per https://cursor.com/docs/reference/sandbox:
26
- * { "networkPolicy": { "default": "allow" | "deny", "allow": [...], "deny": [...] } }
27
- * Only appends to the allow list; never flips `default` (respects user's existing policy).
28
- * If the user has `default: allow`, all traffic is already permitted and entries are harmless.
29
- * If the user has `default: deny`, our entries take effect and unblock Runwork.
30
- */
31
- private mergeSandboxAllowlist;
32
- cleanup(scope: 'project' | 'user', manifest?: CleanupManifest): Promise<void>;
33
- readUsageStats(lastSyncAt: string | null): Promise<AgentUsageStats | null>;
34
- readVersion(): Promise<string | null>;
35
- }
@@ -1,294 +0,0 @@
1
- import { existsSync, mkdirSync, readdirSync, unlinkSync, writeFileSync } from 'fs';
2
- import { join } from 'path';
3
- import { homedir, platform } from 'os';
4
- import { execFileSync } from '../utils/subprocess.js';
5
- import { querySqlite, openWritableSqlite } from '../utils/sqlite.js';
6
- import { whichBinary } from '../utils/which.js';
7
- import { mergeJsonMcpServers, removeRunworkMcpServers, readJsonConfig, writeJsonConfig } from './utils/json-config.js';
8
- import { mergeMarkerless } from './defaults-merge.js';
9
- // Re-exported for backward compatibility with existing importers/tests.
10
- export { mergeMarkerless };
11
- export class CursorAdapter {
12
- name = 'Cursor';
13
- slug = 'cursor';
14
- mcpProvidesSkills = true;
15
- async detect() {
16
- const os = platform();
17
- if (os === 'darwin' && existsSync('/Applications/Cursor.app'))
18
- return true;
19
- return !!whichBinary('cursor');
20
- }
21
- supportsMcpScope(_scope) {
22
- return true;
23
- }
24
- supportsSkills() {
25
- return true;
26
- }
27
- async writeMcpServers(servers, scope) {
28
- const filePath = scope === 'project'
29
- ? join(process.cwd(), '.cursor', 'mcp.json')
30
- : join(homedir(), '.cursor', 'mcp.json');
31
- const entries = {};
32
- for (const s of servers) {
33
- entries[s.name] = {
34
- url: s.url,
35
- ...(s.headers ? { headers: s.headers } : {}),
36
- };
37
- }
38
- mergeJsonMcpServers(filePath, entries, 'mcpServers');
39
- }
40
- async writeSkills(skills, scope) {
41
- if (scope === 'user')
42
- return;
43
- const rulesDir = join(process.cwd(), '.cursor', 'rules');
44
- mkdirSync(rulesDir, { recursive: true });
45
- for (const skill of skills) {
46
- const mdcContent = `---
47
- description: "${skill.description}"
48
- alwaysApply: false
49
- ---
50
-
51
- ${skill.content}`;
52
- writeFileSync(join(rulesDir, `${skill.filename}.mdc`), mdcContent);
53
- }
54
- }
55
- async writeInstructionHint(hint, scope) {
56
- // Cursor uses rules files, not a central instruction file
57
- // Write as a rule file that's always loaded
58
- const filePath = scope === 'project'
59
- ? join(process.cwd(), '.cursor', 'rules', 'runwork.mdc')
60
- : join(homedir(), '.cursor', 'rules', 'runwork.mdc');
61
- const mdcContent = `---\ndescription: "Runwork workspace connection"\nalwaysApply: true\n---\n\n${hint}`;
62
- mkdirSync(join(filePath, '..'), { recursive: true });
63
- writeFileSync(filePath, mdcContent);
64
- }
65
- async writeTeamInstructions(instructions, scope) {
66
- const filePath = scope === 'project'
67
- ? join(process.cwd(), '.cursor', 'rules', 'runwork-team.mdc')
68
- : join(homedir(), '.cursor', 'rules', 'runwork-team.mdc');
69
- const mdcContent = `---\ndescription: "Team instructions from Runwork workspace"\nalwaysApply: true\n---\n\n${instructions}`;
70
- mkdirSync(join(filePath, '..'), { recursive: true });
71
- writeFileSync(filePath, mdcContent);
72
- }
73
- // ── Agent config (model, permissions via SQLite) ────────────────────
74
- async writeAgentConfig(config, scope, baseline) {
75
- if (scope !== 'user')
76
- return;
77
- // Sandbox network allowlist: merge into ~/.cursor/cli-config.json
78
- if (config.networkAllowlist?.length) {
79
- this.mergeSandboxAllowlist(config.networkAllowlist);
80
- }
81
- const os = platform();
82
- let globalDbPath;
83
- if (os === 'darwin') {
84
- globalDbPath = join(homedir(), 'Library', 'Application Support', 'Cursor', 'User', 'globalStorage', 'state.vscdb');
85
- }
86
- else if (os === 'win32') {
87
- globalDbPath = join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Cursor', 'User', 'globalStorage', 'state.vscdb');
88
- }
89
- else {
90
- globalDbPath = join(homedir(), '.config', 'Cursor', 'User', 'globalStorage', 'state.vscdb');
91
- }
92
- if (!existsSync(globalDbPath))
93
- return;
94
- const db = openWritableSqlite(globalDbPath);
95
- if (!db) {
96
- // SQLite runtime unavailable (older Node without node:sqlite, or not running
97
- // under Bun) or the database is locked/inaccessible. Cursor config write is
98
- // best-effort, so we silently skip.
99
- return;
100
- }
101
- try {
102
- const storageKey = 'src.vs.platform.reactivestorage.browser.reactiveStorageServiceImpl.persistentStorage.applicationUser';
103
- const row = db.prepare(`SELECT value FROM ItemTable WHERE key = ?`).get(storageKey);
104
- if (!row?.value)
105
- return;
106
- const data = JSON.parse(row.value);
107
- if (config.modelPreference) {
108
- if (!data.aiSettings)
109
- data.aiSettings = {};
110
- data.aiSettings.composerModel = config.modelPreference;
111
- }
112
- if (config.permissionRules && data.composerState) {
113
- if (config.permissionRules.allow) {
114
- data.composerState.yoloCommandAllowlist = mergeMarkerless(data.composerState.yoloCommandAllowlist ?? [], baseline?.allow ?? [], config.permissionRules.allow);
115
- }
116
- if (config.permissionRules.deny) {
117
- data.composerState.yoloCommandDenylist = mergeMarkerless(data.composerState.yoloCommandDenylist ?? [], baseline?.deny ?? [], config.permissionRules.deny);
118
- }
119
- }
120
- try {
121
- db.prepare(`UPDATE ItemTable SET value = ? WHERE key = ?`).run(JSON.stringify(data), storageKey);
122
- }
123
- catch {
124
- // Write failed (db locked while Cursor is running). Best-effort skip.
125
- }
126
- }
127
- finally {
128
- db.close();
129
- }
130
- }
131
- async readManagedBlock(_scope) {
132
- // Cursor's yoloCommandAllowlist has no marker — there's no way to read a
133
- // managed-subset from disk. The sync loop relies on the `baseline` arg
134
- // (state.lastInjected) passed into writeAgentConfig instead.
135
- return undefined;
136
- }
137
- /**
138
- * Merge domains into Cursor's sandbox network policy (~/.cursor/sandbox.json).
139
- * Schema per https://cursor.com/docs/reference/sandbox:
140
- * { "networkPolicy": { "default": "allow" | "deny", "allow": [...], "deny": [...] } }
141
- * Only appends to the allow list; never flips `default` (respects user's existing policy).
142
- * If the user has `default: allow`, all traffic is already permitted and entries are harmless.
143
- * If the user has `default: deny`, our entries take effect and unblock Runwork.
144
- */
145
- mergeSandboxAllowlist(domains) {
146
- const configPath = join(homedir(), '.cursor', 'sandbox.json');
147
- try {
148
- const config = readJsonConfig(configPath);
149
- if (!config.networkPolicy)
150
- config.networkPolicy = {};
151
- const policy = config.networkPolicy;
152
- const existing = (policy.allow ?? []);
153
- const merged = new Set(existing);
154
- for (const domain of domains) {
155
- merged.add(domain);
156
- }
157
- policy.allow = [...merged];
158
- writeJsonConfig(configPath, config);
159
- }
160
- catch {
161
- // Best-effort: sandbox config write is non-fatal
162
- }
163
- }
164
- // ── Cleanup (uninstall) ────────────────────────────────────────────
165
- async cleanup(scope, manifest) {
166
- // 1. Remove MCP entries
167
- const mcpPath = scope === 'project'
168
- ? join(process.cwd(), '.cursor', 'mcp.json')
169
- : join(homedir(), '.cursor', 'mcp.json');
170
- removeRunworkMcpServers(mcpPath, 'mcpServers');
171
- // 2. Remove rule files (skills, hint, team instructions)
172
- const rulesDir = scope === 'project'
173
- ? join(process.cwd(), '.cursor', 'rules')
174
- : join(homedir(), '.cursor', 'rules');
175
- if (existsSync(rulesDir)) {
176
- // Remove runwork.mdc and runwork-team.mdc
177
- for (const file of ['runwork.mdc', 'runwork-team.mdc']) {
178
- const filePath = join(rulesDir, file);
179
- if (existsSync(filePath)) {
180
- try {
181
- unlinkSync(filePath);
182
- }
183
- catch { /* best-effort */ }
184
- }
185
- }
186
- // Remove only skill .mdc files that we synced
187
- if (manifest?.skillFilenames.length) {
188
- const allowed = new Set(manifest.skillFilenames.map(f => `${f}.mdc`));
189
- for (const entry of readdirSync(rulesDir)) {
190
- if (allowed.has(entry)) {
191
- try {
192
- unlinkSync(join(rulesDir, entry));
193
- }
194
- catch { /* best-effort */ }
195
- }
196
- }
197
- }
198
- }
199
- }
200
- // ── Usage stats (passive, best-effort) ─────────────────────────────
201
- async readUsageStats(lastSyncAt) {
202
- try {
203
- const sinceMs = lastSyncAt ? new Date(lastSyncAt).getTime() : 0;
204
- // Query composerData from state.vscdb (cursorDiskKV table)
205
- const os = platform();
206
- let globalDbPath;
207
- if (os === 'darwin') {
208
- globalDbPath = join(homedir(), 'Library', 'Application Support', 'Cursor', 'User', 'globalStorage', 'state.vscdb');
209
- }
210
- else if (os === 'win32') {
211
- globalDbPath = join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Cursor', 'User', 'globalStorage', 'state.vscdb');
212
- }
213
- else {
214
- globalDbPath = join(homedir(), '.config', 'Cursor', 'User', 'globalStorage', 'state.vscdb');
215
- }
216
- let sessionCount = 0;
217
- let totalLinesAdded = 0;
218
- let totalLinesRemoved = 0;
219
- let latestActivity = 0;
220
- let agenticSessions = 0;
221
- let chatSessions = 0;
222
- if (existsSync(globalDbPath)) {
223
- const composerResult = querySqlite(globalDbPath, `SELECT value FROM cursorDiskKV WHERE key LIKE 'composerData-%'`);
224
- if (composerResult) {
225
- for (const line of composerResult.split('\n')) {
226
- if (!line.trim())
227
- continue;
228
- try {
229
- const data = JSON.parse(line);
230
- const createdAt = data.createdAt ?? 0;
231
- if (createdAt > sinceMs) {
232
- sessionCount++;
233
- totalLinesAdded += data.totalLinesAdded ?? 0;
234
- totalLinesRemoved += data.totalLinesRemoved ?? 0;
235
- if (data.unifiedMode === 'agent' || data.isAgentic)
236
- agenticSessions++;
237
- else
238
- chatSessions++;
239
- }
240
- if (createdAt > latestActivity)
241
- latestActivity = createdAt;
242
- }
243
- catch {
244
- continue;
245
- }
246
- }
247
- }
248
- }
249
- // Check scored_commits for AI contribution data
250
- // ~/.cursor/ is consistent across platforms (unlike Application Support paths)
251
- const trackingDbPath = join(homedir(), '.cursor', 'ai-tracking', 'ai-code-tracking.db');
252
- let aiCommitCount = 0;
253
- let avgAiPercent = 0;
254
- if (existsSync(trackingDbPath)) {
255
- const sinceSec = Math.floor(sinceMs / 1000);
256
- const commitResult = querySqlite(trackingDbPath, `SELECT count(*), avg(CAST(v2AiPercentage AS REAL)) FROM scored_commits WHERE scoredAt > ${sinceSec}`);
257
- if (commitResult) {
258
- const parts = commitResult.split('|');
259
- aiCommitCount = parseInt(parts[0]) || 0;
260
- avgAiPercent = parseFloat(parts[1]) || 0;
261
- }
262
- }
263
- if (sessionCount === 0 && latestActivity <= sinceMs)
264
- return null;
265
- return {
266
- hasNewActivity: sessionCount > 0,
267
- sessionCount,
268
- messageCount: 0,
269
- toolCallCount: 0,
270
- tokensUsed: 0,
271
- aiLinesAdded: totalLinesAdded,
272
- aiLinesRemoved: totalLinesRemoved,
273
- lastActiveAt: latestActivity > 0 ? new Date(latestActivity).toISOString() : null,
274
- extra: {
275
- agenticSessions,
276
- chatSessions,
277
- ...(aiCommitCount > 0 ? { aiCommitCount, avgAiContributionPercent: Math.round(avgAiPercent) } : {}),
278
- },
279
- };
280
- }
281
- catch {
282
- return null;
283
- }
284
- }
285
- async readVersion() {
286
- try {
287
- const output = execFileSync('cursor', ['--version'], { stdio: 'pipe' }).toString().trim();
288
- return output;
289
- }
290
- catch {
291
- return null;
292
- }
293
- }
294
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Baked-in default permission rules that `runwork sync` injects into each
3
- * supported agent's configuration.
4
- *
5
- * Defaults are user-scope only. They merge with team-managed rules from the
6
- * workspace admin and are tracked in `~/.runwork/setup.json` under
7
- * `agentDefaults[slug]` so that:
8
- * 1. Removals stick: if a user deletes an injected entry, it never returns.
9
- * 2. Newly added defaults flow in: CLI upgrades that ship more defaults
10
- * auto-apply on the next sync.
11
- * 3. Removed defaults disappear: shrinking the set here also removes the
12
- * entries from users' on-disk config on next sync.
13
- * 4. Tool removal resets state: `runwork agents remove <slug>` clears the
14
- * per-agent state, so re-adding the tool starts from a clean bootstrap.
15
- *
16
- * Only agents whose permission model maps cleanly to command-pattern allow/deny
17
- * lists appear here. Codex, Gemini, Cline, and Claude Desktop are intentionally
18
- * absent (their config formats are toggle-based or tool-name-based and do not
19
- * fit). Network domain allowlisting for those agents is handled separately via
20
- * AgentConfigOverride.networkAllowlist in sync.ts.
21
- */
22
- export interface BakedDefaults {
23
- allow: string[];
24
- deny: string[];
25
- }
26
- export declare const RUNWORK_AGENT_DEFAULTS: Record<string, BakedDefaults>;
27
- /** Schema version recorded in setup.json. Bump when default-injection semantics change. */
28
- export declare const AGENT_DEFAULTS_SCHEMA_VERSION = 1;
29
- /** Slugs that have baked-in defaults. */
30
- export declare function hasBakedDefaults(slug: string): boolean;
@@ -1,67 +0,0 @@
1
- /**
2
- * Baked-in default permission rules that `runwork sync` injects into each
3
- * supported agent's configuration.
4
- *
5
- * Defaults are user-scope only. They merge with team-managed rules from the
6
- * workspace admin and are tracked in `~/.runwork/setup.json` under
7
- * `agentDefaults[slug]` so that:
8
- * 1. Removals stick: if a user deletes an injected entry, it never returns.
9
- * 2. Newly added defaults flow in: CLI upgrades that ship more defaults
10
- * auto-apply on the next sync.
11
- * 3. Removed defaults disappear: shrinking the set here also removes the
12
- * entries from users' on-disk config on next sync.
13
- * 4. Tool removal resets state: `runwork agents remove <slug>` clears the
14
- * per-agent state, so re-adding the tool starts from a clean bootstrap.
15
- *
16
- * Only agents whose permission model maps cleanly to command-pattern allow/deny
17
- * lists appear here. Codex, Gemini, Cline, and Claude Desktop are intentionally
18
- * absent (their config formats are toggle-based or tool-name-based and do not
19
- * fit). Network domain allowlisting for those agents is handled separately via
20
- * AgentConfigOverride.networkAllowlist in sync.ts.
21
- */
22
- export const RUNWORK_AGENT_DEFAULTS = {
23
- 'claude-code': {
24
- allow: [
25
- 'Bash(runwork *)',
26
- 'Bash(runwork-cli *)',
27
- 'Bash(git status)',
28
- 'Bash(git diff:*)',
29
- 'Bash(git log:*)',
30
- 'Bash(git branch:*)',
31
- 'Bash(git show:*)',
32
- 'Bash(ls:*)',
33
- 'Bash(pwd)',
34
- 'Bash(cat:*)',
35
- ],
36
- deny: [
37
- 'Bash(rm -rf *)',
38
- 'Bash(rm -rf /*)',
39
- 'Bash(sudo rm *)',
40
- ],
41
- },
42
- 'cursor': {
43
- allow: [
44
- 'runwork',
45
- 'runwork *',
46
- 'runwork-cli',
47
- 'runwork-cli *',
48
- 'git status',
49
- 'git diff',
50
- 'git log',
51
- 'git branch',
52
- 'ls',
53
- 'pwd',
54
- 'cat',
55
- ],
56
- deny: [
57
- 'rm -rf *',
58
- 'sudo *',
59
- ],
60
- },
61
- };
62
- /** Schema version recorded in setup.json. Bump when default-injection semantics change. */
63
- export const AGENT_DEFAULTS_SCHEMA_VERSION = 1;
64
- /** Slugs that have baked-in defaults. */
65
- export function hasBakedDefaults(slug) {
66
- return slug in RUNWORK_AGENT_DEFAULTS;
67
- }