@alwaysmeticulous/cli 2.326.1 → 2.328.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 (456) 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.d.ts +2 -0
  135. package/dist/commands/ci/agent-test.command.d.ts.map +1 -1
  136. package/dist/commands/ci/agent-test.command.js +28 -3
  137. package/dist/commands/ci/agent-test.command.js.map +1 -1
  138. package/dist/commands/ci/agent-test.command.spec.d.ts +2 -0
  139. package/dist/commands/ci/agent-test.command.spec.d.ts.map +1 -0
  140. package/dist/commands/ci/agent-test.command.spec.js +133 -0
  141. package/dist/commands/ci/agent-test.command.spec.js.map +1 -0
  142. package/dist/commands/ci/deprecated-trigger-options.js +2 -2
  143. package/dist/commands/ci/deprecated-trigger-options.js.map +1 -1
  144. package/dist/commands/ci/index.js +2 -2
  145. package/dist/commands/ci/index.js.map +1 -1
  146. package/dist/commands/ci/label-commit.command.js +2 -2
  147. package/dist/commands/ci/label-commit.command.js.map +1 -1
  148. package/dist/commands/ci/label-commit.core.js +2 -2
  149. package/dist/commands/ci/label-commit.core.js.map +1 -1
  150. package/dist/commands/ci/label-commit.types.js +2 -2
  151. package/dist/commands/ci/label-commit.types.js.map +1 -1
  152. package/dist/commands/ci/label-commit.utils.js +2 -2
  153. package/dist/commands/ci/label-commit.utils.js.map +1 -1
  154. package/dist/commands/ci/prepare.command.js +2 -2
  155. package/dist/commands/ci/prepare.command.js.map +1 -1
  156. package/dist/commands/ci/resolve-git-options.js +2 -2
  157. package/dist/commands/ci/resolve-git-options.js.map +1 -1
  158. package/dist/commands/ci/run-local.command.js +2 -2
  159. package/dist/commands/ci/run-local.command.js.map +1 -1
  160. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js +2 -2
  161. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
  162. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js +2 -2
  163. package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js.map +1 -1
  164. package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js +2 -2
  165. package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js.map +1 -1
  166. package/dist/commands/ci/run.command.js +2 -2
  167. package/dist/commands/ci/run.command.js.map +1 -1
  168. package/dist/commands/ci/session-filter.utils.js +2 -2
  169. package/dist/commands/ci/session-filter.utils.js.map +1 -1
  170. package/dist/commands/ci/start-tunnel.command.js +2 -2
  171. package/dist/commands/ci/start-tunnel.command.js.map +1 -1
  172. package/dist/commands/ci/trigger-test-run.core.js +2 -2
  173. package/dist/commands/ci/trigger-test-run.core.js.map +1 -1
  174. package/dist/commands/ci/trigger-test-run.types.js +2 -2
  175. package/dist/commands/ci/trigger-test-run.types.js.map +1 -1
  176. package/dist/commands/ci/upload-asset-chunk.command.js +2 -2
  177. package/dist/commands/ci/upload-asset-chunk.command.js.map +1 -1
  178. package/dist/commands/ci/upload-assets.command.js +2 -2
  179. package/dist/commands/ci/upload-assets.command.js.map +1 -1
  180. package/dist/commands/ci/upload-container.command.js +2 -2
  181. package/dist/commands/ci/upload-container.command.js.map +1 -1
  182. package/dist/commands/crawl.command.js +2 -2
  183. package/dist/commands/crawl.command.js.map +1 -1
  184. package/dist/commands/debug/clean-workspaces.js +2 -2
  185. package/dist/commands/debug/clean-workspaces.js.map +1 -1
  186. package/dist/commands/debug/index.js +2 -2
  187. package/dist/commands/debug/index.js.map +1 -1
  188. package/dist/commands/debug/present-workspace.js +2 -2
  189. package/dist/commands/debug/present-workspace.js.map +1 -1
  190. package/dist/commands/debug/project-worktree.js +2 -2
  191. package/dist/commands/debug/project-worktree.js.map +1 -1
  192. package/dist/commands/deprecated-aliases.js +2 -2
  193. package/dist/commands/deprecated-aliases.js.map +1 -1
  194. package/dist/commands/download/index.js +2 -2
  195. package/dist/commands/download/index.js.map +1 -1
  196. package/dist/commands/download/replay.command.js +2 -2
  197. package/dist/commands/download/replay.command.js.map +1 -1
  198. package/dist/commands/download/session.command.js +2 -2
  199. package/dist/commands/download/session.command.js.map +1 -1
  200. package/dist/commands/download/test-run.command.js +2 -2
  201. package/dist/commands/download/test-run.command.js.map +1 -1
  202. package/dist/commands/local/get-edited-files.utils.js +2 -2
  203. package/dist/commands/local/get-edited-files.utils.js.map +1 -1
  204. package/dist/commands/local/get-edited-files.utils.spec.js +2 -2
  205. package/dist/commands/local/get-edited-files.utils.spec.js.map +1 -1
  206. package/dist/commands/local/index.js +2 -2
  207. package/dist/commands/local/index.js.map +1 -1
  208. package/dist/commands/local/relevant-sessions.command.js +2 -2
  209. package/dist/commands/local/relevant-sessions.command.js.map +1 -1
  210. package/dist/commands/onboard/__tests__/build-context.spec.d.ts +2 -0
  211. package/dist/commands/onboard/__tests__/build-context.spec.d.ts.map +1 -0
  212. package/dist/commands/onboard/__tests__/build-context.spec.js +179 -0
  213. package/dist/commands/onboard/__tests__/build-context.spec.js.map +1 -0
  214. package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts +2 -0
  215. package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts.map +1 -0
  216. package/dist/commands/onboard/__tests__/check-vcs-link.spec.js +164 -0
  217. package/dist/commands/onboard/__tests__/check-vcs-link.spec.js.map +1 -0
  218. package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts +2 -0
  219. package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts.map +1 -0
  220. package/dist/commands/onboard/__tests__/codex-mcp.spec.js +73 -0
  221. package/dist/commands/onboard/__tests__/codex-mcp.spec.js.map +1 -0
  222. package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts +2 -0
  223. package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts.map +1 -0
  224. package/dist/commands/onboard/__tests__/detect-framework.spec.js +277 -0
  225. package/dist/commands/onboard/__tests__/detect-framework.spec.js.map +1 -0
  226. package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts +2 -0
  227. package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts.map +1 -0
  228. package/dist/commands/onboard/__tests__/git-repo-info.spec.js +109 -0
  229. package/dist/commands/onboard/__tests__/git-repo-info.spec.js.map +1 -0
  230. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts +2 -0
  231. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts.map +1 -0
  232. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js +157 -0
  233. package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js.map +1 -0
  234. package/dist/commands/onboard/__tests__/install-skills.spec.d.ts +2 -0
  235. package/dist/commands/onboard/__tests__/install-skills.spec.d.ts.map +1 -0
  236. package/dist/commands/onboard/__tests__/install-skills.spec.js +158 -0
  237. package/dist/commands/onboard/__tests__/install-skills.spec.js.map +1 -0
  238. package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts +2 -0
  239. package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts.map +1 -0
  240. package/dist/commands/onboard/__tests__/materialize-workspace.spec.js +116 -0
  241. package/dist/commands/onboard/__tests__/materialize-workspace.spec.js.map +1 -0
  242. package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts +2 -0
  243. package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts.map +1 -0
  244. package/dist/commands/onboard/__tests__/resolve-app.spec.js +166 -0
  245. package/dist/commands/onboard/__tests__/resolve-app.spec.js.map +1 -0
  246. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts +2 -0
  247. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts.map +1 -0
  248. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js +137 -0
  249. package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js.map +1 -0
  250. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts +2 -0
  251. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts.map +1 -0
  252. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js +286 -0
  253. package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js.map +1 -0
  254. package/dist/commands/onboard/build-context.d.ts +16 -0
  255. package/dist/commands/onboard/build-context.d.ts.map +1 -0
  256. package/dist/commands/onboard/build-context.js +104 -0
  257. package/dist/commands/onboard/build-context.js.map +1 -0
  258. package/dist/commands/onboard/check-vcs-link.d.ts +14 -0
  259. package/dist/commands/onboard/check-vcs-link.d.ts.map +1 -0
  260. package/dist/commands/onboard/check-vcs-link.js +111 -0
  261. package/dist/commands/onboard/check-vcs-link.js.map +1 -0
  262. package/dist/commands/onboard/codex-mcp.d.ts +24 -0
  263. package/dist/commands/onboard/codex-mcp.d.ts.map +1 -0
  264. package/dist/commands/onboard/codex-mcp.js +302 -0
  265. package/dist/commands/onboard/codex-mcp.js.map +1 -0
  266. package/dist/commands/onboard/customer-agents.d.ts +9 -0
  267. package/dist/commands/onboard/customer-agents.d.ts.map +1 -0
  268. package/dist/commands/onboard/customer-agents.js +19 -0
  269. package/dist/commands/onboard/customer-agents.js.map +1 -0
  270. package/dist/commands/onboard/customer-agents.json +17 -0
  271. package/dist/commands/onboard/customer-docs.d.ts +21 -0
  272. package/dist/commands/onboard/customer-docs.d.ts.map +1 -0
  273. package/dist/commands/onboard/customer-docs.js +31 -0
  274. package/dist/commands/onboard/customer-docs.js.map +1 -0
  275. package/dist/commands/onboard/customer-docs.json +35 -0
  276. package/dist/commands/onboard/detect-framework.d.ts +26 -0
  277. package/dist/commands/onboard/detect-framework.d.ts.map +1 -0
  278. package/dist/commands/onboard/detect-framework.js +305 -0
  279. package/dist/commands/onboard/detect-framework.js.map +1 -0
  280. package/dist/commands/onboard/discover-apps.d.ts +21 -0
  281. package/dist/commands/onboard/discover-apps.d.ts.map +1 -0
  282. package/dist/commands/onboard/discover-apps.js +318 -0
  283. package/dist/commands/onboard/discover-apps.js.map +1 -0
  284. package/dist/commands/onboard/docs-urls.d.ts +11 -0
  285. package/dist/commands/onboard/docs-urls.d.ts.map +1 -0
  286. package/dist/commands/onboard/docs-urls.js +17 -0
  287. package/dist/commands/onboard/docs-urls.js.map +1 -0
  288. package/dist/commands/onboard/git-repo-info.d.ts +15 -0
  289. package/dist/commands/onboard/git-repo-info.d.ts.map +1 -0
  290. package/dist/commands/onboard/git-repo-info.js +84 -0
  291. package/dist/commands/onboard/git-repo-info.js.map +1 -0
  292. package/dist/commands/onboard/index.d.ts +18 -0
  293. package/dist/commands/onboard/index.d.ts.map +1 -0
  294. package/dist/commands/onboard/index.js +164 -0
  295. package/dist/commands/onboard/index.js.map +1 -0
  296. package/dist/commands/onboard/inline-doc-constants.d.ts +21 -0
  297. package/dist/commands/onboard/inline-doc-constants.d.ts.map +1 -0
  298. package/dist/commands/onboard/inline-doc-constants.js +238 -0
  299. package/dist/commands/onboard/inline-doc-constants.js.map +1 -0
  300. package/dist/commands/onboard/launch-agent.d.ts +65 -0
  301. package/dist/commands/onboard/launch-agent.d.ts.map +1 -0
  302. package/dist/commands/onboard/launch-agent.js +311 -0
  303. package/dist/commands/onboard/launch-agent.js.map +1 -0
  304. package/dist/commands/onboard/materialize-workspace.d.ts +68 -0
  305. package/dist/commands/onboard/materialize-workspace.d.ts.map +1 -0
  306. package/dist/commands/onboard/materialize-workspace.js +177 -0
  307. package/dist/commands/onboard/materialize-workspace.js.map +1 -0
  308. package/dist/commands/onboard/print-summary.d.ts +10 -0
  309. package/dist/commands/onboard/print-summary.d.ts.map +1 -0
  310. package/dist/commands/onboard/print-summary.js +49 -0
  311. package/dist/commands/onboard/print-summary.js.map +1 -0
  312. package/dist/commands/onboard/resolve-app.d.ts +21 -0
  313. package/dist/commands/onboard/resolve-app.d.ts.map +1 -0
  314. package/dist/commands/onboard/resolve-app.js +78 -0
  315. package/dist/commands/onboard/resolve-app.js.map +1 -0
  316. package/dist/commands/onboard/resolve-project.d.ts +14 -0
  317. package/dist/commands/onboard/resolve-project.d.ts.map +1 -0
  318. package/dist/commands/onboard/resolve-project.js +92 -0
  319. package/dist/commands/onboard/resolve-project.js.map +1 -0
  320. package/dist/commands/onboard/safe-repo-fs.d.ts +59 -0
  321. package/dist/commands/onboard/safe-repo-fs.d.ts.map +1 -0
  322. package/dist/commands/onboard/safe-repo-fs.js +266 -0
  323. package/dist/commands/onboard/safe-repo-fs.js.map +1 -0
  324. package/dist/commands/onboard/setup-agent-integrations.d.ts +43 -0
  325. package/dist/commands/onboard/setup-agent-integrations.d.ts.map +1 -0
  326. package/dist/commands/onboard/setup-agent-integrations.js +324 -0
  327. package/dist/commands/onboard/setup-agent-integrations.js.map +1 -0
  328. package/dist/commands/onboard/templates/CLAUDE.md +213 -0
  329. package/dist/commands/onboard/templates/agents/auth-setup.md +117 -0
  330. package/dist/commands/onboard/templates/agents/ci-setup.md +742 -0
  331. package/dist/commands/onboard/templates/agents/csp-setup.md +78 -0
  332. package/dist/commands/onboard/templates/agents/false-positive-prevention.md +268 -0
  333. package/dist/commands/onboard/templates/agents/feature-flag-setup.md +133 -0
  334. package/dist/commands/onboard/templates/agents/local-simulation-verification.md +96 -0
  335. package/dist/commands/onboard/templates/agents/persisted-graphql-queries.md +150 -0
  336. package/dist/commands/onboard/templates/agents/recorder-installation.md +194 -0
  337. package/dist/commands/onboard/templates/agents/replay-fetch-retry-compatibility.md +252 -0
  338. package/dist/commands/onboard/templates/agents/reviewer.md +788 -0
  339. package/dist/commands/onboard/templates/agents/service-worker-compatibility.md +254 -0
  340. package/dist/commands/onboard/templates/agents/session-context.md +133 -0
  341. package/dist/commands/onboard/templates/agents/shared-worker-compatibility.md +187 -0
  342. package/dist/commands/onboard/templates/docs/additional-guides/backend-recorder.ts +340 -0
  343. package/dist/commands/onboard/templates/docs/ci/not-yet-run-checks.ts +58 -0
  344. package/dist/commands/onboard/templates/docs/ci.ts +19 -0
  345. package/dist/commands/onboard/templates/docs/cloud-replay.ts +145 -0
  346. package/dist/commands/onboard/templates/docs/constants.ts +37 -0
  347. package/dist/commands/onboard/templates/docs/github-actions-v2.ts +859 -0
  348. package/dist/commands/onboard/templates/docs/how-to/auth/bypassing-auth.ts +27 -0
  349. package/dist/commands/onboard/templates/docs/how-to/auth/enabling-full-auth.ts +91 -0
  350. package/dist/commands/onboard/templates/docs/how-to/configure-ignore-patterns.ts +77 -0
  351. package/dist/commands/onboard/templates/docs/how-to/enable-source-coverage.ts +84 -0
  352. package/dist/commands/onboard/templates/docs/how-to/fix-false-positive-diffs.ts +156 -0
  353. package/dist/commands/onboard/templates/docs/how-to/link-bitbucket.ts +15 -0
  354. package/dist/commands/onboard/templates/docs/how-to/link-gitlab.ts +22 -0
  355. package/dist/commands/onboard/templates/docs/how-to/record-session-context.ts +129 -0
  356. package/dist/commands/onboard/templates/docs/how-to/recorder-script.ts +139 -0
  357. package/dist/commands/onboard/templates/docs/how-to/testing-feature-flags.ts +97 -0
  358. package/dist/commands/onboard/templates/docs/how-to/testing-multiple-apps-or-app-variants.ts +40 -0
  359. package/dist/commands/onboard/templates/docs/how-to/troubleshoot-auth.ts +58 -0
  360. package/dist/commands/onboard/templates/docs/how-to/troubleshoot-failed-simulations.ts +97 -0
  361. package/dist/commands/onboard/templates/docs/how-to/typescript-types.ts +51 -0
  362. package/dist/commands/onboard/templates/docs/how-to/window-meticulous-object.ts +685 -0
  363. package/dist/commands/onboard/templates/docs/onboarding-guide.ts +415 -0
  364. package/dist/commands/onboard/templates/docs/recorder-getting-started.ts +24 -0
  365. package/dist/commands/onboard/templates/docs/recorder-snippets/constants.ts +1 -0
  366. package/dist/commands/onboard/templates/docs/recorder-snippets/explanation-of-methods-to-add-recorder.ts +21 -0
  367. package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/angular-instructions.ts +34 -0
  368. package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/any-other-framework-instructions.ts +118 -0
  369. package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/vue-instructions.ts +39 -0
  370. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/next-js-instructions.ts +49 -0
  371. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/nuxtjs-instructions.ts +68 -0
  372. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/rsbuild-instructions.ts +66 -0
  373. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/storybook-instructions.ts +59 -0
  374. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/sveltekit-instructions.ts +113 -0
  375. package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/vite-instructions.ts +58 -0
  376. package/dist/commands/onboard/templates/docs/recorder-snippets/script-requirements.ts +51 -0
  377. package/dist/commands/onboard/templates/docs/recorder-snippets/steps-after-installing-recorder.ts +25 -0
  378. package/dist/commands/onboard/templates/docs/reference/cli-commands.ts +1324 -0
  379. package/dist/commands/onboard/templates/docs/session-recording/csp-exceptions.ts +17 -0
  380. package/dist/commands/onboard/templates/docs/session-recording/recorder-npm-dependency.ts +62 -0
  381. package/dist/commands/onboard/templates/docs-imports/src/lib/next/next.constants.ts +46 -0
  382. package/dist/commands/onboard/templates/docs-imports/src/lib/utils/internal-urls/docs-urls.utils.ts +254 -0
  383. package/dist/commands/onboard/templates/settings.json +14 -0
  384. package/dist/commands/project/index.js +2 -2
  385. package/dist/commands/project/index.js.map +1 -1
  386. package/dist/commands/project/show.command.js +2 -2
  387. package/dist/commands/project/show.command.js.map +1 -1
  388. package/dist/commands/project/upload-source.command.js +2 -2
  389. package/dist/commands/project/upload-source.command.js.map +1 -1
  390. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js +2 -2
  391. package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js.map +1 -1
  392. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js +2 -2
  393. package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js.map +1 -1
  394. package/dist/commands/record/__tests__/backend.command.spec.js +2 -2
  395. package/dist/commands/record/__tests__/backend.command.spec.js.map +1 -1
  396. package/dist/commands/record/__tests__/login.command.spec.js +2 -2
  397. package/dist/commands/record/__tests__/login.command.spec.js.map +1 -1
  398. package/dist/commands/record/__tests__/session.command.spec.js +2 -2
  399. package/dist/commands/record/__tests__/session.command.spec.js.map +1 -1
  400. package/dist/commands/record/backend-dev-command.utils.js +2 -2
  401. package/dist/commands/record/backend-dev-command.utils.js.map +1 -1
  402. package/dist/commands/record/backend-sidecar.utils.js +2 -2
  403. package/dist/commands/record/backend-sidecar.utils.js.map +1 -1
  404. package/dist/commands/record/backend.command.js +2 -2
  405. package/dist/commands/record/backend.command.js.map +1 -1
  406. package/dist/commands/record/index.js +2 -2
  407. package/dist/commands/record/index.js.map +1 -1
  408. package/dist/commands/record/login.command.js +2 -2
  409. package/dist/commands/record/login.command.js.map +1 -1
  410. package/dist/commands/record/session.command.js +2 -2
  411. package/dist/commands/record/session.command.js.map +1 -1
  412. package/dist/commands/replay-debugger.ui.js +2 -2
  413. package/dist/commands/replay-debugger.ui.js.map +1 -1
  414. package/dist/commands/replay.command.js +2 -2
  415. package/dist/commands/replay.command.js.map +1 -1
  416. package/dist/commands/schema.command.js +2 -2
  417. package/dist/commands/schema.command.js.map +1 -1
  418. package/dist/commands/schema.command.spec.js +2 -2
  419. package/dist/commands/schema.command.spec.js.map +1 -1
  420. package/dist/index.js +2 -2
  421. package/dist/index.js.map +1 -1
  422. package/dist/main.js +2 -2
  423. package/dist/main.js.map +1 -1
  424. package/dist/utils/__tests__/handle-auth-failure.spec.js +2 -2
  425. package/dist/utils/__tests__/handle-auth-failure.spec.js.map +1 -1
  426. package/dist/utils/__tests__/project-selection-hint.spec.js +2 -2
  427. package/dist/utils/__tests__/project-selection-hint.spec.js.map +1 -1
  428. package/dist/utils/__tests__/resolve-project-identifier.spec.js +2 -2
  429. package/dist/utils/__tests__/resolve-project-identifier.spec.js.map +1 -1
  430. package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +2 -2
  431. package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
  432. package/dist/utils/__tests__/select-project.spec.js +5 -4
  433. package/dist/utils/__tests__/select-project.spec.js.map +1 -1
  434. package/dist/utils/cli-user-error.js +2 -2
  435. package/dist/utils/cli-user-error.js.map +1 -1
  436. package/dist/utils/constants.js +2 -2
  437. package/dist/utils/constants.js.map +1 -1
  438. package/dist/utils/environment.utils.js +2 -2
  439. package/dist/utils/environment.utils.js.map +1 -1
  440. package/dist/utils/format-coverage-ranges.js +2 -2
  441. package/dist/utils/format-coverage-ranges.js.map +1 -1
  442. package/dist/utils/handle-auth-failure.js +2 -2
  443. package/dist/utils/handle-auth-failure.js.map +1 -1
  444. package/dist/utils/out-of-date-client-error.js +2 -2
  445. package/dist/utils/out-of-date-client-error.js.map +1 -1
  446. package/dist/utils/project-selection-hint.js +2 -2
  447. package/dist/utils/project-selection-hint.js.map +1 -1
  448. package/dist/utils/resolve-project-identifier.js +2 -2
  449. package/dist/utils/resolve-project-identifier.js.map +1 -1
  450. package/dist/utils/resolve-test-run-from-commit.js +2 -2
  451. package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
  452. package/dist/utils/select-project.d.ts +9 -0
  453. package/dist/utils/select-project.d.ts.map +1 -1
  454. package/dist/utils/select-project.js +58 -15
  455. package/dist/utils/select-project.js.map +1 -1
  456. package/package.json +14 -12
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-agent-integrations.js","sources":["../../../src/commands/onboard/setup-agent-integrations.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"d86e4f01-f4b3-5d15-b551-8b7f879cf289"}
@@ -0,0 +1,213 @@
1
+ # Meticulous Onboard
2
+
3
+ ## What This Is
4
+
5
+ You are installing [Meticulous](https://www.meticulous.ai) into the customer's application
6
+ repository. The repo itself is available via the added working directory (the parent of this
7
+ workspace, or the path named in `onboard-context.json` → `projectRoot`).
8
+
9
+ Your job is to **apply** the install in the real codebase (recorder snippet, CI workflow,
10
+ conditional fixes) and then **open a pull request** with those changes.
11
+
12
+ You do pause once — to get the user's approval on a short plan (step 4) — but a plan is not the
13
+ deliverable. Do **not** write a plan markdown file and stop. The deliverable is one or more PRs
14
+ containing small, correct diffs in the customer repo.
15
+
16
+ ## How Meticulous Works
17
+
18
+ Meticulous records user sessions by injecting a JavaScript recorder snippet into customer
19
+ applications. These sessions capture user activity and network requests. When a customer makes
20
+ a commit, Meticulous triggers a test run that replays selected sessions against the new code,
21
+ taking screenshots at key moments. Differences between the base (before) and head (after) runs
22
+ are surfaced to the developer via a PR comment.
23
+
24
+ ## Context
25
+
26
+ Read `.claude/onboard-context.json` (or `onboard-context.json` in this workspace) first. It
27
+ contains:
28
+
29
+ - `orgAndProject` — Meticulous project identifier when known
30
+ - `projectRoot` — absolute path to the customer repository to edit
31
+ - `repoUrl` — repository URL when known
32
+ - `ciProvider` — `"github-actions"`, `"gitlab-ci"`, `"bitbucket-pipelines"`, or `"unknown"`
33
+ - `isGitHubIntegrationActive` / `isGitLabIntegrationActive` / `isBitbucketIntegrationActive` —
34
+ whether the Meticulous project is already linked to that host
35
+ - `isMonorepo` / `selectedAppPath` / `selectedAppName` / `selectedAppAbsolutePath` — the
36
+ frontend app the user already selected (or `.` for a single-package repo). **Stay scoped
37
+ to this app** for recorder and app-level changes; put shared CI at the repo root with
38
+ monorepo path filters when `isMonorepo` is true.
39
+ - `frameworkDetection` — CLI heuristic (`framework`, `rendering`, `isUnsupportedSsr`,
40
+ `unsupportedSsrConfidence`). When `isUnsupportedSsr` is true, the CLI warned the user and
41
+ they chose to continue regardless of confidence. Validate the detection during review. If
42
+ you confirm SSR that is **not** Next.js Pages Router SSR, say so and confirm with the user
43
+ before applying anything; do not silently proceed, and do not silently abort either.
44
+ - `meticulousSettingsUrl` / `meticulousTokensUrl` / `meticulousSessionsUrl` — dashboard links.
45
+ **Use `meticulousTokensUrl` for both the recording token and the project API token**
46
+ (Project → Settings → Tokens).
47
+ - `githubConfigureProjectsUrl` — org page to link/map the GitHub repository to this project
48
+ - `gitlabConfigureProjectsUrl` / `bitbucketConfigureProjectsUrl` — project settings (CI →
49
+ Linked repository) where the GitLab / Bitbucket access token is entered
50
+ - `secretsUrl` / `secretsUrlLabel` — where to store the API token in CI (GitHub Actions
51
+ secrets, GitLab CI/CD variables, or Bitbucket repository variables)
52
+ - `agentIntegrationPaths` — repo-relative skill/MCP paths the CLI already installed. **You
53
+ must stage and commit every existing path in this list in the onboarding PR.**
54
+ - `meticulousSideSetupPath` — absolute path to write if this install needs work on the
55
+ Meticulous side (see below). Always write and quote that absolute path.
56
+
57
+ ## Reference docs
58
+
59
+ The specialist playbooks in `.claude/agents/` cite doc paths like
60
+ `.claude/docs/github-actions-v2.ts`. Those files are bundled into this workspace under
61
+ `.claude/docs/` — **read them locally; they are the authoritative source** for the recorder
62
+ snippet (per framework, under `.claude/docs/recorder-snippets/`) and the CI YAML.
63
+ `github-actions-v2.ts` covers all three CI providers — GitHub Actions, GitLab CI and Bitbucket
64
+ Pipelines; use the section matching `ciProvider`, and prefer the monorepo naming section when
65
+ `isMonorepo` is true.
66
+
67
+ These files are the docs site's source: the markdown lives in template literals. Content the docs
68
+ site pulls in from another module (the GitLab and Bitbucket linking steps, for instance) has
69
+ already been inlined for you. A remaining `${NAME}` is a constant declared in that same file —
70
+ read its value there and use that. Never copy a `${NAME}` placeholder into the repo or the PR
71
+ description as if it were text.
72
+
73
+ If a cited file is somehow missing, you may fetch the published page: drop the `.claude/docs/`
74
+ prefix and the `.ts` suffix and prepend `https://app.meticulous.ai/docs/` (public, no login;
75
+ `app.meticulous.ai` is pre-approved for fetching). Know the fetched pages' limits: the
76
+ framework-specific recorder snippets and the GitLab/Bitbucket CI tabs are rendered client-side,
77
+ so a fetch will not contain them — only the local files have that content. Never invent the
78
+ recorder snippet or the CI YAML from memory; if you cannot read it, say so and ask the user
79
+ before proceeding.
80
+
81
+ ## Workflow
82
+
83
+ 1. **Reviewer first.** Dispatch the `reviewer` agent (Task) scoped to `selectedAppPath`.
84
+ Wait for the structured codebase summary. Do not edit application files until review is
85
+ done. If review finds unsupported SSR (not Next.js Pages), raise it with the user and wait
86
+ for their call before continuing.
87
+
88
+ 2. **Monorepo app selection is already done by the CLI** when `isMonorepo` is true — use
89
+ `selectedAppPath` / `selectedAppName`. Do **not** re-ask unless `selectedAppPath` is
90
+ missing or clearly wrong; if you must ask, wait for the user's answer before dispatching
91
+ specialists.
92
+
93
+ 3. **Dispatch applicable specialists in parallel.** After the reviewer (and any app selection),
94
+ emit **every** applicable customer-facing specialist as Task calls **in a single assistant
95
+ message** (side by side). Always include at least:
96
+ - `recorder-installation`
97
+ - `ci-setup`
98
+ - `false-positive-prevention`
99
+ - `local-simulation-verification`
100
+
101
+ Conditionally include (based on the review summary):
102
+ - `auth-setup` — only when server-side / mixed auth needs a Meticulous bypass
103
+ - `csp-setup` — when CSP is present
104
+ - `feature-flag-setup` — when feature flags affect UI
105
+ - `persisted-graphql-queries` — when persisted GraphQL is used
106
+ - `service-worker-compatibility` / `shared-worker-compatibility` — when workers matter
107
+ - `session-context` / `replay-fetch-retry-compatibility` — when the review calls for them
108
+
109
+ Pass each specialist the reviewer summary and the selected app path.
110
+
111
+ 4. **Agree the plan before editing anything.** Post a short plan and **wait for the user to
112
+ approve or amend it**. Keep it skimmable — no essay, no code dumps:
113
+ - the app being onboarded, and the recorder approach (script tag vs npm package, which file)
114
+ - the CI change (workflow/job path, monorepo path filters)
115
+ - each conditional fix, one line each, with the file it touches and why the review called
116
+ for it
117
+ - anything that needs Meticulous-side setup (see the section below)
118
+ - how you intend to split the PRs (see step 6) — say "one PR" when that is right
119
+ - anything the user must do by hand afterwards (tokens, repo linking)
120
+
121
+ Do **not** edit files under `projectRoot` until they approve. If they amend the plan, follow
122
+ the amended version. If the session is non-interactive (launched with `--headless`), post
123
+ the plan for the record and continue without waiting.
124
+
125
+ 5. **Apply the install yourself.** Using the specialist guidance, edit files under
126
+ `projectRoot`:
127
+ - Install the recorder (script tag or npm package, matching the framework)
128
+ - Add CI workflow / job for Meticulous
129
+ - Apply only the conditional fixes that the review said are needed
130
+ - Prefer the smallest correct change; do not refactor unrelated code
131
+ - Confirm each edit with a static read-back (snippet is first in `<head>`, workflow YAML is
132
+ valid). Do **not** build, start the app, or run a simulation to verify — that is the
133
+ customer's post-merge step.
134
+
135
+ 6. **Open the pull request(s).** This is the required final output.
136
+ - Create a new branch off the current branch, e.g. `meticulous/install`.
137
+ - One PR is the default. Split only when the user approved a split in step 4 — worth
138
+ proposing when the install carries risky or independently reviewable changes, e.g.
139
+ PR 1 recorder + CI + skills/MCP (the part that must land first), PR 2 compatibility fixes
140
+ (auth bypass, CSP, feature flags). When splitting:
141
+ - keep the recorder, CI and `agentIntegrationPaths` together in the first PR
142
+ - stack the branches — PR 2 branches off PR 1's branch and targets it, so its diff stays
143
+ reviewable; note in the description that it should be retargeted once PR 1 merges
144
+ - cross-link them in each description ("part 1 of 2", with the other PR's URL)
145
+ - Stage **both**:
146
+ 1. the application/CI files you edited under `projectRoot`, and
147
+ 2. every path listed in `onboard-context.json` → `agentIntegrationPaths`
148
+ (Meticulous skills + MCP config the CLI already installed — typically
149
+ `.claude/skills/`, `.agents/skills/`, `.cursor/skills/`, `skills-lock.json`,
150
+ `.mcp.json`, `.cursor/mcp.json`, `.codex/config.toml`). These **must** be in the PR.
151
+ - Never stage the `.meticulous-onboard` workspace, and never commit secrets.
152
+ - Commit with a clear message like `Add Meticulous visual testing`.
153
+ - Push the branch to `origin` and open a PR using the GitHub CLI (`gh pr create`) when it
154
+ is available. On GitLab, use `glab mr create` if present.
155
+ - The PR description must list what was installed first (including skills/MCP), then end
156
+ with a **Next steps** section for the reviewer. That section must include direct links
157
+ from context:
158
+ - recording token + project API token: `{meticulousTokensUrl}`
159
+ - recording token: public, read-only — safe to put in a build-time frontend env var
160
+ (e.g. `NEXT_PUBLIC_*` / `VITE_*`); it is meant to ship in the client bundle
161
+ - project API token: secret — store only in `{secretsUrl}` / `{secretsUrlLabel}`
162
+ - and any remaining manual steps
163
+ - If `gh`/`glab` is not installed or the user is not authenticated, do NOT abort the run:
164
+ commit and push the branch anyway (or leave the commit local if push fails), then print
165
+ the exact `gh pr create` / manual "open PR" command and the compare URL so the user can
166
+ finish in one click.
167
+
168
+ 7. **Report and stop.** Print every PR URL (or the branch name + exact command to open it) and
169
+ the files changed. If you wrote a Meticulous-side setup file, print its absolute path here. Put any
170
+ remaining secrets/tokens or manual follow-ups last under next steps. This is the end of the
171
+ run — do not start another review/specialist/verification pass.
172
+
173
+ ## When Meticulous-side setup is needed
174
+
175
+ Some things cannot be fixed in the customer repo and need work on the Meticulous side — for
176
+ example WebSocket traffic, an unusual auth flow that needs a server-side bypass, backend/network
177
+ behaviour that has to be mocked centrally, or a session-recording limitation the specialists
178
+ flagged.
179
+
180
+ When you hit one of those, write the file at the absolute path `{meticulousSideSetupPath}` from
181
+ context — always that absolute path, never a relative one: your cwd is this workspace rather than
182
+ the repo, so a relative path ends up somewhere the user cannot find. The file must contain:
183
+
184
+ - the Meticulous project (`orgAndProject`) and the app being onboarded (`selectedAppPath`)
185
+ - one section per item: what you found, the files/evidence it came from, and what you need
186
+ Meticulous to do
187
+ - what you did and did not install in the repo because of it
188
+
189
+ Then tell the user to send that file to their Meticulous contact (or support@meticulous.ai),
190
+ quoting its full absolute path so they can find it. Mention it in the PR description too, but
191
+ **never commit it** — the `.meticulous-onboard` workspace is gitignored and stays local.
192
+
193
+ ## Rules
194
+
195
+ - **Single pass. Do not re-verify or re-run.** Run the reviewer once and the specialist wave
196
+ once, get the plan approved, apply the changes, and open the PR. After applying, do **not**
197
+ re-dispatch the reviewer or any specialist to "double-check", and do not loop back to earlier
198
+ steps. One review → one specialist wave → plan approval → apply → PR.
199
+ - **Do not build, run, or simulate the app yourself.** Never run `npm run build` / dev servers,
200
+ `meticulous simulate`, or a Meticulous test run to verify your work. Recorder installs and CI
201
+ config are verified by the customer's own first test run after merge — that is a post-merge
202
+ step, not part of this run. Static checks are fine (read the file back, confirm the snippet is
203
+ in `<head>`); actually executing the app or a simulation is not.
204
+ - Verification instructions (local simulation, first test run) belong **only** in the PR
205
+ "Next steps" section for the customer to run later — you do not perform them.
206
+ - Edit only under `projectRoot`. Do not modify this `.meticulous-onboard` workspace except for
207
+ notes such as `meticulous-side-setup.md`, and never commit it.
208
+ - Never commit secrets (`.env` with private keys, project API tokens) into the repo. The
209
+ recording token is public/read-only and may be set as a build-time frontend variable.
210
+ - Do not force-push, and do not push to the default branch — always use a new branch and a PR.
211
+ - Do not invent Meticulous product behavior; follow the agent playbooks in `.claude/agents/`.
212
+ - If blocked (missing token, unsupported SSR, etc.), explain clearly and stop rather than
213
+ guessing — but still commit whatever safe changes you have made on the branch.