@alwaysmeticulous/cli 2.326.0 → 2.327.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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.js +2 -2
- package/dist/commands/ci/agent-test.command.js.map +1 -1
- 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 +13 -11
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** Agents we can launch to actually run the install. */
|
|
2
|
+
export type LaunchableAgent = "claude" | "codex";
|
|
3
|
+
/** Tools that can apply the install (Cursor is not offered in the picker). */
|
|
4
|
+
export type OnboardTool = LaunchableAgent;
|
|
5
|
+
export type OnboardAgentChoice = OnboardTool | "auto";
|
|
6
|
+
/**
|
|
7
|
+
* The install prompt. Headless runs have nobody to approve the plan, so they
|
|
8
|
+
* post it and keep going instead of waiting.
|
|
9
|
+
*/
|
|
10
|
+
export declare const defaultOnboardPrompt: (options: {
|
|
11
|
+
headless: boolean;
|
|
12
|
+
}) => string;
|
|
13
|
+
/**
|
|
14
|
+
* Printed before the tool picker so the time cost and scope of the run are
|
|
15
|
+
* known before the user commits to a tool.
|
|
16
|
+
*/
|
|
17
|
+
export declare const printPreLaunchNotice: (options: {
|
|
18
|
+
selectedAppLabel: string;
|
|
19
|
+
}) => void;
|
|
20
|
+
export declare const isToolInstalled: (tool: OnboardTool) => boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Interactively asks which tool to open the workspace in, defaulting to the
|
|
23
|
+
* first installed option. Installed tools are listed first; missing ones are
|
|
24
|
+
* shown disabled with an install hint. Returns null when the terminal is not
|
|
25
|
+
* interactive (caller should fall back to printed instructions).
|
|
26
|
+
*/
|
|
27
|
+
export declare const promptForTool: () => Promise<OnboardTool | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the requested `--agent` choice to a concrete tool. `auto` prompts
|
|
30
|
+
* when interactive, otherwise falls back to the first installed agent. Returns
|
|
31
|
+
* null when no agent can be launched (caller prints manual instructions).
|
|
32
|
+
*/
|
|
33
|
+
export declare const resolveOnboardTool: (requested: OnboardAgentChoice) => Promise<OnboardTool | null>;
|
|
34
|
+
export declare const launchOnboardTool: (options: {
|
|
35
|
+
workspaceDir: string;
|
|
36
|
+
projectRoot: string;
|
|
37
|
+
tool: OnboardTool;
|
|
38
|
+
model: string | undefined;
|
|
39
|
+
prompt: string;
|
|
40
|
+
headless: boolean;
|
|
41
|
+
auto: boolean;
|
|
42
|
+
}) => number;
|
|
43
|
+
export declare const printNextSteps: (options: {
|
|
44
|
+
tool: OnboardTool;
|
|
45
|
+
context: {
|
|
46
|
+
orgAndProject: string | null;
|
|
47
|
+
meticulousSideSetupPath: string;
|
|
48
|
+
meticulousTokensUrl: string | null;
|
|
49
|
+
secretsUrl: string | null;
|
|
50
|
+
secretsUrlLabel: string | null;
|
|
51
|
+
githubConfigureProjectsUrl: string | null;
|
|
52
|
+
gitlabConfigureProjectsUrl: string | null;
|
|
53
|
+
bitbucketConfigureProjectsUrl: string | null;
|
|
54
|
+
isGitHubIntegrationActive: boolean | null;
|
|
55
|
+
isGitLabIntegrationActive: boolean | null;
|
|
56
|
+
isBitbucketIntegrationActive: boolean | null;
|
|
57
|
+
ciProvider: "github-actions" | "gitlab-ci" | "bitbucket-pipelines" | "unknown";
|
|
58
|
+
};
|
|
59
|
+
}) => void;
|
|
60
|
+
export declare const printManualLaunchInstructions: (options: {
|
|
61
|
+
workspaceDir: string;
|
|
62
|
+
projectRoot: string;
|
|
63
|
+
prompt: string;
|
|
64
|
+
}) => void;
|
|
65
|
+
//# sourceMappingURL=launch-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-agent.d.ts","sourceRoot":"","sources":["../../../src/commands/onboard/launch-agent.ts"],"names":[],"mappings":"AAUA,wDAAwD;AACxD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AACjD,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAC1C,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,CAAC;AA0DtD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAAa;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,KAAG,MAG7C,CAAC;AAE1B;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAAa;IAC5C,gBAAgB,EAAE,MAAM,CAAC;CAC1B,KAAG,IAcH,CAAC;AAmBF,eAAO,MAAM,eAAe,SAAU,WAAW,KAAG,OAOnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,WAAW,GAAG,IAAI,CA8BhE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,cAClB,kBAAkB,KAC5B,OAAO,CAAC,WAAW,GAAG,IAAI,CAsB5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,YAAa;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;CACf,KAAG,MAsBH,CAAC;AAiDF,eAAO,MAAM,cAAc,YAAa;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,uBAAuB,EAAE,MAAM,CAAC;QAChC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1C,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1C,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7C,yBAAyB,EAAE,OAAO,GAAG,IAAI,CAAC;QAC1C,yBAAyB,EAAE,OAAO,GAAG,IAAI,CAAC;QAC1C,4BAA4B,EAAE,OAAO,GAAG,IAAI,CAAC;QAC7C,UAAU,EACN,gBAAgB,GAChB,WAAW,GACX,qBAAqB,GACrB,SAAS,CAAC;KACf,CAAC;CACH,KAAG,IAyBH,CAAC;AA2DF,eAAO,MAAM,6BAA6B,YAAa;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,IAoCH,CAAC"}
|
|
@@ -0,0 +1,311 @@
|
|
|
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]="cc77314d-aba3-5b50-b3e3-23beaef7d1ef")}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.printManualLaunchInstructions = exports.printNextSteps = exports.launchOnboardTool = exports.resolveOnboardTool = exports.promptForTool = exports.isToolInstalled = exports.printPreLaunchNotice = exports.defaultOnboardPrompt = void 0;
|
|
9
|
+
const child_process_1 = require("child_process");
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
13
|
+
const docs_urls_1 = require("./docs-urls");
|
|
14
|
+
const ONBOARD_PROMPT_BASE = "install meticulous (https://meticulous.ai) into this repository. " +
|
|
15
|
+
"first read `.meticulous-onboard/.claude/CLAUDE.md` and " +
|
|
16
|
+
"`.meticulous-onboard/.claude/onboard-context.json` — they define the workflow, the " +
|
|
17
|
+
"customer-facing specialist agents in `.claude/agents/`, and the project context. " +
|
|
18
|
+
"stay scoped to `selectedAppPath` from onboard-context.json (the cli already asked which " +
|
|
19
|
+
"monorepo app to use when needed). if review finds ssr that is not next.js pages router " +
|
|
20
|
+
"ssr, say so and let the user decide before you apply anything — the cli already asked the " +
|
|
21
|
+
"user whether to continue despite its ssr warning, so validate it and do not abort on your " +
|
|
22
|
+
"own guess. " +
|
|
23
|
+
"steps: (1) run the reviewer agent first (scoped to the selected app) and wait for its " +
|
|
24
|
+
"structured summary; " +
|
|
25
|
+
"(2) if `isMonorepo` is true but `selectedAppPath` is missing, ask which app to onboard " +
|
|
26
|
+
"and wait; otherwise do not re-ask; " +
|
|
27
|
+
"(3) dispatch every applicable specialist (recorder-installation, ci-setup, " +
|
|
28
|
+
"false-positive-prevention, local-simulation-verification, plus any conditional ones the " +
|
|
29
|
+
"reviewer flags) in a single parallel task message; " +
|
|
30
|
+
"(4) post a short plan (recorder approach, ci change, each conditional fix and the file it " +
|
|
31
|
+
"touches, anything needing meticulous-side setup, how you will split the prs, manual " +
|
|
32
|
+
"follow-ups) and wait for the user to approve or amend it before editing any repo file; " +
|
|
33
|
+
"(5) apply the approved plan in the real repo with small, correct diffs — install the " +
|
|
34
|
+
"recorder under the selected app, add the ci job at the repo root (monorepo-aware when " +
|
|
35
|
+
"needed), and only the conditional fixes the review says are needed. " +
|
|
36
|
+
"if anything needs work on the meticulous side rather than in the repo (websockets, unusual " +
|
|
37
|
+
"auth, central network mocking), write the file at the absolute path in " +
|
|
38
|
+
"`onboard-context.json` → `meticulousSideSetupPath` (never a relative path — your cwd is the " +
|
|
39
|
+
"onboard workspace, not the repo) describing what you found and what you need from " +
|
|
40
|
+
"meticulous, and tell the user to send that file to their meticulous contact, quoting its " +
|
|
41
|
+
"absolute path — do not commit it. " +
|
|
42
|
+
"the specialist playbooks cite docs as `.claude/docs/<path>.ts`; those files are bundled in " +
|
|
43
|
+
"this workspace — read them locally (they are the authoritative recorder snippet and ci yaml, " +
|
|
44
|
+
"including gitlab and bitbucket). only if one is missing, fetch " +
|
|
45
|
+
`\`${docs_urls_1.METICULOUS_DOCS_BASE_URL}/<path>\` (\`${docs_urls_1.METICULOUS_DOCS_HOST}\` is pre-approved for ` +
|
|
46
|
+
"webfetch), knowing fetched pages omit client-rendered snippet and non-default ci tab content " +
|
|
47
|
+
"— see the reference docs section of CLAUDE.md. " +
|
|
48
|
+
"this is a single pass: run the reviewer once and the specialists once, then apply and open " +
|
|
49
|
+
"the pr. after applying do not re-dispatch the reviewer or specialists to double-check, and " +
|
|
50
|
+
"do not build, run, or `meticulous simulate` the app yourself — verification (local " +
|
|
51
|
+
"simulation, first test run) is a post-merge step for the customer and goes only in the pr " +
|
|
52
|
+
"next steps. confirm edits with static read-backs, not by executing the app. " +
|
|
53
|
+
"the cli has already added project-scoped meticulous skills (for claude code, codex, and " +
|
|
54
|
+
"cursor), mcp configuration, and a `.gitignore` entry. you must include every path in " +
|
|
55
|
+
"`onboard-context.json` → `agentIntegrationPaths` in the onboarding pr (skills + mcp). " +
|
|
56
|
+
"the required final output is a pull request: create a new branch, commit your install " +
|
|
57
|
+
"changes plus those agent integration files " +
|
|
58
|
+
"(never the .meticulous-onboard workspace and never secrets), push to origin, and open a pr " +
|
|
59
|
+
"with `gh pr create` (or `glab mr create` on gitlab). default to one pr; only split into " +
|
|
60
|
+
"several (recorder + ci + skills first, compatibility fixes after, each cross-linked) if the " +
|
|
61
|
+
"user approved that split in the plan. the pr description must list what was " +
|
|
62
|
+
"installed first, then end with next steps for the reviewer (recording token and project " +
|
|
63
|
+
"api token from `meticulousTokensUrl` in onboard-context.json; recording token is a public " +
|
|
64
|
+
"read-only token suitable for build-time frontend env vars; api token stored in " +
|
|
65
|
+
"`secretsUrl` / `{secretsUrlLabel}`, and any remaining manual steps). if the pr cli is missing or " +
|
|
66
|
+
"unauthenticated, still commit and push the branch, then print the exact `gh pr create` " +
|
|
67
|
+
"command and compare url. finish by printing the pr url (or the branch name + command).";
|
|
68
|
+
/**
|
|
69
|
+
* The install prompt. Headless runs have nobody to approve the plan, so they
|
|
70
|
+
* post it and keep going instead of waiting.
|
|
71
|
+
*/
|
|
72
|
+
const defaultOnboardPrompt = (options) => options.headless
|
|
73
|
+
? `${ONBOARD_PROMPT_BASE} this run is non-interactive: post the plan in step 4 for the record and continue without waiting for approval.`
|
|
74
|
+
: ONBOARD_PROMPT_BASE;
|
|
75
|
+
exports.defaultOnboardPrompt = defaultOnboardPrompt;
|
|
76
|
+
/**
|
|
77
|
+
* Printed before the tool picker so the time cost and scope of the run are
|
|
78
|
+
* known before the user commits to a tool.
|
|
79
|
+
*/
|
|
80
|
+
const printPreLaunchNotice = (options) => {
|
|
81
|
+
console.log(chalk_1.default.bold("What happens next"));
|
|
82
|
+
console.log(` An agent reviews ${chalk_1.default.cyan(options.selectedAppLabel)}, applies the Meticulous install, and opens a pull request.`);
|
|
83
|
+
console.log(` ${chalk_1.default.yellow("This usually takes 15–30 minutes")} depending on the size of the project — keep this terminal open.`);
|
|
84
|
+
console.log(chalk_1.default.dim(" Model usage is billed to your own Claude Code / Codex account."));
|
|
85
|
+
console.log("");
|
|
86
|
+
};
|
|
87
|
+
exports.printPreLaunchNotice = printPreLaunchNotice;
|
|
88
|
+
const TOOL_LABEL = {
|
|
89
|
+
claude: "Claude Code",
|
|
90
|
+
codex: "Codex",
|
|
91
|
+
};
|
|
92
|
+
const TOOL_COMMAND = {
|
|
93
|
+
claude: "claude",
|
|
94
|
+
codex: "codex",
|
|
95
|
+
};
|
|
96
|
+
const INSTALL_HINT = {
|
|
97
|
+
claude: "Install: npm install -g @anthropic-ai/claude-code — https://docs.anthropic.com/en/docs/claude-code/setup",
|
|
98
|
+
codex: "Install: npm install -g @openai/codex — https://github.com/openai/codex",
|
|
99
|
+
};
|
|
100
|
+
const isToolInstalled = (tool) => {
|
|
101
|
+
try {
|
|
102
|
+
(0, child_process_1.execSync)(`which ${TOOL_COMMAND[tool]}`, { stdio: "ignore" });
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.isToolInstalled = isToolInstalled;
|
|
110
|
+
/**
|
|
111
|
+
* Interactively asks which tool to open the workspace in, defaulting to the
|
|
112
|
+
* first installed option. Installed tools are listed first; missing ones are
|
|
113
|
+
* shown disabled with an install hint. Returns null when the terminal is not
|
|
114
|
+
* interactive (caller should fall back to printed instructions).
|
|
115
|
+
*/
|
|
116
|
+
const promptForTool = async () => {
|
|
117
|
+
if (!process.stdin.isTTY) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
// Cursor is intentionally omitted from the picker — Claude Code / Codex can
|
|
121
|
+
// drive the install end-to-end; Cursor still gets skills + MCP in the PR.
|
|
122
|
+
const order = ["claude", "codex"];
|
|
123
|
+
const installed = order.filter(exports.isToolInstalled);
|
|
124
|
+
const choices = order.map((tool) => {
|
|
125
|
+
const ready = installed.includes(tool);
|
|
126
|
+
return {
|
|
127
|
+
name: ready
|
|
128
|
+
? TOOL_LABEL[tool]
|
|
129
|
+
: `${TOOL_LABEL[tool]} ${chalk_1.default.dim("(not installed)")}`,
|
|
130
|
+
value: tool,
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
const { tool } = await inquirer_1.default.prompt([
|
|
134
|
+
{
|
|
135
|
+
type: "list",
|
|
136
|
+
name: "tool",
|
|
137
|
+
message: "Which tool should apply the Meticulous install? (15–30 min run)",
|
|
138
|
+
choices,
|
|
139
|
+
default: installed[0] ?? "claude",
|
|
140
|
+
},
|
|
141
|
+
]);
|
|
142
|
+
return tool;
|
|
143
|
+
};
|
|
144
|
+
exports.promptForTool = promptForTool;
|
|
145
|
+
/**
|
|
146
|
+
* Resolves the requested `--agent` choice to a concrete tool. `auto` prompts
|
|
147
|
+
* when interactive, otherwise falls back to the first installed agent. Returns
|
|
148
|
+
* null when no agent can be launched (caller prints manual instructions).
|
|
149
|
+
*/
|
|
150
|
+
const resolveOnboardTool = async (requested) => {
|
|
151
|
+
if (requested !== "auto") {
|
|
152
|
+
return requested;
|
|
153
|
+
}
|
|
154
|
+
const picked = await (0, exports.promptForTool)();
|
|
155
|
+
if (picked) {
|
|
156
|
+
return picked;
|
|
157
|
+
}
|
|
158
|
+
if ((0, exports.isToolInstalled)("claude")) {
|
|
159
|
+
return "claude";
|
|
160
|
+
}
|
|
161
|
+
if ((0, exports.isToolInstalled)("codex")) {
|
|
162
|
+
return "codex";
|
|
163
|
+
}
|
|
164
|
+
console.log(chalk_1.default.yellow("Neither Claude Code nor Codex CLI found on PATH — printing manual instructions."));
|
|
165
|
+
return null;
|
|
166
|
+
};
|
|
167
|
+
exports.resolveOnboardTool = resolveOnboardTool;
|
|
168
|
+
const launchOnboardTool = (options) => {
|
|
169
|
+
const { tool, projectRoot, workspaceDir } = options;
|
|
170
|
+
if (!(0, exports.isToolInstalled)(tool)) {
|
|
171
|
+
console.error(chalk_1.default.red(`${TOOL_LABEL[tool]} is not installed (\`which ${TOOL_COMMAND[tool]}\` failed).`));
|
|
172
|
+
console.error(INSTALL_HINT[tool]);
|
|
173
|
+
return 1;
|
|
174
|
+
}
|
|
175
|
+
return launchAgent({
|
|
176
|
+
tool,
|
|
177
|
+
workspaceDir,
|
|
178
|
+
projectRoot,
|
|
179
|
+
model: options.model,
|
|
180
|
+
prompt: options.prompt,
|
|
181
|
+
headless: options.headless,
|
|
182
|
+
auto: options.auto,
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
exports.launchOnboardTool = launchOnboardTool;
|
|
186
|
+
const launchAgent = (options) => {
|
|
187
|
+
const { tool, workspaceDir, projectRoot, headless, auto, prompt } = options;
|
|
188
|
+
const model = options.model ?? (tool === "claude" ? "opus" : undefined);
|
|
189
|
+
const args = buildAgentArgs({
|
|
190
|
+
tool,
|
|
191
|
+
model,
|
|
192
|
+
prompt,
|
|
193
|
+
headless,
|
|
194
|
+
auto,
|
|
195
|
+
projectRoot,
|
|
196
|
+
});
|
|
197
|
+
console.log(chalk_1.default.bold(`Launching ${TOOL_LABEL[tool]}${headless ? " (headless)" : ""}…`));
|
|
198
|
+
console.log(chalk_1.default.dim(` Inference uses your local ${tool === "claude" ? "Anthropic" : "OpenAI"} credentials — Meticulous does not proxy the model.`));
|
|
199
|
+
console.log("");
|
|
200
|
+
const result = (0, child_process_1.spawnSync)(TOOL_COMMAND[tool], args, {
|
|
201
|
+
cwd: workspaceDir,
|
|
202
|
+
stdio: "inherit",
|
|
203
|
+
env: { ...process.env },
|
|
204
|
+
});
|
|
205
|
+
if (result.error) {
|
|
206
|
+
console.error(`Failed to launch ${TOOL_LABEL[tool]}: ${result.error.message}`);
|
|
207
|
+
return 1;
|
|
208
|
+
}
|
|
209
|
+
return result.status ?? 1;
|
|
210
|
+
};
|
|
211
|
+
const printNextSteps = (options) => {
|
|
212
|
+
const { tool, context } = options;
|
|
213
|
+
const projectLabel = context.orgAndProject ?? "your Meticulous project";
|
|
214
|
+
const tokensUrl = context.meticulousTokensUrl ??
|
|
215
|
+
"https://app.meticulous.ai (Project → Settings → Tokens)";
|
|
216
|
+
const secretsLabel = context.secretsUrlLabel ?? "your CI secrets";
|
|
217
|
+
const steps = [
|
|
218
|
+
`In ${TOOL_LABEL[tool]}, authenticate the Meticulous MCP when prompted (browser OAuth).`,
|
|
219
|
+
`Grab the recording token and project API token from ${chalk_1.default.cyan(tokensUrl)}.`,
|
|
220
|
+
`Put the recording token in a build-time frontend env var (it is a public, read-only token), and put the API token in ${secretsLabel}${context.secretsUrl ? ` (${chalk_1.default.cyan(context.secretsUrl)})` : ""} for ${chalk_1.default.cyan(projectLabel)}.`,
|
|
221
|
+
unresolvedVcsLinkStep(context),
|
|
222
|
+
meticulousSideSetupStep(context.meticulousSideSetupPath),
|
|
223
|
+
"Merge the PR, then confirm sessions appear in the Meticulous dashboard.",
|
|
224
|
+
].filter((step) => step !== null);
|
|
225
|
+
console.log("");
|
|
226
|
+
console.log(chalk_1.default.bold("Next steps"));
|
|
227
|
+
steps.forEach((step, index) => {
|
|
228
|
+
console.log(` ${index + 1}. ${step}`);
|
|
229
|
+
});
|
|
230
|
+
console.log("");
|
|
231
|
+
};
|
|
232
|
+
exports.printNextSteps = printNextSteps;
|
|
233
|
+
/** Surfaces the hand-back file when the agent found work for us to do. */
|
|
234
|
+
const meticulousSideSetupStep = (setupPath) => {
|
|
235
|
+
if (!(0, fs_1.existsSync)(setupPath)) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
return (`Send ${chalk_1.default.cyan(setupPath)} to your Meticulous contact (or support@meticulous.ai) — ` +
|
|
239
|
+
"it lists setup this project needs on the Meticulous side.");
|
|
240
|
+
};
|
|
241
|
+
const unresolvedVcsLinkStep = (context) => {
|
|
242
|
+
switch (context.ciProvider) {
|
|
243
|
+
case "github-actions":
|
|
244
|
+
return linkStepFor(context.isGitHubIntegrationActive, docs_urls_1.GITHUB_ACTIONS_DOCS_URL);
|
|
245
|
+
case "gitlab-ci":
|
|
246
|
+
return linkStepFor(context.isGitLabIntegrationActive, context.gitlabConfigureProjectsUrl);
|
|
247
|
+
case "bitbucket-pipelines":
|
|
248
|
+
return linkStepFor(context.isBitbucketIntegrationActive, context.bitbucketConfigureProjectsUrl);
|
|
249
|
+
default:
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
const linkStepFor = (linked, configureUrl) => {
|
|
254
|
+
if (linked !== false) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
return configureUrl
|
|
258
|
+
? `Link the repo to Meticulous at ${chalk_1.default.cyan(configureUrl)}.`
|
|
259
|
+
: "Link the repo to Meticulous in your project settings.";
|
|
260
|
+
};
|
|
261
|
+
const printManualLaunchInstructions = (options) => {
|
|
262
|
+
const { workspaceDir, projectRoot, prompt } = options;
|
|
263
|
+
const escapedPrompt = prompt.replace(/"/g, '\\"');
|
|
264
|
+
console.log("");
|
|
265
|
+
console.log(chalk_1.default.bold.green("Onboard workspace ready!"));
|
|
266
|
+
console.log("");
|
|
267
|
+
console.log(` ${chalk_1.default.cyan("Workspace:")} ${workspaceDir}`);
|
|
268
|
+
console.log(` ${chalk_1.default.cyan("Repo:")} ${projectRoot}`);
|
|
269
|
+
console.log("");
|
|
270
|
+
console.log(chalk_1.default.bold(" Open in your preferred tool:"));
|
|
271
|
+
console.log("");
|
|
272
|
+
console.log(chalk_1.default.dim(" This can take 15–30 minutes depending on the size of the project."));
|
|
273
|
+
console.log("");
|
|
274
|
+
console.log(` ${chalk_1.default.cyan("Claude Code:")} cd "${workspaceDir}" && claude "${escapedPrompt}" --add-dir "${projectRoot}"`);
|
|
275
|
+
console.log(` ${chalk_1.default.cyan("Codex:")} cd "${workspaceDir}" && codex "${escapedPrompt}" --sandbox workspace-write --add-dir "${projectRoot}"`);
|
|
276
|
+
console.log("");
|
|
277
|
+
console.log(chalk_1.default.dim(" The agent applies the install and opens a pull request with the changes."));
|
|
278
|
+
console.log(chalk_1.default.dim(" Model usage is billed to your own Claude Code / Codex account."));
|
|
279
|
+
console.log("");
|
|
280
|
+
};
|
|
281
|
+
exports.printManualLaunchInstructions = printManualLaunchInstructions;
|
|
282
|
+
/**
|
|
283
|
+
* `--add-dir <directories...>` is variadic in both CLIs, so the prompt must
|
|
284
|
+
* never follow it — it would be parsed as another directory (and a long prompt
|
|
285
|
+
* then fails with ENAMETOOLONG). Keep the prompt first and `--add-dir` last.
|
|
286
|
+
*/
|
|
287
|
+
const buildAgentArgs = (options) => {
|
|
288
|
+
const { tool, model, prompt, headless, auto, projectRoot } = options;
|
|
289
|
+
const modelArgs = model ? ["--model", model] : [];
|
|
290
|
+
const addDir = ["--add-dir", projectRoot];
|
|
291
|
+
if (tool === "claude") {
|
|
292
|
+
const autoArgs = auto ? ["--permission-mode", "acceptEdits"] : [];
|
|
293
|
+
if (headless) {
|
|
294
|
+
return ["-p", prompt, ...modelArgs, ...autoArgs, ...addDir];
|
|
295
|
+
}
|
|
296
|
+
return [prompt, ...modelArgs, ...autoArgs, ...addDir];
|
|
297
|
+
}
|
|
298
|
+
// Codex. The primary workspace is `.meticulous-onboard`, so the repo itself
|
|
299
|
+
// is only writable via `--add-dir` — and Codex silently ignores that flag
|
|
300
|
+
// under its default read-only sandbox. workspace-write is therefore required,
|
|
301
|
+
// not just an `--auto` nicety; approvals still gate what actually runs.
|
|
302
|
+
const sandboxArgs = ["--sandbox", "workspace-write"];
|
|
303
|
+
if (headless) {
|
|
304
|
+
// `codex exec` is non-interactive and takes no approval policy.
|
|
305
|
+
return ["exec", prompt, ...modelArgs, ...sandboxArgs, ...addDir];
|
|
306
|
+
}
|
|
307
|
+
const autoArgs = auto ? ["--ask-for-approval", "on-request"] : [];
|
|
308
|
+
return [prompt, ...modelArgs, ...sandboxArgs, ...autoArgs, ...addDir];
|
|
309
|
+
};
|
|
310
|
+
//# sourceMappingURL=launch-agent.js.map
|
|
311
|
+
//# debugId=cc77314d-aba3-5b50-b3e3-23beaef7d1ef
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launch-agent.js","sources":["../../../src/commands/onboard/launch-agent.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"cc77314d-aba3-5b50-b3e3-23beaef7d1ef"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export declare const ONBOARD_WORKDIR = ".meticulous-onboard";
|
|
2
|
+
/**
|
|
3
|
+
* Written by the install agent (not the CLI) when something needs setup on the
|
|
4
|
+
* Meticulous side, e.g. WebSocket support. The customer sends it back to us.
|
|
5
|
+
*/
|
|
6
|
+
export declare const METICULOUS_SIDE_SETUP_FILE = "meticulous-side-setup.md";
|
|
7
|
+
export interface OnboardContextJson {
|
|
8
|
+
orgAndProject: string | null;
|
|
9
|
+
projectRoot: string;
|
|
10
|
+
/**
|
|
11
|
+
* Absolute path the agent must use for METICULOUS_SIDE_SETUP_FILE. The agent
|
|
12
|
+
* runs with the onboard workspace as its cwd rather than the repo, so a
|
|
13
|
+
* relative path lands somewhere neither it nor the user expects.
|
|
14
|
+
*/
|
|
15
|
+
meticulousSideSetupPath: string;
|
|
16
|
+
repoUrl: string | null;
|
|
17
|
+
ciProvider: "github-actions" | "gitlab-ci" | "bitbucket-pipelines" | "unknown";
|
|
18
|
+
isGitHubIntegrationActive: boolean | null;
|
|
19
|
+
isGitLabIntegrationActive: boolean | null;
|
|
20
|
+
isBitbucketIntegrationActive: boolean | null;
|
|
21
|
+
meticulousSettingsUrl: string | null;
|
|
22
|
+
/** Recording token + project API token live on this Tokens settings page. */
|
|
23
|
+
meticulousTokensUrl: string | null;
|
|
24
|
+
meticulousSessionsUrl: string | null;
|
|
25
|
+
/** Org page to link/map the GitHub repo to this Meticulous project. */
|
|
26
|
+
githubConfigureProjectsUrl: string | null;
|
|
27
|
+
/** Project settings page where the GitLab access token is entered. */
|
|
28
|
+
gitlabConfigureProjectsUrl: string | null;
|
|
29
|
+
/** Project settings page where the Bitbucket access token is entered. */
|
|
30
|
+
bitbucketConfigureProjectsUrl: string | null;
|
|
31
|
+
secretsUrl: string | null;
|
|
32
|
+
secretsUrlLabel: string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Repo-relative paths the CLI installed for skills/MCP. The agent MUST stage
|
|
35
|
+
* and commit these in the onboarding PR (when they exist).
|
|
36
|
+
*/
|
|
37
|
+
agentIntegrationPaths: string[];
|
|
38
|
+
/** Whether the repo is a monorepo with multiple frontend apps. */
|
|
39
|
+
isMonorepo: boolean;
|
|
40
|
+
/** Repo-relative path of the selected frontend app (`.` if single-package). */
|
|
41
|
+
selectedAppPath: string;
|
|
42
|
+
selectedAppName: string;
|
|
43
|
+
selectedAppAbsolutePath: string;
|
|
44
|
+
frameworkDetection: {
|
|
45
|
+
framework: string;
|
|
46
|
+
rendering: string;
|
|
47
|
+
isUnsupportedSsr: boolean;
|
|
48
|
+
/** `"high"` or `"ambiguous"`; null unless `isUnsupportedSsr` is true. */
|
|
49
|
+
unsupportedSsrConfidence: string | null;
|
|
50
|
+
details: string[];
|
|
51
|
+
} | null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Materializes a Claude Code workspace under `<projectRoot>/.meticulous-onboard`
|
|
55
|
+
* with CLAUDE.md, settings, customer-facing agents, and onboard-context.json.
|
|
56
|
+
* The customer repo is edited via `--add-dir` when launching the agent.
|
|
57
|
+
*/
|
|
58
|
+
export declare const materializeOnboardWorkspace: (options: {
|
|
59
|
+
projectRoot: string;
|
|
60
|
+
context: OnboardContextJson;
|
|
61
|
+
}) => string;
|
|
62
|
+
/** Rewrites onboard-context.json in the materialized workspace (e.g. after skills/MCP install). */
|
|
63
|
+
export declare const updateOnboardContext: (options: {
|
|
64
|
+
projectRoot: string;
|
|
65
|
+
workspaceDir: string;
|
|
66
|
+
context: OnboardContextJson;
|
|
67
|
+
}) => void;
|
|
68
|
+
//# sourceMappingURL=materialize-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize-workspace.d.ts","sourceRoot":"","sources":["../../../src/commands/onboard/materialize-workspace.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AAErE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EACN,gBAAgB,GAChB,WAAW,GACX,qBAAqB,GACrB,SAAS,CAAC;IACd,yBAAyB,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,yBAAyB,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,4BAA4B,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,uEAAuE;IACvE,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,sEAAsE;IACtE,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,yEAAyE;IACzE,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,kEAAkE;IAClE,UAAU,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,yEAAyE;QACzE,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,GAAG,IAAI,CAAC;CACV;AA+DD;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,YAAa;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,KAAG,MAiGH,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,oBAAoB,YAAa;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;CAC7B,KAAG,IAaH,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
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]="d487abf0-d680-53cb-9665-4e716c731c92")}catch(e){}}();
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.updateOnboardContext = exports.materializeOnboardWorkspace = exports.METICULOUS_SIDE_SETUP_FILE = exports.ONBOARD_WORKDIR = void 0;
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const customer_agents_1 = require("./customer-agents");
|
|
9
|
+
const customer_docs_1 = require("./customer-docs");
|
|
10
|
+
const inline_doc_constants_1 = require("./inline-doc-constants");
|
|
11
|
+
const safe_repo_fs_1 = require("./safe-repo-fs");
|
|
12
|
+
exports.ONBOARD_WORKDIR = ".meticulous-onboard";
|
|
13
|
+
/**
|
|
14
|
+
* Written by the install agent (not the CLI) when something needs setup on the
|
|
15
|
+
* Meticulous side, e.g. WebSocket support. The customer sends it back to us.
|
|
16
|
+
*/
|
|
17
|
+
exports.METICULOUS_SIDE_SETUP_FILE = "meticulous-side-setup.md";
|
|
18
|
+
const templatesDir = () => (0, path_1.join)(__dirname, "templates");
|
|
19
|
+
const agentsDir = () => {
|
|
20
|
+
const bundled = (0, path_1.join)(templatesDir(), "agents");
|
|
21
|
+
// Prefer the postbuild-copied agents only when they actually contain files —
|
|
22
|
+
// an empty `templates/agents/` directory (e.g. from a partial local setup)
|
|
23
|
+
// must not block the source-mode fallback.
|
|
24
|
+
if ((0, fs_1.existsSync)(bundled) &&
|
|
25
|
+
(0, fs_1.readdirSync)(bundled).some((file) => file.endsWith(".md"))) {
|
|
26
|
+
return bundled;
|
|
27
|
+
}
|
|
28
|
+
// Source-mode fallback (`pnpm cli:dev`), which reads the canonical agents
|
|
29
|
+
// directly. That directory also holds internal-only agents, so the copy below
|
|
30
|
+
// is driven by CUSTOMER_AGENT_NAMES rather than by its contents. Published
|
|
31
|
+
// builds get the same subset pre-filtered into dist by
|
|
32
|
+
// scripts/copy-onboard-templates.mjs.
|
|
33
|
+
return (0, path_1.join)(__dirname, "..", "..", "..", "..", "..", "packages", "admin-cli", "src", "cli", "onboard", "templates", "agents");
|
|
34
|
+
};
|
|
35
|
+
const webappFrontendDir = () => (0, path_1.join)(__dirname, "..", "..", "..", "..", "..", "packages", "webapp-frontend");
|
|
36
|
+
const docsSrcDir = () => {
|
|
37
|
+
const bundled = (0, path_1.join)(templatesDir(), "docs");
|
|
38
|
+
if ((0, fs_1.existsSync)(bundled) && (0, fs_1.readdirSync)(bundled).length > 0) {
|
|
39
|
+
return bundled;
|
|
40
|
+
}
|
|
41
|
+
// Source-mode fallback: read the canonical docs content straight from
|
|
42
|
+
// webapp-frontend. Published builds get the CUSTOMER_DOC_FILES/DIRS subset
|
|
43
|
+
// pre-copied into dist by scripts/copy-onboard-templates.mjs.
|
|
44
|
+
return (0, path_1.join)(webappFrontendDir(), "src", "components", "docs", "content");
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Root the docs' `src/...` imports resolve against while inlining constants.
|
|
48
|
+
* Published builds only ship the CUSTOMER_DOC_IMPORT_FILES subset, mirrored at
|
|
49
|
+
* the same paths so both modes resolve identically.
|
|
50
|
+
*/
|
|
51
|
+
const docImportsRoot = () => {
|
|
52
|
+
const bundled = (0, path_1.join)(templatesDir(), "docs-imports");
|
|
53
|
+
return (0, fs_1.existsSync)(bundled) ? bundled : webappFrontendDir();
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Materializes a Claude Code workspace under `<projectRoot>/.meticulous-onboard`
|
|
57
|
+
* with CLAUDE.md, settings, customer-facing agents, and onboard-context.json.
|
|
58
|
+
* The customer repo is edited via `--add-dir` when launching the agent.
|
|
59
|
+
*/
|
|
60
|
+
const materializeOnboardWorkspace = (options) => {
|
|
61
|
+
const { projectRoot } = options;
|
|
62
|
+
const workspaceRelative = exports.ONBOARD_WORKDIR;
|
|
63
|
+
const claudeRelative = (0, path_1.join)(exports.ONBOARD_WORKDIR, ".claude");
|
|
64
|
+
const agentsRelative = (0, path_1.join)(claudeRelative, "agents");
|
|
65
|
+
const docsRelative = (0, path_1.join)(claudeRelative, "docs");
|
|
66
|
+
(0, safe_repo_fs_1.mkdirSafeSync)(projectRoot, agentsRelative);
|
|
67
|
+
const workspaceAbsolute = (0, safe_repo_fs_1.resolveSafeWritePath)(projectRoot, workspaceRelative);
|
|
68
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, (0, path_1.join)(workspaceRelative, ".gitignore"), "*\n");
|
|
69
|
+
const templates = templatesDir();
|
|
70
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, (0, path_1.join)(claudeRelative, "CLAUDE.md"), (0, fs_1.readFileSync)((0, path_1.join)(templates, "CLAUDE.md"), "utf8"));
|
|
71
|
+
(0, safe_repo_fs_1.copyFileSafeSync)(projectRoot, (0, path_1.join)(claudeRelative, "settings.json"), (0, path_1.join)(templates, "settings.json"));
|
|
72
|
+
const agentsSrc = agentsDir();
|
|
73
|
+
const missing = [];
|
|
74
|
+
for (const agentName of customer_agents_1.CUSTOMER_AGENT_NAMES) {
|
|
75
|
+
const file = `${agentName}.md`;
|
|
76
|
+
const src = (0, path_1.join)(agentsSrc, file);
|
|
77
|
+
if (!(0, fs_1.existsSync)(src)) {
|
|
78
|
+
missing.push(file);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
(0, safe_repo_fs_1.copyFileSafeSync)(projectRoot, (0, path_1.join)(agentsRelative, file), src);
|
|
82
|
+
}
|
|
83
|
+
if (missing.length > 0) {
|
|
84
|
+
throw new Error(`Missing onboard agent template(s) in ${agentsSrc}: ${missing.join(", ")}. ` +
|
|
85
|
+
`Update customer-agents.json if these agents were renamed or removed.`);
|
|
86
|
+
}
|
|
87
|
+
// The agent playbooks cite these docs as `.claude/docs/<path>`; the live docs
|
|
88
|
+
// pages render the recorder snippets and non-default CI tabs client-side, so
|
|
89
|
+
// the files must be present locally rather than fetched.
|
|
90
|
+
const docsSrc = docsSrcDir();
|
|
91
|
+
const webappRoot = docImportsRoot();
|
|
92
|
+
const missingDocs = [];
|
|
93
|
+
for (const docPath of customer_docs_1.CUSTOMER_DOC_FILES) {
|
|
94
|
+
const src = (0, path_1.join)(docsSrc, docPath);
|
|
95
|
+
if (!(0, fs_1.existsSync)(src)) {
|
|
96
|
+
missingDocs.push(docPath);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const destRelative = (0, path_1.join)(docsRelative, docPath);
|
|
100
|
+
(0, safe_repo_fs_1.mkdirSafeSync)(projectRoot, (0, path_1.join)(destRelative, ".."));
|
|
101
|
+
copyDocIntoWorkspace(projectRoot, src, destRelative, webappRoot);
|
|
102
|
+
}
|
|
103
|
+
for (const docDir of customer_docs_1.CUSTOMER_DOC_DIRS) {
|
|
104
|
+
const srcDir = (0, path_1.join)(docsSrc, docDir);
|
|
105
|
+
if (!(0, fs_1.existsSync)(srcDir)) {
|
|
106
|
+
missingDocs.push(`${docDir}/`);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
copyDocsDirIntoWorkspace(projectRoot, srcDir, (0, path_1.join)(docsRelative, docDir), webappRoot);
|
|
110
|
+
}
|
|
111
|
+
if (missingDocs.length > 0) {
|
|
112
|
+
throw new Error(`Missing onboard doc file(s) in ${docsSrc}: ${missingDocs.join(", ")}. ` +
|
|
113
|
+
`Update customer-docs.json if these docs were moved or renamed.`);
|
|
114
|
+
}
|
|
115
|
+
const contextPayload = JSON.stringify(options.context, null, 2) + "\n";
|
|
116
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, (0, path_1.join)(claudeRelative, "onboard-context.json"), contextPayload);
|
|
117
|
+
// Convenience copy at workspace root for prompts that say "read onboard-context.json".
|
|
118
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, (0, path_1.join)(workspaceRelative, "onboard-context.json"), contextPayload);
|
|
119
|
+
ensureGitignoreEntry(projectRoot, exports.ONBOARD_WORKDIR);
|
|
120
|
+
return workspaceAbsolute;
|
|
121
|
+
};
|
|
122
|
+
exports.materializeOnboardWorkspace = materializeOnboardWorkspace;
|
|
123
|
+
/** Rewrites onboard-context.json in the materialized workspace (e.g. after skills/MCP install). */
|
|
124
|
+
const updateOnboardContext = (options) => {
|
|
125
|
+
(0, safe_repo_fs_1.assertWorkspaceInsideProject)(options.projectRoot, options.workspaceDir);
|
|
126
|
+
const payload = JSON.stringify(options.context, null, 2) + "\n";
|
|
127
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(options.projectRoot, (0, path_1.join)(exports.ONBOARD_WORKDIR, ".claude", "onboard-context.json"), payload);
|
|
128
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(options.projectRoot, (0, path_1.join)(exports.ONBOARD_WORKDIR, "onboard-context.json"), payload);
|
|
129
|
+
};
|
|
130
|
+
exports.updateOnboardContext = updateOnboardContext;
|
|
131
|
+
/** Recursively copies a trusted docs dir into a repo-relative destination. */
|
|
132
|
+
const copyDocsDirIntoWorkspace = (projectRoot, srcDir, destRelative, webappRoot) => {
|
|
133
|
+
(0, safe_repo_fs_1.mkdirSafeSync)(projectRoot, destRelative);
|
|
134
|
+
for (const entry of (0, fs_1.readdirSync)(srcDir, { withFileTypes: true })) {
|
|
135
|
+
const src = (0, path_1.join)(srcDir, entry.name);
|
|
136
|
+
const dest = (0, path_1.join)(destRelative, entry.name);
|
|
137
|
+
if (entry.isDirectory()) {
|
|
138
|
+
copyDocsDirIntoWorkspace(projectRoot, src, dest, webappRoot);
|
|
139
|
+
}
|
|
140
|
+
else if (entry.isFile()) {
|
|
141
|
+
copyDocIntoWorkspace(projectRoot, src, dest, webappRoot);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Copies one doc, inlining the constants it imports from other doc modules so
|
|
147
|
+
* the agent reads the same content the docs site renders.
|
|
148
|
+
*/
|
|
149
|
+
const copyDocIntoWorkspace = (projectRoot, src, destRelative, webappRoot) => {
|
|
150
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, destRelative, (0, inline_doc_constants_1.inlineImportedDocConstants)({
|
|
151
|
+
source: (0, fs_1.readFileSync)(src, "utf8"),
|
|
152
|
+
docPath: src,
|
|
153
|
+
webappRoot,
|
|
154
|
+
}));
|
|
155
|
+
};
|
|
156
|
+
const ensureGitignoreEntry = (projectRoot, entry) => {
|
|
157
|
+
const relativeGitignore = ".gitignore";
|
|
158
|
+
const line = `${entry}/`;
|
|
159
|
+
let content = "";
|
|
160
|
+
let existedAsSafeFile = false;
|
|
161
|
+
const gitignorePath = (0, safe_repo_fs_1.resolveSafeWritePath)(projectRoot, relativeGitignore);
|
|
162
|
+
if ((0, fs_1.existsSync)(gitignorePath)) {
|
|
163
|
+
content = (0, fs_1.readFileSync)(gitignorePath, "utf8");
|
|
164
|
+
existedAsSafeFile = true;
|
|
165
|
+
}
|
|
166
|
+
if (!existedAsSafeFile) {
|
|
167
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, relativeGitignore, `${line}\n`);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (content.split(/\r?\n/).some((l) => l.trim() === line || l.trim() === entry)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const suffix = content.endsWith("\n") ? "" : "\n";
|
|
174
|
+
(0, safe_repo_fs_1.writeFileSafeSync)(projectRoot, relativeGitignore, `${content}${suffix}\n# Meticulous AI onboard workspace\n${line}\n`);
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=materialize-workspace.js.map
|
|
177
|
+
//# debugId=d487abf0-d680-53cb-9665-4e716c731c92
|