@alwaysmeticulous/cli 2.326.1 → 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 +14 -12
@@ -0,0 +1,415 @@
1
+ import {
2
+ ANGULAR_CLI_URL,
3
+ CLOUD_REPLAY_URL,
4
+ ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL,
5
+ FAQ_AND_TROUBLESHOOTING_URL,
6
+ FIX_FALSE_POSITIVES_URL,
7
+ GITHUB_ACTIONS_SETUP_URL,
8
+ MAKE_CHECK_BLOCKING_URL,
9
+ NETWORK_STUBBING_EXPLANATION_URL,
10
+ NEXTJS_APP_ROUTER_ADDITIONAL_SETUP_URL,
11
+ REACT_VITE_URL,
12
+ RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL,
13
+ TESTING_FEATURE_FLAGS,
14
+ TROUBLESHOOT_AUTH_URL,
15
+ TROUBLESHOOT_RECORDER_URL,
16
+ VUE_VITE_URL,
17
+ } from "src/lib/utils/internal-urls/docs-urls.utils";
18
+ import { SIMULATION_TAB_NAMES } from "./constants";
19
+ import { EXPLANATION_OF_METHODS_TO_ADD_RECORDER } from "./recorder-snippets/explanation-of-methods-to-add-recorder";
20
+
21
+ export const document = `---
22
+ {
23
+ "title": "Meticulous Onboarding Guide"
24
+ }
25
+ ---
26
+
27
+ # {% $frontmatter.title %}
28
+
29
+ Welcome to Meticulous! This guide will help you set up automated visual testing for your web application in 3 main steps.
30
+
31
+ ---
32
+
33
+ ## Quick Start - Choose Your Path
34
+
35
+ Answer 3 questions to get a customized setup guide:
36
+
37
+ **Question 1: What framework are you using?**
38
+ - **Next.js** → See [Next.js Setup Guide](${NEXTJS_APP_ROUTER_ADDITIONAL_SETUP_URL})
39
+ - **React (Vite/CRA)** → See [React Setup Guide](${REACT_VITE_URL})
40
+ - **Vue** → See [Vue Setup Guide](${VUE_VITE_URL})
41
+ - **Angular** → See [Angular Setup Guide](${ANGULAR_CLI_URL})
42
+ - **Other** → Continue with general guide below
43
+
44
+ **Question 2: What are you testing?**
45
+ - **Static site (HTML/JS/CSS, no SSR)** → Use \`upload-assets\` action (simplest and most reliable)
46
+ - **Server-rendered app (Next.js, Nuxt, etc.)** → Use \`upload-container\` action (Docker)
47
+ - **Not sure?** → Continue reading below
48
+
49
+ **Question 3: How do you deploy?**
50
+ - **Vercel Preview URLs** → Use [Cloud Replay](${CLOUD_REPLAY_URL}) (no CI workflow needed)
51
+ - **Netlify/Other preview URLs** → Use [Cloud Replay](${CLOUD_REPLAY_URL})
52
+ - **GitHub Actions CI** → Use [GitHub Actions Setup](${GITHUB_ACTIONS_SETUP_URL})
53
+ - **Other CI** → Continue with general guide below
54
+
55
+ ---
56
+
57
+ ## Overview - 3 Steps to Get Started
58
+
59
+ 1. **[5 minutes]** Install recorder and test locally
60
+ 2. **[15 minutes]** Set up CI/CD workflow
61
+ 3. **[Ongoing]** Record sessions and review diffs
62
+
63
+ **Total setup time**: ~20 minutes for basic setup
64
+
65
+ ---
66
+
67
+ ## Step 1: Install Recorder and Test Locally (5 minutes)
68
+
69
+ Before setting up CI, let's verify Meticulous works on your local machine.
70
+
71
+ ### 1.1 Add Recorder Script
72
+
73
+ {% callout type="info" title="Choose Your Environment" %}
74
+ - **Always install on localhost** (for local development)
75
+ - **Recommended**: Install on staging/preview environments
76
+ - **Production**: Contact support for guidance
77
+ {% /callout %}
78
+
79
+ Add the Meticulous recorder script to your HTML \`<head>\`:
80
+
81
+ \`\`\`html
82
+ <script
83
+ data-project-id="YOUR_PROJECT_ID"
84
+ src="https://snippet.meticulous.ai/v1/meticulous.js"
85
+ ></script>
86
+ \`\`\`
87
+
88
+ **Get your project ID**: [Meticulous Dashboard](https://app.meticulous.ai) → Project Settings
89
+
90
+ **Where to add it**:
91
+ - **Next.js App Router**: \`app/layout.tsx\` in \`<head>\`
92
+ - **Next.js Pages**: \`pages/_document.tsx\` in \`<Head>\`
93
+ - **React/Vue/Angular**: \`index.html\` or \`src/index.html\` in \`<head>\`
94
+
95
+ ### 1.2 Verify Recorder Works
96
+
97
+ 1. **Start your dev server**: \`npm run dev\`
98
+ 2. **Open browser DevTools Console**
99
+ 3. **Check for**: "Meticulous recorder initialized" message
100
+ 4. **Verify**: \`window.Meticulous\` object exists
101
+
102
+ If recorder doesn't load, see [Troubleshoot Recorder](${TROUBLESHOOT_RECORDER_URL}).
103
+
104
+ ### 1.3 Test Local Simulation
105
+
106
+ Let's verify Meticulous can replay a session on your local machine:
107
+
108
+ {% command_card %}
109
+ \`\`\`shell
110
+ # Get a session ID from the dashboard first
111
+ npx @alwaysmeticulous/cli simulate \\
112
+ --apiToken="{% api_token /%}" \\
113
+ --sessionId="<SESSION_ID>" \\
114
+ --appUrl="http://localhost:3000"
115
+ \`\`\`
116
+ {% /command_card %}
117
+
118
+ **Where to get session ID**:
119
+ 1. Use your app normally with recorder installed
120
+ 2. Go to [Meticulous Dashboard](https://app.meticulous.ai)
121
+ 3. Find a recent session and copy its ID
122
+
123
+ **Success criteria**:
124
+ - Command completes without errors
125
+ - You can view the simulation in the dashboard
126
+ - Screenshots look correct
127
+
128
+ **Common issues**:
129
+ - **Authentication blocks simulation?** → See [Troubleshoot Auth](${TROUBLESHOOT_AUTH_URL})
130
+ - **Different environment errors?** → See [Cross-Environment Guide](${RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL})
131
+ - **Need to debug?** → Add \`--debugger --devTools\` flags
132
+
133
+ **Debug tools**:
134
+ - View simulation events: Dashboard → Simulation → *${SIMULATION_TAB_NAMES.TIMELINE_AND_LOGS}* tab
135
+ - Step through replay: Add \`--debugger --devTools\` to simulate command
136
+
137
+ {% callout type="warning" title="Test Local Simulation Before CI" %}
138
+ Debugging simulation issues on your local machine is **much easier** than debugging in CI.
139
+ Don't proceed to Step 2 until local simulation works!
140
+ {% /callout %}
141
+
142
+ ---
143
+
144
+ ## Step 2: Set Up CI/CD Workflow (15 minutes)
145
+
146
+ Now that local simulation works, let's run tests in CI on every pull request.
147
+
148
+ ### 2.1 Choose Your CI Approach
149
+
150
+ **Option A: Upload static assets (Recommended for static sites)**
151
+ - If your app can be served as static HTML/JS/CSS without server-side rendering
152
+ - Simplest and most reliable approach
153
+ - Not recommended for typical Next.js apps
154
+ - Guide: [GitHub Actions Setup](${GITHUB_ACTIONS_SETUP_URL})
155
+
156
+ **Option B: Upload a Docker container (Recommended for server-rendered apps)**
157
+ - For Next.js, Nuxt, and other SSR frameworks
158
+ - You build a Docker image, Meticulous hosts it
159
+ - Guide: [GitHub Actions Setup](${GITHUB_ACTIONS_SETUP_URL})
160
+
161
+ **Option C: Preview URL integration**
162
+ - Works with Vercel, Netlify, and other preview URL providers
163
+ - No CI workflow needed (Vercel has a direct integration)
164
+ - Guide: [Cloud Replay Setup](${CLOUD_REPLAY_URL})
165
+
166
+ ### 2.2 Add API Token to CI
167
+
168
+ 1. **Get API token**: [Dashboard](https://app.meticulous.ai) → Project Settings
169
+ 2. **Add to GitHub**: Repo Settings → Secrets → Actions
170
+ 3. **Create secret**: Name it \`METICULOUS_API_TOKEN\`
171
+
172
+ ### 2.3 Create Workflow File
173
+
174
+ Follow the [CI Setup Guide](${GITHUB_ACTIONS_SETUP_URL}) for step-by-step instructions and example workflow files for your chosen approach (upload static assets or upload a Docker container).
175
+
176
+ If using preview URLs, follow the [Cloud Replay Setup Guide](${CLOUD_REPLAY_URL}) instead.
177
+
178
+ ### 2.4 Verify Workflow Runs
179
+
180
+ 1. **Commit and push** the workflow file
181
+ 2. **Create a test PR** with a small change
182
+ 3. **Check Actions tab** for workflow run
183
+ 4. **Expected first PR**: "No base test run found" (this is normal!)
184
+
185
+ ### 2.5 Establish Base Run
186
+
187
+ For the first PR to work, Meticulous needs a base run on your main branch:
188
+
189
+ 1. **Merge the PR** that adds Meticulous workflow
190
+ 2. **Wait** for workflow to run on main branch
191
+ 3. **Verify** in Actions tab: main branch run succeeded
192
+ 4. **Check dashboard**: You should see sessions and test runs
193
+
194
+ ### 2.6 Test with Second PR
195
+
196
+ 1. **Make a small UI change**
197
+ 2. **Create another PR**
198
+ 3. **Expected**: Meticulous comment with test results
199
+ 4. **If you changed UI**: Diffs are detected
200
+ 5. **If no changes**: "No diffs detected"
201
+
202
+ {% callout type="success" title="Success!" %}
203
+ If you see a Meticulous comment on your PR, congratulations! You're now running automated visual tests.
204
+ {% /callout %}
205
+
206
+ ---
207
+
208
+ ## Checklist: Is Everything Working?
209
+
210
+ Use this checklist to verify your setup:
211
+
212
+ ### Recorder Installation
213
+ - Recorder script added to HTML \`<head>\`
214
+ - Project ID is correct
215
+ - Console shows "Meticulous recorder initialized"
216
+ - \`window.Meticulous\` object exists
217
+ - Sessions appear in dashboard after using app
218
+
219
+ ### Local Simulation
220
+ - \`npx @alwaysmeticulous/cli simulate\` completes successfully
221
+ - Can simulate authenticated pages
222
+ - Can simulate different environments (if needed)
223
+ - Simulation screenshots look correct
224
+
225
+ ### CI Setup
226
+ - API token added as repository secret
227
+ - Workflow file created and pushed
228
+ - Workflow runs on PRs
229
+ - Base run exists on main branch
230
+ - Meticulous comments on PRs
231
+
232
+ ### Ready for Production
233
+ - No false positive diffs
234
+ - Auth works in tests
235
+ - All critical user flows are recorded
236
+ - Team knows how to review diffs
237
+
238
+ ---
239
+
240
+ ## Step 3: Record Sessions and Review Diffs (Ongoing)
241
+
242
+ ### 3.1 Record Real User Sessions
243
+
244
+ The more sessions you record, the better your test coverage:
245
+
246
+ **Where to record**:
247
+ - **Development**: Engineers testing locally
248
+ - **Staging**: QA and product testing
249
+ - **Preview URLs**: Testing on PRs
250
+ - **Production**: Contact support for guidance
251
+
252
+ **What gets recorded**:
253
+ - User clicks, typing, scrolling
254
+ - Network requests and responses
255
+ - DOM changes and state
256
+
257
+ ### 3.2 Curate Your Golden Set
258
+
259
+ Meticulous automatically selects sessions that maximize coverage:
260
+
261
+ 1. **View selected sessions**: Dashboard → Selected Sessions tab
262
+ 2. **Increase count if needed**: Configure → Number of Sessions
263
+ 3. **Manually add important flows**: Select specific sessions
264
+
265
+ ### 3.3 Review Diffs on Pull Requests
266
+
267
+ When Meticulous detects visual differences:
268
+
269
+ 1. **Review diff screenshots** in PR comment
270
+ 2. **Determine if change is**:
271
+ - **Expected**: Click "Approve" to mark as intentional
272
+ - **Bug**: Fix the code
273
+ - **False positive**: See [Fix False Positives](${FIX_FALSE_POSITIVES_URL})
274
+
275
+ ### 3.4 Make CI Check Blocking (Optional)
276
+
277
+ Prevent merging PRs with unacknowledged diffs:
278
+
279
+ 1. Go to repository settings
280
+ 2. Add Meticulous check as required status
281
+ 3. Now PRs can't merge with pending diffs
282
+
283
+ See: [Make CI Check Blocking Guide](${MAKE_CHECK_BLOCKING_URL})
284
+
285
+ ---
286
+
287
+ ## Original Setup Details
288
+
289
+ Below are the detailed instructions from the original onboarding guide.
290
+
291
+ ## 1. Installing the session recorder
292
+
293
+ Before installing the Meticulous session recorder, you should decide which environments are a good fit for recording user sessions:
294
+
295
+ - The session recorder should always be installed on localhost to ensure that all sessions generated by engineers developing and testing your application locally are captured.
296
+ - We also recommend installing it on other internal environments, like staging stacks or preview URLs.
297
+ - If you are interested in recording production sessions, please reach out to Meticulous support for additional details.
298
+
299
+ ${EXPLANATION_OF_METHODS_TO_ADD_RECORDER}
300
+
301
+ More information on troubleshooting recorder problems can be found [here](${TROUBLESHOOT_RECORDER_URL}) and [here](${ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL}).
302
+
303
+ ## 2. Setting up tests to run in CI
304
+
305
+ ### Validating that sessions can be simulated
306
+
307
+ Before setting up tests to run in CI, you should ensure that sessions can be simulated on your local machine. Debugging any issues on your
308
+ local machine is much easier than debugging any issues that occur in CI. You can replay locally using the following CLI command:
309
+
310
+ {% command_card %}
311
+ \`\`\`shell
312
+ npx @alwaysmeticulous/cli simulate
313
+ --apiToken="{% api_token /%}"
314
+ --sessionId="<SESSION_ID>"
315
+ --appUrl="<URL_WHERE_APP_IS_RUNNING_LOCALLY>"
316
+ \`\`\`
317
+ {% /command_card %}
318
+
319
+ Important session simulation scenarios to check:
320
+
321
+ - Can you simulate sessions on authenticated pages? If not, see [this doc](${TROUBLESHOOT_AUTH_URL}) on troubleshooting authentication & authorization issues.
322
+ - Can you simulate sessions on a different environment from where they were recorded (e.g. can you simulate a session recorded on sandbox against
323
+ your localhost environment)? If not, see [this doc](${RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL}) on troubleshooting cross-environment issues.
324
+
325
+ Two tools to debug simulation issues:
326
+
327
+ - Once a simulation has completed and been uploaded to Meticulous, you can view all the events that happened during the simulation on the
328
+ *${SIMULATION_TAB_NAMES.TIMELINE_AND_LOGS}* tab of the simulation’s page in the Meticulous UI
329
+ - Simulating a session with the flags \`--debugger --devTools\` will let you step through the simulation one user event at a time and pinpoint exactly where the issue is occurring
330
+
331
+ ### Running tests in CI
332
+
333
+ For test runs to be executed in CI, Meticulous needs to be able to simulate sessions in 3 different contexts:
334
+
335
+ 1. **PR test runs**: whenever a new commit is pushed to a PR branch, Meticulous kicks off a test run where it simulates user sessions against the app running that commit.
336
+ Ideally, this version of the app would be hosted on a commit-specific URL, but Meticulous can also run against the app if it's spun up in CI.
337
+ 2. **New-commit-on-main test runs:** whenever a new commit is pushed to the main branch, Meticulous kicks off a test run to take new baseline screenshots.
338
+ Ideally, Meticulous would run against a commit-specific URL here as well, but running the app in CI also works.
339
+ 3. **Session selection test runs:** each night, Meticulous simulates every new session from the last 24 hours to determine if any of them add new coverage and should be
340
+ included in the *selected set*. In this context, we want to test against the latest version of your app, so usually a publicly accessible staging URL works best.
341
+
342
+ How to get Meticulous to trigger test runs across these contexts depends on how you build and serve your app:
343
+
344
+ - **[Recommended] Upload static assets.** If your app can be served as a folder of static assets (HTML/JS/CSS) without server-side rendering, this is the simplest and most reliable approach. Follow the guide [here](${GITHUB_ACTIONS_SETUP_URL}) to set up the \`upload-assets\` action. This approach is not recommended for typical Next.js apps.
345
+ - **Upload a Docker container.** For server-rendered apps (Next.js, Nuxt, etc.), you can build a Docker image and have Meticulous host it. Follow the guide [here](${GITHUB_ACTIONS_SETUP_URL}) to set up the \`upload-container\` action.
346
+ - **Vercel preview URLs.** If you use Vercel preview URLs, the complexity of dealing with three different environments is completely abstracted.
347
+ You can add Meticulous’ Vercel integration [here](https://vercel.com/integrations/meticulous) and then follow the guide [here](${CLOUD_REPLAY_URL}) to complete installation.
348
+ - **Other preview URL providers (e.g. Netlify).** If you deploy your app to a preview URL without Vercel, you can follow the doc [here](${CLOUD_REPLAY_URL}) to set up Meticulous.
349
+
350
+ Almost any app can be containerized, so if neither static assets nor preview URLs fit your app, uploading a Docker container is the universal fallback.
351
+
352
+ {% callout type="info" title="GitHub Action Configuration" %}
353
+ For a comprehensive list of all GitHub Action options and configuration parameters, see the [report-diffs-action README](https://github.com/alwaysmeticulous/report-diffs-action#readme).
354
+ {% /callout %}
355
+
356
+ ## Common Gotchas
357
+
358
+ Before diving into performance tuning, be aware of these common issues that can cause test failures:
359
+
360
+ ### Static Assets with Absolute URLs
361
+
362
+ Meticulous automatically swaps the base URL for page navigation and API requests, but **static assets (CSS, JS, images) referenced with absolute URLs in your HTML are NOT rewritten**.
363
+
364
+ If your HTML contains:
365
+ \`\`\`html
366
+ <script src="https://production.example.com/dist/app.js"></script>
367
+ \`\`\`
368
+
369
+ Change it to a relative URL:
370
+ \`\`\`html
371
+ <script src="/dist/app.js"></script>
372
+ \`\`\`
373
+
374
+ See [Troubleshooting Cross-Environment Issues](${RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL}) for more details.
375
+
376
+ ### Understanding Network Mocking
377
+
378
+ Meticulous automatically mocks XHR, Fetch, and WebSocket requests, but does NOT mock static assets loaded via HTML tags. For a complete explanation of what is and isn't mocked, see [How Meticulous Handles Network Requests](${NETWORK_STUBBING_EXPLANATION_URL}).
379
+
380
+ ### Cross-Environment Configuration
381
+
382
+ If you're recording sessions in one environment (e.g., production) and simulating against another (e.g., localhost or preview URLs), ensure your environments have consistent:
383
+ - Authentication configuration
384
+ - URL routing patterns
385
+ - Environment variables
386
+
387
+ See our [FAQ & Troubleshooting](${FAQ_AND_TROUBLESHOOTING_URL}) guide for more details.
388
+
389
+ ## 3. Tuning Performance
390
+
391
+ Once Meticulous is set up to run in CI, there is usually a tuning period (~1-2 weeks) required to get Meticulous working at full capacity.
392
+ A variety of features that can be used to tune Meticulous are described below.
393
+
394
+ ### Testing feature flags
395
+
396
+ If you make heavy use of feature flags we recommend configuring Meticulous to support using old sessions to test new features that are
397
+ gated behind feature flags. Get started [here](${TESTING_FEATURE_FLAGS}).
398
+
399
+ ### Coverage
400
+
401
+ If you feel that coverage is insufficient, you can try to address it in a couple different ways:
402
+
403
+ - **Increase the number of selected sessions**. When you click the *Configure* button in the *Selected Session* tab of your project dashboard in the Meticulous UI,
404
+ you will see a *Number of Sessions to Auto Select* section. Below this, Meticulous will recommend increasing the number of selected sessions if it will add more coverage.
405
+ - **Enable the session recorder on production.** Increasing the number of sessions being ingested by Meticulous should increase the level of
406
+ coverage that Meticulous is able to provide. If you are interested in this option, please reach out to Meticulous support for more information.
407
+
408
+ ### Flakes & false diffs
409
+
410
+ You may run into a flake or false diff during the tuning period — below are some strategies to manage them:
411
+
412
+ - If the flake is not too frequent or problematic, you can click on the screenshot of the diff and then click *Flag as Unexpected*.
413
+ This sends a bug report to the Meticulous team so that the flake can be prioritized and fixed.
414
+ - If the flake is problematic, you can use the techniques described in [this doc](${FIX_FALSE_POSITIVES_URL}) to debug or ignore the problematic element.
415
+ `;
@@ -0,0 +1,24 @@
1
+ import { EXPLANATION_OF_METHODS_TO_ADD_RECORDER } from "./recorder-snippets/explanation-of-methods-to-add-recorder";
2
+
3
+ export const document = `---
4
+ {
5
+ "title": "Get started with Meticulous Recorder"
6
+ }
7
+ ---
8
+
9
+ # {% $frontmatter.title %}
10
+
11
+ Meticulous recorder is a tool for recording real user sessions. The recorder captures your users' actions and any network requests
12
+ (and responses) during their session. Please note that although plaintext passwords are redacted, the recorded network requests can
13
+ include authorization tokens and other headers -- you should therefore only add trusted users to your Meticulous organization.
14
+ You can either add the recorder to all environments or just internal non-production environments.
15
+
16
+ ## 1. Sign up
17
+
18
+ Sign up at [https://app.meticulous.ai/signup](https://app.meticulous.ai/signup). You will be prompted to create an organization and
19
+ project.
20
+
21
+ ## 2. Install the Meticulous recorder
22
+
23
+ ${EXPLANATION_OF_METHODS_TO_ADD_RECORDER}
24
+ `;
@@ -0,0 +1 @@
1
+ export const SNIPPET_URL = "https://snippet.meticulous.ai/v1/meticulous.js";
@@ -0,0 +1,21 @@
1
+ import {
2
+ ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL,
3
+ INSTALL_RECORDER_AS_SCRIPT_TAG_INSTALLATION_INSTRUCTIONS_URL,
4
+ INSTALL_RECORDER_AS_NPM_DEPENDENCY_INSTALLATION_INSTRUCTIONS_URL,
5
+ } from "src/lib/utils/internal-urls/docs-urls.utils";
6
+
7
+ export const EXPLANATION_OF_METHODS_TO_ADD_RECORDER = `
8
+ There are two ways to add the Meticulous recorder to your web application:
9
+ 1. [By inserting it as script tag](${INSTALL_RECORDER_AS_SCRIPT_TAG_INSTALLATION_INSTRUCTIONS_URL}) **(recommended)**
10
+ 2. [By installing an NPM package](${INSTALL_RECORDER_AS_NPM_DEPENDENCY_INSTALLATION_INSTRUCTIONS_URL})
11
+
12
+ If possible, we recommend that you use the **script tag** as it is the only way to fully guarantee that the recorder
13
+ initializes before any other scripts execute, thereby ensuring Meticulous can capture all network responses
14
+ ([learn more](${ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL})).
15
+
16
+ For bundler-based setups such as Vite, rsbuild, and Nuxt, our script tag instructions use the \`@alwaysmeticulous/recorder-plugin\`
17
+ dev dependency to inject the script automatically at build time.
18
+
19
+ However, if it's not possible to template your HTML so that the script tag is only included in the environments where you
20
+ want to record sessions then you can use [the loader package instead](${INSTALL_RECORDER_AS_NPM_DEPENDENCY_INSTALLATION_INSTRUCTIONS_URL}).
21
+ `;
@@ -0,0 +1,34 @@
1
+ import { recorderLoaderInstructions } from "./any-other-framework-instructions";
2
+
3
+ // Based on https://angular.io/generated/live-examples/getting-started/stackblitz.html
4
+ const angularSnippet = ({
5
+ constants,
6
+ launchRecorderCode,
7
+ }: {
8
+ constants: string;
9
+ launchRecorderCode: string;
10
+ }) => `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
11
+ import { AppModule } from './app/app.module';
12
+ import { tryLoadAndStartRecorder } from '@alwaysmeticulous/recorder-loader'
13
+ ${constants}
14
+ async function startApp() {${launchRecorderCode}
15
+
16
+ // Initialise app after the Meticulous recorder is ready, e.g.
17
+ platformBrowserDynamic().bootstrapModule(AppModule)
18
+ .catch(err => console.error(err));
19
+ }
20
+
21
+ function isProduction() {
22
+ // TODO: Update me with your production hostname
23
+ return window.location.hostname.indexOf("your-production-site.com") > -1;
24
+ }
25
+
26
+ startApp();
27
+ `;
28
+
29
+ export const angularInstructions = recorderLoaderInstructions({
30
+ title: "Installing on Angular",
31
+ appEntryPointDescription: "app entry point",
32
+ appEntryPointExampleFileName: "`main.js` or `main.ts`",
33
+ snippetTemplate: angularSnippet,
34
+ });
@@ -0,0 +1,118 @@
1
+ export interface SnippetTemplateOpts {
2
+ constants: string;
3
+ launchRecorderCode: string;
4
+ }
5
+
6
+ export type SnippetTemplate = (opts: SnippetTemplateOpts) => string;
7
+
8
+ export const anyOtherFrameworkSnippet = ({
9
+ constants,
10
+ launchRecorderCode,
11
+ }: {
12
+ constants: string;
13
+ launchRecorderCode: string;
14
+ }) => `import { tryLoadAndStartRecorder } from '@alwaysmeticulous/recorder-loader'
15
+ ${constants}
16
+ async function startApp() {${launchRecorderCode}
17
+
18
+ // Initialise app after the Meticulous recorder is ready, e.g.
19
+ ReactDOM.render(component, document.getElementById('root'));
20
+ }
21
+
22
+ function isProduction() {
23
+ // TODO: Update me with your production hostname
24
+ return window.location.hostname.indexOf("your-production-site.com") > -1;
25
+ }
26
+
27
+ startApp();
28
+ `;
29
+
30
+ export const devAndStagingOnlyOpts: SnippetTemplateOpts = {
31
+ constants: "",
32
+ launchRecorderCode: `
33
+ // Record all sessions on localhost, staging stacks and preview URLs
34
+ if (!isProduction()) {
35
+ // Start the Meticulous recorder before you initialise your app.
36
+ // Note: all errors are caught and logged, so no need to surround with try/catch
37
+ await tryLoadAndStartRecorder({
38
+ recordingToken: '{% project_recording_token /%}',
39
+ isProduction: false,
40
+ });
41
+ }`,
42
+ };
43
+
44
+ const allEnvironmentsOpts: SnippetTemplateOpts = {
45
+ constants: `
46
+ // Record 1% of production sessions
47
+ const METICULOUS_SAMPLING_RATE = 0.01;
48
+ `,
49
+ launchRecorderCode: `
50
+ if (!isProduction() || Math.random() < METICULOUS_SAMPLING_RATE) {
51
+ // Start the Meticulous recorder before you initialise your app.
52
+ // Note: all errors are caught and logged, so no need to surround with try/catch
53
+ await tryLoadAndStartRecorder({
54
+ recordingToken: '{% project_recording_token /%}',
55
+ isProduction: isProduction(),
56
+ maxMsToBlockFor: isProduction() ? 250 : undefined, // Optional, abandon waiting to load the Meticulous recorder, if it takes more than 250ms
57
+ });
58
+ }
59
+ `,
60
+ };
61
+
62
+ export const recorderLoaderInstructions = ({
63
+ title,
64
+ appEntryPointDescription,
65
+ appEntryPointExampleFileName,
66
+ snippetTemplate,
67
+ }: {
68
+ title: string | null;
69
+ appEntryPointDescription: string;
70
+ appEntryPointExampleFileName: string;
71
+ snippetTemplate: SnippetTemplate;
72
+ }) => `
73
+ ${title ? `### ${title}` : ""}
74
+
75
+ **Step A)** Add a dependency on the \`@alwaysmeticulous/recorder-loader\` package:
76
+
77
+ {% command_card_block %}
78
+ \`\`\`bash
79
+ npm install @alwaysmeticulous/recorder-loader
80
+ \`\`\`
81
+ {% /command_card_block %}
82
+
83
+ or
84
+
85
+ {% command_card_block %}
86
+ \`\`\`bash
87
+ yarn add @alwaysmeticulous/recorder-loader
88
+ \`\`\`
89
+ {% /command_card_block %}
90
+
91
+ **Step B)** In your ${appEntryPointDescription} call \`await tryLoadAndStartRecorder({ ... })\` before your app initialisation logic.
92
+ It is important to initialise the Meticulous recorder before your app initialises in order to capture all
93
+ network requests / user interactions correctly.
94
+
95
+
96
+ For example your ${appEntryPointExampleFileName} might contain something like:
97
+
98
+ {% code_with_project_selector %}
99
+ {% tabs %}
100
+ {% tab label="Dev & Staging Only" %}
101
+ \`\`\`typescript
102
+ ${snippetTemplate(devAndStagingOnlyOpts)}
103
+ \`\`\`
104
+ {% /tab %}
105
+ {% tab label="All Environments" %}
106
+ \`\`\`typescript
107
+ ${snippetTemplate(allEnvironmentsOpts)}
108
+ \`\`\`
109
+ {% /tab %}
110
+ {% /tabs %}
111
+ {% /code_with_project_selector %}`;
112
+
113
+ const anyOtherFrameworkInstructions = recorderLoaderInstructions({
114
+ title: "Installing on any other framework",
115
+ appEntryPointDescription: "app entry point",
116
+ appEntryPointExampleFileName: "`index.js` or `main.js`",
117
+ snippetTemplate: anyOtherFrameworkSnippet,
118
+ });
@@ -0,0 +1,39 @@
1
+ import { recorderLoaderInstructions } from "./any-other-framework-instructions";
2
+
3
+ // Based on https://github.com/gothinkster/vue-realworld-example-app
4
+ const vueSnippet = ({
5
+ constants,
6
+ launchRecorderCode,
7
+ }: {
8
+ constants: string;
9
+ launchRecorderCode: string;
10
+ }) => `import Vue from "vue";
11
+ import App from "./App.vue";
12
+ import router from "./router";
13
+ import store from "./store";
14
+ import { tryLoadAndStartRecorder } from '@alwaysmeticulous/recorder-loader'
15
+ ${constants}
16
+ async function startApp() {${launchRecorderCode}
17
+
18
+ // Initialise app after the Meticulous recorder is ready, e.g.
19
+ new Vue({
20
+ router,
21
+ store,
22
+ render: h => h(App)
23
+ }).$mount("#app");
24
+ }
25
+
26
+ function isProduction() {
27
+ // TODO: Update me with your production hostname
28
+ return window.location.hostname.indexOf("your-production-site.com") > -1;
29
+ }
30
+
31
+ startApp();
32
+ `;
33
+
34
+ export const vueInstructions = recorderLoaderInstructions({
35
+ title: "Installing on Vue",
36
+ appEntryPointDescription: "app entry point",
37
+ appEntryPointExampleFileName: "`main.js` or `main.ts`",
38
+ snippetTemplate: vueSnippet,
39
+ });