@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.
- package/dist/__tests__/commonjs-dependencies.spec.d.ts +2 -0
- package/dist/__tests__/commonjs-dependencies.spec.d.ts.map +1 -0
- package/dist/__tests__/commonjs-dependencies.spec.js +82 -0
- package/dist/__tests__/commonjs-dependencies.spec.js.map +1 -0
- package/dist/command-utils/__tests__/parse-rewrites.spec.js +2 -2
- package/dist/command-utils/__tests__/parse-rewrites.spec.js.map +1 -1
- package/dist/command-utils/__tests__/warn-regex-rewrites.spec.js +2 -2
- package/dist/command-utils/__tests__/warn-regex-rewrites.spec.js.map +1 -1
- package/dist/command-utils/common-options.js +2 -2
- package/dist/command-utils/common-options.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.js +2 -2
- package/dist/command-utils/detect-upload-mode.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.spec.js +2 -2
- package/dist/command-utils/detect-upload-mode.spec.js.map +1 -1
- package/dist/command-utils/download-session.utils.js +2 -2
- package/dist/command-utils/download-session.utils.js.map +1 -1
- package/dist/command-utils/json-args.js +2 -2
- package/dist/command-utils/json-args.js.map +1 -1
- package/dist/command-utils/json-args.spec.js +2 -2
- package/dist/command-utils/json-args.spec.js.map +1 -1
- package/dist/command-utils/parse-container-env.js +2 -2
- package/dist/command-utils/parse-container-env.js.map +1 -1
- package/dist/command-utils/parse-rewrites.js +2 -2
- package/dist/command-utils/parse-rewrites.js.map +1 -1
- package/dist/command-utils/print-json.js +2 -2
- package/dist/command-utils/print-json.js.map +1 -1
- package/dist/command-utils/sentry.utils.js +2 -2
- package/dist/command-utils/sentry.utils.js.map +1 -1
- package/dist/command-utils/warn-regex-rewrites.js +2 -2
- package/dist/command-utils/warn-regex-rewrites.js.map +1 -1
- package/dist/commands/agent/agent-review-writes.command.spec.js +2 -2
- package/dist/commands/agent/agent-review-writes.command.spec.js.map +1 -1
- package/dist/commands/agent/build-git-options.js +2 -2
- package/dist/commands/agent/build-git-options.js.map +1 -1
- package/dist/commands/agent/build-git-options.spec.js +2 -2
- package/dist/commands/agent/build-git-options.spec.js.map +1 -1
- package/dist/commands/agent/coverage-columns.util.js +2 -2
- package/dist/commands/agent/coverage-columns.util.js.map +1 -1
- package/dist/commands/agent/create-diff-comment.command.js +2 -2
- package/dist/commands/agent/create-diff-comment.command.js.map +1 -1
- package/dist/commands/agent/diff-comment-write.utils.js +2 -2
- package/dist/commands/agent/diff-comment-write.utils.js.map +1 -1
- package/dist/commands/agent/diff-comments.command.js +2 -2
- package/dist/commands/agent/diff-comments.command.js.map +1 -1
- package/dist/commands/agent/diff-comments.command.spec.js +2 -2
- package/dist/commands/agent/diff-comments.command.spec.js.map +1 -1
- package/dist/commands/agent/ignore-diff.command.js +2 -2
- package/dist/commands/agent/ignore-diff.command.js.map +1 -1
- package/dist/commands/agent/index.js +2 -2
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/js-coverage-diff.command.js +2 -2
- package/dist/commands/agent/js-coverage-diff.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.handler.spec.js +2 -2
- package/dist/commands/agent/js-coverage.command.handler.spec.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.js +2 -2
- package/dist/commands/agent/js-coverage.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.spec.js +2 -2
- package/dist/commands/agent/js-coverage.command.spec.js.map +1 -1
- package/dist/commands/agent/reject-diff.command.js +2 -2
- package/dist/commands/agent/reject-diff.command.js.map +1 -1
- package/dist/commands/agent/reject-diff.command.spec.js +2 -2
- package/dist/commands/agent/reject-diff.command.spec.js.map +1 -1
- package/dist/commands/agent/reply-to-diff-comment.command.js +2 -2
- package/dist/commands/agent/reply-to-diff-comment.command.js.map +1 -1
- package/dist/commands/agent/screenshot-dom-diff.command.js +2 -2
- package/dist/commands/agent/screenshot-dom-diff.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image-files.command.js +2 -2
- package/dist/commands/agent/screenshot-image-files.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image.command.js +2 -2
- package/dist/commands/agent/screenshot-image.command.js.map +1 -1
- package/dist/commands/agent/sessions.command.js +2 -2
- package/dist/commands/agent/sessions.command.js.map +1 -1
- package/dist/commands/agent/sessions.command.spec.js +2 -2
- package/dist/commands/agent/sessions.command.spec.js.map +1 -1
- package/dist/commands/agent/submit-feedback.command.js +2 -2
- package/dist/commands/agent/submit-feedback.command.js.map +1 -1
- package/dist/commands/agent/test-run-check.command.js +2 -2
- package/dist/commands/agent/test-run-check.command.js.map +1 -1
- package/dist/commands/agent/test-run-check.command.spec.js +2 -2
- package/dist/commands/agent/test-run-check.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.js +2 -2
- package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.spec.js +2 -2
- package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.js +2 -2
- package/dist/commands/agent/test-run-diffs.utils.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.spec.js +2 -2
- package/dist/commands/agent/test-run-diffs.utils.spec.js.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.js +2 -2
- package/dist/commands/agent/test-run-for-commit.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.js +2 -2
- package/dist/commands/agent/timeline.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.spec.js +2 -2
- package/dist/commands/agent/timeline.command.spec.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.js +2 -2
- package/dist/commands/agent/trigger-test-run.command.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.spec.js +2 -2
- package/dist/commands/agent/trigger-test-run.command.spec.js.map +1 -1
- package/dist/commands/agent/upload-build.command.js +2 -2
- package/dist/commands/agent/upload-build.command.js.map +1 -1
- package/dist/commands/all-commands.d.ts.map +1 -1
- package/dist/commands/all-commands.js +8 -6
- package/dist/commands/all-commands.js.map +1 -1
- package/dist/commands/auth/__tests__/get-project.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/get-project.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/list-projects.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/list-projects.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/login.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/logout.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/logout.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/set-project.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/set-project.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/whoami.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/whoami.command.spec.js.map +1 -1
- package/dist/commands/auth/get-project.command.js +2 -2
- package/dist/commands/auth/get-project.command.js.map +1 -1
- package/dist/commands/auth/index.js +2 -2
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/list-projects.command.js +2 -2
- package/dist/commands/auth/list-projects.command.js.map +1 -1
- package/dist/commands/auth/login.command.js +2 -2
- package/dist/commands/auth/login.command.js.map +1 -1
- package/dist/commands/auth/logout.command.js +2 -2
- package/dist/commands/auth/logout.command.js.map +1 -1
- package/dist/commands/auth/set-project.command.js +2 -2
- package/dist/commands/auth/set-project.command.js.map +1 -1
- package/dist/commands/auth/whoami.command.js +2 -2
- package/dist/commands/auth/whoami.command.js.map +1 -1
- package/dist/commands/ci/__tests__/label-commit.utils.spec.js +2 -2
- package/dist/commands/ci/__tests__/label-commit.utils.spec.js.map +1 -1
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js +2 -2
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js.map +1 -1
- package/dist/commands/ci/agent-test.command.d.ts +2 -0
- package/dist/commands/ci/agent-test.command.d.ts.map +1 -1
- package/dist/commands/ci/agent-test.command.js +28 -3
- package/dist/commands/ci/agent-test.command.js.map +1 -1
- package/dist/commands/ci/agent-test.command.spec.d.ts +2 -0
- package/dist/commands/ci/agent-test.command.spec.d.ts.map +1 -0
- package/dist/commands/ci/agent-test.command.spec.js +133 -0
- package/dist/commands/ci/agent-test.command.spec.js.map +1 -0
- package/dist/commands/ci/deprecated-trigger-options.js +2 -2
- package/dist/commands/ci/deprecated-trigger-options.js.map +1 -1
- package/dist/commands/ci/index.js +2 -2
- package/dist/commands/ci/index.js.map +1 -1
- package/dist/commands/ci/label-commit.command.js +2 -2
- package/dist/commands/ci/label-commit.command.js.map +1 -1
- package/dist/commands/ci/label-commit.core.js +2 -2
- package/dist/commands/ci/label-commit.core.js.map +1 -1
- package/dist/commands/ci/label-commit.types.js +2 -2
- package/dist/commands/ci/label-commit.types.js.map +1 -1
- package/dist/commands/ci/label-commit.utils.js +2 -2
- package/dist/commands/ci/label-commit.utils.js.map +1 -1
- package/dist/commands/ci/prepare.command.js +2 -2
- package/dist/commands/ci/prepare.command.js.map +1 -1
- package/dist/commands/ci/resolve-git-options.js +2 -2
- package/dist/commands/ci/resolve-git-options.js.map +1 -1
- package/dist/commands/ci/run-local.command.js +2 -2
- package/dist/commands/ci/run-local.command.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js +2 -2
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js +2 -2
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js +2 -2
- package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js.map +1 -1
- package/dist/commands/ci/run.command.js +2 -2
- package/dist/commands/ci/run.command.js.map +1 -1
- package/dist/commands/ci/session-filter.utils.js +2 -2
- package/dist/commands/ci/session-filter.utils.js.map +1 -1
- package/dist/commands/ci/start-tunnel.command.js +2 -2
- package/dist/commands/ci/start-tunnel.command.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.core.js +2 -2
- package/dist/commands/ci/trigger-test-run.core.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.types.js +2 -2
- package/dist/commands/ci/trigger-test-run.types.js.map +1 -1
- package/dist/commands/ci/upload-asset-chunk.command.js +2 -2
- package/dist/commands/ci/upload-asset-chunk.command.js.map +1 -1
- package/dist/commands/ci/upload-assets.command.js +2 -2
- package/dist/commands/ci/upload-assets.command.js.map +1 -1
- package/dist/commands/ci/upload-container.command.js +2 -2
- package/dist/commands/ci/upload-container.command.js.map +1 -1
- package/dist/commands/crawl.command.js +2 -2
- package/dist/commands/crawl.command.js.map +1 -1
- package/dist/commands/debug/clean-workspaces.js +2 -2
- package/dist/commands/debug/clean-workspaces.js.map +1 -1
- package/dist/commands/debug/index.js +2 -2
- package/dist/commands/debug/index.js.map +1 -1
- package/dist/commands/debug/present-workspace.js +2 -2
- package/dist/commands/debug/present-workspace.js.map +1 -1
- package/dist/commands/debug/project-worktree.js +2 -2
- package/dist/commands/debug/project-worktree.js.map +1 -1
- package/dist/commands/deprecated-aliases.js +2 -2
- package/dist/commands/deprecated-aliases.js.map +1 -1
- package/dist/commands/download/index.js +2 -2
- package/dist/commands/download/index.js.map +1 -1
- package/dist/commands/download/replay.command.js +2 -2
- package/dist/commands/download/replay.command.js.map +1 -1
- package/dist/commands/download/session.command.js +2 -2
- package/dist/commands/download/session.command.js.map +1 -1
- package/dist/commands/download/test-run.command.js +2 -2
- package/dist/commands/download/test-run.command.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.js +2 -2
- package/dist/commands/local/get-edited-files.utils.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.spec.js +2 -2
- package/dist/commands/local/get-edited-files.utils.spec.js.map +1 -1
- package/dist/commands/local/index.js +2 -2
- package/dist/commands/local/index.js.map +1 -1
- package/dist/commands/local/relevant-sessions.command.js +2 -2
- package/dist/commands/local/relevant-sessions.command.js.map +1 -1
- package/dist/commands/onboard/__tests__/build-context.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/build-context.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/build-context.spec.js +179 -0
- package/dist/commands/onboard/__tests__/build-context.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.js +164 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.js +73 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.js +277 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.js +109 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js +157 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.js +158 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.js +116 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.js +166 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js +137 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js +286 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js.map +1 -0
- package/dist/commands/onboard/build-context.d.ts +16 -0
- package/dist/commands/onboard/build-context.d.ts.map +1 -0
- package/dist/commands/onboard/build-context.js +104 -0
- package/dist/commands/onboard/build-context.js.map +1 -0
- package/dist/commands/onboard/check-vcs-link.d.ts +14 -0
- package/dist/commands/onboard/check-vcs-link.d.ts.map +1 -0
- package/dist/commands/onboard/check-vcs-link.js +111 -0
- package/dist/commands/onboard/check-vcs-link.js.map +1 -0
- package/dist/commands/onboard/codex-mcp.d.ts +24 -0
- package/dist/commands/onboard/codex-mcp.d.ts.map +1 -0
- package/dist/commands/onboard/codex-mcp.js +302 -0
- package/dist/commands/onboard/codex-mcp.js.map +1 -0
- package/dist/commands/onboard/customer-agents.d.ts +9 -0
- package/dist/commands/onboard/customer-agents.d.ts.map +1 -0
- package/dist/commands/onboard/customer-agents.js +19 -0
- package/dist/commands/onboard/customer-agents.js.map +1 -0
- package/dist/commands/onboard/customer-agents.json +17 -0
- package/dist/commands/onboard/customer-docs.d.ts +21 -0
- package/dist/commands/onboard/customer-docs.d.ts.map +1 -0
- package/dist/commands/onboard/customer-docs.js +31 -0
- package/dist/commands/onboard/customer-docs.js.map +1 -0
- package/dist/commands/onboard/customer-docs.json +35 -0
- package/dist/commands/onboard/detect-framework.d.ts +26 -0
- package/dist/commands/onboard/detect-framework.d.ts.map +1 -0
- package/dist/commands/onboard/detect-framework.js +305 -0
- package/dist/commands/onboard/detect-framework.js.map +1 -0
- package/dist/commands/onboard/discover-apps.d.ts +21 -0
- package/dist/commands/onboard/discover-apps.d.ts.map +1 -0
- package/dist/commands/onboard/discover-apps.js +318 -0
- package/dist/commands/onboard/discover-apps.js.map +1 -0
- package/dist/commands/onboard/docs-urls.d.ts +11 -0
- package/dist/commands/onboard/docs-urls.d.ts.map +1 -0
- package/dist/commands/onboard/docs-urls.js +17 -0
- package/dist/commands/onboard/docs-urls.js.map +1 -0
- package/dist/commands/onboard/git-repo-info.d.ts +15 -0
- package/dist/commands/onboard/git-repo-info.d.ts.map +1 -0
- package/dist/commands/onboard/git-repo-info.js +84 -0
- package/dist/commands/onboard/git-repo-info.js.map +1 -0
- package/dist/commands/onboard/index.d.ts +18 -0
- package/dist/commands/onboard/index.d.ts.map +1 -0
- package/dist/commands/onboard/index.js +164 -0
- package/dist/commands/onboard/index.js.map +1 -0
- package/dist/commands/onboard/inline-doc-constants.d.ts +21 -0
- package/dist/commands/onboard/inline-doc-constants.d.ts.map +1 -0
- package/dist/commands/onboard/inline-doc-constants.js +238 -0
- package/dist/commands/onboard/inline-doc-constants.js.map +1 -0
- package/dist/commands/onboard/launch-agent.d.ts +65 -0
- package/dist/commands/onboard/launch-agent.d.ts.map +1 -0
- package/dist/commands/onboard/launch-agent.js +311 -0
- package/dist/commands/onboard/launch-agent.js.map +1 -0
- package/dist/commands/onboard/materialize-workspace.d.ts +68 -0
- package/dist/commands/onboard/materialize-workspace.d.ts.map +1 -0
- package/dist/commands/onboard/materialize-workspace.js +177 -0
- package/dist/commands/onboard/materialize-workspace.js.map +1 -0
- package/dist/commands/onboard/print-summary.d.ts +10 -0
- package/dist/commands/onboard/print-summary.d.ts.map +1 -0
- package/dist/commands/onboard/print-summary.js +49 -0
- package/dist/commands/onboard/print-summary.js.map +1 -0
- package/dist/commands/onboard/resolve-app.d.ts +21 -0
- package/dist/commands/onboard/resolve-app.d.ts.map +1 -0
- package/dist/commands/onboard/resolve-app.js +78 -0
- package/dist/commands/onboard/resolve-app.js.map +1 -0
- package/dist/commands/onboard/resolve-project.d.ts +14 -0
- package/dist/commands/onboard/resolve-project.d.ts.map +1 -0
- package/dist/commands/onboard/resolve-project.js +92 -0
- package/dist/commands/onboard/resolve-project.js.map +1 -0
- package/dist/commands/onboard/safe-repo-fs.d.ts +59 -0
- package/dist/commands/onboard/safe-repo-fs.d.ts.map +1 -0
- package/dist/commands/onboard/safe-repo-fs.js +266 -0
- package/dist/commands/onboard/safe-repo-fs.js.map +1 -0
- package/dist/commands/onboard/setup-agent-integrations.d.ts +43 -0
- package/dist/commands/onboard/setup-agent-integrations.d.ts.map +1 -0
- package/dist/commands/onboard/setup-agent-integrations.js +324 -0
- package/dist/commands/onboard/setup-agent-integrations.js.map +1 -0
- package/dist/commands/onboard/templates/CLAUDE.md +213 -0
- package/dist/commands/onboard/templates/agents/auth-setup.md +117 -0
- package/dist/commands/onboard/templates/agents/ci-setup.md +742 -0
- package/dist/commands/onboard/templates/agents/csp-setup.md +78 -0
- package/dist/commands/onboard/templates/agents/false-positive-prevention.md +268 -0
- package/dist/commands/onboard/templates/agents/feature-flag-setup.md +133 -0
- package/dist/commands/onboard/templates/agents/local-simulation-verification.md +96 -0
- package/dist/commands/onboard/templates/agents/persisted-graphql-queries.md +150 -0
- package/dist/commands/onboard/templates/agents/recorder-installation.md +194 -0
- package/dist/commands/onboard/templates/agents/replay-fetch-retry-compatibility.md +252 -0
- package/dist/commands/onboard/templates/agents/reviewer.md +788 -0
- package/dist/commands/onboard/templates/agents/service-worker-compatibility.md +254 -0
- package/dist/commands/onboard/templates/agents/session-context.md +133 -0
- package/dist/commands/onboard/templates/agents/shared-worker-compatibility.md +187 -0
- package/dist/commands/onboard/templates/docs/additional-guides/backend-recorder.ts +340 -0
- package/dist/commands/onboard/templates/docs/ci/not-yet-run-checks.ts +58 -0
- package/dist/commands/onboard/templates/docs/ci.ts +19 -0
- package/dist/commands/onboard/templates/docs/cloud-replay.ts +145 -0
- package/dist/commands/onboard/templates/docs/constants.ts +37 -0
- package/dist/commands/onboard/templates/docs/github-actions-v2.ts +859 -0
- package/dist/commands/onboard/templates/docs/how-to/auth/bypassing-auth.ts +27 -0
- package/dist/commands/onboard/templates/docs/how-to/auth/enabling-full-auth.ts +91 -0
- package/dist/commands/onboard/templates/docs/how-to/configure-ignore-patterns.ts +77 -0
- package/dist/commands/onboard/templates/docs/how-to/enable-source-coverage.ts +84 -0
- package/dist/commands/onboard/templates/docs/how-to/fix-false-positive-diffs.ts +156 -0
- package/dist/commands/onboard/templates/docs/how-to/link-bitbucket.ts +15 -0
- package/dist/commands/onboard/templates/docs/how-to/link-gitlab.ts +22 -0
- package/dist/commands/onboard/templates/docs/how-to/record-session-context.ts +129 -0
- package/dist/commands/onboard/templates/docs/how-to/recorder-script.ts +139 -0
- package/dist/commands/onboard/templates/docs/how-to/testing-feature-flags.ts +97 -0
- package/dist/commands/onboard/templates/docs/how-to/testing-multiple-apps-or-app-variants.ts +40 -0
- package/dist/commands/onboard/templates/docs/how-to/troubleshoot-auth.ts +58 -0
- package/dist/commands/onboard/templates/docs/how-to/troubleshoot-failed-simulations.ts +97 -0
- package/dist/commands/onboard/templates/docs/how-to/typescript-types.ts +51 -0
- package/dist/commands/onboard/templates/docs/how-to/window-meticulous-object.ts +685 -0
- package/dist/commands/onboard/templates/docs/onboarding-guide.ts +415 -0
- package/dist/commands/onboard/templates/docs/recorder-getting-started.ts +24 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/constants.ts +1 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/explanation-of-methods-to-add-recorder.ts +21 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/angular-instructions.ts +34 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/any-other-framework-instructions.ts +118 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/vue-instructions.ts +39 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/next-js-instructions.ts +49 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/nuxtjs-instructions.ts +68 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/rsbuild-instructions.ts +66 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/storybook-instructions.ts +59 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/sveltekit-instructions.ts +113 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/vite-instructions.ts +58 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-requirements.ts +51 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/steps-after-installing-recorder.ts +25 -0
- package/dist/commands/onboard/templates/docs/reference/cli-commands.ts +1324 -0
- package/dist/commands/onboard/templates/docs/session-recording/csp-exceptions.ts +17 -0
- package/dist/commands/onboard/templates/docs/session-recording/recorder-npm-dependency.ts +62 -0
- package/dist/commands/onboard/templates/docs-imports/src/lib/next/next.constants.ts +46 -0
- package/dist/commands/onboard/templates/docs-imports/src/lib/utils/internal-urls/docs-urls.utils.ts +254 -0
- package/dist/commands/onboard/templates/settings.json +14 -0
- package/dist/commands/project/index.js +2 -2
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/show.command.js +2 -2
- package/dist/commands/project/show.command.js.map +1 -1
- package/dist/commands/project/upload-source.command.js +2 -2
- package/dist/commands/project/upload-source.command.js.map +1 -1
- package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js +2 -2
- package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js.map +1 -1
- package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js +2 -2
- package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js.map +1 -1
- package/dist/commands/record/__tests__/backend.command.spec.js +2 -2
- package/dist/commands/record/__tests__/backend.command.spec.js.map +1 -1
- package/dist/commands/record/__tests__/login.command.spec.js +2 -2
- package/dist/commands/record/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/record/__tests__/session.command.spec.js +2 -2
- package/dist/commands/record/__tests__/session.command.spec.js.map +1 -1
- package/dist/commands/record/backend-dev-command.utils.js +2 -2
- package/dist/commands/record/backend-dev-command.utils.js.map +1 -1
- package/dist/commands/record/backend-sidecar.utils.js +2 -2
- package/dist/commands/record/backend-sidecar.utils.js.map +1 -1
- package/dist/commands/record/backend.command.js +2 -2
- package/dist/commands/record/backend.command.js.map +1 -1
- package/dist/commands/record/index.js +2 -2
- package/dist/commands/record/index.js.map +1 -1
- package/dist/commands/record/login.command.js +2 -2
- package/dist/commands/record/login.command.js.map +1 -1
- package/dist/commands/record/session.command.js +2 -2
- package/dist/commands/record/session.command.js.map +1 -1
- package/dist/commands/replay-debugger.ui.js +2 -2
- package/dist/commands/replay-debugger.ui.js.map +1 -1
- package/dist/commands/replay.command.js +2 -2
- package/dist/commands/replay.command.js.map +1 -1
- package/dist/commands/schema.command.js +2 -2
- package/dist/commands/schema.command.js.map +1 -1
- package/dist/commands/schema.command.spec.js +2 -2
- package/dist/commands/schema.command.spec.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/utils/__tests__/handle-auth-failure.spec.js +2 -2
- package/dist/utils/__tests__/handle-auth-failure.spec.js.map +1 -1
- package/dist/utils/__tests__/project-selection-hint.spec.js +2 -2
- package/dist/utils/__tests__/project-selection-hint.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-project-identifier.spec.js +2 -2
- package/dist/utils/__tests__/resolve-project-identifier.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +2 -2
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
- package/dist/utils/__tests__/select-project.spec.js +5 -4
- package/dist/utils/__tests__/select-project.spec.js.map +1 -1
- package/dist/utils/cli-user-error.js +2 -2
- package/dist/utils/cli-user-error.js.map +1 -1
- package/dist/utils/constants.js +2 -2
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/environment.utils.js +2 -2
- package/dist/utils/environment.utils.js.map +1 -1
- package/dist/utils/format-coverage-ranges.js +2 -2
- package/dist/utils/format-coverage-ranges.js.map +1 -1
- package/dist/utils/handle-auth-failure.js +2 -2
- package/dist/utils/handle-auth-failure.js.map +1 -1
- package/dist/utils/out-of-date-client-error.js +2 -2
- package/dist/utils/out-of-date-client-error.js.map +1 -1
- package/dist/utils/project-selection-hint.js +2 -2
- package/dist/utils/project-selection-hint.js.map +1 -1
- package/dist/utils/resolve-project-identifier.js +2 -2
- package/dist/utils/resolve-project-identifier.js.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.js +2 -2
- package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
- package/dist/utils/select-project.d.ts +9 -0
- package/dist/utils/select-project.d.ts.map +1 -1
- package/dist/utils/select-project.js +58 -15
- package/dist/utils/select-project.js.map +1 -1
- 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.
|