@alwaysmeticulous/cli 2.326.0 → 2.327.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 (450) hide show
  1. package/dist/__tests__/commonjs-dependencies.spec.d.ts +2 -0
  2. package/dist/__tests__/commonjs-dependencies.spec.d.ts.map +1 -0
  3. package/dist/__tests__/commonjs-dependencies.spec.js +82 -0
  4. package/dist/__tests__/commonjs-dependencies.spec.js.map +1 -0
  5. package/dist/command-utils/__tests__/parse-rewrites.spec.js +2 -2
  6. package/dist/command-utils/__tests__/parse-rewrites.spec.js.map +1 -1
  7. package/dist/command-utils/__tests__/warn-regex-rewrites.spec.js +2 -2
  8. package/dist/command-utils/__tests__/warn-regex-rewrites.spec.js.map +1 -1
  9. package/dist/command-utils/common-options.js +2 -2
  10. package/dist/command-utils/common-options.js.map +1 -1
  11. package/dist/command-utils/detect-upload-mode.js +2 -2
  12. package/dist/command-utils/detect-upload-mode.js.map +1 -1
  13. package/dist/command-utils/detect-upload-mode.spec.js +2 -2
  14. package/dist/command-utils/detect-upload-mode.spec.js.map +1 -1
  15. package/dist/command-utils/download-session.utils.js +2 -2
  16. package/dist/command-utils/download-session.utils.js.map +1 -1
  17. package/dist/command-utils/json-args.js +2 -2
  18. package/dist/command-utils/json-args.js.map +1 -1
  19. package/dist/command-utils/json-args.spec.js +2 -2
  20. package/dist/command-utils/json-args.spec.js.map +1 -1
  21. package/dist/command-utils/parse-container-env.js +2 -2
  22. package/dist/command-utils/parse-container-env.js.map +1 -1
  23. package/dist/command-utils/parse-rewrites.js +2 -2
  24. package/dist/command-utils/parse-rewrites.js.map +1 -1
  25. package/dist/command-utils/print-json.js +2 -2
  26. package/dist/command-utils/print-json.js.map +1 -1
  27. package/dist/command-utils/sentry.utils.js +2 -2
  28. package/dist/command-utils/sentry.utils.js.map +1 -1
  29. package/dist/command-utils/warn-regex-rewrites.js +2 -2
  30. package/dist/command-utils/warn-regex-rewrites.js.map +1 -1
  31. package/dist/commands/agent/agent-review-writes.command.spec.js +2 -2
  32. package/dist/commands/agent/agent-review-writes.command.spec.js.map +1 -1
  33. package/dist/commands/agent/build-git-options.js +2 -2
  34. package/dist/commands/agent/build-git-options.js.map +1 -1
  35. package/dist/commands/agent/build-git-options.spec.js +2 -2
  36. package/dist/commands/agent/build-git-options.spec.js.map +1 -1
  37. package/dist/commands/agent/coverage-columns.util.js +2 -2
  38. package/dist/commands/agent/coverage-columns.util.js.map +1 -1
  39. package/dist/commands/agent/create-diff-comment.command.js +2 -2
  40. package/dist/commands/agent/create-diff-comment.command.js.map +1 -1
  41. package/dist/commands/agent/diff-comment-write.utils.js +2 -2
  42. package/dist/commands/agent/diff-comment-write.utils.js.map +1 -1
  43. package/dist/commands/agent/diff-comments.command.js +2 -2
  44. package/dist/commands/agent/diff-comments.command.js.map +1 -1
  45. package/dist/commands/agent/diff-comments.command.spec.js +2 -2
  46. package/dist/commands/agent/diff-comments.command.spec.js.map +1 -1
  47. package/dist/commands/agent/ignore-diff.command.js +2 -2
  48. package/dist/commands/agent/ignore-diff.command.js.map +1 -1
  49. package/dist/commands/agent/index.js +2 -2
  50. package/dist/commands/agent/index.js.map +1 -1
  51. package/dist/commands/agent/js-coverage-diff.command.js +2 -2
  52. package/dist/commands/agent/js-coverage-diff.command.js.map +1 -1
  53. package/dist/commands/agent/js-coverage.command.handler.spec.js +2 -2
  54. package/dist/commands/agent/js-coverage.command.handler.spec.js.map +1 -1
  55. package/dist/commands/agent/js-coverage.command.js +2 -2
  56. package/dist/commands/agent/js-coverage.command.js.map +1 -1
  57. package/dist/commands/agent/js-coverage.command.spec.js +2 -2
  58. package/dist/commands/agent/js-coverage.command.spec.js.map +1 -1
  59. package/dist/commands/agent/reject-diff.command.js +2 -2
  60. package/dist/commands/agent/reject-diff.command.js.map +1 -1
  61. package/dist/commands/agent/reject-diff.command.spec.js +2 -2
  62. package/dist/commands/agent/reject-diff.command.spec.js.map +1 -1
  63. package/dist/commands/agent/reply-to-diff-comment.command.js +2 -2
  64. package/dist/commands/agent/reply-to-diff-comment.command.js.map +1 -1
  65. package/dist/commands/agent/screenshot-dom-diff.command.js +2 -2
  66. package/dist/commands/agent/screenshot-dom-diff.command.js.map +1 -1
  67. package/dist/commands/agent/screenshot-image-files.command.js +2 -2
  68. package/dist/commands/agent/screenshot-image-files.command.js.map +1 -1
  69. package/dist/commands/agent/screenshot-image.command.js +2 -2
  70. package/dist/commands/agent/screenshot-image.command.js.map +1 -1
  71. package/dist/commands/agent/sessions.command.js +2 -2
  72. package/dist/commands/agent/sessions.command.js.map +1 -1
  73. package/dist/commands/agent/sessions.command.spec.js +2 -2
  74. package/dist/commands/agent/sessions.command.spec.js.map +1 -1
  75. package/dist/commands/agent/submit-feedback.command.js +2 -2
  76. package/dist/commands/agent/submit-feedback.command.js.map +1 -1
  77. package/dist/commands/agent/test-run-check.command.js +2 -2
  78. package/dist/commands/agent/test-run-check.command.js.map +1 -1
  79. package/dist/commands/agent/test-run-check.command.spec.js +2 -2
  80. package/dist/commands/agent/test-run-check.command.spec.js.map +1 -1
  81. package/dist/commands/agent/test-run-diffs.command.js +2 -2
  82. package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
  83. package/dist/commands/agent/test-run-diffs.command.spec.js +2 -2
  84. package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
  85. package/dist/commands/agent/test-run-diffs.utils.js +2 -2
  86. package/dist/commands/agent/test-run-diffs.utils.js.map +1 -1
  87. package/dist/commands/agent/test-run-diffs.utils.spec.js +2 -2
  88. package/dist/commands/agent/test-run-diffs.utils.spec.js.map +1 -1
  89. package/dist/commands/agent/test-run-for-commit.command.js +2 -2
  90. package/dist/commands/agent/test-run-for-commit.command.js.map +1 -1
  91. package/dist/commands/agent/timeline.command.js +2 -2
  92. package/dist/commands/agent/timeline.command.js.map +1 -1
  93. package/dist/commands/agent/timeline.command.spec.js +2 -2
  94. package/dist/commands/agent/timeline.command.spec.js.map +1 -1
  95. package/dist/commands/agent/trigger-test-run.command.js +2 -2
  96. package/dist/commands/agent/trigger-test-run.command.js.map +1 -1
  97. package/dist/commands/agent/trigger-test-run.command.spec.js +2 -2
  98. package/dist/commands/agent/trigger-test-run.command.spec.js.map +1 -1
  99. package/dist/commands/agent/upload-build.command.js +2 -2
  100. package/dist/commands/agent/upload-build.command.js.map +1 -1
  101. package/dist/commands/all-commands.d.ts.map +1 -1
  102. package/dist/commands/all-commands.js +8 -6
  103. package/dist/commands/all-commands.js.map +1 -1
  104. package/dist/commands/auth/__tests__/get-project.command.spec.js +2 -2
  105. package/dist/commands/auth/__tests__/get-project.command.spec.js.map +1 -1
  106. package/dist/commands/auth/__tests__/list-projects.command.spec.js +2 -2
  107. package/dist/commands/auth/__tests__/list-projects.command.spec.js.map +1 -1
  108. package/dist/commands/auth/__tests__/login.command.spec.js +2 -2
  109. package/dist/commands/auth/__tests__/login.command.spec.js.map +1 -1
  110. package/dist/commands/auth/__tests__/logout.command.spec.js +2 -2
  111. package/dist/commands/auth/__tests__/logout.command.spec.js.map +1 -1
  112. package/dist/commands/auth/__tests__/set-project.command.spec.js +2 -2
  113. package/dist/commands/auth/__tests__/set-project.command.spec.js.map +1 -1
  114. package/dist/commands/auth/__tests__/whoami.command.spec.js +2 -2
  115. package/dist/commands/auth/__tests__/whoami.command.spec.js.map +1 -1
  116. package/dist/commands/auth/get-project.command.js +2 -2
  117. package/dist/commands/auth/get-project.command.js.map +1 -1
  118. package/dist/commands/auth/index.js +2 -2
  119. package/dist/commands/auth/index.js.map +1 -1
  120. package/dist/commands/auth/list-projects.command.js +2 -2
  121. package/dist/commands/auth/list-projects.command.js.map +1 -1
  122. package/dist/commands/auth/login.command.js +2 -2
  123. package/dist/commands/auth/login.command.js.map +1 -1
  124. package/dist/commands/auth/logout.command.js +2 -2
  125. package/dist/commands/auth/logout.command.js.map +1 -1
  126. package/dist/commands/auth/set-project.command.js +2 -2
  127. package/dist/commands/auth/set-project.command.js.map +1 -1
  128. package/dist/commands/auth/whoami.command.js +2 -2
  129. package/dist/commands/auth/whoami.command.js.map +1 -1
  130. package/dist/commands/ci/__tests__/label-commit.utils.spec.js +2 -2
  131. package/dist/commands/ci/__tests__/label-commit.utils.spec.js.map +1 -1
  132. package/dist/commands/ci/__tests__/session-filter.utils.spec.js +2 -2
  133. package/dist/commands/ci/__tests__/session-filter.utils.spec.js.map +1 -1
  134. package/dist/commands/ci/agent-test.command.js +2 -2
  135. package/dist/commands/ci/agent-test.command.js.map +1 -1
  136. package/dist/commands/ci/deprecated-trigger-options.js +2 -2
  137. package/dist/commands/ci/deprecated-trigger-options.js.map +1 -1
  138. package/dist/commands/ci/index.js +2 -2
  139. package/dist/commands/ci/index.js.map +1 -1
  140. package/dist/commands/ci/label-commit.command.js +2 -2
  141. package/dist/commands/ci/label-commit.command.js.map +1 -1
  142. package/dist/commands/ci/label-commit.core.js +2 -2
  143. package/dist/commands/ci/label-commit.core.js.map +1 -1
  144. package/dist/commands/ci/label-commit.types.js +2 -2
  145. package/dist/commands/ci/label-commit.types.js.map +1 -1
  146. package/dist/commands/ci/label-commit.utils.js +2 -2
  147. package/dist/commands/ci/label-commit.utils.js.map +1 -1
  148. package/dist/commands/ci/prepare.command.js +2 -2
  149. package/dist/commands/ci/prepare.command.js.map +1 -1
  150. package/dist/commands/ci/resolve-git-options.js +2 -2
  151. package/dist/commands/ci/resolve-git-options.js.map +1 -1
  152. package/dist/commands/ci/run-local.command.js +2 -2
  153. package/dist/commands/ci/run-local.command.js.map +1 -1
  154. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js +2 -2
  155. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
  156. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js +2 -2
  157. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js.map +1 -1
  158. package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js +2 -2
  159. package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js.map +1 -1
  160. package/dist/commands/ci/run.command.js +2 -2
  161. package/dist/commands/ci/run.command.js.map +1 -1
  162. package/dist/commands/ci/session-filter.utils.js +2 -2
  163. package/dist/commands/ci/session-filter.utils.js.map +1 -1
  164. package/dist/commands/ci/start-tunnel.command.js +2 -2
  165. package/dist/commands/ci/start-tunnel.command.js.map +1 -1
  166. package/dist/commands/ci/trigger-test-run.core.js +2 -2
  167. package/dist/commands/ci/trigger-test-run.core.js.map +1 -1
  168. package/dist/commands/ci/trigger-test-run.types.js +2 -2
  169. package/dist/commands/ci/trigger-test-run.types.js.map +1 -1
  170. package/dist/commands/ci/upload-asset-chunk.command.js +2 -2
  171. package/dist/commands/ci/upload-asset-chunk.command.js.map +1 -1
  172. package/dist/commands/ci/upload-assets.command.js +2 -2
  173. package/dist/commands/ci/upload-assets.command.js.map +1 -1
  174. package/dist/commands/ci/upload-container.command.js +2 -2
  175. package/dist/commands/ci/upload-container.command.js.map +1 -1
  176. package/dist/commands/crawl.command.js +2 -2
  177. package/dist/commands/crawl.command.js.map +1 -1
  178. package/dist/commands/debug/clean-workspaces.js +2 -2
  179. package/dist/commands/debug/clean-workspaces.js.map +1 -1
  180. package/dist/commands/debug/index.js +2 -2
  181. package/dist/commands/debug/index.js.map +1 -1
  182. package/dist/commands/debug/present-workspace.js +2 -2
  183. package/dist/commands/debug/present-workspace.js.map +1 -1
  184. package/dist/commands/debug/project-worktree.js +2 -2
  185. package/dist/commands/debug/project-worktree.js.map +1 -1
  186. package/dist/commands/deprecated-aliases.js +2 -2
  187. package/dist/commands/deprecated-aliases.js.map +1 -1
  188. package/dist/commands/download/index.js +2 -2
  189. package/dist/commands/download/index.js.map +1 -1
  190. package/dist/commands/download/replay.command.js +2 -2
  191. package/dist/commands/download/replay.command.js.map +1 -1
  192. package/dist/commands/download/session.command.js +2 -2
  193. package/dist/commands/download/session.command.js.map +1 -1
  194. package/dist/commands/download/test-run.command.js +2 -2
  195. package/dist/commands/download/test-run.command.js.map +1 -1
  196. package/dist/commands/local/get-edited-files.utils.js +2 -2
  197. package/dist/commands/local/get-edited-files.utils.js.map +1 -1
  198. package/dist/commands/local/get-edited-files.utils.spec.js +2 -2
  199. package/dist/commands/local/get-edited-files.utils.spec.js.map +1 -1
  200. package/dist/commands/local/index.js +2 -2
  201. package/dist/commands/local/index.js.map +1 -1
  202. package/dist/commands/local/relevant-sessions.command.js +2 -2
  203. package/dist/commands/local/relevant-sessions.command.js.map +1 -1
  204. package/dist/commands/onboard/__tests__/build-context.spec.d.ts +2 -0
  205. package/dist/commands/onboard/__tests__/build-context.spec.d.ts.map +1 -0
  206. package/dist/commands/onboard/__tests__/build-context.spec.js +179 -0
  207. package/dist/commands/onboard/__tests__/build-context.spec.js.map +1 -0
  208. package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts +2 -0
  209. package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts.map +1 -0
  210. package/dist/commands/onboard/__tests__/check-vcs-link.spec.js +164 -0
  211. package/dist/commands/onboard/__tests__/check-vcs-link.spec.js.map +1 -0
  212. package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts +2 -0
  213. package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts.map +1 -0
  214. package/dist/commands/onboard/__tests__/codex-mcp.spec.js +73 -0
  215. package/dist/commands/onboard/__tests__/codex-mcp.spec.js.map +1 -0
  216. package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts +2 -0
  217. package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts.map +1 -0
  218. package/dist/commands/onboard/__tests__/detect-framework.spec.js +277 -0
  219. package/dist/commands/onboard/__tests__/detect-framework.spec.js.map +1 -0
  220. package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts +2 -0
  221. package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts.map +1 -0
  222. package/dist/commands/onboard/__tests__/git-repo-info.spec.js +109 -0
  223. package/dist/commands/onboard/__tests__/git-repo-info.spec.js.map +1 -0
  224. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts +2 -0
  225. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts.map +1 -0
  226. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js +157 -0
  227. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js.map +1 -0
  228. package/dist/commands/onboard/__tests__/install-skills.spec.d.ts +2 -0
  229. package/dist/commands/onboard/__tests__/install-skills.spec.d.ts.map +1 -0
  230. package/dist/commands/onboard/__tests__/install-skills.spec.js +158 -0
  231. package/dist/commands/onboard/__tests__/install-skills.spec.js.map +1 -0
  232. package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts +2 -0
  233. package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts.map +1 -0
  234. package/dist/commands/onboard/__tests__/materialize-workspace.spec.js +116 -0
  235. package/dist/commands/onboard/__tests__/materialize-workspace.spec.js.map +1 -0
  236. package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts +2 -0
  237. package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts.map +1 -0
  238. package/dist/commands/onboard/__tests__/resolve-app.spec.js +166 -0
  239. package/dist/commands/onboard/__tests__/resolve-app.spec.js.map +1 -0
  240. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts +2 -0
  241. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts.map +1 -0
  242. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js +137 -0
  243. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js.map +1 -0
  244. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts +2 -0
  245. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts.map +1 -0
  246. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js +286 -0
  247. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js.map +1 -0
  248. package/dist/commands/onboard/build-context.d.ts +16 -0
  249. package/dist/commands/onboard/build-context.d.ts.map +1 -0
  250. package/dist/commands/onboard/build-context.js +104 -0
  251. package/dist/commands/onboard/build-context.js.map +1 -0
  252. package/dist/commands/onboard/check-vcs-link.d.ts +14 -0
  253. package/dist/commands/onboard/check-vcs-link.d.ts.map +1 -0
  254. package/dist/commands/onboard/check-vcs-link.js +111 -0
  255. package/dist/commands/onboard/check-vcs-link.js.map +1 -0
  256. package/dist/commands/onboard/codex-mcp.d.ts +24 -0
  257. package/dist/commands/onboard/codex-mcp.d.ts.map +1 -0
  258. package/dist/commands/onboard/codex-mcp.js +302 -0
  259. package/dist/commands/onboard/codex-mcp.js.map +1 -0
  260. package/dist/commands/onboard/customer-agents.d.ts +9 -0
  261. package/dist/commands/onboard/customer-agents.d.ts.map +1 -0
  262. package/dist/commands/onboard/customer-agents.js +19 -0
  263. package/dist/commands/onboard/customer-agents.js.map +1 -0
  264. package/dist/commands/onboard/customer-agents.json +17 -0
  265. package/dist/commands/onboard/customer-docs.d.ts +21 -0
  266. package/dist/commands/onboard/customer-docs.d.ts.map +1 -0
  267. package/dist/commands/onboard/customer-docs.js +31 -0
  268. package/dist/commands/onboard/customer-docs.js.map +1 -0
  269. package/dist/commands/onboard/customer-docs.json +35 -0
  270. package/dist/commands/onboard/detect-framework.d.ts +26 -0
  271. package/dist/commands/onboard/detect-framework.d.ts.map +1 -0
  272. package/dist/commands/onboard/detect-framework.js +305 -0
  273. package/dist/commands/onboard/detect-framework.js.map +1 -0
  274. package/dist/commands/onboard/discover-apps.d.ts +21 -0
  275. package/dist/commands/onboard/discover-apps.d.ts.map +1 -0
  276. package/dist/commands/onboard/discover-apps.js +318 -0
  277. package/dist/commands/onboard/discover-apps.js.map +1 -0
  278. package/dist/commands/onboard/docs-urls.d.ts +11 -0
  279. package/dist/commands/onboard/docs-urls.d.ts.map +1 -0
  280. package/dist/commands/onboard/docs-urls.js +17 -0
  281. package/dist/commands/onboard/docs-urls.js.map +1 -0
  282. package/dist/commands/onboard/git-repo-info.d.ts +15 -0
  283. package/dist/commands/onboard/git-repo-info.d.ts.map +1 -0
  284. package/dist/commands/onboard/git-repo-info.js +84 -0
  285. package/dist/commands/onboard/git-repo-info.js.map +1 -0
  286. package/dist/commands/onboard/index.d.ts +18 -0
  287. package/dist/commands/onboard/index.d.ts.map +1 -0
  288. package/dist/commands/onboard/index.js +164 -0
  289. package/dist/commands/onboard/index.js.map +1 -0
  290. package/dist/commands/onboard/inline-doc-constants.d.ts +21 -0
  291. package/dist/commands/onboard/inline-doc-constants.d.ts.map +1 -0
  292. package/dist/commands/onboard/inline-doc-constants.js +238 -0
  293. package/dist/commands/onboard/inline-doc-constants.js.map +1 -0
  294. package/dist/commands/onboard/launch-agent.d.ts +65 -0
  295. package/dist/commands/onboard/launch-agent.d.ts.map +1 -0
  296. package/dist/commands/onboard/launch-agent.js +311 -0
  297. package/dist/commands/onboard/launch-agent.js.map +1 -0
  298. package/dist/commands/onboard/materialize-workspace.d.ts +68 -0
  299. package/dist/commands/onboard/materialize-workspace.d.ts.map +1 -0
  300. package/dist/commands/onboard/materialize-workspace.js +177 -0
  301. package/dist/commands/onboard/materialize-workspace.js.map +1 -0
  302. package/dist/commands/onboard/print-summary.d.ts +10 -0
  303. package/dist/commands/onboard/print-summary.d.ts.map +1 -0
  304. package/dist/commands/onboard/print-summary.js +49 -0
  305. package/dist/commands/onboard/print-summary.js.map +1 -0
  306. package/dist/commands/onboard/resolve-app.d.ts +21 -0
  307. package/dist/commands/onboard/resolve-app.d.ts.map +1 -0
  308. package/dist/commands/onboard/resolve-app.js +78 -0
  309. package/dist/commands/onboard/resolve-app.js.map +1 -0
  310. package/dist/commands/onboard/resolve-project.d.ts +14 -0
  311. package/dist/commands/onboard/resolve-project.d.ts.map +1 -0
  312. package/dist/commands/onboard/resolve-project.js +92 -0
  313. package/dist/commands/onboard/resolve-project.js.map +1 -0
  314. package/dist/commands/onboard/safe-repo-fs.d.ts +59 -0
  315. package/dist/commands/onboard/safe-repo-fs.d.ts.map +1 -0
  316. package/dist/commands/onboard/safe-repo-fs.js +266 -0
  317. package/dist/commands/onboard/safe-repo-fs.js.map +1 -0
  318. package/dist/commands/onboard/setup-agent-integrations.d.ts +43 -0
  319. package/dist/commands/onboard/setup-agent-integrations.d.ts.map +1 -0
  320. package/dist/commands/onboard/setup-agent-integrations.js +324 -0
  321. package/dist/commands/onboard/setup-agent-integrations.js.map +1 -0
  322. package/dist/commands/onboard/templates/CLAUDE.md +213 -0
  323. package/dist/commands/onboard/templates/agents/auth-setup.md +117 -0
  324. package/dist/commands/onboard/templates/agents/ci-setup.md +742 -0
  325. package/dist/commands/onboard/templates/agents/csp-setup.md +78 -0
  326. package/dist/commands/onboard/templates/agents/false-positive-prevention.md +268 -0
  327. package/dist/commands/onboard/templates/agents/feature-flag-setup.md +133 -0
  328. package/dist/commands/onboard/templates/agents/local-simulation-verification.md +96 -0
  329. package/dist/commands/onboard/templates/agents/persisted-graphql-queries.md +150 -0
  330. package/dist/commands/onboard/templates/agents/recorder-installation.md +194 -0
  331. package/dist/commands/onboard/templates/agents/replay-fetch-retry-compatibility.md +252 -0
  332. package/dist/commands/onboard/templates/agents/reviewer.md +788 -0
  333. package/dist/commands/onboard/templates/agents/service-worker-compatibility.md +254 -0
  334. package/dist/commands/onboard/templates/agents/session-context.md +133 -0
  335. package/dist/commands/onboard/templates/agents/shared-worker-compatibility.md +187 -0
  336. package/dist/commands/onboard/templates/docs/additional-guides/backend-recorder.ts +340 -0
  337. package/dist/commands/onboard/templates/docs/ci/not-yet-run-checks.ts +58 -0
  338. package/dist/commands/onboard/templates/docs/ci.ts +19 -0
  339. package/dist/commands/onboard/templates/docs/cloud-replay.ts +145 -0
  340. package/dist/commands/onboard/templates/docs/constants.ts +37 -0
  341. package/dist/commands/onboard/templates/docs/github-actions-v2.ts +859 -0
  342. package/dist/commands/onboard/templates/docs/how-to/auth/bypassing-auth.ts +27 -0
  343. package/dist/commands/onboard/templates/docs/how-to/auth/enabling-full-auth.ts +91 -0
  344. package/dist/commands/onboard/templates/docs/how-to/configure-ignore-patterns.ts +77 -0
  345. package/dist/commands/onboard/templates/docs/how-to/enable-source-coverage.ts +84 -0
  346. package/dist/commands/onboard/templates/docs/how-to/fix-false-positive-diffs.ts +156 -0
  347. package/dist/commands/onboard/templates/docs/how-to/link-bitbucket.ts +15 -0
  348. package/dist/commands/onboard/templates/docs/how-to/link-gitlab.ts +22 -0
  349. package/dist/commands/onboard/templates/docs/how-to/record-session-context.ts +129 -0
  350. package/dist/commands/onboard/templates/docs/how-to/recorder-script.ts +139 -0
  351. package/dist/commands/onboard/templates/docs/how-to/testing-feature-flags.ts +97 -0
  352. package/dist/commands/onboard/templates/docs/how-to/testing-multiple-apps-or-app-variants.ts +40 -0
  353. package/dist/commands/onboard/templates/docs/how-to/troubleshoot-auth.ts +58 -0
  354. package/dist/commands/onboard/templates/docs/how-to/troubleshoot-failed-simulations.ts +97 -0
  355. package/dist/commands/onboard/templates/docs/how-to/typescript-types.ts +51 -0
  356. package/dist/commands/onboard/templates/docs/how-to/window-meticulous-object.ts +685 -0
  357. package/dist/commands/onboard/templates/docs/onboarding-guide.ts +415 -0
  358. package/dist/commands/onboard/templates/docs/recorder-getting-started.ts +24 -0
  359. package/dist/commands/onboard/templates/docs/recorder-snippets/constants.ts +1 -0
  360. package/dist/commands/onboard/templates/docs/recorder-snippets/explanation-of-methods-to-add-recorder.ts +21 -0
  361. package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/angular-instructions.ts +34 -0
  362. package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/any-other-framework-instructions.ts +118 -0
  363. package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/vue-instructions.ts +39 -0
  364. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/next-js-instructions.ts +49 -0
  365. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/nuxtjs-instructions.ts +68 -0
  366. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/rsbuild-instructions.ts +66 -0
  367. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/storybook-instructions.ts +59 -0
  368. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/sveltekit-instructions.ts +113 -0
  369. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/vite-instructions.ts +58 -0
  370. package/dist/commands/onboard/templates/docs/recorder-snippets/script-requirements.ts +51 -0
  371. package/dist/commands/onboard/templates/docs/recorder-snippets/steps-after-installing-recorder.ts +25 -0
  372. package/dist/commands/onboard/templates/docs/reference/cli-commands.ts +1324 -0
  373. package/dist/commands/onboard/templates/docs/session-recording/csp-exceptions.ts +17 -0
  374. package/dist/commands/onboard/templates/docs/session-recording/recorder-npm-dependency.ts +62 -0
  375. package/dist/commands/onboard/templates/docs-imports/src/lib/next/next.constants.ts +46 -0
  376. package/dist/commands/onboard/templates/docs-imports/src/lib/utils/internal-urls/docs-urls.utils.ts +254 -0
  377. package/dist/commands/onboard/templates/settings.json +14 -0
  378. package/dist/commands/project/index.js +2 -2
  379. package/dist/commands/project/index.js.map +1 -1
  380. package/dist/commands/project/show.command.js +2 -2
  381. package/dist/commands/project/show.command.js.map +1 -1
  382. package/dist/commands/project/upload-source.command.js +2 -2
  383. package/dist/commands/project/upload-source.command.js.map +1 -1
  384. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js +2 -2
  385. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js.map +1 -1
  386. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js +2 -2
  387. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js.map +1 -1
  388. package/dist/commands/record/__tests__/backend.command.spec.js +2 -2
  389. package/dist/commands/record/__tests__/backend.command.spec.js.map +1 -1
  390. package/dist/commands/record/__tests__/login.command.spec.js +2 -2
  391. package/dist/commands/record/__tests__/login.command.spec.js.map +1 -1
  392. package/dist/commands/record/__tests__/session.command.spec.js +2 -2
  393. package/dist/commands/record/__tests__/session.command.spec.js.map +1 -1
  394. package/dist/commands/record/backend-dev-command.utils.js +2 -2
  395. package/dist/commands/record/backend-dev-command.utils.js.map +1 -1
  396. package/dist/commands/record/backend-sidecar.utils.js +2 -2
  397. package/dist/commands/record/backend-sidecar.utils.js.map +1 -1
  398. package/dist/commands/record/backend.command.js +2 -2
  399. package/dist/commands/record/backend.command.js.map +1 -1
  400. package/dist/commands/record/index.js +2 -2
  401. package/dist/commands/record/index.js.map +1 -1
  402. package/dist/commands/record/login.command.js +2 -2
  403. package/dist/commands/record/login.command.js.map +1 -1
  404. package/dist/commands/record/session.command.js +2 -2
  405. package/dist/commands/record/session.command.js.map +1 -1
  406. package/dist/commands/replay-debugger.ui.js +2 -2
  407. package/dist/commands/replay-debugger.ui.js.map +1 -1
  408. package/dist/commands/replay.command.js +2 -2
  409. package/dist/commands/replay.command.js.map +1 -1
  410. package/dist/commands/schema.command.js +2 -2
  411. package/dist/commands/schema.command.js.map +1 -1
  412. package/dist/commands/schema.command.spec.js +2 -2
  413. package/dist/commands/schema.command.spec.js.map +1 -1
  414. package/dist/index.js +2 -2
  415. package/dist/index.js.map +1 -1
  416. package/dist/main.js +2 -2
  417. package/dist/main.js.map +1 -1
  418. package/dist/utils/__tests__/handle-auth-failure.spec.js +2 -2
  419. package/dist/utils/__tests__/handle-auth-failure.spec.js.map +1 -1
  420. package/dist/utils/__tests__/project-selection-hint.spec.js +2 -2
  421. package/dist/utils/__tests__/project-selection-hint.spec.js.map +1 -1
  422. package/dist/utils/__tests__/resolve-project-identifier.spec.js +2 -2
  423. package/dist/utils/__tests__/resolve-project-identifier.spec.js.map +1 -1
  424. package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +2 -2
  425. package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
  426. package/dist/utils/__tests__/select-project.spec.js +5 -4
  427. package/dist/utils/__tests__/select-project.spec.js.map +1 -1
  428. package/dist/utils/cli-user-error.js +2 -2
  429. package/dist/utils/cli-user-error.js.map +1 -1
  430. package/dist/utils/constants.js +2 -2
  431. package/dist/utils/constants.js.map +1 -1
  432. package/dist/utils/environment.utils.js +2 -2
  433. package/dist/utils/environment.utils.js.map +1 -1
  434. package/dist/utils/format-coverage-ranges.js +2 -2
  435. package/dist/utils/format-coverage-ranges.js.map +1 -1
  436. package/dist/utils/handle-auth-failure.js +2 -2
  437. package/dist/utils/handle-auth-failure.js.map +1 -1
  438. package/dist/utils/out-of-date-client-error.js +2 -2
  439. package/dist/utils/out-of-date-client-error.js.map +1 -1
  440. package/dist/utils/project-selection-hint.js +2 -2
  441. package/dist/utils/project-selection-hint.js.map +1 -1
  442. package/dist/utils/resolve-project-identifier.js +2 -2
  443. package/dist/utils/resolve-project-identifier.js.map +1 -1
  444. package/dist/utils/resolve-test-run-from-commit.js +2 -2
  445. package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
  446. package/dist/utils/select-project.d.ts +9 -0
  447. package/dist/utils/select-project.d.ts.map +1 -1
  448. package/dist/utils/select-project.js +58 -15
  449. package/dist/utils/select-project.js.map +1 -1
  450. package/package.json +13 -11
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="96da1693-9282-57e0-8720-eb64652df868")}catch(e){}}();
3
+
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.assertNoSymlinksUnderSkillsTrees = exports.assertSafeSkillsInstallTargets = exports.prepareSafeSkillsInstallTargets = exports.SKILLS_INSTALL_FILE_TARGETS = exports.SKILLS_INSTALL_DIR_ROOTS = exports.isRealDirectoryInsideProject = exports.isPathInsideRoot = exports.normalizeRelativeRepoPath = exports.assertWorkspaceInsideProject = exports.copyFileSafeSync = exports.writeFileSafeSync = exports.mkdirSafeSync = exports.resolveSafeWritePath = exports.resolveRealProjectRoot = void 0;
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const cli_user_error_1 = require("../../utils/cli-user-error");
9
+ /**
10
+ * Resolves `projectRoot` to its real path. Call once at the start of onboard
11
+ * writes so subsequent checks share the same root.
12
+ */
13
+ const resolveRealProjectRoot = (projectRoot) => {
14
+ const absolute = (0, path_1.resolve)(projectRoot);
15
+ if (!(0, fs_1.existsSync)(absolute)) {
16
+ throw new cli_user_error_1.CliUserError(`Project root does not exist: ${absolute}`);
17
+ }
18
+ const stat = (0, fs_1.lstatSync)(absolute);
19
+ if (stat.isSymbolicLink()) {
20
+ // Allow the root itself to be reached via a symlink (e.g. worktrees), but
21
+ // still pin writes to the real directory.
22
+ }
23
+ return (0, fs_1.realpathSync)(absolute);
24
+ };
25
+ exports.resolveRealProjectRoot = resolveRealProjectRoot;
26
+ /**
27
+ * Resolves a repo-relative path for writing under `projectRoot`.
28
+ *
29
+ * Rejects absolute paths, `..` escapes, and any existing symlink on the path
30
+ * from the project root to the target (inclusive). That stops a
31
+ * repository-seeded symlink such as `.meticulous-onboard` → `~/.ssh` from
32
+ * redirecting onboard writes outside the repo.
33
+ */
34
+ const resolveSafeWritePath = (projectRoot, relativePath) => {
35
+ const realRoot = (0, exports.resolveRealProjectRoot)(projectRoot);
36
+ const normalizedRelative = (0, exports.normalizeRelativeRepoPath)(relativePath);
37
+ const parts = normalizedRelative
38
+ .split("/")
39
+ .filter((part) => part.length > 0 && part !== ".");
40
+ let current = realRoot;
41
+ for (let index = 0; index < parts.length; index++) {
42
+ const next = (0, path_1.join)(current, parts[index]);
43
+ const stat = tryLstat(next);
44
+ if (!stat) {
45
+ current = (0, path_1.join)(current, ...parts.slice(index));
46
+ break;
47
+ }
48
+ // Use lstat (not existsSync) so broken symlinks are still rejected.
49
+ if (stat.isSymbolicLink()) {
50
+ const display = parts.slice(0, index + 1).join("/");
51
+ throw new cli_user_error_1.CliUserError(`Refusing to write through symlink at '${display}'. ` +
52
+ `Remove or replace it, then re-run \`meticulous onboard\`.`);
53
+ }
54
+ if (stat.isDirectory()) {
55
+ current = (0, fs_1.realpathSync)(next);
56
+ if (!(0, exports.isPathInsideRoot)(realRoot, current)) {
57
+ throw new cli_user_error_1.CliUserError(`Refusing to write outside the project root via '${parts.slice(0, index + 1).join("/")}'.`);
58
+ }
59
+ continue;
60
+ }
61
+ // Existing non-directory leaf (regular file, etc.): must be the final part.
62
+ if (index !== parts.length - 1) {
63
+ throw new cli_user_error_1.CliUserError(`Refusing to write under non-directory path '${parts.slice(0, index + 1).join("/")}'.`);
64
+ }
65
+ current = next;
66
+ }
67
+ if (!(0, exports.isPathInsideRoot)(realRoot, current)) {
68
+ throw new cli_user_error_1.CliUserError(`Refusing to write outside the project root: ${relativePath}`);
69
+ }
70
+ return current;
71
+ };
72
+ exports.resolveSafeWritePath = resolveSafeWritePath;
73
+ const mkdirSafeSync = (projectRoot, relativePath) => {
74
+ const absolute = (0, exports.resolveSafeWritePath)(projectRoot, relativePath);
75
+ (0, fs_1.mkdirSync)(absolute, { recursive: true });
76
+ // Re-check after create: a race could theoretically replace a component, but
77
+ // more importantly ensure we didn't land on a symlink somehow.
78
+ assertNoSymlinkAt(projectRoot, relativePath);
79
+ return absolute;
80
+ };
81
+ exports.mkdirSafeSync = mkdirSafeSync;
82
+ const writeFileSafeSync = (projectRoot, relativePath, data) => {
83
+ (0, exports.resolveSafeWritePath)(projectRoot, relativePath);
84
+ const parentRelative = (0, path_1.dirname)((0, exports.normalizeRelativeRepoPath)(relativePath));
85
+ if (parentRelative !== "." && parentRelative !== "") {
86
+ (0, exports.mkdirSafeSync)(projectRoot, parentRelative);
87
+ }
88
+ // Re-resolve after parents exist so a symlink planted on a parent is caught.
89
+ const target = (0, exports.resolveSafeWritePath)(projectRoot, relativePath);
90
+ (0, fs_1.writeFileSync)(target, data);
91
+ return target;
92
+ };
93
+ exports.writeFileSafeSync = writeFileSafeSync;
94
+ const copyFileSafeSync = (projectRoot, relativePath, sourceAbsolutePath) => {
95
+ const parentRelative = (0, path_1.dirname)((0, exports.normalizeRelativeRepoPath)(relativePath));
96
+ if (parentRelative !== "." && parentRelative !== "") {
97
+ (0, exports.mkdirSafeSync)(projectRoot, parentRelative);
98
+ }
99
+ const target = (0, exports.resolveSafeWritePath)(projectRoot, relativePath);
100
+ (0, fs_1.copyFileSync)(sourceAbsolutePath, target);
101
+ return target;
102
+ };
103
+ exports.copyFileSafeSync = copyFileSafeSync;
104
+ /**
105
+ * Asserts that `workspaceDir` is the onboard workspace under `projectRoot`
106
+ * (or a realpath-equivalent path inside it), not an escaped location.
107
+ */
108
+ const assertWorkspaceInsideProject = (projectRoot, workspaceDir) => {
109
+ const realRoot = (0, exports.resolveRealProjectRoot)(projectRoot);
110
+ if (!(0, fs_1.existsSync)(workspaceDir)) {
111
+ throw new cli_user_error_1.CliUserError(`Onboard workspace does not exist: ${workspaceDir}`);
112
+ }
113
+ if ((0, fs_1.lstatSync)(workspaceDir).isSymbolicLink()) {
114
+ throw new cli_user_error_1.CliUserError(`Refusing to use symlink onboard workspace at '${workspaceDir}'.`);
115
+ }
116
+ const realWorkspace = (0, fs_1.realpathSync)(workspaceDir);
117
+ if (!(0, exports.isPathInsideRoot)(realRoot, realWorkspace)) {
118
+ throw new cli_user_error_1.CliUserError(`Onboard workspace escapes the project root: ${workspaceDir}`);
119
+ }
120
+ return realWorkspace;
121
+ };
122
+ exports.assertWorkspaceInsideProject = assertWorkspaceInsideProject;
123
+ const assertNoSymlinkAt = (projectRoot, relativePath) => {
124
+ (0, exports.resolveSafeWritePath)(projectRoot, relativePath);
125
+ };
126
+ const normalizeRelativeRepoPath = (relativePath) => {
127
+ if (relativePath.length === 0 || relativePath === ".") {
128
+ throw new cli_user_error_1.CliUserError("Refusing empty write path under the project root.");
129
+ }
130
+ if ((0, path_1.isAbsolute)(relativePath)) {
131
+ throw new cli_user_error_1.CliUserError(`Refusing absolute write path: ${relativePath}`);
132
+ }
133
+ const normalized = (0, path_1.normalize)(relativePath).replace(/\\/g, "/");
134
+ if (normalized === ".." ||
135
+ normalized.startsWith("../") ||
136
+ normalized.split("/").includes("..")) {
137
+ throw new cli_user_error_1.CliUserError(`Refusing path escape: ${relativePath}`);
138
+ }
139
+ return normalized.replace(/^\.\//u, "");
140
+ };
141
+ exports.normalizeRelativeRepoPath = normalizeRelativeRepoPath;
142
+ const isPathInsideRoot = (root, candidate) => {
143
+ const relativeToRoot = (0, path_1.relative)(root, candidate);
144
+ return (relativeToRoot === "" ||
145
+ (!relativeToRoot.startsWith(`..${path_1.sep}`) &&
146
+ relativeToRoot !== ".." &&
147
+ !(0, path_1.isAbsolute)(relativeToRoot)));
148
+ };
149
+ exports.isPathInsideRoot = isPathInsideRoot;
150
+ const tryLstat = (path) => {
151
+ try {
152
+ return (0, fs_1.lstatSync)(path);
153
+ }
154
+ catch {
155
+ return null;
156
+ }
157
+ };
158
+ /**
159
+ * True when `absolutePath` is a real (non-symlink) directory whose realpath
160
+ * stays inside the project root. Used by app discovery so a repo-seeded
161
+ * symlink cannot be selected as an onboard target.
162
+ */
163
+ const isRealDirectoryInsideProject = (projectRoot, absolutePath) => {
164
+ const realRoot = (0, exports.resolveRealProjectRoot)(projectRoot);
165
+ const stat = tryLstat(absolutePath);
166
+ if (!stat || stat.isSymbolicLink() || !stat.isDirectory()) {
167
+ return false;
168
+ }
169
+ let realCandidate;
170
+ try {
171
+ realCandidate = (0, fs_1.realpathSync)(absolutePath);
172
+ }
173
+ catch {
174
+ return false;
175
+ }
176
+ return (0, exports.isPathInsideRoot)(realRoot, realCandidate);
177
+ };
178
+ exports.isRealDirectoryInsideProject = isRealDirectoryInsideProject;
179
+ /**
180
+ * Paths the skills installer may create or write under. We must reject
181
+ * repo-seeded symlinks here *before* handing control to the external
182
+ * installer — validating only `.claude` is not enough.
183
+ */
184
+ exports.SKILLS_INSTALL_DIR_ROOTS = [
185
+ ".claude",
186
+ ".agents",
187
+ ".cursor",
188
+ ];
189
+ exports.SKILLS_INSTALL_FILE_TARGETS = ["skills-lock.json"];
190
+ /**
191
+ * Rejects symlinks on every path the skills installer may write through, then
192
+ * creates the destination directory roots as real directories inside the repo.
193
+ * Also walks any pre-existing nested entries under each agent's skills tree —
194
+ * a real `skills` dir with a last-component symlink like
195
+ * `.claude/skills/<name> -> ~/.ssh` would otherwise let the installer write
196
+ * outside the project while the shallow check still passes.
197
+ */
198
+ const prepareSafeSkillsInstallTargets = (projectRoot) => {
199
+ for (const file of exports.SKILLS_INSTALL_FILE_TARGETS) {
200
+ // Throws if the path (or any parent component) is a symlink.
201
+ (0, exports.resolveSafeWritePath)(projectRoot, file);
202
+ }
203
+ for (const dir of exports.SKILLS_INSTALL_DIR_ROOTS) {
204
+ (0, exports.mkdirSafeSync)(projectRoot, dir);
205
+ (0, exports.mkdirSafeSync)(projectRoot, (0, path_1.join)(dir, "skills"));
206
+ }
207
+ (0, exports.assertNoSymlinksUnderSkillsTrees)(projectRoot);
208
+ };
209
+ exports.prepareSafeSkillsInstallTargets = prepareSafeSkillsInstallTargets;
210
+ /**
211
+ * Re-checks skills install destinations after an external installer runs, so a
212
+ * TOCTOU symlink plant during the install cannot go unnoticed — including
213
+ * nested last-component symlinks under each agent's skills tree.
214
+ */
215
+ const assertSafeSkillsInstallTargets = (projectRoot) => {
216
+ for (const file of exports.SKILLS_INSTALL_FILE_TARGETS) {
217
+ (0, exports.resolveSafeWritePath)(projectRoot, file);
218
+ }
219
+ for (const dir of exports.SKILLS_INSTALL_DIR_ROOTS) {
220
+ (0, exports.resolveSafeWritePath)(projectRoot, dir);
221
+ (0, exports.resolveSafeWritePath)(projectRoot, (0, path_1.join)(dir, "skills"));
222
+ }
223
+ (0, exports.assertNoSymlinksUnderSkillsTrees)(projectRoot);
224
+ };
225
+ exports.assertSafeSkillsInstallTargets = assertSafeSkillsInstallTargets;
226
+ /**
227
+ * Recursively rejects any symlink under `.claude/skills`, `.agents/skills`,
228
+ * and `.cursor/skills`. Matches `resolveSafeWritePath`: any symlink is refused,
229
+ * not only ones that currently resolve outside the repo.
230
+ */
231
+ const assertNoSymlinksUnderSkillsTrees = (projectRoot) => {
232
+ const realRoot = (0, exports.resolveRealProjectRoot)(projectRoot);
233
+ for (const dir of exports.SKILLS_INSTALL_DIR_ROOTS) {
234
+ const relativeSkills = (0, path_1.join)(dir, "skills").replace(/\\/g, "/");
235
+ const absoluteSkills = (0, path_1.join)(realRoot, dir, "skills");
236
+ assertNoSymlinksUnderDirectory(absoluteSkills, relativeSkills);
237
+ }
238
+ };
239
+ exports.assertNoSymlinksUnderSkillsTrees = assertNoSymlinksUnderSkillsTrees;
240
+ const assertNoSymlinksUnderDirectory = (absoluteDir, relativeDisplay) => {
241
+ const dirStat = tryLstat(absoluteDir);
242
+ if (!dirStat) {
243
+ return;
244
+ }
245
+ if (dirStat.isSymbolicLink()) {
246
+ throw new cli_user_error_1.CliUserError(`Refusing to write through symlink at '${relativeDisplay}'. ` +
247
+ `Remove or replace it, then re-run \`meticulous onboard\`.`);
248
+ }
249
+ if (!dirStat.isDirectory()) {
250
+ return;
251
+ }
252
+ for (const entry of (0, fs_1.readdirSync)(absoluteDir, { withFileTypes: true })) {
253
+ const childRelative = `${relativeDisplay}/${entry.name}`;
254
+ // Check symlink before isDirectory(): a symlink-to-dir can report as both
255
+ // depending on platform / Node version.
256
+ if (entry.isSymbolicLink()) {
257
+ throw new cli_user_error_1.CliUserError(`Refusing to write through symlink at '${childRelative}'. ` +
258
+ `Remove or replace it, then re-run \`meticulous onboard\`.`);
259
+ }
260
+ if (entry.isDirectory()) {
261
+ assertNoSymlinksUnderDirectory((0, path_1.join)(absoluteDir, entry.name), childRelative);
262
+ }
263
+ }
264
+ };
265
+ //# sourceMappingURL=safe-repo-fs.js.map
266
+ //# debugId=96da1693-9282-57e0-8720-eb64652df868
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-repo-fs.js","sources":["../../../src/commands/onboard/safe-repo-fs.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"96da1693-9282-57e0-8720-eb64652df868"}
@@ -0,0 +1,43 @@
1
+ export declare const METICULOUS_MCP_URL = "https://app.meticulous.ai/api/mcp";
2
+ /**
3
+ * Registry package + pinned version for the `skills` CLI. Must never be
4
+ * resolved from the customer repo's node_modules (see installSkills).
5
+ */
6
+ export declare const SKILLS_CLI_PACKAGE_SPEC = "skills@1.5.22";
7
+ /** Args after the skills CLI entry — shared with the retry hint. */
8
+ export declare const SKILLS_ADD_ARGS: readonly ["add", "alwaysmeticulous/skills", "--skill", "*", "--agent", "claude-code", "--agent", "codex", "--agent", "cursor", "--copy", "-y"];
9
+ /** Paths the CLI may create for agent integrations — include these in the PR. */
10
+ export declare const AGENT_INTEGRATION_PATHS: readonly [".claude/skills/", ".agents/skills/", ".cursor/skills/", "skills-lock.json", ".mcp.json", ".cursor/mcp.json", ".codex/config.toml"];
11
+ export declare const setupAgentIntegrations: (options: {
12
+ projectRoot: string;
13
+ }) => string[];
14
+ export declare const installSkills: (projectRoot: string) => boolean;
15
+ /**
16
+ * Drops env vars that can redirect Node/npm resolution or inject code into
17
+ * the child. The customer repo stays as cwd for install destinations, so we
18
+ * must not inherit hooks that run before the trusted CLI entry.
19
+ *
20
+ * Installing from a temp cwd is not enough on its own: running onboard through
21
+ * `npm run` / `pnpm exec` exports the repo's `.npmrc` as `npm_config_*`, which
22
+ * takes precedence over cwd, and prepends `node_modules/.bin` to PATH so even
23
+ * `npm` itself could be repo-controlled. Dropping both falls back to the
24
+ * developer's own user and global npm config, which is trusted.
25
+ */
26
+ export declare const sanitizeSkillsInstallEnv: (env: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
27
+ /**
28
+ * Installs the pinned registry `skills` package into a fresh temp prefix and
29
+ * returns the absolute path to its CLI entry. Callers must invoke `cleanup`
30
+ * (including on failure after a successful materialize).
31
+ */
32
+ export declare const materializeTrustedSkillsCli: () => {
33
+ cliEntry: string;
34
+ cleanup: () => void;
35
+ };
36
+ /** Writes the canonical Meticulous MCP config into Claude/Cursor/Codex files. */
37
+ export declare const ensureProjectMcp: (projectRoot: string) => void;
38
+ /**
39
+ * True only when `existing` is a plain object with exactly the same keys and
40
+ * primitive values as `expected` (no extras, no nesting surprises).
41
+ */
42
+ export declare const isExactJsonServerConfig: (existing: unknown, expected: Record<string, unknown>) => boolean;
43
+ //# sourceMappingURL=setup-agent-integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-agent-integrations.d.ts","sourceRoot":"","sources":["../../../src/commands/onboard/setup-agent-integrations.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,kBAAkB,sCAAsC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,oEAAoE;AACpE,eAAO,MAAM,eAAe,gJAalB,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,+IAQ1B,CAAC;AAEX,eAAO,MAAM,sBAAsB,YAAa;IAC9C,WAAW,EAAE,MAAM,CAAC;CACrB,KAAG,MAAM,EAuBT,CAAC;AAEF,eAAO,MAAM,aAAa,gBAAiB,MAAM,KAAG,OAwDnD,CAAC;AAMF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,QAC9B,MAAM,CAAC,UAAU,KACrB,MAAM,CAAC,UAyBT,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAO;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CA6CrB,CAAC;AA+BF,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,gBAAiB,MAAM,KAAG,IAkDtD,CAAC;AAuFF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,aACxB,OAAO,YACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAChC,OAcF,CAAC"}
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d86e4f01-f4b3-5d15-b551-8b7f879cf289")}catch(e){}}();
3
+
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.isExactJsonServerConfig = exports.ensureProjectMcp = exports.materializeTrustedSkillsCli = exports.sanitizeSkillsInstallEnv = exports.installSkills = exports.setupAgentIntegrations = exports.AGENT_INTEGRATION_PATHS = exports.SKILLS_ADD_ARGS = exports.SKILLS_CLI_PACKAGE_SPEC = exports.METICULOUS_MCP_URL = void 0;
9
+ const child_process_1 = require("child_process");
10
+ const fs_1 = require("fs");
11
+ const os_1 = require("os");
12
+ const path_1 = require("path");
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const cli_user_error_1 = require("../../utils/cli-user-error");
15
+ const codex_mcp_1 = require("./codex-mcp");
16
+ const safe_repo_fs_1 = require("./safe-repo-fs");
17
+ exports.METICULOUS_MCP_URL = "https://app.meticulous.ai/api/mcp";
18
+ /**
19
+ * Registry package + pinned version for the `skills` CLI. Must never be
20
+ * resolved from the customer repo's node_modules (see installSkills).
21
+ */
22
+ exports.SKILLS_CLI_PACKAGE_SPEC = "skills@1.5.22";
23
+ /** Args after the skills CLI entry — shared with the retry hint. */
24
+ exports.SKILLS_ADD_ARGS = [
25
+ "add",
26
+ "alwaysmeticulous/skills",
27
+ "--skill",
28
+ "*",
29
+ "--agent",
30
+ "claude-code",
31
+ "--agent",
32
+ "codex",
33
+ "--agent",
34
+ "cursor",
35
+ "--copy",
36
+ "-y",
37
+ ];
38
+ /** Paths the CLI may create for agent integrations — include these in the PR. */
39
+ exports.AGENT_INTEGRATION_PATHS = [
40
+ ".claude/skills/",
41
+ ".agents/skills/",
42
+ ".cursor/skills/",
43
+ "skills-lock.json",
44
+ ".mcp.json",
45
+ ".cursor/mcp.json",
46
+ ".codex/config.toml",
47
+ ];
48
+ const setupAgentIntegrations = (options) => {
49
+ console.log(chalk_1.default.bold("Setting up Meticulous agent integrations…"));
50
+ // Install skills for all supported agents so the onboarding PR is useful
51
+ // regardless of which tool teammates use later.
52
+ const skillsInstalled = (0, exports.installSkills)(options.projectRoot);
53
+ installProjectMcp(options.projectRoot);
54
+ const created = listExistingIntegrationPaths(options.projectRoot, skillsInstalled);
55
+ if (created.length > 0) {
56
+ console.log(chalk_1.default.dim(` These files should be included in the onboarding PR:\n${created
57
+ .map((p) => ` - ${p}`)
58
+ .join("\n")}`));
59
+ }
60
+ console.log("");
61
+ return created;
62
+ };
63
+ exports.setupAgentIntegrations = setupAgentIntegrations;
64
+ const installSkills = (projectRoot) => {
65
+ // Reject repo-seeded symlinks on every path the skills installer may write
66
+ // (`.claude`, `.agents`, `.cursor`, `skills-lock.json`), then create those
67
+ // directory roots as real dirs before handing control to the installer.
68
+ (0, safe_repo_fs_1.prepareSafeSkillsInstallTargets)(projectRoot);
69
+ // Never `npx skills` with cwd=projectRoot: npx prefers a repo-local
70
+ // `node_modules/.bin/skills` (or a `file:` dependency) over the registry,
71
+ // so an untrusted repo could run arbitrary code before any agent sandbox.
72
+ // Materialize the registry CLI into a throwaway prefix, then invoke it by
73
+ // absolute path via `node`.
74
+ let trustedCli = null;
75
+ let result;
76
+ try {
77
+ trustedCli = (0, exports.materializeTrustedSkillsCli)();
78
+ result = (0, child_process_1.spawnSync)(process.execPath, [trustedCli.cliEntry, ...exports.SKILLS_ADD_ARGS], {
79
+ cwd: projectRoot,
80
+ stdio: "inherit",
81
+ env: (0, exports.sanitizeSkillsInstallEnv)(process.env),
82
+ });
83
+ }
84
+ catch (error) {
85
+ const detail = error instanceof Error ? `: ${error.message}` : `: ${String(error)}`;
86
+ console.log(chalk_1.default.yellow(` Could not install Meticulous skills${detail}. Continuing without them.`));
87
+ console.log(chalk_1.default.dim(` Retry: ${skillsInstallRetryHint(projectRoot)}`));
88
+ (0, safe_repo_fs_1.assertSafeSkillsInstallTargets)(projectRoot);
89
+ return false;
90
+ }
91
+ finally {
92
+ trustedCli?.cleanup();
93
+ }
94
+ // Always re-check after the installer — a failed or partial install can
95
+ // still plant a symlink escape on a destination we pre-created.
96
+ (0, safe_repo_fs_1.assertSafeSkillsInstallTargets)(projectRoot);
97
+ if (result.error || result.status !== 0) {
98
+ const detail = result.error ? `: ${result.error.message}` : "";
99
+ console.log(chalk_1.default.yellow(` Could not install Meticulous skills${detail}. Continuing without them.`));
100
+ console.log(chalk_1.default.dim(` Retry: ${skillsInstallRetryHint(projectRoot)}`));
101
+ return false;
102
+ }
103
+ console.log(chalk_1.default.green(" ✓ Installed Meticulous skills"));
104
+ return true;
105
+ };
106
+ exports.installSkills = installSkills;
107
+ /** Matches a `node_modules/.bin` PATH entry, on either path separator. */
108
+ const isPackageBinPathEntry = (entry) => /(?:^|[\\/])node_modules[\\/]\.bin[\\/]?$/u.test(entry.trim());
109
+ /**
110
+ * Drops env vars that can redirect Node/npm resolution or inject code into
111
+ * the child. The customer repo stays as cwd for install destinations, so we
112
+ * must not inherit hooks that run before the trusted CLI entry.
113
+ *
114
+ * Installing from a temp cwd is not enough on its own: running onboard through
115
+ * `npm run` / `pnpm exec` exports the repo's `.npmrc` as `npm_config_*`, which
116
+ * takes precedence over cwd, and prepends `node_modules/.bin` to PATH so even
117
+ * `npm` itself could be repo-controlled. Dropping both falls back to the
118
+ * developer's own user and global npm config, which is trusted.
119
+ */
120
+ const sanitizeSkillsInstallEnv = (env) => {
121
+ const next = { ...env };
122
+ delete next.NODE_OPTIONS;
123
+ delete next.NODE_PATH;
124
+ for (const key of Object.keys(next)) {
125
+ if (/^npm_config_/iu.test(key)) {
126
+ delete next[key];
127
+ continue;
128
+ }
129
+ // Windows spells it `Path`, so match case-insensitively.
130
+ if (key.toUpperCase() !== "PATH") {
131
+ continue;
132
+ }
133
+ const value = next[key];
134
+ if (typeof value !== "string") {
135
+ continue;
136
+ }
137
+ next[key] = value
138
+ .split(path_1.delimiter)
139
+ .filter((entry) => entry.length > 0 && !isPackageBinPathEntry(entry))
140
+ .join(path_1.delimiter);
141
+ }
142
+ return next;
143
+ };
144
+ exports.sanitizeSkillsInstallEnv = sanitizeSkillsInstallEnv;
145
+ /**
146
+ * Installs the pinned registry `skills` package into a fresh temp prefix and
147
+ * returns the absolute path to its CLI entry. Callers must invoke `cleanup`
148
+ * (including on failure after a successful materialize).
149
+ */
150
+ const materializeTrustedSkillsCli = () => {
151
+ const tempDir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), "meticulous-skills-cli-"));
152
+ const cleanup = () => {
153
+ (0, fs_1.rmSync)(tempDir, { recursive: true, force: true });
154
+ };
155
+ const install = (0, child_process_1.spawnSync)("npm", [
156
+ "install",
157
+ "--ignore-scripts",
158
+ "--no-save",
159
+ "--prefix",
160
+ tempDir,
161
+ exports.SKILLS_CLI_PACKAGE_SPEC,
162
+ ], {
163
+ // Install outside the customer repo so a local `skills` package cannot
164
+ // satisfy the request.
165
+ cwd: tempDir,
166
+ encoding: "utf8",
167
+ env: (0, exports.sanitizeSkillsInstallEnv)(process.env),
168
+ stdio: ["ignore", "pipe", "pipe"],
169
+ });
170
+ if (install.error || install.status !== 0) {
171
+ cleanup();
172
+ const stderr = (install.stderr ?? "").toString().trim();
173
+ const detail = install.error?.message ??
174
+ (stderr.length > 0 ? stderr : `npm exited ${install.status}`);
175
+ throw new Error(`failed to download ${exports.SKILLS_CLI_PACKAGE_SPEC}: ${detail}`);
176
+ }
177
+ const cliEntry = (0, path_1.join)(tempDir, "node_modules", "skills", "bin", "cli.mjs");
178
+ if (!(0, fs_1.existsSync)(cliEntry)) {
179
+ cleanup();
180
+ throw new Error(`${exports.SKILLS_CLI_PACKAGE_SPEC} installed without bin/cli.mjs at ${cliEntry}`);
181
+ }
182
+ return { cliEntry, cleanup };
183
+ };
184
+ exports.materializeTrustedSkillsCli = materializeTrustedSkillsCli;
185
+ const shellQuote = (value) => `'${value.replace(/'/g, `'\\''`)}'`;
186
+ /**
187
+ * Paste-able equivalent of the install above. The download must run from the
188
+ * temp prefix, never the repo: npm reads `.npmrc` from its cwd, so a repo one
189
+ * could point `skills` at a customer-controlled registry. Only the CLI entry
190
+ * runs from the repo, since that is where skills get written.
191
+ */
192
+ const skillsInstallRetryHint = (projectRoot) => {
193
+ const prefix = '"$prefix"';
194
+ const addArgs = exports.SKILLS_ADD_ARGS.map(shellQuote).join(" ");
195
+ return (`prefix="${"${TMPDIR:-/tmp}"}/meticulous-skills-cli" && mkdir -p ${prefix} && ` +
196
+ `(cd ${prefix} && npm install --ignore-scripts --no-save --prefix ${prefix} ${exports.SKILLS_CLI_PACKAGE_SPEC}) && ` +
197
+ `(cd ${shellQuote(projectRoot)} && node ${prefix}/node_modules/skills/bin/cli.mjs ${addArgs})`);
198
+ };
199
+ const installProjectMcp = (projectRoot) => {
200
+ // Always attempt every MCP config file. A parse/shape failure on one must
201
+ // not skip the others — otherwise a poisoned `.mcp.json` can leave an
202
+ // attacker-controlled `command`/`args` Meticulous server in Cursor/Codex.
203
+ // Any failure aborts onboard (via CliUserError); silently continuing would
204
+ // leave unsanitized MCP config under the official name.
205
+ (0, exports.ensureProjectMcp)(projectRoot);
206
+ console.log(chalk_1.default.green(" ✓ Added project-scoped Meticulous MCP"));
207
+ };
208
+ /** Writes the canonical Meticulous MCP config into Claude/Cursor/Codex files. */
209
+ const ensureProjectMcp = (projectRoot) => {
210
+ const failures = [];
211
+ const attempts = [
212
+ {
213
+ label: ".mcp.json",
214
+ run: () => mergeJsonMcp(projectRoot, ".mcp.json", {
215
+ type: "http",
216
+ url: exports.METICULOUS_MCP_URL,
217
+ }),
218
+ },
219
+ {
220
+ label: ".cursor/mcp.json",
221
+ run: () => mergeJsonMcp(projectRoot, (0, path_1.join)(".cursor", "mcp.json"), {
222
+ url: exports.METICULOUS_MCP_URL,
223
+ }),
224
+ },
225
+ {
226
+ label: ".codex/config.toml",
227
+ run: () => (0, codex_mcp_1.mergeCodexMcp)(projectRoot, (0, path_1.join)(".codex", "config.toml"), exports.METICULOUS_MCP_URL),
228
+ },
229
+ ];
230
+ for (const attempt of attempts) {
231
+ try {
232
+ attempt.run();
233
+ }
234
+ catch (error) {
235
+ failures.push(error instanceof Error
236
+ ? error.message
237
+ : `${attempt.label}: ${String(error)}`);
238
+ }
239
+ }
240
+ if (failures.length > 0) {
241
+ throw new cli_user_error_1.CliUserError([
242
+ "Could not safely configure the Meticulous MCP server in every agent config.",
243
+ "Fix or remove the failing file(s), then re-run `meticulous onboard`:",
244
+ ...failures.map((message) => ` - ${message}`),
245
+ ].join("\n"));
246
+ }
247
+ };
248
+ exports.ensureProjectMcp = ensureProjectMcp;
249
+ const listExistingIntegrationPaths = (projectRoot, skillsInstalled) => {
250
+ const found = [];
251
+ for (const path of exports.AGENT_INTEGRATION_PATHS) {
252
+ if (!skillsInstalled && isPrecreatedSkillsDirPath(path)) {
253
+ continue;
254
+ }
255
+ const absolute = (0, path_1.join)(projectRoot, path);
256
+ if ((0, fs_1.existsSync)(absolute)) {
257
+ found.push(path);
258
+ }
259
+ }
260
+ return found;
261
+ };
262
+ const isPrecreatedSkillsDirPath = (path) => path === ".claude/skills/" ||
263
+ path === ".agents/skills/" ||
264
+ path === ".cursor/skills/";
265
+ const mergeJsonMcp = (projectRoot, relativePath, serverConfig) => {
266
+ const absolutePath = (0, safe_repo_fs_1.resolveSafeWritePath)(projectRoot, relativePath);
267
+ let config = {};
268
+ if ((0, fs_1.existsSync)(absolutePath)) {
269
+ let parsed;
270
+ try {
271
+ parsed = JSON.parse((0, fs_1.readFileSync)(absolutePath, "utf8"));
272
+ }
273
+ catch {
274
+ throw new cli_user_error_1.CliUserError(`Refusing to update '${relativePath}': file is not valid JSON. ` +
275
+ `Fix or remove it, then re-run \`meticulous onboard\`.`);
276
+ }
277
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
278
+ throw new cli_user_error_1.CliUserError(`Refusing to update '${relativePath}': top-level value must be a JSON object.`);
279
+ }
280
+ config = parsed;
281
+ }
282
+ const existingServers = config["mcpServers"];
283
+ if (existingServers !== undefined &&
284
+ (!existingServers ||
285
+ typeof existingServers !== "object" ||
286
+ Array.isArray(existingServers))) {
287
+ throw new cli_user_error_1.CliUserError(`Refusing to update '${relativePath}': mcpServers must be a JSON object.`);
288
+ }
289
+ const mcpServers = (existingServers ?? {});
290
+ // Only trust a pre-existing entry when it is an exact match of the
291
+ // canonical config. A matching `url` alone is not enough — extra fields
292
+ // like `command` / `args` / `env` would keep an attacker-controlled local
293
+ // MCP server under the official "Meticulous" name.
294
+ if ((0, exports.isExactJsonServerConfig)(mcpServers["Meticulous"], serverConfig)) {
295
+ return;
296
+ }
297
+ (0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, relativePath, JSON.stringify({
298
+ ...config,
299
+ mcpServers: {
300
+ ...mcpServers,
301
+ Meticulous: serverConfig,
302
+ },
303
+ }, null, 2) + "\n");
304
+ };
305
+ /**
306
+ * True only when `existing` is a plain object with exactly the same keys and
307
+ * primitive values as `expected` (no extras, no nesting surprises).
308
+ */
309
+ const isExactJsonServerConfig = (existing, expected) => {
310
+ if (!existing || typeof existing !== "object" || Array.isArray(existing)) {
311
+ return false;
312
+ }
313
+ const record = existing;
314
+ const existingKeys = Object.keys(record).sort();
315
+ const expectedKeys = Object.keys(expected).sort();
316
+ if (existingKeys.length !== expectedKeys.length ||
317
+ existingKeys.some((key, index) => key !== expectedKeys[index])) {
318
+ return false;
319
+ }
320
+ return expectedKeys.every((key) => record[key] === expected[key]);
321
+ };
322
+ exports.isExactJsonServerConfig = isExactJsonServerConfig;
323
+ //# sourceMappingURL=setup-agent-integrations.js.map
324
+ //# debugId=d86e4f01-f4b3-5d15-b551-8b7f879cf289