@mmerterden/multi-agent-pipeline 8.6.1 → 10.0.6
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/CHANGELOG.md +544 -2484
- package/README.md +117 -138
- package/docs/features.md +1 -1
- package/index.js +8 -10
- package/install/_adapters.mjs +5 -1
- package/install/_common.mjs +63 -0
- package/install/claude.mjs +14 -14
- package/install/copilot.mjs +14 -8
- package/install/index.mjs +85 -19
- package/install/templates/claude-hooks.json +18 -0
- package/install/templates/copilot-instructions.md +3 -3
- package/package.json +21 -6
- package/pipeline/adapters/_base.mjs +366 -14
- package/pipeline/adapters/antigravity.mjs +140 -0
- package/pipeline/adapters/codex.mjs +159 -0
- package/pipeline/adapters/copilot-chat-orchestration.mjs +148 -0
- package/pipeline/adapters/copilot-chat.mjs +34 -68
- package/pipeline/adapters/cursor-orchestration.mjs +152 -0
- package/pipeline/adapters/cursor.mjs +49 -90
- package/pipeline/agents/android-architect.md +5 -5
- package/pipeline/agents/backend-architect.md +4 -4
- package/pipeline/agents/code-reviewer.md +10 -10
- package/pipeline/agents/dev-critic.md +17 -17
- package/pipeline/agents/explorer.md +3 -3
- package/pipeline/agents/ios-architect.md +4 -4
- package/pipeline/agents/security-auditor.md +12 -12
- package/pipeline/agents/task-clarifier.md +18 -18
- package/pipeline/claude-md-template.md +3 -3
- package/pipeline/commands/archive-guard.md +3 -3
- package/pipeline/commands/figma-to-swiftui.md +10 -10
- package/pipeline/commands/multi-agent/_account-picker.md +13 -9
- package/pipeline/commands/multi-agent/_dev-context.md +15 -15
- package/pipeline/commands/multi-agent/_input-parser.md +4 -4
- package/pipeline/commands/multi-agent/_repo-picker.md +9 -9
- package/pipeline/commands/multi-agent/analysis-resolve.md +129 -0
- package/pipeline/commands/multi-agent/analysis.md +667 -0
- package/pipeline/commands/multi-agent/autopilot.md +22 -22
- package/pipeline/commands/multi-agent/build-optimize.md +77 -0
- package/pipeline/commands/multi-agent/channels.md +96 -96
- package/pipeline/commands/multi-agent/delete.md +19 -17
- package/pipeline/commands/multi-agent/dev-autopilot.md +23 -23
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +23 -23
- package/pipeline/commands/multi-agent/dev-local.md +25 -22
- package/pipeline/commands/multi-agent/dev.md +49 -49
- package/pipeline/commands/multi-agent/diff-explain.md +4 -4
- package/pipeline/commands/multi-agent/garbage-collect.md +58 -0
- package/pipeline/commands/multi-agent/help.md +75 -66
- package/pipeline/commands/multi-agent/issue.md +3 -3
- package/pipeline/commands/multi-agent/jira.md +12 -12
- package/pipeline/commands/multi-agent/kill.md +6 -6
- package/pipeline/commands/multi-agent/language.md +12 -12
- package/pipeline/commands/multi-agent/local-autopilot.md +34 -34
- package/pipeline/commands/multi-agent/local.md +24 -25
- package/pipeline/commands/multi-agent/log.md +6 -6
- package/pipeline/commands/multi-agent/manual-test.md +3 -3
- package/pipeline/commands/multi-agent/prune-logs.md +60 -0
- package/pipeline/commands/multi-agent/purge.md +10 -7
- package/pipeline/commands/multi-agent/refactor.md +9 -9
- package/pipeline/commands/multi-agent/refs/analysis-template.md +1062 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +15 -13
- package/pipeline/commands/multi-agent/refs/audit-guide.md +20 -20
- package/pipeline/commands/multi-agent/refs/backend-guide.md +9 -9
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +17 -17
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +30 -30
- package/pipeline/commands/multi-agent/refs/channels/jira.md +15 -15
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +19 -17
- package/pipeline/commands/multi-agent/refs/channels/pr.md +22 -22
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +19 -19
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +11 -11
- package/pipeline/commands/multi-agent/refs/conventions-defaults.md +179 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +35 -33
- package/pipeline/commands/multi-agent/refs/features/dev-critic.md +5 -5
- package/pipeline/commands/multi-agent/refs/features/external-context-injection.md +6 -6
- package/pipeline/commands/multi-agent/refs/features/model-fallback.md +73 -0
- package/pipeline/commands/multi-agent/refs/features/plan-todos.md +1 -1
- package/pipeline/commands/multi-agent/refs/features/prior-fix-detection.md +4 -4
- package/pipeline/commands/multi-agent/refs/features/repo-map.md +6 -6
- package/pipeline/commands/multi-agent/refs/features/shadow-git.md +2 -2
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +16 -16
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +18 -18
- package/pipeline/commands/multi-agent/refs/keychain.md +18 -8
- package/pipeline/commands/multi-agent/refs/knowledge.md +9 -9
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +19 -19
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +29 -9
- package/pipeline/commands/multi-agent/refs/phases/modes.md +33 -33
- package/pipeline/commands/multi-agent/refs/phases/operations.md +11 -11
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +93 -57
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +59 -28
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +115 -63
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +99 -36
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +160 -63
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +33 -18
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +45 -43
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +54 -28
- package/pipeline/commands/multi-agent/refs/phases.md +17 -17
- package/pipeline/commands/multi-agent/refs/picker-contract.md +65 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +37 -21
- package/pipeline/commands/multi-agent/refs/rules.md +83 -25
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +32 -30
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +54 -30
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +36 -33
- package/pipeline/commands/multi-agent/resume.md +9 -9
- package/pipeline/commands/multi-agent/review.md +24 -24
- package/pipeline/commands/multi-agent/scan.md +10 -10
- package/pipeline/commands/multi-agent/search.md +8 -8
- package/pipeline/commands/multi-agent/setup.md +111 -84
- package/pipeline/commands/multi-agent/stack.md +5 -5
- package/pipeline/commands/multi-agent/status.md +5 -5
- package/pipeline/commands/multi-agent/sync.md +123 -111
- package/pipeline/commands/multi-agent/test.md +6 -6
- package/pipeline/commands/multi-agent/update.md +1 -1
- package/pipeline/commands/multi-agent.md +66 -60
- package/pipeline/commands/sim-test.md +14 -14
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +1 -1
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +2 -2
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +2 -2
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +1 -1
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +2 -2
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +3 -3
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +4 -4
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +1 -1
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +1 -1
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-2-plan.json +42 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/03-backend-python-ratelimit/task.json +12 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-2-plan.json +40 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/04-frontend-next-hydration/task.json +12 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-2-plan.json +42 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-review.json +28 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/expected/phase-4-triage.json +27 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/05-ios-security-keychain/task.json +12 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-2-plan.json +41 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-review.json +12 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/expected/phase-4-triage.json +6 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/06-android-refactor-usecase/task.json +12 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-2-plan.json +42 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-review.json +28 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/expected/phase-4-triage.json +27 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/07-backend-node-idempotency/task.json +12 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-2-plan.json +31 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-review.json +12 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/expected/phase-4-triage.json +18 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/08-ios-auth-consensus-unverified/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +14 -14
- package/pipeline/eval/intent-cases.json +40 -0
- package/pipeline/eval/run-metrics-fixture.json +46 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +1 -1
- package/pipeline/eval/triage/02-real-blocker/notes.md +2 -2
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +1 -1
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +1 -1
- package/pipeline/eval/triage/05-mixed-classification/notes.md +2 -2
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +2 -2
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +1 -1
- package/pipeline/eval/triage/08-style-misclassified/notes.md +1 -1
- package/pipeline/eval/triage/09-cascading-finding/notes.md +2 -2
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +2 -2
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +3 -3
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +2 -2
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +5 -5
- package/pipeline/eval/triage/README.md +4 -4
- package/pipeline/lib/account-resolver.sh +3 -3
- package/pipeline/lib/ask-choice.sh +98 -0
- package/pipeline/lib/channels-multi-repo.sh +3 -3
- package/pipeline/lib/classify-intent.sh +110 -0
- package/pipeline/lib/context-link-extractor.sh +3 -3
- package/pipeline/lib/credential-store-resolver.sh +3 -3
- package/pipeline/lib/credential-store.sh +9 -5
- package/pipeline/lib/extract-conventions.sh +1034 -0
- package/pipeline/lib/fetch-confluence.sh +3 -3
- package/pipeline/lib/fetch-crashlytics.sh +5 -5
- package/pipeline/lib/fetch-fortify.sh +5 -21
- package/pipeline/lib/fetch-swagger.sh +5 -5
- package/pipeline/lib/figma-screenshot.sh +536 -0
- package/pipeline/lib/issue-fetcher.sh +46 -20
- package/pipeline/lib/md2confluence-v3.py +1076 -0
- package/pipeline/lib/multi-repo-pipeline.sh +13 -22
- package/pipeline/lib/plan-todos.sh +7 -7
- package/pipeline/lib/post-pr-review.sh +53 -21
- package/pipeline/lib/repo-cache.sh +5 -5
- package/pipeline/lib/review-watch.sh +17 -13
- package/pipeline/lib/shadow-git.sh +7 -7
- package/pipeline/lib/submodule-detector.sh +3 -3
- package/pipeline/lib/vercel-deploy.sh +28 -15
- package/pipeline/preferences-template.json +21 -4
- package/pipeline/rules/app-store-guidelines.md +2 -2
- package/pipeline/rules/code-style.md +6 -6
- package/pipeline/rules/figma-pipeline.md +100 -2
- package/pipeline/rules/kotlin-android.md +8 -8
- package/pipeline/rules/security.md +4 -4
- package/pipeline/rules/tdd.md +1 -1
- package/pipeline/rules/testing.md +5 -5
- package/pipeline/schemas/agent-state.schema.json +55 -20
- package/pipeline/schemas/analysis-output.schema.json +7 -2
- package/pipeline/schemas/analysis-spec.schema.json +484 -0
- package/pipeline/schemas/clarify-output.schema.json +5 -5
- package/pipeline/schemas/conventions-output.schema.json +70 -0
- package/pipeline/schemas/dev-critic-output.schema.json +2 -2
- package/pipeline/schemas/diff-risk.schema.json +3 -3
- package/pipeline/schemas/figma-project-config.schema.json +3 -3
- package/pipeline/schemas/learnings-ledger.schema.json +39 -0
- package/pipeline/schemas/migrations/README.md +2 -2
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +5 -5
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +3 -3
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +4 -4
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +5 -5
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +3 -3
- package/pipeline/schemas/plan-todos.schema.json +4 -4
- package/pipeline/schemas/planning-output.schema.json +3 -3
- package/pipeline/schemas/prefs.schema.json +97 -13
- package/pipeline/schemas/reviewer-output.schema.json +7 -3
- package/pipeline/schemas/test-gap.schema.json +1 -1
- package/pipeline/schemas/token-budget.json +8 -8
- package/pipeline/schemas/triage-corpus.schema.json +1 -1
- package/pipeline/schemas/triage-output.schema.json +44 -6
- package/pipeline/scripts/README.md +64 -64
- package/pipeline/scripts/aggregate-metrics.mjs +55 -16
- package/pipeline/scripts/audit-log-rotate.sh +3 -3
- package/pipeline/scripts/audit-log.sh +20 -7
- package/pipeline/scripts/benchmark-phase-0.sh +6 -6
- package/pipeline/scripts/build-skills-index.mjs +15 -15
- package/pipeline/scripts/check-md-links.mjs +59 -0
- package/pipeline/scripts/classify-plan-safety.mjs +24 -18
- package/pipeline/scripts/cost-budget-check.mjs +160 -0
- package/pipeline/scripts/cost-table.json +23 -13
- package/pipeline/scripts/diff-explain.mjs +12 -12
- package/pipeline/scripts/diff-risk-score.mjs +18 -17
- package/pipeline/scripts/eval-golden-tasks-live.mjs +13 -10
- package/pipeline/scripts/eval-golden-tasks.mjs +3 -14
- package/pipeline/scripts/eval-intent.mjs +103 -0
- package/pipeline/scripts/eval-triage.mjs +3 -3
- package/pipeline/scripts/evidence-gate.mjs +155 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +9 -9
- package/pipeline/scripts/gc-tmp.sh +102 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +27 -21
- package/pipeline/scripts/gen-skills-index.mjs +6 -6
- package/pipeline/scripts/github-ssh-setup.sh +1 -1
- package/pipeline/scripts/keychain-save.sh +1 -1
- package/pipeline/scripts/keychain.py +6 -6
- package/pipeline/scripts/learnings-ledger.mjs +284 -0
- package/pipeline/scripts/lint-skills.mjs +80 -0
- package/pipeline/scripts/log-metric.sh +18 -9
- package/pipeline/scripts/match-skills.mjs +13 -8
- package/pipeline/scripts/memory-load.sh +3 -3
- package/pipeline/scripts/memory-save.sh +5 -5
- package/pipeline/scripts/migrate-prefs.mjs +17 -17
- package/pipeline/scripts/migrate-state.mjs +12 -12
- package/pipeline/scripts/output-quality-check.sh +7 -7
- package/pipeline/scripts/phase-banner.sh +5 -5
- package/pipeline/scripts/phase-tracker.sh +90 -53
- package/pipeline/scripts/pre-commit-check.sh +45 -5
- package/pipeline/scripts/pre-push-check.sh +7 -7
- package/pipeline/scripts/prune-logs.sh +118 -0
- package/pipeline/scripts/render-agent-log-cost.sh +55 -18
- package/pipeline/scripts/render-cost-summary.sh +9 -9
- package/pipeline/scripts/render-work-summary.sh +4 -4
- package/pipeline/scripts/repo-map.mjs +9 -9
- package/pipeline/scripts/run-aggregator.mjs +7 -6
- package/pipeline/scripts/run-metrics.mjs +129 -0
- package/pipeline/scripts/run-smokes.mjs +76 -0
- package/pipeline/scripts/scan-skills.sh +11 -11
- package/pipeline/scripts/search-logs.sh +8 -8
- package/pipeline/scripts/sign-skills.sh +2 -2
- package/pipeline/scripts/smoke-adapters.sh +79 -10
- package/pipeline/scripts/smoke-add-detail.sh +5 -5
- package/pipeline/scripts/smoke-agent-log-cost.sh +85 -6
- package/pipeline/scripts/smoke-agent-model-routing.sh +3 -3
- package/pipeline/scripts/smoke-ask-choice.sh +42 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +19 -3
- package/pipeline/scripts/smoke-changelog-version.sh +47 -0
- package/pipeline/scripts/smoke-channels-flow.sh +1 -1
- package/pipeline/scripts/smoke-ci-workflows.sh +5 -5
- package/pipeline/scripts/smoke-clarify.sh +3 -3
- package/pipeline/scripts/smoke-commands-skills-parity.sh +4 -4
- package/pipeline/scripts/smoke-community-gates.sh +75 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +5 -5
- package/pipeline/scripts/smoke-cost-budget.sh +70 -0
- package/pipeline/scripts/smoke-cost-summary.sh +4 -4
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +50 -9
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +5 -5
- package/pipeline/scripts/smoke-delete-flow.sh +5 -5
- package/pipeline/scripts/smoke-dev-critic.sh +2 -2
- package/pipeline/scripts/smoke-diff-explain.sh +22 -3
- package/pipeline/scripts/smoke-diff-risk.sh +1 -1
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +1 -1
- package/pipeline/scripts/smoke-eval-live.sh +4 -4
- package/pipeline/scripts/smoke-evidence-gate.sh +93 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +1 -1
- package/pipeline/scripts/smoke-extract-conventions.sh +163 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +1 -1
- package/pipeline/scripts/smoke-figma-credential-store.sh +3 -3
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +12 -12
- package/pipeline/scripts/smoke-figma-dispatch.sh +5 -5
- package/pipeline/scripts/smoke-figma-sync.sh +1 -1
- package/pipeline/scripts/smoke-gate-hooks.sh +56 -0
- package/pipeline/scripts/smoke-gc-tmp.sh +84 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +7 -7
- package/pipeline/scripts/smoke-install-layout.sh +10 -10
- package/pipeline/scripts/smoke-intent-guard.sh +86 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +3 -3
- package/pipeline/scripts/smoke-issue-jira-triad.sh +1 -1
- package/pipeline/scripts/smoke-keychain.sh +6 -6
- package/pipeline/scripts/smoke-language-axis.sh +2 -2
- package/pipeline/scripts/smoke-learnings-ledger.sh +86 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +2 -2
- package/pipeline/scripts/smoke-mcp-gate.sh +68 -0
- package/pipeline/scripts/smoke-md-links.sh +8 -0
- package/pipeline/scripts/smoke-md2confluence.sh +126 -0
- package/pipeline/scripts/smoke-metrics-cache-ratio.sh +72 -0
- package/pipeline/scripts/smoke-migrate-state.sh +10 -10
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +7 -4
- package/pipeline/scripts/smoke-model-fallback.sh +80 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +3 -3
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
- package/pipeline/scripts/smoke-no-mcp-in-dev-phases.sh +115 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +31 -15
- package/pipeline/scripts/smoke-pat-audit.sh +26 -5
- package/pipeline/scripts/smoke-per-repo-memory.sh +1 -1
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
- package/pipeline/scripts/smoke-phase-6-multi.sh +2 -2
- package/pipeline/scripts/smoke-phase-banner.sh +1 -1
- package/pipeline/scripts/smoke-phase-tracker.sh +1 -1
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +4 -4
- package/pipeline/scripts/smoke-phase4-triage.sh +94 -7
- package/pipeline/scripts/smoke-plan-approval-gate.sh +3 -3
- package/pipeline/scripts/smoke-plan-safety.sh +1 -1
- package/pipeline/scripts/smoke-plan-todos.sh +7 -4
- package/pipeline/scripts/smoke-pr-review-actions.sh +2 -2
- package/pipeline/scripts/smoke-pre-commit.sh +34 -2
- package/pipeline/scripts/smoke-pref-migration.sh +1 -1
- package/pipeline/scripts/smoke-prefs-language.sh +5 -5
- package/pipeline/scripts/smoke-progress-contract.sh +3 -3
- package/pipeline/scripts/smoke-prune-logs.sh +87 -0
- package/pipeline/scripts/smoke-push-retry.sh +1 -1
- package/pipeline/scripts/smoke-readme-counts.sh +1 -1
- package/pipeline/scripts/smoke-repo-map.sh +9 -9
- package/pipeline/scripts/smoke-review-watch.sh +12 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +7 -7
- package/pipeline/scripts/smoke-run-metrics.sh +50 -0
- package/pipeline/scripts/smoke-schema-validation.sh +18 -11
- package/pipeline/scripts/smoke-search.sh +5 -5
- package/pipeline/scripts/smoke-shared-runtime.sh +108 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +13 -13
- package/pipeline/scripts/smoke-skill-language.sh +4 -4
- package/pipeline/scripts/smoke-skill-manifest.sh +2 -2
- package/pipeline/scripts/smoke-skill-scan.sh +2 -2
- package/pipeline/scripts/smoke-stack-swap.sh +2 -2
- package/pipeline/scripts/smoke-subagent-validators.sh +8 -5
- package/pipeline/scripts/smoke-sync-adapters.sh +1 -1
- package/pipeline/scripts/smoke-sync-delegation.sh +7 -7
- package/pipeline/scripts/smoke-sync-parity.sh +1 -1
- package/pipeline/scripts/smoke-tasklist-ordering.sh +7 -7
- package/pipeline/scripts/smoke-telemetry.sh +1 -1
- package/pipeline/scripts/smoke-test-gap.sh +5 -5
- package/pipeline/scripts/smoke-token-budget.sh +1 -1
- package/pipeline/scripts/smoke-tracker-contract.sh +6 -6
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +9 -1
- package/pipeline/scripts/smoke-triage-memory.sh +2 -2
- package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
- package/pipeline/scripts/smoke-validator-contradiction.sh +1 -1
- package/pipeline/scripts/smoke-validator-gates.sh +164 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +11 -11
- package/pipeline/scripts/smoke-wiki-integration.sh +2 -2
- package/pipeline/scripts/smoke-work-summary.sh +3 -3
- package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
- package/pipeline/scripts/smoke-write-state.sh +2 -2
- package/pipeline/scripts/stack-swap.sh +3 -3
- package/pipeline/scripts/sync-adapters.mjs +37 -10
- package/pipeline/scripts/sync-parity-check.sh +6 -6
- package/pipeline/scripts/test-gap-scan.mjs +11 -13
- package/pipeline/scripts/token-budget-report.mjs +4 -4
- package/pipeline/scripts/triage-memory.mjs +6 -6
- package/pipeline/scripts/uninstall.mjs +42 -4
- package/pipeline/scripts/update-issue-progress.sh +2 -2
- package/pipeline/scripts/validate-analysis.mjs +19 -21
- package/pipeline/scripts/validate-diff-risk.mjs +4 -4
- package/pipeline/scripts/validate-planning.mjs +3 -3
- package/pipeline/scripts/validate-reviewer.mjs +4 -4
- package/pipeline/scripts/validate-schemas.mjs +4 -4
- package/pipeline/scripts/validate-test-gap.mjs +4 -4
- package/pipeline/scripts/validate-triage.mjs +68 -9
- package/pipeline/scripts/verify-skills.sh +7 -7
- package/pipeline/scripts/write-state.mjs +49 -11
- package/pipeline/skills/.skill-manifest.json +245 -149
- package/pipeline/skills/.skills-index.json +236 -47
- package/pipeline/skills/figma-android/README.md +5 -5
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +3 -3
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +8 -8
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +4 -4
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +5 -5
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +14 -14
- package/pipeline/skills/figma-common/README.md +29 -29
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +20 -15
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +35 -30
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +35 -30
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +20 -20
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +32 -32
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +9 -9
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +25 -20
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +11 -6
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +30 -25
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +9 -4
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +27 -22
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +38 -38
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +39 -34
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +20 -15
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +44 -39
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +6 -6
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +30 -30
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +1 -1
- package/pipeline/skills/figma-common/figma-review/SKILL.md +31 -26
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +11 -11
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +5 -5
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +6 -6
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +12 -12
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +4 -4
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +1 -1
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +48 -48
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +42 -37
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +23 -18
- package/pipeline/skills/figma-common/performance-start/SKILL.md +52 -47
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +68 -68
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +42 -37
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +16 -16
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +15 -15
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +9 -9
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +15 -15
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +38 -38
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +12 -12
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +19 -19
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +25 -25
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +7 -7
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +38 -38
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +29 -29
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +12 -12
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +57 -57
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +10 -10
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +16 -16
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +23 -23
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +26 -26
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +43 -43
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +17 -17
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +19 -19
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +15 -15
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +39 -39
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +7 -7
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +29 -29
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +9 -9
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +31 -31
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +16 -16
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +49 -49
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +8 -8
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +9 -9
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +10 -10
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +11 -11
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +14 -14
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +6 -6
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +9 -9
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +18 -18
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +9 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +12 -12
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +3 -3
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +26 -26
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +4 -4
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +2 -2
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +1 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +5 -5
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +41 -41
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +8 -8
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +7 -7
- package/pipeline/skills/shared/README.md +62 -41
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +39 -39
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +44 -44
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +182 -176
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +48 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +16 -16
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +48 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +40 -40
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +33 -30
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +26 -26
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +22 -22
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +6 -6
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +12 -12
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +20 -20
- package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +22 -22
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +15 -15
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +12 -12
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +14 -14
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +12 -12
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +10 -10
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +18 -18
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +9 -9
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +20 -20
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +16 -13
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +110 -110
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +13 -13
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +22 -22
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +18 -18
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +13 -13
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +33 -30
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +14 -14
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +9 -9
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +79 -79
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +5 -5
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +10 -10
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +41 -0
- package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +53 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +9 -9
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +113 -52
- package/pipeline/skills/shared/external/alarmkit/evals/evals.json +41 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +23 -16
- package/pipeline/skills/shared/external/app-clips/SKILL.md +85 -354
- package/pipeline/skills/shared/external/app-clips/evals/evals.json +50 -0
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +135 -0
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +125 -0
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +113 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +152 -59
- package/pipeline/skills/shared/external/app-intents/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +161 -118
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +289 -392
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +174 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +191 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +57 -107
- package/pipeline/skills/shared/external/app-store-review/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +35 -12
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +28 -26
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +53 -62
- package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +7 -1
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +4 -1
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +32 -12
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +34 -30
- package/pipeline/skills/shared/external/authentication/SKILL.md +134 -138
- package/pipeline/skills/shared/external/authentication/evals/evals.json +48 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +56 -29
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +183 -0
- package/pipeline/skills/shared/external/avkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/avkit/evals/evals.json +55 -0
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +668 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +29 -29
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +44 -19
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +136 -99
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +27 -8
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -6
- package/pipeline/skills/shared/external/clean-code/SKILL.md +2 -2
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +63 -56
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +7 -4
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +31 -11
- package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +41 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +51 -51
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +70 -65
- package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +25 -1
- package/pipeline/skills/shared/external/core-data/SKILL.md +496 -0
- package/pipeline/skills/shared/external/core-data/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +47 -14
- package/pipeline/skills/shared/external/core-motion/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +47 -16
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +43 -54
- package/pipeline/skills/shared/external/core-nfc/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +32 -2
- package/pipeline/skills/shared/external/coreml/SKILL.md +89 -48
- package/pipeline/skills/shared/external/coreml/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +82 -37
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +493 -0
- package/pipeline/skills/shared/external/cryptokit/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +602 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -5
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +77 -47
- package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +42 -34
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +2 -2
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +136 -176
- package/pipeline/skills/shared/external/device-integrity/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +240 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +73 -34
- package/pipeline/skills/shared/external/energykit/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +80 -38
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +67 -53
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +53 -3
- package/pipeline/skills/shared/external/healthkit/SKILL.md +57 -124
- package/pipeline/skills/shared/external/healthkit/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +82 -1
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +43 -41
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +13 -8
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +5 -4
- package/pipeline/skills/shared/external/humanizer/SKILL.md +4 -4
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +174 -18
- package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +262 -4
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +117 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +141 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +67 -14
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +20 -3
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +131 -22
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +69 -22
- package/pipeline/skills/shared/external/ios-networking/evals/evals.json +50 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +28 -16
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +69 -44
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +35 -69
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -8
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +485 -0
- package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +316 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +120 -131
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/live-activities/references/{live-activity-patterns.md → activitykit-patterns.md} +148 -63
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +40 -21
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/mapkit-location/references/{corelocation-patterns.md → mapkit-corelocation-patterns.md} +88 -41
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +27 -24
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +129 -172
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +180 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +45 -18
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +26 -6
- package/pipeline/skills/shared/external/natural-language/SKILL.md +48 -18
- package/pipeline/skills/shared/external/natural-language/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +20 -7
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +4 -3
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +156 -66
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +51 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +69 -19
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +499 -0
- package/pipeline/skills/shared/external/pdfkit/evals/evals.json +42 -0
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +844 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +122 -28
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +49 -18
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +100 -51
- package/pipeline/skills/shared/external/permissionkit/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +48 -8
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +13 -15
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +4 -4
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +2 -2
- package/pipeline/skills/shared/external/photos-camera-media/references/{photospicker-patterns.md → photokit-patterns.md} +3 -3
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +45 -48
- package/pipeline/skills/shared/external/push-notifications/evals/evals.json +46 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +22 -33
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +56 -37
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +4 -3
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +74 -53
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +10 -10
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +21 -20
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +81 -64
- package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +48 -9
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +118 -104
- package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +49 -0
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +171 -0
- package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +93 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +155 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +105 -0
- package/pipeline/skills/shared/external/spm-build-analysis/scripts/check_spm_pins.py +118 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +110 -44
- package/pipeline/skills/shared/external/storekit/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +94 -43
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +82 -33
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +449 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +50 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +164 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +219 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +184 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +158 -0
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +499 -0
- package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +45 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +52 -40
- package/pipeline/skills/shared/external/swift-charts/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +92 -11
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +43 -16
- package/pipeline/skills/shared/external/swift-codable/evals/evals.json +43 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +50 -30
- package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +11 -4
- package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +150 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/{swift-6-2-concurrency.md → concurrency-patterns.md} +22 -11
- package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +21 -15
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +1 -1
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +3 -3
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +8 -8
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +1 -1
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +4 -4
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +1 -1
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +2 -2
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +3 -3
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +339 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +33 -34
- package/pipeline/skills/shared/external/swift-language/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +97 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +19 -6
- package/pipeline/skills/shared/external/swift-security/SKILL.md +195 -0
- package/pipeline/skills/shared/external/swift-security/evals/evals.json +48 -0
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +595 -0
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +611 -0
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +708 -0
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +573 -0
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +752 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +538 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +530 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +543 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +620 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +515 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +496 -0
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +747 -0
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +566 -0
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +813 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +97 -297
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +44 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +123 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +162 -34
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +3 -3
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +2 -2
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +5 -5
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +3 -3
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +5 -5
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +44 -23
- package/pipeline/skills/shared/external/swiftdata/evals/evals.json +47 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +3 -3
- package/pipeline/skills/shared/external/swiftdata/references/indexing.md +75 -0
- package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +54 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +14 -10
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +5 -5
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +2 -2
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +1 -1
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +6 -6
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +337 -0
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +297 -0
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +170 -0
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +307 -0
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +35 -0
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +306 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +56 -65
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +48 -44
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +6 -6
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +13 -13
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +3 -3
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +1 -1
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +4 -4
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +2 -2
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +1 -1
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +16 -16
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +11 -11
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +7 -7
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +5 -5
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +6 -6
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +38 -16
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +13 -3
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +32 -28
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +1 -1
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +202 -41
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +16 -25
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +71 -26
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +284 -65
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +387 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +10 -10
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +15 -3
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +2 -2
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +1 -1
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +51 -25
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +78 -6
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +161 -16
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +85 -27
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +37 -33
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +39 -51
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +204 -30
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +226 -21
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +220 -20
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +159 -34
- package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +27 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +4 -4
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +1 -1
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +4 -4
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +1 -1
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +1 -1
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +2 -2
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +2 -2
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +1 -1
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -12
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +3 -3
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +1 -1
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +11 -11
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +124 -10
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +2 -1
- package/pipeline/skills/shared/external/tipkit/SKILL.md +3 -3
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +9 -9
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +17 -16
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +11 -11
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +1 -1
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +5 -5
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -6
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +3 -3
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +9 -9
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -7
- package/pipeline/skills/shared/external/web-testing/SKILL.md +7 -6
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +23 -17
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +99 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +89 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmark-artifacts.md +94 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/references/benchmarking-workflow.md +67 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/schemas/build-benchmark.schema.json +230 -0
- package/pipeline/skills/shared/external/xcode-build-benchmark/scripts/benchmark_builds.py +308 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +219 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +216 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +290 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/scripts/benchmark_builds.py +308 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +157 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/benchmark-artifacts.md +94 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +216 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/orchestration-report-template.md +143 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/benchmark_builds.py +308 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/diagnose_compilation.py +273 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/scripts/generate_optimization_report.py +533 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +90 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +155 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +106 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/recommendation-format.md +85 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/scripts/diagnose_compilation.py +273 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +77 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +155 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +216 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +101 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/recommendation-format.md +85 -0
- package/pipeline/skills/skills-index.md +213 -192
- package/docs/GENERICITY-REVIEW.md +0 -277
- package/docs/STABILITY-FIX-PLAN.md +0 -168
- package/pipeline/scripts/.last-figma-sync-plan.json +0 -23
- package/pipeline/scripts/README-figma-smokes.md +0 -34
- package/pipeline/scripts/figma-placeholder-map.json +0 -191
- package/pipeline/scripts/import-figma-skills.sh +0 -253
- package/pipeline/scripts/smoke-figma-config-schema.sh +0 -144
- package/pipeline/scripts/smoke-figma-skill-import.sh +0 -174
- package/pipeline/scripts/smoke-install-leak-gate.sh +0 -125
- package/pipeline/scripts/smoke-personal-data.sh +0 -82
- package/pipeline/scripts/sync-figma-source.sh +0 -228
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +0 -94
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +0 -259
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +0 -152
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +0 -376
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
# "identity":{"name":"...","email":"..."}
|
|
26
26
|
# }
|
|
27
27
|
#
|
|
28
|
-
# `bridge` writes agent-state.json v2.1.0 with projects[] populated
|
|
28
|
+
# `bridge` writes agent-state.json v2.1.0 with projects[] populated - Phase 0
|
|
29
29
|
# consumes this and skips its own picker steps.
|
|
30
30
|
|
|
31
31
|
set -eu
|
|
@@ -38,21 +38,6 @@ STATE="${2:-}"
|
|
|
38
38
|
}
|
|
39
39
|
[ ! -f "$STATE" ] && { echo "ERR: state file not found: $STATE" >&2; exit 2; }
|
|
40
40
|
|
|
41
|
-
jq_get() {
|
|
42
|
-
python3 -c "
|
|
43
|
-
import json,sys
|
|
44
|
-
d=json.load(open('$STATE'))
|
|
45
|
-
keys='''$1'''.split('.')
|
|
46
|
-
for k in keys:
|
|
47
|
-
if k.endswith(']'):
|
|
48
|
-
name,idx=k[:-1].split('[')
|
|
49
|
-
d=d[name][int(idx)]
|
|
50
|
-
else:
|
|
51
|
-
d=d[k]
|
|
52
|
-
print(d)
|
|
53
|
-
" 2>/dev/null
|
|
54
|
-
}
|
|
55
|
-
|
|
56
41
|
list_repos_jq() {
|
|
57
42
|
python3 -c "
|
|
58
43
|
import json,sys
|
|
@@ -72,7 +57,11 @@ ISSUE_TITLE=$(python3 -c "import json; d=json.load(open('$STATE')); print(d['iss
|
|
|
72
57
|
|
|
73
58
|
cmd_prepare() {
|
|
74
59
|
mkdir -p "$WORKTREE_ROOT"
|
|
75
|
-
|
|
60
|
+
# Process substitution (not a pipe) so the loop runs in THIS shell - a piped
|
|
61
|
+
# `while` runs in a subshell, so the `return 3` below would only exit the
|
|
62
|
+
# subshell, not cmd_prepare, and a clone failure could not abort the function
|
|
63
|
+
# with the intended exit code.
|
|
64
|
+
while IFS=$'\t' read -r name url provider; do
|
|
76
65
|
local target="$WORKTREE_ROOT/$name"
|
|
77
66
|
if [ -d "$target/.git" ]; then
|
|
78
67
|
echo "[$name] worktree already present at $target"
|
|
@@ -88,7 +77,7 @@ cmd_prepare() {
|
|
|
88
77
|
git checkout --quiet -b "$BRANCH"
|
|
89
78
|
fi
|
|
90
79
|
cd - >/dev/null
|
|
91
|
-
done
|
|
80
|
+
done < <(list_repos_jq)
|
|
92
81
|
}
|
|
93
82
|
|
|
94
83
|
cmd_commit() {
|
|
@@ -96,7 +85,7 @@ cmd_commit() {
|
|
|
96
85
|
local target="$WORKTREE_ROOT/$name"
|
|
97
86
|
[ ! -d "$target" ] && continue
|
|
98
87
|
cd "$target"
|
|
99
|
-
# Use status --porcelain so untracked files count as "changes" too
|
|
88
|
+
# Use status --porcelain so untracked files count as "changes" too -
|
|
100
89
|
# dev sessions usually add brand-new files alongside edits, and `git diff`
|
|
101
90
|
# alone misses them.
|
|
102
91
|
if [ -z "$(git status --porcelain 2>/dev/null)" ]; then
|
|
@@ -130,8 +119,10 @@ cmd_pr() {
|
|
|
130
119
|
# Open PR for extras first, then primary with cross-links.
|
|
131
120
|
local primary_name primary_owner_repo
|
|
132
121
|
primary_name=$(python3 -c "import json; d=json.load(open('$STATE')); print(d['primary']['name'])")
|
|
133
|
-
|
|
134
|
-
|
|
122
|
+
# Extra-repo PR URLs are passed to the primary PR via the _prs.log file below,
|
|
123
|
+
# not a shell var - the loop runs in a pipe subshell, so any accumulated var
|
|
124
|
+
# would be lost. The file-based handoff is intentional.
|
|
125
|
+
while IFS=$'\t' read -r name url provider; do
|
|
135
126
|
if [ "$name" = "$primary_name" ]; then continue; fi
|
|
136
127
|
local target="$WORKTREE_ROOT/$name"
|
|
137
128
|
[ ! -d "$target" ] && continue
|
|
@@ -145,7 +136,7 @@ Part of multi-repo task $TASK_ID."
|
|
|
145
136
|
echo "[$name] PR creation skipped (provider=$provider)"
|
|
146
137
|
fi
|
|
147
138
|
cd - >/dev/null
|
|
148
|
-
done
|
|
139
|
+
done < <(list_repos_jq)
|
|
149
140
|
# Now primary
|
|
150
141
|
local target="$WORKTREE_ROOT/$primary_name"
|
|
151
142
|
cd "$target"
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
#
|
|
3
|
-
# plan-todos.sh
|
|
3
|
+
# plan-todos.sh - manage the Phase 2 plan as a live Todo list.
|
|
4
4
|
#
|
|
5
5
|
# Pattern source:
|
|
6
|
-
# - Windsurf Cascade
|
|
6
|
+
# - Windsurf Cascade - https://docs.windsurf.com/windsurf/cascade
|
|
7
7
|
# "renders a Todo list inside the conversation that updates as it works"
|
|
8
|
-
# - Cursor Plan Mode
|
|
8
|
+
# - Cursor Plan Mode - https://cursor.com/docs/agent/planning
|
|
9
9
|
# "creates a detailed, reviewable, editable plan before writing any code"
|
|
10
10
|
#
|
|
11
11
|
# State lives in `agent-state.json` under `.plan.todos[]` per
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
# Exit codes:
|
|
29
29
|
# 0 success
|
|
30
30
|
# 1 todo not found / state missing
|
|
31
|
-
# 2 bad transition (deps unsatisfied, double-start,
|
|
31
|
+
# 2 bad transition (deps unsatisfied, double-start, ...)
|
|
32
32
|
# 64 usage error
|
|
33
33
|
|
|
34
34
|
set -euo pipefail
|
|
@@ -48,7 +48,7 @@ usage() {
|
|
|
48
48
|
resolve_state() {
|
|
49
49
|
local task_id="$1"
|
|
50
50
|
local found=""
|
|
51
|
-
for dir in $HOME/.claude/projects
|
|
51
|
+
for dir in "$HOME"/.claude/projects/*; do
|
|
52
52
|
local candidate="$dir/state/$task_id/agent-state.json"
|
|
53
53
|
if [ -f "$candidate" ]; then
|
|
54
54
|
found="$candidate"
|
|
@@ -91,7 +91,7 @@ do_set() {
|
|
|
91
91
|
if [ -z "$plan_blob" ] || [ "$plan_blob" = "-" ]; then
|
|
92
92
|
plan_blob=$(cat)
|
|
93
93
|
fi
|
|
94
|
-
# Validate against schema (best-effort
|
|
94
|
+
# Validate against schema (best-effort - jq syntax check, then required-field probe).
|
|
95
95
|
if ! jq -e '.title and (.todos | type == "array")' <<<"$plan_blob" >/dev/null 2>&1; then
|
|
96
96
|
echo "plan-todos: input must be an object with .title (string) and .todos (array)" >&2
|
|
97
97
|
exit 2
|
|
@@ -107,7 +107,7 @@ do_set() {
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
deps_satisfied() {
|
|
110
|
-
# $1 state JSON, $2 todo_id
|
|
110
|
+
# $1 state JSON, $2 todo_id - exits 0 if all deps for that todo are completed|skipped.
|
|
111
111
|
local state="$1" todo_id="$2"
|
|
112
112
|
jq -e --arg id "$todo_id" '
|
|
113
113
|
(.plan.todos // []) as $all
|
|
@@ -18,20 +18,26 @@
|
|
|
18
18
|
# bbProjectKey, bbRepoSlug, bbServerHost }
|
|
19
19
|
# .review.findings [{ severity, status, file, line, issue, fix,
|
|
20
20
|
# ruleId }]
|
|
21
|
-
# .review.iterationNumber int (1-based
|
|
21
|
+
# .review.iterationNumber int (1-based fallback for the comment footer;
|
|
22
|
+
# on needs_work the live value is re-derived from
|
|
23
|
+
# the highest "iteration #N" already on the PR + 1)
|
|
22
24
|
# .review.headCommitSha string (GitHub inline anchor needs commit_id)
|
|
23
25
|
#
|
|
24
26
|
# Reads from preferences:
|
|
25
27
|
# prefs.global.outputLanguage ("tr" | "en")
|
|
26
28
|
#
|
|
27
29
|
# Exit codes:
|
|
28
|
-
# 0 success
|
|
30
|
+
# 0 success - verdict + (any) inline comments posted
|
|
29
31
|
# 2 agent-state.json missing or .review absent
|
|
30
32
|
# 3 unknown provider; falls back to chat-only and exits 3
|
|
31
33
|
# 4 API call failed (network / auth / 4xx). Diagnostic line on stderr.
|
|
32
34
|
|
|
33
35
|
set -euo pipefail
|
|
34
36
|
|
|
37
|
+
# Basic-auth via a curl config fed through process substitution so the
|
|
38
|
+
# credential never appears in argv (argv is visible to `ps` / process audit).
|
|
39
|
+
bb_auth_cfg() { printf 'user = "%s:%s"\n' "$1" "$2"; }
|
|
40
|
+
|
|
35
41
|
TASK_ID="${1:-}"
|
|
36
42
|
|
|
37
43
|
if [ -z "$TASK_ID" ]; then
|
|
@@ -41,7 +47,7 @@ fi
|
|
|
41
47
|
|
|
42
48
|
# Resolve agent-state.json (matches phase-tracker convention).
|
|
43
49
|
AGENT_STATE=""
|
|
44
|
-
for dir in $HOME/.claude/projects
|
|
50
|
+
for dir in "$HOME"/.claude/projects/*; do
|
|
45
51
|
candidate="$dir/state/$TASK_ID/agent-state.json"
|
|
46
52
|
if [ -f "$candidate" ]; then
|
|
47
53
|
AGENT_STATE="$candidate"
|
|
@@ -55,7 +61,7 @@ if [ -z "$AGENT_STATE" ]; then
|
|
|
55
61
|
fi
|
|
56
62
|
|
|
57
63
|
if ! jq -e '.review' "$AGENT_STATE" >/dev/null; then
|
|
58
|
-
echo "post-pr-review: agent-state has no .review field
|
|
64
|
+
echo "post-pr-review: agent-state has no .review field - run /multi-agent:review first" >&2
|
|
59
65
|
exit 2
|
|
60
66
|
fi
|
|
61
67
|
|
|
@@ -68,7 +74,7 @@ ITERATION=$(jq -r '.review.iterationNumber // 1' "$AGENT_STATE")
|
|
|
68
74
|
|
|
69
75
|
# --- Decision ---------------------------------------------------------------
|
|
70
76
|
|
|
71
|
-
# Single jq pass
|
|
77
|
+
# Single jq pass - group accepted findings by severity into tab-separated counts.
|
|
72
78
|
read -r ACCEPTED_BLOCKING ACCEPTED_IMPORTANT < <(
|
|
73
79
|
jq -r '
|
|
74
80
|
[.review.findings[] | select(.status == "accepted")] as $a
|
|
@@ -90,8 +96,8 @@ echo "post-pr-review: decision=$DECISION (blocking=$ACCEPTED_BLOCKING, important
|
|
|
90
96
|
|
|
91
97
|
# --- Per-finding comment body renderer (in $OUT_LANG) -----------------------
|
|
92
98
|
|
|
93
|
-
# Stable fingerprint for a finding
|
|
94
|
-
# the same finding without re-posting. Sha256 of "path|line|issue"
|
|
99
|
+
# Stable fingerprint for a finding - used by dedupe to recognize re-runs of
|
|
100
|
+
# the same finding without re-posting. Sha256 of "path|line|issue" - note
|
|
95
101
|
# that fix/ruleId/iterationNumber are excluded so a finding still dedupes
|
|
96
102
|
# when the suggested fix wording changes slightly between iterations.
|
|
97
103
|
finding_fingerprint() {
|
|
@@ -123,7 +129,7 @@ render_inline_body() {
|
|
|
123
129
|
fix_label="Suggestion"
|
|
124
130
|
fi
|
|
125
131
|
|
|
126
|
-
printf '%s **%s**
|
|
132
|
+
printf '%s **%s** - %s\n\n' "$emoji" "$label_word" "$issue"
|
|
127
133
|
if [ -n "$fix" ] && [ "$fix" != "null" ]; then
|
|
128
134
|
printf '**%s:** %s\n\n' "$fix_label" "$fix"
|
|
129
135
|
fi
|
|
@@ -131,7 +137,7 @@ render_inline_body() {
|
|
|
131
137
|
printf '_%s_\n\n' "$rule_id"
|
|
132
138
|
fi
|
|
133
139
|
printf -- '---\n🤖 _Multi-Agent Review · iteration #%s_\n' "$ITERATION"
|
|
134
|
-
# Dedupe marker
|
|
140
|
+
# Dedupe marker - Bugbot-style. Re-runs of /multi-agent:review skip a
|
|
135
141
|
# finding when an existing comment carries the same fingerprint.
|
|
136
142
|
if [ -n "$fingerprint" ]; then
|
|
137
143
|
printf '<!-- multi-agent-finding: %s -->\n' "$fingerprint"
|
|
@@ -163,6 +169,26 @@ comment_exists_with_fingerprint() {
|
|
|
163
169
|
' <<<"$EXISTING_COMMENTS_CACHE" >/dev/null 2>&1
|
|
164
170
|
}
|
|
165
171
|
|
|
172
|
+
# Next iteration number = highest "iteration #N" already stamped on the PR + 1.
|
|
173
|
+
# Standalone /multi-agent:review runs use a fresh TASK_ID each time, so the PR
|
|
174
|
+
# comments - not agent-state - are the only cross-run source of truth. Falls
|
|
175
|
+
# back to 1 when no prior multi-agent comment exists. Requires the comment cache
|
|
176
|
+
# to be loaded first.
|
|
177
|
+
compute_next_iteration() {
|
|
178
|
+
local max
|
|
179
|
+
# Only count "iteration #N" stamps inside our own footer ("Multi-Agent
|
|
180
|
+
# Review · iteration #N"), so a human comment that happens to mention
|
|
181
|
+
# "iteration #99" cannot inflate the counter.
|
|
182
|
+
max=$(jq -r '
|
|
183
|
+
[ .[]? | .body // ""
|
|
184
|
+
| select(test("Multi-Agent Review"))
|
|
185
|
+
| scan("iteration #([0-9]+)") | .[0] | tonumber ]
|
|
186
|
+
| (max // 0) + 1
|
|
187
|
+
' <<<"${EXISTING_COMMENTS_CACHE:-[]}" 2>/dev/null || echo "")
|
|
188
|
+
case "$max" in (*[!0-9]*|"") max=1 ;; esac
|
|
189
|
+
echo "$max"
|
|
190
|
+
}
|
|
191
|
+
|
|
166
192
|
# Bitbucket Server activities endpoint returns nested comment trees. Flatten
|
|
167
193
|
# them into the same `[{body: <text>}, ...]` shape that
|
|
168
194
|
# comment_exists_with_fingerprint expects so the dedupe gate is provider-agnostic.
|
|
@@ -171,7 +197,7 @@ load_existing_comments_bitbucket() {
|
|
|
171
197
|
if [ -z "$EXISTING_COMMENTS_CACHE" ]; then
|
|
172
198
|
local base="https://$host/rest/api/1.0/projects/$project/repos/$slug/pull-requests/$pr_num"
|
|
173
199
|
local raw
|
|
174
|
-
raw=$(curl -sS -m 30 -
|
|
200
|
+
raw=$(curl -sS -m 30 -K <(bb_auth_cfg "$auth_user" "$auth_token") \
|
|
175
201
|
"$base/activities?fromType=COMMENT&limit=100" 2>/dev/null || echo "{}")
|
|
176
202
|
EXISTING_COMMENTS_CACHE=$(jq '
|
|
177
203
|
def collect_texts(c):
|
|
@@ -203,13 +229,16 @@ post_github() {
|
|
|
203
229
|
rc_body="See inline comments above."
|
|
204
230
|
fi
|
|
205
231
|
|
|
206
|
-
# Dedupe gate
|
|
232
|
+
# Dedupe gate - read pref, default ON (Bugbot-style). Loads existing
|
|
207
233
|
# comments once if needed; per-finding check is in-process.
|
|
208
234
|
local DEDUPE_ENABLED
|
|
209
235
|
DEDUPE_ENABLED=$(jq -r '.global.review.dedupeInlineComments // true' \
|
|
210
236
|
"$HOME/.claude/multi-agent-preferences.json" 2>/dev/null || echo "true")
|
|
211
|
-
|
|
237
|
+
# Load existing comments on any needs_work post: dedupe needs them when
|
|
238
|
+
# enabled, and the iteration counter is always derived from them.
|
|
239
|
+
if [ "$DECISION" = "needs_work" ]; then
|
|
212
240
|
load_existing_comments_github "$org_repo" "$PR_NUM"
|
|
241
|
+
ITERATION=$(compute_next_iteration)
|
|
213
242
|
fi
|
|
214
243
|
|
|
215
244
|
if [ "$DECISION" = "needs_work" ]; then
|
|
@@ -229,7 +258,7 @@ post_github() {
|
|
|
229
258
|
body=$(render_inline_body "$sev" "$issue" "$fix" "$rule_id" "$fingerprint")
|
|
230
259
|
|
|
231
260
|
if [ "$DEDUPE_ENABLED" = "true" ] && comment_exists_with_fingerprint "$fingerprint"; then
|
|
232
|
-
echo "post-pr-review: dedupe skip
|
|
261
|
+
echo "post-pr-review: dedupe skip - finding $fingerprint already commented" >&2
|
|
233
262
|
continue
|
|
234
263
|
fi
|
|
235
264
|
|
|
@@ -262,7 +291,7 @@ post_bitbucket_server() {
|
|
|
262
291
|
project=$(jq -r '.review.input.bbProjectKey' "$AGENT_STATE")
|
|
263
292
|
slug=$(jq -r '.review.input.bbRepoSlug' "$AGENT_STATE")
|
|
264
293
|
|
|
265
|
-
# Resolve credential keys from prefs.keychainMapping
|
|
294
|
+
# Resolve credential keys from prefs.keychainMapping - never hardcode.
|
|
266
295
|
prefs="$HOME/.claude/multi-agent-preferences.json"
|
|
267
296
|
user_key=$(jq -r '.keychainMapping.bitbucket_user // empty' "$prefs" 2>/dev/null || true)
|
|
268
297
|
token_key=$(jq -r '.keychainMapping.bitbucket_token // empty' "$prefs" 2>/dev/null || true)
|
|
@@ -273,7 +302,7 @@ post_bitbucket_server() {
|
|
|
273
302
|
fi
|
|
274
303
|
|
|
275
304
|
# Resolve via the cross-platform credential helper (macOS Keychain / Windows
|
|
276
|
-
# Credential Manager / Linux libsecret)
|
|
305
|
+
# Credential Manager / Linux libsecret) - sourced lazily so this script keeps
|
|
277
306
|
# working when run from either ~/.claude/lib or ~/.copilot/lib.
|
|
278
307
|
# shellcheck disable=SC1090
|
|
279
308
|
. "$HOME/.claude/lib/credential-store-resolver.sh" 2>/dev/null \
|
|
@@ -292,12 +321,15 @@ post_bitbucket_server() {
|
|
|
292
321
|
|
|
293
322
|
local base="https://$host/rest/api/1.0/projects/$project/repos/$slug/pull-requests/$PR_NUM"
|
|
294
323
|
|
|
295
|
-
# Dedupe gate
|
|
324
|
+
# Dedupe gate - read pref, default ON. Bitbucket uses the activities feed.
|
|
296
325
|
local DEDUPE_ENABLED
|
|
297
326
|
DEDUPE_ENABLED=$(jq -r '.global.review.dedupeInlineComments // true' \
|
|
298
327
|
"$HOME/.claude/multi-agent-preferences.json" 2>/dev/null || echo "true")
|
|
299
|
-
|
|
328
|
+
# Load existing comments on any needs_work post: dedupe needs them when
|
|
329
|
+
# enabled, and the iteration counter is always derived from them.
|
|
330
|
+
if [ "$DECISION" = "needs_work" ]; then
|
|
300
331
|
load_existing_comments_bitbucket "$host" "$project" "$slug" "$PR_NUM" "$auth_user" "$auth_token"
|
|
332
|
+
ITERATION=$(compute_next_iteration)
|
|
301
333
|
fi
|
|
302
334
|
|
|
303
335
|
if [ "$DECISION" = "needs_work" ]; then
|
|
@@ -317,7 +349,7 @@ post_bitbucket_server() {
|
|
|
317
349
|
body=$(render_inline_body "$sev" "$issue" "$fix" "$rule_id" "$fingerprint")
|
|
318
350
|
|
|
319
351
|
if [ "$DEDUPE_ENABLED" = "true" ] && comment_exists_with_fingerprint "$fingerprint"; then
|
|
320
|
-
echo "post-pr-review: dedupe skip
|
|
352
|
+
echo "post-pr-review: dedupe skip - finding $fingerprint already commented (bitbucket)" >&2
|
|
321
353
|
continue
|
|
322
354
|
fi
|
|
323
355
|
|
|
@@ -325,7 +357,7 @@ post_bitbucket_server() {
|
|
|
325
357
|
if [ "$line" -gt 0 ] 2>/dev/null; then
|
|
326
358
|
payload=$(jq -n --arg t "$body" --arg p "$path" --argjson l "$line" \
|
|
327
359
|
'{text: $t, anchor: {path: $p, line: $l, lineType: "ADDED", fileType: "TO"}}')
|
|
328
|
-
http=$(curl -sS -m 30 -
|
|
360
|
+
http=$(curl -sS -m 30 -K <(bb_auth_cfg "$auth_user" "$auth_token") -X POST \
|
|
329
361
|
-H "Content-Type: application/json" "$base/comments" \
|
|
330
362
|
-d "$payload" -o /dev/null -w '%{http_code}' || echo 000)
|
|
331
363
|
if [ "$http" = "200" ] || [ "$http" = "201" ]; then
|
|
@@ -337,7 +369,7 @@ post_bitbucket_server() {
|
|
|
337
369
|
|
|
338
370
|
if [ "$inline_ok" -eq 0 ]; then
|
|
339
371
|
payload=$(jq -n --arg t "$body" '{text: $t}')
|
|
340
|
-
curl -sS -m 30 -
|
|
372
|
+
curl -sS -m 30 -K <(bb_auth_cfg "$auth_user" "$auth_token") -X POST \
|
|
341
373
|
-H "Content-Type: application/json" "$base/comments" \
|
|
342
374
|
-d "$payload" >/dev/null \
|
|
343
375
|
|| echo "post-pr-review: bitbucket top-level comment failed for $path:$line" >&2
|
|
@@ -351,7 +383,7 @@ post_bitbucket_server() {
|
|
|
351
383
|
needs_work) status_payload='{"status":"NEEDS_WORK"}' ;;
|
|
352
384
|
esac
|
|
353
385
|
|
|
354
|
-
curl -sS -m 30 -
|
|
386
|
+
curl -sS -m 30 -K <(bb_auth_cfg "$auth_user" "$auth_token") -X PUT \
|
|
355
387
|
-H "Content-Type: application/json" "$base/participants/$user_slug" \
|
|
356
388
|
-d "$status_payload" >/dev/null
|
|
357
389
|
}
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
#
|
|
6
6
|
# Output JSON schema (per repo):
|
|
7
7
|
# { "fullName":"<owner>/<name>", "name":"<name>", "owner":"<owner>",
|
|
8
|
-
# "description":"
|
|
8
|
+
# "description":"...", "isFork":false, "updatedAt":"...",
|
|
9
9
|
# "canPush":true|false, "provider":"github"|"bitbucket" }
|
|
10
10
|
#
|
|
11
11
|
# canPush reflects whether the active account has WRITE+ permission on the
|
|
12
12
|
# repo (github: viewerPermission in {ADMIN, MAINTAIN, WRITE}; bitbucket: write
|
|
13
|
-
# is assumed for the cached project scope). Consumers
|
|
14
|
-
# submodule detector
|
|
13
|
+
# is assumed for the cached project scope). Consumers - notably the
|
|
14
|
+
# submodule detector - use this to decide which related repos may be edited.
|
|
15
15
|
#
|
|
16
16
|
# Usage:
|
|
17
17
|
# ./repo-cache.sh github <owner> [--refresh]
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
# Required env per-provider:
|
|
21
21
|
# github -> GH_TOKEN_KEY (keychain service)
|
|
22
22
|
# bitbucket -> BB_TOKEN_KEY, BB_USER_KEY, BB_HOST (e.g. bitbucket.example.com)
|
|
23
|
-
# local -> (none)
|
|
23
|
+
# local -> (none) - scopes are treated as filesystem roots; "scope=$HOME"
|
|
24
24
|
# walks $HOME with maxdepth, scope=<path> walks just that path.
|
|
25
25
|
# LOCAL_SCAN_ROOTS env can override the default root list.
|
|
26
26
|
# LOCAL_SCAN_MAXDEPTH env (default 4) bounds traversal cost.
|
|
@@ -49,7 +49,7 @@ cache_fresh() {
|
|
|
49
49
|
[ -f "$CACHE_FILE" ] || return 1
|
|
50
50
|
local age now mtime
|
|
51
51
|
now=$(date +%s)
|
|
52
|
-
mtime=$(stat -
|
|
52
|
+
mtime=$(stat -c %Y "$CACHE_FILE" 2>/dev/null || stat -f %m "$CACHE_FILE" 2>/dev/null)
|
|
53
53
|
age=$((now - mtime))
|
|
54
54
|
[ "$age" -lt "$TTL_SECONDS" ]
|
|
55
55
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
#
|
|
3
|
-
# review-watch.sh
|
|
3
|
+
# review-watch.sh - poll watched GitHub repos for incoming PRs and
|
|
4
4
|
# dispatch `/multi-agent:review` on each new/updated PR.
|
|
5
5
|
#
|
|
6
6
|
# Pattern source:
|
|
7
|
-
# - Cursor Bugbot
|
|
7
|
+
# - Cursor Bugbot - https://cursor.com/docs/bugbot
|
|
8
8
|
# "Bugbot automatically reviews every PR update; reads existing PR
|
|
9
9
|
# comments to avoid duplicate feedback."
|
|
10
|
-
# - Devin Review
|
|
10
|
+
# - Devin Review - https://docs.devin.ai/work-with-devin/devin-review
|
|
11
11
|
# "Auto-Review on PR open / new commit / draft-ready / reviewer-add."
|
|
12
12
|
#
|
|
13
13
|
# What it does:
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
# the trigger.
|
|
22
22
|
# - Honors labelFilter (only review PRs carrying the label, default: all).
|
|
23
23
|
# - Skips PRs the user authored (we don't review our own PRs through this
|
|
24
|
-
# surface
|
|
24
|
+
# surface - that's what the in-pipeline Phase 4 / standalone /review is
|
|
25
25
|
# for; this loop is for INCOMING PRs from others).
|
|
26
26
|
# - One-shot or watch loop (--interval N).
|
|
27
27
|
#
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
# review-watch.sh --doctor # show config + last-seen cursors
|
|
33
33
|
#
|
|
34
34
|
# Exit codes:
|
|
35
|
-
# 0 success
|
|
35
|
+
# 0 success - reviews dispatched (or no PRs to review)
|
|
36
36
|
# 2 config error (no repos to watch, no gh auth)
|
|
37
37
|
# 3 gh CLI / network error
|
|
38
38
|
#
|
|
@@ -60,11 +60,11 @@ require_jq() {
|
|
|
60
60
|
|
|
61
61
|
require_gh() {
|
|
62
62
|
if ! command -v gh >/dev/null 2>&1; then
|
|
63
|
-
err "gh CLI not installed
|
|
63
|
+
err "gh CLI not installed - install from https://cli.github.com"
|
|
64
64
|
exit 2
|
|
65
65
|
fi
|
|
66
66
|
if ! gh auth status >/dev/null 2>&1; then
|
|
67
|
-
err "gh CLI not authenticated
|
|
67
|
+
err "gh CLI not authenticated - run 'gh auth login'"
|
|
68
68
|
exit 2
|
|
69
69
|
fi
|
|
70
70
|
}
|
|
@@ -121,7 +121,7 @@ doctor() {
|
|
|
121
121
|
printf ' intervalSeconds: %s\n' "$(read_interval_from_prefs)"
|
|
122
122
|
printf ' labelFilter: %s\n' "$(read_label_filter)"
|
|
123
123
|
else
|
|
124
|
-
printf ' (no prefs file
|
|
124
|
+
printf ' (no prefs file - review-watch unconfigured)\n'
|
|
125
125
|
fi
|
|
126
126
|
printf ' state dir: %s\n' "$STATE_DIR"
|
|
127
127
|
for f in "$STATE_DIR"/*.json; do
|
|
@@ -168,11 +168,15 @@ review_one_repo() {
|
|
|
168
168
|
if [ "$count" -eq 0 ]; then
|
|
169
169
|
printf 'review-watch: no new PRs in %s\n' "$repo" >&2
|
|
170
170
|
else
|
|
171
|
-
printf 'review-watch: %s
|
|
171
|
+
printf 'review-watch: %s - %d PR(s) to review\n' "$repo" "$count"
|
|
172
172
|
fi
|
|
173
173
|
|
|
174
174
|
local newest_iso="$last_seen"
|
|
175
|
-
|
|
175
|
+
# Process substitution (not a pipe) so the loop runs in THIS shell - a piped
|
|
176
|
+
# `while` runs in a subshell and every `state=` / `newest_iso=` mutation below
|
|
177
|
+
# would be discarded, leaving save_state to persist the pre-loop cursor and
|
|
178
|
+
# re-dispatching the same PRs on every poll.
|
|
179
|
+
while read -r pr; do
|
|
176
180
|
local pr_num head_sha updated_at title url
|
|
177
181
|
pr_num=$(jq -r '.number' <<<"$pr")
|
|
178
182
|
head_sha=$(jq -r '.headRefOid' <<<"$pr")
|
|
@@ -188,19 +192,19 @@ review_one_repo() {
|
|
|
188
192
|
continue
|
|
189
193
|
fi
|
|
190
194
|
|
|
191
|
-
printf ' dispatch review: %s PR #%s
|
|
195
|
+
printf ' dispatch review: %s PR #%s - %s\n' "$repo" "$pr_num" "$title"
|
|
192
196
|
printf ' url=%s head=%s\n' "$url" "$head_sha"
|
|
193
197
|
|
|
194
198
|
# Record that we reviewed this head SHA. The actual dispatch happens
|
|
195
199
|
# via /multi-agent:review on the surface that invoked review-watch
|
|
196
200
|
# (Claude Code session or future webhook handler). review-watch only
|
|
197
|
-
# produces the dispatch list
|
|
201
|
+
# produces the dispatch list - it does not run the LLM itself, because
|
|
198
202
|
# token cost decisions stay with the user.
|
|
199
203
|
state=$(jq --arg n "$pr_num" --arg s "$head_sha" --arg t "$updated_at" \
|
|
200
204
|
'.reviewed_prs[$n] = $s | .last_seen_iso = $t' <<<"$state")
|
|
201
205
|
|
|
202
206
|
if [ "$updated_at" \> "$newest_iso" ]; then newest_iso="$updated_at"; fi
|
|
203
|
-
done
|
|
207
|
+
done < <(jq -c '.[]' <<<"$prs_json")
|
|
204
208
|
|
|
205
209
|
save_state "$repo" "$state"
|
|
206
210
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
#
|
|
3
|
-
# shadow-git.sh
|
|
3
|
+
# shadow-git.sh - per-tool-call checkpoints in a separate git repo.
|
|
4
4
|
#
|
|
5
5
|
# Pattern source:
|
|
6
|
-
# - Cline checkpoints
|
|
6
|
+
# - Cline checkpoints - https://docs.cline.bot/features/checkpoints
|
|
7
7
|
# "Cline maintains a shadow Git repository separate from your project's
|
|
8
|
-
# actual Git history
|
|
8
|
+
# actual Git history... After each tool use, Cline commits the current
|
|
9
9
|
# state of your files to this shadow repo."
|
|
10
10
|
#
|
|
11
11
|
# Why a SHADOW repo (not the real .git): the real git tree holds the user's
|
|
12
|
-
# semantic commits
|
|
12
|
+
# semantic commits - clean history, intentional messages. Shadow snapshots
|
|
13
13
|
# fire per Edit/Write/MultiEdit/Bash-mutation and would pollute that tree.
|
|
14
14
|
# Shadow repos live under `.shadow-git/<task-id>/.git` and never touch the
|
|
15
15
|
# project's `.git/refs` or `.git/index`.
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
# state as the baseline.
|
|
21
21
|
# snapshot <task-id> <project-root> "<step-label>"
|
|
22
22
|
# Stage everything (respects .gitignore) + commit with the
|
|
23
|
-
# step label. Idempotent
|
|
23
|
+
# step label. Idempotent - empty diffs produce no commit.
|
|
24
24
|
# list <task-id>
|
|
25
25
|
# Show all snapshots: <sha> <iso-date> <label>
|
|
26
26
|
# restore <task-id> <project-root> <sha> [--files|--state|--both]
|
|
@@ -101,7 +101,7 @@ __pycache__/
|
|
|
101
101
|
.venv/
|
|
102
102
|
*.log
|
|
103
103
|
EOF
|
|
104
|
-
# Initial author setup
|
|
104
|
+
# Initial author setup - keep separate from user's global git identity to
|
|
105
105
|
# signal "this is the shadow", not real commits.
|
|
106
106
|
sg "$sd" "$project_root" config user.name "shadow-git"
|
|
107
107
|
sg "$sd" "$project_root" config user.email "shadow@multi-agent.local"
|
|
@@ -114,7 +114,7 @@ do_snapshot() {
|
|
|
114
114
|
[ -z "$task_id" ] || [ -z "$project_root" ] || [ -z "$label" ] && {
|
|
115
115
|
err "usage: snapshot <task-id> <project-root> <label>"; exit 1; }
|
|
116
116
|
local sd; sd=$(shadow_dir "$task_id")
|
|
117
|
-
[ ! -d "$sd/.git" ] && { err "shadow not initialized for $task_id
|
|
117
|
+
[ ! -d "$sd/.git" ] && { err "shadow not initialized for $task_id - run 'init' first"; exit 1; }
|
|
118
118
|
sg "$sd" "$project_root" add -A >/dev/null 2>&1 || true
|
|
119
119
|
# Skip empty diffs (no-op snapshots).
|
|
120
120
|
if sg "$sd" "$project_root" diff --cached --quiet 2>/dev/null; then
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
# Optional env (when set, enriches each submodule with a canPush flag by
|
|
12
12
|
# cross-referencing the repo-cache.sh output for the active account, plus the
|
|
13
13
|
# editableRelatedRepos override list under prefs.projects[<key>]):
|
|
14
|
-
# ACCOUNT_GH_OWNER
|
|
15
|
-
# ACCOUNT_BB_PROJECT_KEY
|
|
16
|
-
# PROJECT_PREF_KEY
|
|
14
|
+
# ACCOUNT_GH_OWNER - owner scope for the github cache file
|
|
15
|
+
# ACCOUNT_BB_PROJECT_KEY - project/workspace key for the bitbucket cache
|
|
16
|
+
# PROJECT_PREF_KEY - top-level key in prefs.projects (e.g. cwd repo name)
|
|
17
17
|
#
|
|
18
18
|
# Output:
|
|
19
19
|
# [
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
#
|
|
3
|
-
# vercel-deploy.sh
|
|
3
|
+
# vercel-deploy.sh - safe wrapper around `vercel` CLI.
|
|
4
4
|
#
|
|
5
|
-
# Why this exists (v8.0.0): on 2026-04-27 a `vercel deploy --token
|
|
5
|
+
# Why this exists (v8.0.0): on 2026-04-27 a `vercel deploy --token=...`
|
|
6
6
|
# invocation failed during the v7.9.1 release flow. The CLI's error retry
|
|
7
|
-
# hint printed the failed argv verbatim, including `--token=vcp_
|
|
7
|
+
# hint printed the failed argv verbatim, including `--token=vcp_...`. That
|
|
8
8
|
# leaked the deploy token into the conversation transcript and forced a
|
|
9
9
|
# token rotation. See `feedback_vercel_cli_token_leak.md`.
|
|
10
10
|
#
|
|
11
11
|
# This wrapper guarantees three properties for every Vercel call:
|
|
12
|
-
# 1. Tokens are passed via VERCEL_TOKEN env var, NEVER via --token
|
|
12
|
+
# 1. Tokens are passed via VERCEL_TOKEN env var, NEVER via --token=... argv.
|
|
13
13
|
# Even if a downstream caller still uses --token=, the redact filter
|
|
14
14
|
# below scrubs it from stdout/stderr.
|
|
15
15
|
# 2. Every stdout/stderr line is piped through `redact_token` before being
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
# pipeline/lib/vercel-deploy.sh doctor # env + CLI check
|
|
24
24
|
#
|
|
25
25
|
# Environment:
|
|
26
|
-
# VERCEL_TOKEN
|
|
27
|
-
# VERCEL_ORG_ID
|
|
28
|
-
# VERCEL_PROJECT_ID
|
|
29
|
-
# VERCEL_DEPLOY_QUIET
|
|
26
|
+
# VERCEL_TOKEN - required for deploy (resolved from prefs keychainMapping if unset)
|
|
27
|
+
# VERCEL_ORG_ID - optional, scopes deploys to a team
|
|
28
|
+
# VERCEL_PROJECT_ID - optional, links to a specific project
|
|
29
|
+
# VERCEL_DEPLOY_QUIET - when set, suppresses progress lines (raw CLI output stays redacted)
|
|
30
30
|
#
|
|
31
31
|
# Exit codes:
|
|
32
32
|
# 0 deploy succeeded
|
|
@@ -39,7 +39,7 @@ CMD="${1:-help}"
|
|
|
39
39
|
shift || true
|
|
40
40
|
|
|
41
41
|
# ---------------------------------------------------------------------------
|
|
42
|
-
# Token redaction filter
|
|
42
|
+
# Token redaction filter - used everywhere user-visible output flows.
|
|
43
43
|
#
|
|
44
44
|
# Patterns scrubbed:
|
|
45
45
|
# --token=<rest> → --token=***REDACTED***
|
|
@@ -68,16 +68,16 @@ cmd_doctor() {
|
|
|
68
68
|
if command -v vercel >/dev/null 2>&1; then
|
|
69
69
|
echo "vercel: $(vercel --version 2>&1 | redact_filter | head -1)"
|
|
70
70
|
else
|
|
71
|
-
echo "vercel: NOT INSTALLED
|
|
71
|
+
echo "vercel: NOT INSTALLED - run 'npm i -g vercel'" >&2
|
|
72
72
|
rc=1
|
|
73
73
|
fi
|
|
74
74
|
|
|
75
75
|
if [ -n "${VERCEL_TOKEN:-}" ]; then
|
|
76
76
|
local masked
|
|
77
77
|
masked=$(printf '%s' "$VERCEL_TOKEN" | head -c 4)
|
|
78
|
-
echo "VERCEL_TOKEN: set (prefix=${masked}
|
|
78
|
+
echo "VERCEL_TOKEN: set (prefix=${masked}..., length=${#VERCEL_TOKEN})"
|
|
79
79
|
else
|
|
80
|
-
echo "VERCEL_TOKEN: unset
|
|
80
|
+
echo "VERCEL_TOKEN: unset - set via env or pipeline keychainMapping.vercel"
|
|
81
81
|
fi
|
|
82
82
|
|
|
83
83
|
if [ -n "${VERCEL_ORG_ID:-}" ]; then
|
|
@@ -91,8 +91,21 @@ cmd_doctor() {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
cmd_deploy() {
|
|
94
|
+
# Token-on-argv refusal runs FIRST - the whole point of this wrapper is
|
|
95
|
+
# never letting --token reach a transcript, so the guard must not depend
|
|
96
|
+
# on the vercel CLI being installed.
|
|
97
|
+
local arg
|
|
98
|
+
for arg in "$@"; do
|
|
99
|
+
case "$arg" in
|
|
100
|
+
--token|--token=*)
|
|
101
|
+
echo "ERROR: refused to deploy with --token argv. Pass the token via VERCEL_TOKEN env var instead." >&2
|
|
102
|
+
exit 1
|
|
103
|
+
;;
|
|
104
|
+
esac
|
|
105
|
+
done
|
|
106
|
+
|
|
94
107
|
if ! command -v vercel >/dev/null 2>&1; then
|
|
95
|
-
echo "ERROR: vercel CLI not on PATH
|
|
108
|
+
echo "ERROR: vercel CLI not on PATH - run 'npm i -g vercel'" >&2
|
|
96
109
|
exit 1
|
|
97
110
|
fi
|
|
98
111
|
|
|
@@ -122,7 +135,7 @@ cmd_deploy() {
|
|
|
122
135
|
fi
|
|
123
136
|
cmd_args+=("${extra_args[@]}")
|
|
124
137
|
|
|
125
|
-
# Refuse to run if the user is trying to pass --token
|
|
138
|
+
# Refuse to run if the user is trying to pass --token=... via extra args.
|
|
126
139
|
for a in "${extra_args[@]}"; do
|
|
127
140
|
case "$a" in
|
|
128
141
|
--token=*|--token)
|
|
@@ -134,7 +147,7 @@ cmd_deploy() {
|
|
|
134
147
|
done
|
|
135
148
|
|
|
136
149
|
# Run the CLI with token via env. Pipe stdout AND stderr through the redact
|
|
137
|
-
# filter so even if the CLI dumps argv on failure (it does
|
|
150
|
+
# filter so even if the CLI dumps argv on failure (it does - that was the
|
|
138
151
|
# original v7.9.1 leak), tokens never reach the user's screen or transcript.
|
|
139
152
|
set +e
|
|
140
153
|
( cd "$cwd" && VERCEL_TOKEN="$VERCEL_TOKEN" vercel "${cmd_args[@]}" 2>&1 ) \
|