@mmerterden/multi-agent-pipeline 8.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2623 -0
- package/LICENSE +21 -0
- package/README.md +852 -0
- package/docs/FIGMA_PIPELINE.md +138 -0
- package/docs/GENERICITY-REVIEW.md +277 -0
- package/docs/STABILITY-FIX-PLAN.md +168 -0
- package/docs/adr/0001-three-model-triage.md +81 -0
- package/docs/adr/0002-instruction-driven-flag.md +62 -0
- package/docs/adr/0003-unified-shared-skills.md +55 -0
- package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
- package/docs/adr/0005-lazy-phase-docs.md +68 -0
- package/docs/adr/0006-skills-core-external-split.md +52 -0
- package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
- package/docs/adr/README.md +33 -0
- package/docs/architecture.md +181 -0
- package/docs/best-practices.md +93 -0
- package/docs/features.md +274 -0
- package/docs/performance.md +116 -0
- package/docs/recovery-guide.md +479 -0
- package/index.js +76 -0
- package/install/_adapters.mjs +69 -0
- package/install/_common.mjs +150 -0
- package/install/_copilot-instructions.mjs +32 -0
- package/install/_dev-only-files.mjs +23 -0
- package/install/_platform-filter.mjs +132 -0
- package/install/_telemetry.mjs +79 -0
- package/install/claude.mjs +332 -0
- package/install/copilot.mjs +254 -0
- package/install/index.mjs +179 -0
- package/install/templates/copilot-instructions.md +319 -0
- package/install.js +24 -0
- package/package.json +78 -0
- package/pipeline/adapters/_base.mjs +288 -0
- package/pipeline/adapters/copilot-chat.mjs +158 -0
- package/pipeline/adapters/cursor.mjs +187 -0
- package/pipeline/agents/android-architect.md +42 -0
- package/pipeline/agents/backend-architect.md +43 -0
- package/pipeline/agents/code-reviewer.md +57 -0
- package/pipeline/agents/dev-critic.md +148 -0
- package/pipeline/agents/explorer.md +34 -0
- package/pipeline/agents/ios-architect.md +41 -0
- package/pipeline/agents/security-auditor.md +98 -0
- package/pipeline/agents/task-clarifier.md +113 -0
- package/pipeline/claude-md-template.md +55 -0
- package/pipeline/commands/archive-guard.md +45 -0
- package/pipeline/commands/deploy.md +54 -0
- package/pipeline/commands/figma-to-swiftui.md +295 -0
- package/pipeline/commands/multi-agent/_account-picker.md +90 -0
- package/pipeline/commands/multi-agent/_dev-context.md +111 -0
- package/pipeline/commands/multi-agent/_input-parser.md +43 -0
- package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
- package/pipeline/commands/multi-agent/autopilot.md +116 -0
- package/pipeline/commands/multi-agent/channels.md +465 -0
- package/pipeline/commands/multi-agent/delete.md +66 -0
- package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
- package/pipeline/commands/multi-agent/dev-local.md +105 -0
- package/pipeline/commands/multi-agent/dev.md +246 -0
- package/pipeline/commands/multi-agent/diff-explain.md +68 -0
- package/pipeline/commands/multi-agent/help.md +422 -0
- package/pipeline/commands/multi-agent/issue.md +79 -0
- package/pipeline/commands/multi-agent/jira.md +132 -0
- package/pipeline/commands/multi-agent/kill.md +38 -0
- package/pipeline/commands/multi-agent/language.md +94 -0
- package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
- package/pipeline/commands/multi-agent/local.md +117 -0
- package/pipeline/commands/multi-agent/log.md +25 -0
- package/pipeline/commands/multi-agent/manual-test.md +43 -0
- package/pipeline/commands/multi-agent/purge.md +39 -0
- package/pipeline/commands/multi-agent/refactor.md +188 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
- package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
- package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
- package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
- package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
- package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
- package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
- package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
- package/pipeline/commands/multi-agent/refs/phases.md +187 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
- package/pipeline/commands/multi-agent/refs/rules.md +189 -0
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
- package/pipeline/commands/multi-agent/resume.md +28 -0
- package/pipeline/commands/multi-agent/review.md +228 -0
- package/pipeline/commands/multi-agent/scan.md +74 -0
- package/pipeline/commands/multi-agent/search.md +97 -0
- package/pipeline/commands/multi-agent/setup.md +767 -0
- package/pipeline/commands/multi-agent/stack.md +48 -0
- package/pipeline/commands/multi-agent/status.md +38 -0
- package/pipeline/commands/multi-agent/sync.md +319 -0
- package/pipeline/commands/multi-agent/test.md +39 -0
- package/pipeline/commands/multi-agent/update.md +88 -0
- package/pipeline/commands/multi-agent.md +293 -0
- package/pipeline/commands/security-review.md +6 -0
- package/pipeline/commands/sim-test.md +256 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +65 -0
- package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
- package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
- package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
- package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
- package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
- package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
- package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
- package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
- package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
- package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
- package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
- package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
- package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
- package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
- package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
- package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
- package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
- package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
- package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
- package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
- package/pipeline/eval/triage/README.md +54 -0
- package/pipeline/lib/account-resolver.sh +204 -0
- package/pipeline/lib/channels-multi-repo.sh +218 -0
- package/pipeline/lib/context-link-extractor.sh +192 -0
- package/pipeline/lib/credential-store-resolver.sh +57 -0
- package/pipeline/lib/credential-store.sh +226 -0
- package/pipeline/lib/fetch-confluence.sh +358 -0
- package/pipeline/lib/fetch-crashlytics.sh +314 -0
- package/pipeline/lib/fetch-fortify.sh +321 -0
- package/pipeline/lib/fetch-swagger.sh +270 -0
- package/pipeline/lib/issue-fetcher.sh +333 -0
- package/pipeline/lib/multi-repo-pipeline.sh +252 -0
- package/pipeline/lib/plan-todos.sh +284 -0
- package/pipeline/lib/post-pr-review.sh +374 -0
- package/pipeline/lib/repo-cache.sh +231 -0
- package/pipeline/lib/review-watch.sh +244 -0
- package/pipeline/lib/shadow-git.sh +222 -0
- package/pipeline/lib/submodule-detector.sh +177 -0
- package/pipeline/lib/vercel-deploy.sh +170 -0
- package/pipeline/preferences-template.json +132 -0
- package/pipeline/rules/app-store-guidelines.md +59 -0
- package/pipeline/rules/code-review.md +27 -0
- package/pipeline/rules/code-style.md +37 -0
- package/pipeline/rules/debugging.md +24 -0
- package/pipeline/rules/figma-pipeline.md +190 -0
- package/pipeline/rules/git-conventions.md +29 -0
- package/pipeline/rules/kotlin-android.md +92 -0
- package/pipeline/rules/performance.md +23 -0
- package/pipeline/rules/security.md +39 -0
- package/pipeline/rules/swiftui-qa.md +32 -0
- package/pipeline/rules/tdd.md +25 -0
- package/pipeline/rules/testing.md +37 -0
- package/pipeline/schemas/agent-state.schema.json +273 -0
- package/pipeline/schemas/analysis-output.schema.json +59 -0
- package/pipeline/schemas/clarify-output.schema.json +74 -0
- package/pipeline/schemas/dev-critic-output.schema.json +104 -0
- package/pipeline/schemas/diff-risk.schema.json +78 -0
- package/pipeline/schemas/figma-project-config.schema.json +372 -0
- package/pipeline/schemas/migrations/README.md +73 -0
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
- package/pipeline/schemas/plan-todos.schema.json +62 -0
- package/pipeline/schemas/planning-output.schema.json +57 -0
- package/pipeline/schemas/prefs.schema.json +1137 -0
- package/pipeline/schemas/reviewer-output.schema.json +55 -0
- package/pipeline/schemas/test-gap.schema.json +64 -0
- package/pipeline/schemas/token-budget.json +17 -0
- package/pipeline/schemas/triage-corpus.schema.json +31 -0
- package/pipeline/schemas/triage-output.schema.json +115 -0
- package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
- package/pipeline/scripts/README-figma-smokes.md +34 -0
- package/pipeline/scripts/README.md +104 -0
- package/pipeline/scripts/aggregate-metrics.mjs +310 -0
- package/pipeline/scripts/audit-log-rotate.sh +61 -0
- package/pipeline/scripts/audit-log.sh +69 -0
- package/pipeline/scripts/benchmark-phase-0.sh +128 -0
- package/pipeline/scripts/build-skills-index.mjs +139 -0
- package/pipeline/scripts/classify-plan-safety.mjs +177 -0
- package/pipeline/scripts/cost-table.json +27 -0
- package/pipeline/scripts/diff-explain.mjs +276 -0
- package/pipeline/scripts/diff-risk-score.mjs +328 -0
- package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
- package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
- package/pipeline/scripts/eval-triage.mjs +171 -0
- package/pipeline/scripts/figma-placeholder-map.json +191 -0
- package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
- package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
- package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
- package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
- package/pipeline/scripts/gen-skills-index.mjs +90 -0
- package/pipeline/scripts/github-ssh-setup.sh +103 -0
- package/pipeline/scripts/import-figma-skills.sh +253 -0
- package/pipeline/scripts/keychain-save.sh +74 -0
- package/pipeline/scripts/keychain.py +294 -0
- package/pipeline/scripts/log-metric.sh +98 -0
- package/pipeline/scripts/match-skills.mjs +167 -0
- package/pipeline/scripts/memory-load.sh +46 -0
- package/pipeline/scripts/memory-save.sh +76 -0
- package/pipeline/scripts/migrate-prefs.mjs +390 -0
- package/pipeline/scripts/migrate-state.mjs +215 -0
- package/pipeline/scripts/output-quality-check.sh +125 -0
- package/pipeline/scripts/phase-banner.sh +158 -0
- package/pipeline/scripts/phase-tracker.sh +548 -0
- package/pipeline/scripts/pre-commit-check.sh +69 -0
- package/pipeline/scripts/pre-push-check.sh +77 -0
- package/pipeline/scripts/render-agent-log-cost.sh +149 -0
- package/pipeline/scripts/render-cost-summary.sh +137 -0
- package/pipeline/scripts/render-work-summary.sh +195 -0
- package/pipeline/scripts/repo-map.mjs +367 -0
- package/pipeline/scripts/run-aggregator.mjs +298 -0
- package/pipeline/scripts/scan-skills.sh +332 -0
- package/pipeline/scripts/search-logs.sh +291 -0
- package/pipeline/scripts/sign-skills.sh +67 -0
- package/pipeline/scripts/smoke-adapters.sh +207 -0
- package/pipeline/scripts/smoke-add-detail.sh +137 -0
- package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
- package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
- package/pipeline/scripts/smoke-channels-flow.sh +130 -0
- package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
- package/pipeline/scripts/smoke-clarify.sh +148 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
- package/pipeline/scripts/smoke-cost-summary.sh +139 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
- package/pipeline/scripts/smoke-delete-flow.sh +151 -0
- package/pipeline/scripts/smoke-dev-critic.sh +144 -0
- package/pipeline/scripts/smoke-diff-explain.sh +128 -0
- package/pipeline/scripts/smoke-diff-risk.sh +161 -0
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
- package/pipeline/scripts/smoke-eval-live.sh +136 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
- package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
- package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
- package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
- package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
- package/pipeline/scripts/smoke-figma-sync.sh +149 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
- package/pipeline/scripts/smoke-install-layout.sh +241 -0
- package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
- package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
- package/pipeline/scripts/smoke-keychain.sh +158 -0
- package/pipeline/scripts/smoke-language-axis.sh +109 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
- package/pipeline/scripts/smoke-migrate-state.sh +102 -0
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
- package/pipeline/scripts/smoke-pat-audit.sh +107 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
- package/pipeline/scripts/smoke-personal-data.sh +82 -0
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
- package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
- package/pipeline/scripts/smoke-phase-banner.sh +101 -0
- package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
- package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
- package/pipeline/scripts/smoke-plan-safety.sh +139 -0
- package/pipeline/scripts/smoke-plan-todos.sh +193 -0
- package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
- package/pipeline/scripts/smoke-pre-commit.sh +138 -0
- package/pipeline/scripts/smoke-pref-migration.sh +224 -0
- package/pipeline/scripts/smoke-prefs-language.sh +134 -0
- package/pipeline/scripts/smoke-progress-contract.sh +118 -0
- package/pipeline/scripts/smoke-push-retry.sh +75 -0
- package/pipeline/scripts/smoke-readme-counts.sh +120 -0
- package/pipeline/scripts/smoke-repo-map.sh +300 -0
- package/pipeline/scripts/smoke-review-watch.sh +134 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
- package/pipeline/scripts/smoke-schema-validation.sh +173 -0
- package/pipeline/scripts/smoke-search.sh +187 -0
- package/pipeline/scripts/smoke-shadow-git.sh +175 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
- package/pipeline/scripts/smoke-skill-language.sh +83 -0
- package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
- package/pipeline/scripts/smoke-skill-scan.sh +198 -0
- package/pipeline/scripts/smoke-stack-swap.sh +132 -0
- package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
- package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
- package/pipeline/scripts/smoke-sync-parity.sh +92 -0
- package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
- package/pipeline/scripts/smoke-telemetry.sh +147 -0
- package/pipeline/scripts/smoke-test-gap.sh +183 -0
- package/pipeline/scripts/smoke-token-budget.sh +67 -0
- package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
- package/pipeline/scripts/smoke-triage-memory.sh +174 -0
- package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
- package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
- package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
- package/pipeline/scripts/smoke-work-summary.sh +163 -0
- package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
- package/pipeline/scripts/smoke-write-state.sh +115 -0
- package/pipeline/scripts/stack-swap.sh +182 -0
- package/pipeline/scripts/sync-figma-source.sh +228 -0
- package/pipeline/scripts/sync-parity-check.sh +135 -0
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +29 -0
- package/pipeline/scripts/test-gap-rules/node.json +17 -0
- package/pipeline/scripts/test-gap-rules/python.json +19 -0
- package/pipeline/scripts/test-gap-scan.mjs +343 -0
- package/pipeline/scripts/token-budget-report.mjs +145 -0
- package/pipeline/scripts/triage-memory.mjs +258 -0
- package/pipeline/scripts/ui-tree-dumper.swift +122 -0
- package/pipeline/scripts/uninstall.mjs +331 -0
- package/pipeline/scripts/update-issue-progress.sh +146 -0
- package/pipeline/scripts/validate-analysis.mjs +132 -0
- package/pipeline/scripts/validate-diff-risk.mjs +117 -0
- package/pipeline/scripts/validate-planning.mjs +180 -0
- package/pipeline/scripts/validate-reviewer.mjs +131 -0
- package/pipeline/scripts/validate-schemas.mjs +88 -0
- package/pipeline/scripts/validate-test-gap.mjs +90 -0
- package/pipeline/scripts/validate-triage.mjs +175 -0
- package/pipeline/scripts/verify-skills.sh +126 -0
- package/pipeline/scripts/write-state.mjs +175 -0
- package/pipeline/skills/.skill-manifest.json +779 -0
- package/pipeline/skills/.skills-index.json +1771 -0
- package/pipeline/skills/figma-android/README.md +36 -0
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
- package/pipeline/skills/figma-common/README.md +57 -0
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
- package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
- package/pipeline/skills/shared/README.md +212 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
- package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
- package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
- package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
- package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
- package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
- package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
- package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
- package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
- package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
- package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
- package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
- package/pipeline/skills/skills-index.md +205 -0
|
@@ -0,0 +1,944 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-agent
|
|
3
|
+
language: tr
|
|
4
|
+
description: "Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL — analysis → plan → TDD development → parallel review (Opus + Sonnet on Claude Code, GPT + Opus + Sonnet on Copilot CLI) → commit → log. Every step is written to agent-log.md."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
argument-hint: '"PROJ-12345" "feature/PROJ-12345-flight-filter" | "https://github.com/.../issues/316" | status | log #1 | resume #1 | kill #1 | clear-logs | purge | review'
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Read and follow the instructions in this file's INSTRUCTION.md section below.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Multi-Agent Task Orchestrator
|
|
14
|
+
|
|
15
|
+
## Project Detection
|
|
16
|
+
|
|
17
|
+
Detect project from cwd FIRST, then validate input format:
|
|
18
|
+
|
|
19
|
+
| cwd contains | Project | Accepted Input | Rejected Input |
|
|
20
|
+
|--------------|---------|----------------|----------------|
|
|
21
|
+
| `/my-ios-app` | my-app | `"PROJ-XXX" "branch"` | GitHub Issue URL |
|
|
22
|
+
| `/my-figma-app` | figma | `"https://github.com/.../issues/N"` | Jira ID + branch |
|
|
23
|
+
| Other | generic | Both formats | — |
|
|
24
|
+
|
|
25
|
+
If user gives wrong format for the project, warn:
|
|
26
|
+
- my-ios-app + GitHub URL → "Bu proje Jira ID + branch bekliyor. Ornek: multi-agent \"PROJ-12345\" \"feature/PROJ-12345-desc\""
|
|
27
|
+
- my-figma-app + Jira → "Bu proje GitHub Issue URL bekliyor. Ornek: multi-agent \"https://github.com/my-org/my-figma-app/issues/316\""
|
|
28
|
+
|
|
29
|
+
## Input Parsing
|
|
30
|
+
|
|
31
|
+
Classify user input into one of 5 types (matches the colon-form `multi-agent.md` contract; cross-CLI parity is enforced by `smoke-cross-cli-behavior.sh`):
|
|
32
|
+
|
|
33
|
+
| # | Pattern | Type | Action |
|
|
34
|
+
|---|---------|------|--------|
|
|
35
|
+
| 1 | `#N` or bare `316` | github-issue-number | Fetch via gh after project selection |
|
|
36
|
+
| 2 | `https://github.com/.../issues/N` | github-issue-url | Extract org/repo/N, fetch via gh |
|
|
37
|
+
| 3 | `https://{JIRA_HOST}/browse/{JIRA_KEY}-XXXXX` | jira-url | Extract ID, fetch via Jira API |
|
|
38
|
+
| 4 | `{JIRA_KEY}-XXXXX` (bare) | jira-id | Fetch via Jira API |
|
|
39
|
+
| 5 | Anything else | free-text | No external fetch |
|
|
40
|
+
|
|
41
|
+
All types enter the same Phase 0 flow.
|
|
42
|
+
|
|
43
|
+
## Routing
|
|
44
|
+
|
|
45
|
+
Parse the user's input and route to the correct sub-command:
|
|
46
|
+
|
|
47
|
+
| Input Pattern | Action |
|
|
48
|
+
|---------------|--------|
|
|
49
|
+
| `"PROJ-XXX" "branch"` | **my-app only** — Jira ID + branch name → auto-assigned incremental ID |
|
|
50
|
+
| `"https://github.com/..."` | **figma only** — parse issue, extract Jira from title/body, auto-create branch |
|
|
51
|
+
| `status` | Show all tasks with ID, phase, status |
|
|
52
|
+
| `log [id]` | Show agent-log.md for task (latest if no id) |
|
|
53
|
+
| `resume [id]` | Resume paused/failed task from last successful phase |
|
|
54
|
+
| `kill [id]` | Stop task, delete worktree + branch + logs. Asks confirm first |
|
|
55
|
+
| `clear-logs` | Delete all agent-log.md and agent-state.json files, keep worktrees/branches |
|
|
56
|
+
| `purge` | Nuclear cleanup — delete ALL worktrees, branches, logs, state, counter. Full reset |
|
|
57
|
+
| `review` | Skip phases 0-3, review current diff only |
|
|
58
|
+
| `autopilot` flag | Add to any pipeline command — skip user confirmations except destructive ops |
|
|
59
|
+
| No args / `help` | Show usage guide (project-specific) |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Autopilot Mode
|
|
64
|
+
|
|
65
|
+
Autopilot mode skips interactive confirmations and runs the pipeline end-to-end autonomously.
|
|
66
|
+
|
|
67
|
+
**Activation**: Add `autopilot` flag to any pipeline command:
|
|
68
|
+
```
|
|
69
|
+
multi-agent "PROJ-12345" "feature/PROJ-12345-desc" autopilot
|
|
70
|
+
multi-agent "https://github.com/.../issues/316" autopilot
|
|
71
|
+
multi-agent "LoginView dark mode fix" autopilot
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**What changes in autopilot:**
|
|
75
|
+
|
|
76
|
+
| Phase | Normal | Autopilot |
|
|
77
|
+
|-------|--------|-----------|
|
|
78
|
+
| Phase 2 (Plan Approval Gate) | Clarification (max 2 tur) + approval loop — kullanıcı `onayla`/`iptal`/serbest metin | **Gate skip** — plan'ı logla, direkt Phase 3'e geç (autopilot sözleşmesi: zero interaction) |
|
|
79
|
+
| Phase 5 (User Test) | "Test etmek ister misin?" → bekle | Skip → direkt Phase 6'ya geç |
|
|
80
|
+
| Phase 6 (Commit) | "Commit atmak ister misin?" → bekle | Otomatik commit + push |
|
|
81
|
+
| Phase 6 (PR) | "PR açmak ister misin?" → bekle | Otomatik PR oluştur |
|
|
82
|
+
|
|
83
|
+
**What NEVER skips (even in autopilot):**
|
|
84
|
+
- Phase 4 Review → blocking bulgu varsa Phase 3'e döner, fix + rebuild otomatik (güvenlik)
|
|
85
|
+
- Kill/Purge confirmations → destructive operasyonlar her zaman sorar
|
|
86
|
+
- Build fail → fix + rebuild otomatik (max 3 retry). 3 retry sonra hala fail → pause, kullanıcıya sor
|
|
87
|
+
|
|
88
|
+
**State tracking**: `agent-state.json`'a `"autopilot": true` eklenir. Resume'da da autopilot devam eder.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Task ID System
|
|
93
|
+
|
|
94
|
+
Every task gets an **auto-incremented short ID** for easy reference:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
multi-agent "PROJ-12345" "feature/PROJ-12345-flight-filter"
|
|
98
|
+
→ ✅ Task #1 started — PROJ-12345
|
|
99
|
+
|
|
100
|
+
multi-agent "PROJ-67890" "feature/PROJ-67890-booking-flow"
|
|
101
|
+
→ ✅ Task #2 started — PROJ-67890
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
ID is stored in `agent-state.json` and shown in `multi-agent status`:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
🤖 Multi-Agent Active Tasks
|
|
108
|
+
|
|
109
|
+
| ID | Jira | Branch | Phase | Status |
|
|
110
|
+
|----|------|--------|-------|--------|
|
|
111
|
+
| #1 | PROJ-12345 | feature/PROJ-12345-... | 3/7 Dev | ⚡ in progress |
|
|
112
|
+
| #2 | PROJ-67890 | feature/PROJ-67890-... | 1/7 Analysis | 📊 scanning |
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
ID counter stored at `.worktrees/.multi-agent-counter` (persists across sessions).
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Kill Logic
|
|
120
|
+
|
|
121
|
+
When `multi-agent kill [id]` is called:
|
|
122
|
+
|
|
123
|
+
1. **Find task**: Look up task by short ID (e.g. `#2`) or Jira ID (e.g. `PROJ-67890`)
|
|
124
|
+
2. **Confirm**: Ask user: `"PROJ-67890 (Task #2) silinecek: worktree, branch, loglar. Emin misin?"`
|
|
125
|
+
3. **Stop agents**: Kill any running background agents for this task
|
|
126
|
+
4. **Delete worktree**: `git worktree remove .worktrees/PROJ-{id} --force`
|
|
127
|
+
5. **Delete branch**: `git branch -D {branch-name}`
|
|
128
|
+
6. **Delete remote branch**: ONLY if user explicitly confirms: "Remote branch'i de silmek istiyor musun?"
|
|
129
|
+
7. **Archive log** (optional): Move `agent-log.md` to `.worktrees/.archive/PROJ-{id}/` before delete
|
|
130
|
+
- Or delete completely if user says "tamamen sil"
|
|
131
|
+
8. **Update counter**: Mark ID as available (or just skip — IDs are cheap)
|
|
132
|
+
9. **Confirm**: `❌ Task #2 (PROJ-67890) killed — worktree, branch, logs deleted`
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Clear Logs
|
|
137
|
+
|
|
138
|
+
When `multi-agent clear-logs` is called:
|
|
139
|
+
|
|
140
|
+
1. **Confirm**: `"Tüm task logları silinecek (agent-log.md + agent-state.json). Worktree'ler ve branch'ler kalacak. Emin misin?"`
|
|
141
|
+
2. **Scan**: Find all `.worktrees/PROJ-*/agent-log.md` and `agent-state.json` files
|
|
142
|
+
3. **Delete**: Remove log and state files from each worktree
|
|
143
|
+
4. **Do NOT reset counter**: `.worktrees/.multi-agent-counter` stays intact — prevents ID collision with existing worktrees
|
|
144
|
+
5. **Confirm**:
|
|
145
|
+
```
|
|
146
|
+
🧹 Logs cleared
|
|
147
|
+
Deleted: {N} agent-log.md + {N} agent-state.json
|
|
148
|
+
Worktrees & branches: untouched
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Purge (Full Reset)
|
|
154
|
+
|
|
155
|
+
When `multi-agent purge` is called:
|
|
156
|
+
|
|
157
|
+
1. **Confirm**: `"⚠️ DIKKAT: Tüm worktree'ler, branch'ler, loglar ve state silinecek. Bu geri alınamaz. Emin misin?"`
|
|
158
|
+
2. **List**: Show what will be deleted:
|
|
159
|
+
```
|
|
160
|
+
Silinecekler:
|
|
161
|
+
- .worktrees/PROJ-12345/ (branch: feature/PROJ-12345-...)
|
|
162
|
+
- .worktrees/PROJ-67890/ (branch: feature/PROJ-67890-...)
|
|
163
|
+
- .worktrees/.multi-agent-counter
|
|
164
|
+
Toplam: 2 worktree, 2 branch, 2 log
|
|
165
|
+
```
|
|
166
|
+
3. **Second confirm**: `"Devam etmek için 'purge' yaz:"`
|
|
167
|
+
4. **Execute** (for each worktree):
|
|
168
|
+
- `git worktree remove .worktrees/PROJ-{id} --force`
|
|
169
|
+
- `git branch -D {branch-name}`
|
|
170
|
+
- Remote branch delete ONLY if user explicitly confirms: "Remote branch'leri de silmek istiyor musun?"
|
|
171
|
+
5. **Cleanup**: Remove `.worktrees/.multi-agent-counter` and `.worktrees/.archive/`
|
|
172
|
+
6. **Confirm**:
|
|
173
|
+
```
|
|
174
|
+
🔥 Purge complete
|
|
175
|
+
Deleted: {N} worktrees, {N} branches, {N} logs
|
|
176
|
+
multi-agent is reset to clean state
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Resume Logic
|
|
182
|
+
|
|
183
|
+
When `multi-agent resume [id]` is called:
|
|
184
|
+
|
|
185
|
+
1. **Find state file**: Scan `.worktrees/PROJ-{id}/agent-state.json`
|
|
186
|
+
- If no `id` given, find the most recent worktree with `status != "done"`
|
|
187
|
+
2. **Read state**: Parse `agent-state.json` → determine last completed phase
|
|
188
|
+
3. **Restore context**: Read `agent-log.md` for previous findings:
|
|
189
|
+
- Phase 1 analysis findings → reuse in Phase 2+
|
|
190
|
+
- Phase 2 plan/todos → reuse in Phase 3+
|
|
191
|
+
- Phase 3 code changes → already on disk in worktree
|
|
192
|
+
- Phase 4 review findings → reuse if re-reviewing
|
|
193
|
+
4. **Resume from next phase**: Skip completed phases, start from `currentPhase + 1`
|
|
194
|
+
5. **Log**: `🔄 Resumed PROJ-{id} from Phase {N}`
|
|
195
|
+
|
|
196
|
+
This works across sessions because:
|
|
197
|
+
- `agent-state.json` → persists phase progress on disk
|
|
198
|
+
- `agent-log.md` → persists findings, analysis, decisions on disk
|
|
199
|
+
- Git worktree → persists code changes on disk
|
|
200
|
+
- All state is file-based, nothing depends on in-memory session
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Agent dispatch — per-persona model routing
|
|
205
|
+
|
|
206
|
+
Every agent persona under `pipeline/agents/*.md` declares a `preferredModel` frontmatter field. The orchestrator MUST honor it on every dispatch, on both Claude Code and Copilot CLI — cross-CLI parity is enforced by `smoke-cross-cli-behavior.sh`.
|
|
207
|
+
|
|
208
|
+
| Persona | `preferredModel` | Rationale (condensed) |
|
|
209
|
+
|---|---|---|
|
|
210
|
+
| `explorer` | `sonnet` | Scan/pattern work, cost-efficient without quality loss |
|
|
211
|
+
| `code-reviewer` | `opus` | Tier 1 reviewer; Phase 4 overrides Reviewer 3 to `sonnet` |
|
|
212
|
+
| `security-auditor` | `opus` | False-negative cost is high; opus reduces miss rate |
|
|
213
|
+
| `ios-architect` | `opus` | Deep module/protocol/migration reasoning |
|
|
214
|
+
| `android-architect` | `opus` | Gradle modules, Compose stability, Hilt graphs |
|
|
215
|
+
| `backend-architect` | `opus` | API + migration + scaling reasoning |
|
|
216
|
+
|
|
217
|
+
**Dispatch contract (pseudo-code):**
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
persona_file="$HOME/.claude/agents/${persona}.md"
|
|
221
|
+
pref_model="$(awk '/^preferredModel:/ {print $2; exit}' "$persona_file")"
|
|
222
|
+
override="${PHASE_MODEL_OVERRIDE:-}" # set by orchestrator per-dispatch (e.g. Phase 4 Reviewer 3 → sonnet)
|
|
223
|
+
resolved_model="${override:-${pref_model:-opus}}"
|
|
224
|
+
|
|
225
|
+
export CLAUDE_CODE_SUBAGENT_MODEL="$resolved_model"
|
|
226
|
+
# Claude Code honors the env var; Copilot CLI reads the same env + passes as --model flag.
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Precedence:** per-dispatch `PHASE_MODEL_OVERRIDE` > persona `preferredModel` > global default (`opus`).
|
|
230
|
+
|
|
231
|
+
**Observability:** emit `phase.agent.dispatch` OTel span with `{persona, resolved_model, override_source}` attributes when `MULTI_AGENT_OTEL_SPANS=1` (see `phase-tracker.sh`).
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Dynamic skill loading — trigger-based injection (v7.0.0+, opt-in)
|
|
236
|
+
|
|
237
|
+
**Gated by `prefs.global.dynamicSkillLoading` (default `false`).** When enabled, the orchestrator moves from eager-loading all 192 skills on every session to injecting only the skills that match the current task context. The match signal comes from three sources in descending weight:
|
|
238
|
+
|
|
239
|
+
1. `trigger-paths` globs in SKILL.md frontmatter vs. Phase 1 touched files (heaviest, +30 max)
|
|
240
|
+
2. `trigger-keywords` in SKILL.md frontmatter vs. task text (mid, +30 max)
|
|
241
|
+
3. `description` keyword overlap with task text (lightest fallback, +15 max)
|
|
242
|
+
4. Platform match vs. Phase 1 detected stack (+10)
|
|
243
|
+
|
|
244
|
+
**Runtime contract:**
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# After Phase 1 produces analysis.json with {stack.primary, touchedAreas[].path}
|
|
248
|
+
task_text="$(jq -r '.summary' analysis.json)"
|
|
249
|
+
touched=$(jq -r '.touchedAreas | map(.path) | join(",")' analysis.json)
|
|
250
|
+
stack=$(jq -r '.stack.primary' analysis.json)
|
|
251
|
+
|
|
252
|
+
matched_skills=$(node pipeline/scripts/match-skills.mjs \
|
|
253
|
+
"$task_text" \
|
|
254
|
+
--touched-files "$touched" \
|
|
255
|
+
--stack "$stack" \
|
|
256
|
+
--limit 12 \
|
|
257
|
+
--json)
|
|
258
|
+
|
|
259
|
+
# Inject only matched skills[] into subagent prompts for Phase 2–4.
|
|
260
|
+
# Skills not in the matched list are not loaded — saves ~10K–30K tokens
|
|
261
|
+
# per subagent dispatch on small tasks.
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Fallback:** if `.skills-index.json` is missing (e.g. fresh checkout before `build-skills-index.mjs` runs), the orchestrator falls back to eager-load exactly as pre-v7.0 — dynamic loading never blocks the happy path.
|
|
265
|
+
|
|
266
|
+
**--index-only installs:** `node install.js --index-only` writes only the index, not the 192 SKILL.md payloads. Intended for:
|
|
267
|
+
- CI pipelines that fetch skill bodies on demand
|
|
268
|
+
- Disk-constrained users who accept the dynamic-load contract
|
|
269
|
+
|
|
270
|
+
When `dynamicSkillLoading=true` AND the target install is index-only, subagent prompts must include the matched skills' bodies inline (read from the pipeline source or a cached copy). The orchestrator resolves this by reading `{PIPELINE_SRC}/pipeline/skills/{relativePath}` — the pipeline source repo is always the source of truth; the install dir is a cache.
|
|
271
|
+
|
|
272
|
+
**Telemetry:** when `MULTI_AGENT_OTEL_SPANS=1`, emit `phase.skills.match` span with `{taskId, matchedCount, topN=[name,score]}` so post-hoc analysis can tune trigger-keywords / trigger-paths in SKILL.md frontmatter.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Phase Pipeline
|
|
277
|
+
|
|
278
|
+
Run phases sequentially. Log every step to `agent-log.md`.
|
|
279
|
+
If any phase fails, mark task as `paused` and stop — user can `resume` later.
|
|
280
|
+
|
|
281
|
+
### Canonical phase labels (TaskCreate + banner)
|
|
282
|
+
|
|
283
|
+
Every user-facing phase title — TaskCreate cards, `phase-banner.sh` headers, and any status line rendered to the terminal — MUST come from this table. Labels are always English (`promptLanguage` is locked to `en`):
|
|
284
|
+
|
|
285
|
+
| # | Label |
|
|
286
|
+
|---|------------------------|
|
|
287
|
+
| 0 | Phase 0: Init |
|
|
288
|
+
| 1 | Phase 1: Analysis |
|
|
289
|
+
| 2 | Phase 2: Planning |
|
|
290
|
+
| 3 | Phase 3: Dev |
|
|
291
|
+
| 4 | Phase 4: Review |
|
|
292
|
+
| 5 | Phase 5: Test |
|
|
293
|
+
| 6 | Phase 6: Commit & PR |
|
|
294
|
+
| 7 | Phase 7: Report |
|
|
295
|
+
|
|
296
|
+
**Render rule:**
|
|
297
|
+
|
|
298
|
+
1. For TaskCreate, use the matching label as the task `subject`.
|
|
299
|
+
2. For terminal banners, call `phase-banner.sh` with the `auto` sentinel and `PHASE_LANG=en` env — or pass the literal label from the table. Never invent a new label.
|
|
300
|
+
3. Reviewer-count qualifiers (e.g. `(parallel + triage)`) stay English — they are technical artifacts, not user copy.
|
|
301
|
+
|
|
302
|
+
**Out of scope for localization** (always EN, per `prefs.schema.json`): reviewer/triage system prompts, commit messages, PR titles/bodies, Jira comments, wiki content, log payloads inside `agent-log.md` — these are external artifacts consumed by other tools and humans beyond this user.
|
|
303
|
+
|
|
304
|
+
#### TaskCreate ordering (strict)
|
|
305
|
+
|
|
306
|
+
All TaskCreate calls fire in strict phase-number order BEFORE any TaskUpdate is applied (Claude Code path; Copilot CLI does not have a TaskList widget so this rule is Claude-only). The native widget renders by creation order, not by phase-number metadata — out-of-order calls produce visually scrambled tile stacks (e.g. `1 ✓ · 2 ✓ · 4 ✓ · 0 ▶ · 3 ☐`) even when the underlying state file is correct. Pre-marking phases as completed/skipped before Phase 0 starts is FORBIDDEN: register the tile in order with default `pending` status, then flip via TaskUpdate when the phase actually short-circuits. Mode-specific phase sets:
|
|
307
|
+
|
|
308
|
+
- Full pipeline (`multi-agent`, `multi-agent-autopilot`, `multi-agent-local`, `multi-agent-local-autopilot`): 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7
|
|
309
|
+
- `--dev` modes (`multi-agent-dev`, `multi-agent-dev-autopilot`, `multi-agent-dev-local`, `multi-agent-dev-local-autopilot`): 0 → 3 → 5 → 6 → 7 (phases 1/2/4 are NOT TaskCreate'd at all)
|
|
310
|
+
|
|
311
|
+
Full contract: `refs/tracker-contract.md` § "TaskCreate ordering (strict)".
|
|
312
|
+
|
|
313
|
+
### Phase 0: Init
|
|
314
|
+
|
|
315
|
+
> **Contract (strict)** — Phase 0 has **8 sequential interactive steps** defined in `refs/phases/phase-0-init.md`. Do **NOT** short-circuit. Even when input is a Jira ID + branch, Steps 1, 4, 5, 6 (load prefs, multi-repo offer, branch picker, branch name confirm) are REQUIRED UX checkpoints — skipping them breaks component-production flows where base branch is `iteration/develop`, not `develop`, and where multiple repos must be selected.
|
|
316
|
+
>
|
|
317
|
+
> The condensed walkthrough below covers Step 1 (parse) + Step 2 (worktree), but DOES NOT replace the full contract. Read `refs/phases/phase-0-init.md` before every Phase 0 run and execute ALL 8 steps:
|
|
318
|
+
>
|
|
319
|
+
> 1. **Bootstrap tracker** — `pipeline/scripts/phase-tracker.sh init <task-id>` + 8 phase tiles (Step −1)
|
|
320
|
+
> 2. **Load prefs** — read `prefs.global` + `prefs.projects[{name}]`; halt with `/multi-agent:setup` prompt if no keychain mapping (Step 0)
|
|
321
|
+
> 3. **Parse input** — classify + fetch Jira/GitHub issue + extract Figma URL if present (Step 1)
|
|
322
|
+
> 4. **Select project(s) — single OR multi-repo** — present numbered list of repos from `$HOME`. Picker accepts space-separated numbers (`1 3 4`) for multi-select. Component/refactor tasks often span repos (e.g. component repo + consumer app). Surface saved `global.recentGroups` at the top of the list. **Never auto-pick a single repo when the task could touch more than one** — ask the user to confirm single vs multi. (Step 2)
|
|
323
|
+
> 5. **Pick base branch PER REPO** — REQUIRED INTERACTIVE STEP. If one repo selected: run `git ls-remote --heads origin` on that repo, present sorted list (develop* / release/* / main/master first), suggest top of `global.recentBranches[{projectKey}]`. **If multiple repos selected: fire the branch picker separately for each repo** (phase-0-init.md L221: "In multi-repo mode, the prompt fires per-repo"). Users reported this being silently skipped for component work where the correct base is `iteration/develop` — either per-repo prompt missing, or one branch assumed for all repos. Skip only if the user's original input explicitly specified a branch. (Step 3)
|
|
324
|
+
> 6. **Branch name confirm** — `feature/PROJ-{id}-{kebab}` or `bugfix/...` — user confirms or edits. In multi-repo mode the branch name is shared across all selected repos (collision check runs per-repo; any collision applies the suffix to all). (Step 4)
|
|
325
|
+
> 7. **Git identity — per repo** — route via `prefs.global.platformIdentityRouting`; ask if ambiguous. Multi-repo mode resolves identity **per repo independently** (phase-0-init.md L283). (Step 6)
|
|
326
|
+
> 8. **Instruction files + workspace creation — serially per repo** — detect `.instructions/figma/` etc. In multi-repo mode, worktree creation loops per repo serially (phase-0-init.md L308); any failure rolls back previously-created worktrees. Write `agent-state.json` with `state.projects[]` array (scalar `project`/`projectRoot`/`branch` mirror `projects[0]` for back-compat). (Steps 7-8)
|
|
327
|
+
|
|
328
|
+
**Step 1 — Project detection + input parsing:**
|
|
329
|
+
|
|
330
|
+
#### my-ios-app (Jira + branch)
|
|
331
|
+
1. Input: `"PROJ-12345" "feature/PROJ-12345-flight-filter"`
|
|
332
|
+
2. Parse directly: `jiraId = PROJ-12345`, `branch = feature/PROJ-12345-flight-filter`
|
|
333
|
+
3. No GitHub interaction needed
|
|
334
|
+
|
|
335
|
+
#### my-figma-app (GitHub Issue URL)
|
|
336
|
+
1. Input: `"https://github.com/my-org/my-figma-app/issues/316"`
|
|
337
|
+
2. Parse issue via `gh issue view 316 --json title,body,labels,assignees`
|
|
338
|
+
3. Extract Jira ID from issue title or body (pattern: `PROJ-XXXXX`)
|
|
339
|
+
4. Auto-generate branch: `feature/PROJ-{jiraId}-GH{issueNo}-{component-kebab}`
|
|
340
|
+
5. Assign issue to self: `gh issue edit 316 --add-assignee @me`
|
|
341
|
+
6. Move to In Progress: `gh issue edit 316 --add-label "in progress"`
|
|
342
|
+
|
|
343
|
+
#### generic (any iOS project)
|
|
344
|
+
1. Accept multiple input formats:
|
|
345
|
+
- **Free-text**: `"LoginView'da dark mode'da buton rengi gorunmuyor, contrast yetersiz"`
|
|
346
|
+
- **GitHub Issue URL**: parse via `gh issue view`
|
|
347
|
+
- **Jira ID + branch**: parse directly
|
|
348
|
+
2. If free-text:
|
|
349
|
+
- Extract task summary from description
|
|
350
|
+
- Auto-generate branch: `fix/{short-kebab-description}` or `feature/{short-kebab-description}`
|
|
351
|
+
- Determine type from context: bug description → `fix/`, feature request → `feature/`
|
|
352
|
+
3. No Jira integration needed — task ID is enough for tracking
|
|
353
|
+
|
|
354
|
+
**Step 2 — Worktree setup (all projects):**
|
|
355
|
+
1. **Fetch latest from remote**: `git fetch origin`
|
|
356
|
+
2. Determine worktree path:
|
|
357
|
+
- Jira ID var: `.worktrees/PROJ-{id}/`
|
|
358
|
+
- Jira ID yok (generic): `.worktrees/task-{shortId}/` (e.g. `.worktrees/task-3/`)
|
|
359
|
+
3. Create or switch to git worktree:
|
|
360
|
+
- If remote branch exists: `git worktree add {worktree-path} origin/{branch} -b {branch}`
|
|
361
|
+
- If new branch: `git worktree add {worktree-path} -b {branch}`
|
|
362
|
+
- If worktree already exists: `cd {worktree-path} && git pull origin {branch}`
|
|
363
|
+
4. Set git author (resolved from `prefs.global.identities[]` — routed by `platformIdentityRouting`, see `setup.md`):
|
|
364
|
+
```
|
|
365
|
+
git config user.name "{identity.name}"
|
|
366
|
+
git config user.email "{identity.email}"
|
|
367
|
+
```
|
|
368
|
+
4. Create log file: `.worktrees/PROJ-{id}/agent-log.md` with header
|
|
369
|
+
5. Create state file: `.worktrees/PROJ-{id}/agent-state.json` with:
|
|
370
|
+
```json
|
|
371
|
+
{
|
|
372
|
+
"taskId": "PROJ-12345",
|
|
373
|
+
"branch": "feature/PROJ-12345-flight-filter",
|
|
374
|
+
"project": "my-ios-app",
|
|
375
|
+
"currentPhase": 0,
|
|
376
|
+
"status": "in_progress",
|
|
377
|
+
"startedAt": "2026-04-07T09:30:00Z",
|
|
378
|
+
"phases": {
|
|
379
|
+
"0": { "status": "done", "duration": "5s" },
|
|
380
|
+
"1": { "status": "pending" },
|
|
381
|
+
"2": { "status": "pending" },
|
|
382
|
+
"3": { "status": "pending", "todos": [], "retryCount": 0 },
|
|
383
|
+
"4": { "status": "pending", "reviewIteration": 0 },
|
|
384
|
+
"5": { "status": "pending" },
|
|
385
|
+
"6": { "status": "pending" },
|
|
386
|
+
"7": { "status": "pending" }
|
|
387
|
+
},
|
|
388
|
+
"analysisFindings": [],
|
|
389
|
+
"planTodos": [],
|
|
390
|
+
"reviewConsensus": null
|
|
391
|
+
}
|
|
392
|
+
```
|
|
393
|
+
6. Log: `✅ Phase 0: Init complete`
|
|
394
|
+
|
|
395
|
+
**IMPORTANT**: Update `agent-state.json` at EVERY phase transition. This file is the resume source of truth.
|
|
396
|
+
|
|
397
|
+
### Phase 1: Analysis (claude-opus-4.6)
|
|
398
|
+
1. Launch **explore agents** (parallel) to scan codebase:
|
|
399
|
+
- Related files to the task
|
|
400
|
+
- Existing patterns and conventions
|
|
401
|
+
- Potential impact areas
|
|
402
|
+
2. Optionally launch **security-auditor** agent for pre-check
|
|
403
|
+
3. Summarize findings
|
|
404
|
+
4. Log: `📊 Phase 1: Analysis — {N} files identified, {summary}`
|
|
405
|
+
|
|
406
|
+
### Phase 2: Planning (claude-opus-4.6)
|
|
407
|
+
1. Create task breakdown → todos with dependencies
|
|
408
|
+
2. Launch **ios-architect** agent for architecture review (if structural changes)
|
|
409
|
+
3. Determine development approach per todo (new file, modify, refactor)
|
|
410
|
+
4. Log: `🧠 Phase 2: Plan — {N} todos created`
|
|
411
|
+
5. **Plan Approval Gate** (normal mode only — skipped for `--dev`, `autopilot`, `--dev autopilot`). Full flow in `refs/phases/phase-2-planning.md` Step 5:
|
|
412
|
+
- **5a — Clarification** (conditional, max 2 rounds): if the Jira/issue description is ambiguous (vague acceptance, UI task without Figma, API task without endpoint contract, `ambiguityScore >= 2`, parent-story scope drift), ask structured questions before rendering the plan. User answers → plan regenerated. 2. turda hâlâ net değilse "best-effort" banner'ı ile plan'ı bas.
|
|
413
|
+
- **5b — Approval loop**: render plan → user: `onayla`/`iptal`/serbest metin. Free-text düzenleme isteği → Opus plan revize eder → tekrar göster. No iteration cap; user controls exit via `onayla` or `iptal`.
|
|
414
|
+
- Persist `clarificationRounds`, `clarificationQuestions`, `clarificationAnswers`, `planIterations`, `planApprovedAt`, `planEditRequests` to `state.phases["2"]`.
|
|
415
|
+
|
|
416
|
+
### Phase 3: Dev (claude-sonnet-4.6)
|
|
417
|
+
For each todo (respecting dependency order):
|
|
418
|
+
1. Update todo status: `in_progress`
|
|
419
|
+
2. **TDD cycle**:
|
|
420
|
+
- Write failing test → verify RED
|
|
421
|
+
- Write minimal code → verify GREEN
|
|
422
|
+
- Refactor if needed
|
|
423
|
+
3. Run build: `xcodebuild` via **task agent**
|
|
424
|
+
4. If build fails → fix → rebuild (max 3 attempts, track `retryCount` in `agent-state.json`)
|
|
425
|
+
5. Update todo status: `done`
|
|
426
|
+
6. Log: `⚡ Phase 3: {todo-id} — Test ✅ Build ✅`
|
|
427
|
+
|
|
428
|
+
### Phase 4: Review (parallel + triage)
|
|
429
|
+
0. **Diff Risk Scoring (advisory, v8.3+)** — before reviewer dispatch run `node pipeline/scripts/diff-risk-score.mjs --base "$BASE_BRANCH" --top 5` and inject the top-N risk-ranked files as a `${PRIORITY_FILES}` block into each reviewer's prompt. Heuristic, deterministic, sub-second, never gates the pipeline. Disabled when `prefs.global.diffRiskAdvisory = false`. Signals: security paths (×3), schema migrations (×4), public API surfaces (×2), no-test-change (×2.5), complexity delta (×1.5), UI-critical paths (×1.5), loc changed (×1).
|
|
430
|
+
1. Launch **code-reviewer** agents in parallel. Reviewer set depends on which CLI is hosting the pipeline:
|
|
431
|
+
- **Claude Code** (2 reviewers): `claude-opus-4.6` (deep security + architecture) + `claude-sonnet-4.6` (quality + correctness)
|
|
432
|
+
- **Copilot CLI** (3 reviewers): `gpt-5.4` (edge cases, different perspective) + `claude-opus-4.6` + `claude-sonnet-4.6`
|
|
433
|
+
- Triage (both CLIs): single `claude-opus-4.6` pass over merged findings
|
|
434
|
+
2. Collect findings, classify:
|
|
435
|
+
- 🔴 **Blocking** → must fix → back to Phase 3 (max 3 iterations)
|
|
436
|
+
- 🟡 **Important** → fix and re-review
|
|
437
|
+
- 🟢 **Suggestion** → apply if reasonable
|
|
438
|
+
3. Log: `🔍 Phase 4: Review — {consensus}`
|
|
439
|
+
|
|
440
|
+
### Phase 5: Test
|
|
441
|
+
Lets the user physically test the code before opening a PR. The prompt MUST make it explicit that saying yes **removes the worktree and checks the branch out locally** — otherwise the user is hit with an implicit side effect.
|
|
442
|
+
|
|
443
|
+
0. **Test Gap Report (advisory, v8.3+)** — before the local-checkout prompt run `node pipeline/scripts/test-gap-scan.mjs --base "$BASE_BRANCH" --stack <ios|android|python|node>` to surface public symbols added in this branch that have no paired test. Heuristic, deterministic, sub-second, never gates by default. iOS `*View.swift` / Android `@Composable` symbols default to `important` severity; other public API additions to `suggestion`. Optional gating via `prefs.testGap.blockingThreshold` (loops back to Phase 4 rework when the important+blocking count exceeds the threshold). Disabled when `prefs.testGap.enabled = false`.
|
|
444
|
+
1. **Ask** (in English; `promptLanguage` is locked to `en`):
|
|
445
|
+
- `Want to check out locally to test? (y/N)`
|
|
446
|
+
`(yes → worktree is removed and branch is checked out locally for Xcode/manual test · no → stay in worktree and go to Phase 6)`
|
|
447
|
+
- **No** → go to Phase 6
|
|
448
|
+
- **Yes** → continue:
|
|
449
|
+
2. **Worktree'yi kaldır ve branch'e geç** (otomatik):
|
|
450
|
+
```bash
|
|
451
|
+
cd {project-root}
|
|
452
|
+
git worktree remove .worktrees/PROJ-{id}
|
|
453
|
+
git checkout {branch-name}
|
|
454
|
+
```
|
|
455
|
+
3. **Test talimatı ver**:
|
|
456
|
+
```
|
|
457
|
+
🧪 Branch'e geçildi: {branch-name}
|
|
458
|
+
|
|
459
|
+
Test için:
|
|
460
|
+
• SourceTree → commit'leri ve diff'i kontrol et
|
|
461
|
+
• Xcode → THY.xcworkspace aç → Cmd+B → Cmd+U
|
|
462
|
+
• Simulatör'de manual test
|
|
463
|
+
|
|
464
|
+
✅ "tamam" → Phase 6'ya geçer
|
|
465
|
+
❌ "fix: ..." → worktree tekrar oluşturulur, Phase 3'e döner
|
|
466
|
+
```
|
|
467
|
+
4. **Pause and wait**: Kullanıcının yanıtını bekle
|
|
468
|
+
5. **Eğer fix gerekiyorsa**:
|
|
469
|
+
- Worktree'yi tekrar oluştur: `git worktree add .worktrees/PROJ-{id} {branch-name}`
|
|
470
|
+
- Phase 3'e dön
|
|
471
|
+
6. Log: `🧪 Phase 5: Test — {result}`
|
|
472
|
+
|
|
473
|
+
> ⚠️ Commit'ler branch'te yaşar — worktree silmek commit'leri SILMEZ.
|
|
474
|
+
|
|
475
|
+
### Phase 6: Commit & PR
|
|
476
|
+
|
|
477
|
+
**Project-specific commit strategy:**
|
|
478
|
+
|
|
479
|
+
#### my-figma-app
|
|
480
|
+
1. **Sor**: "Commit atmak ister misin?"
|
|
481
|
+
- **Hayır** → Pause, kullanıcı hazır olunca `resume` ile devam eder
|
|
482
|
+
- **Evet** → devam et:
|
|
483
|
+
2. `/figma-iteration-commit {ComponentName}` çalıştır
|
|
484
|
+
- Build doğrulama, test, key sync, code review, submodule commit'leri `iteration/develop`'a, push with rebase-retry, issue housekeeping, auto-unblock dependents — hepsini skill halleder
|
|
485
|
+
- Manuel commit YAPMA — skill her şeyi yönetir
|
|
486
|
+
3. Log: `📦 Phase 6: figma-iteration-commit — {ComponentName}`
|
|
487
|
+
|
|
488
|
+
#### my-app / generic
|
|
489
|
+
1. **Sor**: "Commit atmak ister misin?"
|
|
490
|
+
- **Hayır** → Pause, kullanıcı hazır olunca `resume` ile devam eder
|
|
491
|
+
- **Evet** → devam et:
|
|
492
|
+
2. Stage changes: `git add` with specific files (NOT `git add -A` — avoid committing .env, credentials, or other sensitive files)
|
|
493
|
+
3. Commit with convention: `{type}({scope}): {description} [PROJ-{id}]`
|
|
494
|
+
- Author: resolved from `prefs.global.identities[]` (e.g. `Ada Lovelace <ada@example.com>`) — NEVER hardcode.
|
|
495
|
+
4. Push to remote
|
|
496
|
+
5. **Sor**: "Pull Request açmak ister misin?"
|
|
497
|
+
- **Hayır** → Phase 7'ye geç (sadece commit + push yapılmış olur)
|
|
498
|
+
- **Evet** → PR oluştur (target: source branch)
|
|
499
|
+
6. **Issue body update** (if GitHub Issue exists):
|
|
500
|
+
- Fill PR links in issue body: `- **common:** {PR URL}`, `- **uicomponents:** {PR URL}`
|
|
501
|
+
- Update Progress flags: `Implementation 🟢`, `Testing 🟢`, `Code Connect 🟢`
|
|
502
|
+
- Use `gh issue edit {issueNo} --body "{updated body}"` — preserve all existing sections
|
|
503
|
+
7. Log: `📦 Phase 6: Commit {sha} — PR #{number}`
|
|
504
|
+
|
|
505
|
+
### Phase 7 Report Step 2: WIKI + Figma Screenshots (for component tasks with GitHub Issue)
|
|
506
|
+
|
|
507
|
+
Skip this sub-step if the task is NOT a component implementation (e.g., bug fix, refactor).
|
|
508
|
+
|
|
509
|
+
**Wiki submodule location**: `~/my-figma-app/TurkishAirlinesPackages/Packages/my-ui-components-wiki`
|
|
510
|
+
|
|
511
|
+
1. **Determine wiki path** from component location:
|
|
512
|
+
- `DesignSystemCore/SeatMap/SeatMapAircraftDetails/` → `{wikiRoot}/DesignSystemCore/SeatMap/SeatMapAircraftDetails/`
|
|
513
|
+
- Pattern: `{wikiRoot}/{category}/{ComponentName}/`
|
|
514
|
+
2. **Create directory**: `mkdir -p {wikiComponentPath}/assets`
|
|
515
|
+
3. **Fetch Figma screenshot** via REST API:
|
|
516
|
+
```bash
|
|
517
|
+
FIGMA_TOKEN=$(~/.copilot/lib/credential-store.sh get "Figma_Access_Token")
|
|
518
|
+
curl -s "https://api.figma.com/v1/images/{fileKey}?ids={nodeId}&format=png&scale=2" \
|
|
519
|
+
-H "X-Figma-Token: $FIGMA_TOKEN"
|
|
520
|
+
# Download the image URL to {wikiComponentPath}/assets/screenshot.png
|
|
521
|
+
```
|
|
522
|
+
4. **Generate main wiki page** (`{ComponentName}.md`):
|
|
523
|
+
- Follow existing wiki convention (see Tooltip.md, FileUploadFileDescription.md as references)
|
|
524
|
+
- Sections: title, screenshot embed, Figma link, Screen/Section/Size, Overview, Testing Identifiers, Localization Keys, Accessibility, Analytics Events, Sub-Components, Platform Implementations, Changelog
|
|
525
|
+
- Screenshot embed: `[[/{wikiCategory}/{ComponentName}/assets/screenshot.png|{ComponentName}]]`
|
|
526
|
+
5. **Generate iOS wiki page** (`{ComponentName}-iOS.md`):
|
|
527
|
+
- Sections: Initializer (with code), Parameters table, Modifiers, Usage examples, Design Tokens table, Testing Identifiers iOS, Code Connect status, Snapshot Tests (with image embeds), Test Coverage, Changelog
|
|
528
|
+
- Snapshot image embeds use `[[/{wikiCategory}/{ComponentName}/assets/ios_{variant}.png]]` format
|
|
529
|
+
- Note: actual snapshot images are generated when tests run in CI/locally
|
|
530
|
+
6. **Commit and push wiki**:
|
|
531
|
+
```bash
|
|
532
|
+
cd {wikiRoot}
|
|
533
|
+
git add {wikiCategory}/{ComponentName}/
|
|
534
|
+
git commit -m "docs({scope}): add {ComponentName} wiki pages [PROJ-{id}]"
|
|
535
|
+
git fetch origin && git rebase origin/master
|
|
536
|
+
git push origin HEAD:master
|
|
537
|
+
```
|
|
538
|
+
7. **Update issue Wiki flag**: Set `Wiki` → `🟢` in issue body
|
|
539
|
+
8. Log: `📖 Phase 7 Step 2: Wiki — {ComponentName}.md + {ComponentName}-iOS.md + screenshot`
|
|
540
|
+
|
|
541
|
+
### Phase 7: Report
|
|
542
|
+
1. Finalize `agent-log.md` with ALL sections:
|
|
543
|
+
- **Timeline table**: phase, agent, model, duration, status, detail
|
|
544
|
+
- **Agent Activity Report**: per-agent call count, total duration, models used, skill count
|
|
545
|
+
- **Token Tahmini**: estimated token usage per agent + total
|
|
546
|
+
- **Faz Bazlı Süre Dağılımı**: ASCII bar chart showing time per phase
|
|
547
|
+
- **Review İterasyonları**: blocking/important/suggestion counts per iteration
|
|
548
|
+
- **Files Changed**: `git diff --stat` output
|
|
549
|
+
- **Review Consensus**: final 🔴/🟡/🟢 status
|
|
550
|
+
- **Test Scenarios**: Turkish, for Jira (Ön koşul → Adımlar → Beklenen sonuç)
|
|
551
|
+
2. Print compact summary to terminal:
|
|
552
|
+
```
|
|
553
|
+
✅ PROJ-{id} complete
|
|
554
|
+
⏱️ Total: 3m 18s | Agents: 12 calls | Files: 4 changed
|
|
555
|
+
📦 Commit: abc1234 | PR: #87
|
|
556
|
+
📖 Wiki: {ComponentName}.md pushed to wiki master
|
|
557
|
+
📋 Full report: .worktrees/PROJ-{id}/agent-log.md
|
|
558
|
+
```
|
|
559
|
+
3. Log: `📋 Phase 7: Report complete`
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
## Log File Format
|
|
564
|
+
|
|
565
|
+
Create at `.worktrees/PROJ-{id}/agent-log.md`:
|
|
566
|
+
|
|
567
|
+
```markdown
|
|
568
|
+
# PROJ-{id} — {Task Title}
|
|
569
|
+
**Branch**: {branch-name}
|
|
570
|
+
**Project**: {my-ios-app | my-figma-app}
|
|
571
|
+
**Started**: {YYYY-MM-DD HH:mm}
|
|
572
|
+
**Finished**: {YYYY-MM-DD HH:mm}
|
|
573
|
+
**Total Duration**: {Xm Ys}
|
|
574
|
+
**Status**: 🔄 In Progress | ✅ Complete | ⏸️ Paused | ❌ Failed
|
|
575
|
+
|
|
576
|
+
## Timeline
|
|
577
|
+
|
|
578
|
+
| # | Phase | Agent | Model | Duration | Tokens (in/out) | Status | Detail |
|
|
579
|
+
|---|-------|-------|-------|----------|-----------------|--------|--------|
|
|
580
|
+
|
|
581
|
+
> `Tokens (in/out)` her satır için `phase-tracker.sh tokens` accumulator'ından beslenir. Token telemetrisi yoksa hücre `—` olarak basılır.
|
|
582
|
+
|
|
583
|
+
## Agent Activity Report
|
|
584
|
+
|
|
585
|
+
### Agent Kullanımı
|
|
586
|
+
| Agent | Çağrı Sayısı | Toplam Süre | Model(ler) | Skill Sayısı |
|
|
587
|
+
|-------|-------------|-------------|------------|-------------|
|
|
588
|
+
| explore | 3 | 12s | haiku | 0 |
|
|
589
|
+
| ios-architect | 1 | 8s | opus | 6 |
|
|
590
|
+
| code-reviewer | 3 | 37s | opus, gpt-5.4, sonnet | 5 each |
|
|
591
|
+
| security-auditor | 1 | 6s | sonnet | 4 |
|
|
592
|
+
| task (build) | 4 | 2m 15s | haiku | 0 |
|
|
593
|
+
| **TOPLAM** | **12** | **3m 18s** | | |
|
|
594
|
+
|
|
595
|
+
### Token Tahmini
|
|
596
|
+
| Kategori | Miktar |
|
|
597
|
+
|----------|--------|
|
|
598
|
+
| Ana agent (orchestrator) | ~{N}K tokens |
|
|
599
|
+
| Alt agent'lar (toplam) | ~{N}K tokens |
|
|
600
|
+
| **Toplam tahmini** | **~{N}K tokens** |
|
|
601
|
+
| Premium request sayısı | ~{N} |
|
|
602
|
+
|
|
603
|
+
> Token miktarları tahmindir. Kesin kullanım için `/usage` komutunu çalıştırın.
|
|
604
|
+
|
|
605
|
+
### Faz Bazlı Süre Dağılımı
|
|
606
|
+
```
|
|
607
|
+
Phase 0: Init ████░░░░░░░░░░░░ 5s
|
|
608
|
+
Phase 1: Analysis ██████░░░░░░░░░░ 12s
|
|
609
|
+
Phase 2: Planning █████░░░░░░░░░░░ 8s
|
|
610
|
+
Phase 3: Dev ████████████████ 2m 35s ← en uzun
|
|
611
|
+
Phase 4: Review ████████░░░░░░░░ 37s
|
|
612
|
+
Phase 5: Test ██░░░░░░░░░░░░░░ (kullanıcı bekleme)
|
|
613
|
+
Phase 6: Commit ██░░░░░░░░░░░░░░ 3s
|
|
614
|
+
Phase 7: Report ███░░░░░░░░░░░░░ 17s ← Jira + Wiki + Confluence + Log + Knowledge
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
### Review İterasyonları
|
|
618
|
+
| Iterasyon | Blocking | Important | Suggestion | Karar |
|
|
619
|
+
|-----------|----------|-----------|------------|-------|
|
|
620
|
+
| R1 | 0 | 1 | 2 | 🟡 fix + re-review |
|
|
621
|
+
| R2 | 0 | 0 | 1 | 🟢 pass |
|
|
622
|
+
|
|
623
|
+
## Files Changed
|
|
624
|
+
|
|
625
|
+
## Review Consensus
|
|
626
|
+
|
|
627
|
+
## Cost Breakdown
|
|
628
|
+
|
|
629
|
+
(Phase 7'de `pipeline/scripts/render-agent-log-cost.sh <task-id>` ile basılır. Tracker'da token verisi yoksa renderer exit 2 döner ve bu bölüm sessizce atlanır.)
|
|
630
|
+
|
|
631
|
+
| Phase | Model | Tokens in | Tokens out | Est. USD |
|
|
632
|
+
|-------|-------|-----------|------------|----------|
|
|
633
|
+
|
|
634
|
+
## Test Scenarios (Jira)
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
### Cost Breakdown — emit kontratı
|
|
638
|
+
|
|
639
|
+
Phase 7 agent-log compose adımı bu render'ı her zaman dener:
|
|
640
|
+
|
|
641
|
+
```bash
|
|
642
|
+
COST_BLOCK=$(bash pipeline/scripts/render-agent-log-cost.sh "$TASK_ID" 2>/dev/null) && \
|
|
643
|
+
printf '\n%s\n' "$COST_BLOCK" >> "$AGENT_LOG"
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
`reportContent.costSummary` ile bağımsız — agent-log her zaman taşır, PR/Jira gövdeleri opt-in. Renderer `cost-table.json`'u kullanır; fiyat güncellemesi tek noktadan iki yüzeye birden akar.
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
## SwiftUI Component Generation Guide (Generic)
|
|
651
|
+
|
|
652
|
+
When the task involves creating a SwiftUI component (any project, not just figma), follow this architecture:
|
|
653
|
+
|
|
654
|
+
### Component Architecture: Configuration / View / Modifiers
|
|
655
|
+
|
|
656
|
+
Every component produces up to 5 files:
|
|
657
|
+
|
|
658
|
+
| File | When | Content |
|
|
659
|
+
|------|------|---------|
|
|
660
|
+
| `{Name}Configuration.swift` | Complex (>3 props) | Pure value type, all declarative properties |
|
|
661
|
+
| `{Name}View.swift` | Always | SwiftUI view, renders Configuration |
|
|
662
|
+
| `{Name}+Modifiers.swift` | Complex | Fluent modifier API chain |
|
|
663
|
+
| `{Name}Preview.swift` | Always | All meaningful variant previews |
|
|
664
|
+
| `{Name}Tests.swift` | Always | ViewInspector + Unit tests |
|
|
665
|
+
|
|
666
|
+
### Configuration Purity Rule
|
|
667
|
+
|
|
668
|
+
Configuration structs hold ONLY declarative, value-type properties:
|
|
669
|
+
|
|
670
|
+
```swift
|
|
671
|
+
// ✅ CORRECT — pure value type
|
|
672
|
+
struct ButtonConfiguration {
|
|
673
|
+
var title: String = ""
|
|
674
|
+
var style: ButtonStyle = .primary
|
|
675
|
+
var isEnabled: Bool = true
|
|
676
|
+
var icon: Image? = nil
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
// ❌ WRONG — these do NOT belong in Configuration
|
|
680
|
+
// Closures → View property
|
|
681
|
+
// @Binding → View property
|
|
682
|
+
// @State → View property
|
|
683
|
+
// AnyView / @ViewBuilder → View generic parameter
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
### View Implementation
|
|
687
|
+
|
|
688
|
+
```swift
|
|
689
|
+
struct ButtonView: View {
|
|
690
|
+
let configuration: ButtonConfiguration
|
|
691
|
+
private var action: (() -> Void)? // closure lives in View, not Config
|
|
692
|
+
|
|
693
|
+
var body: some View {
|
|
694
|
+
Button(action: { action?() }) {
|
|
695
|
+
HStack(spacing: .Spacing.spacing8) {
|
|
696
|
+
if let icon = configuration.icon { icon }
|
|
697
|
+
Text(configuration.title)
|
|
698
|
+
.typographyStyle(.body1)
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
.disabled(!configuration.isEnabled)
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
### Modifier Pattern
|
|
707
|
+
|
|
708
|
+
```swift
|
|
709
|
+
extension ButtonView {
|
|
710
|
+
func title(_ value: String) -> ButtonView {
|
|
711
|
+
var config = configuration
|
|
712
|
+
config.title = value
|
|
713
|
+
return ButtonView(configuration: config)
|
|
714
|
+
}
|
|
715
|
+
func style(_ value: ButtonStyle) -> ButtonView {
|
|
716
|
+
var config = configuration
|
|
717
|
+
config.style = value
|
|
718
|
+
return ButtonView(configuration: config)
|
|
719
|
+
}
|
|
720
|
+
func onTap(_ action: @escaping () -> Void) -> ButtonView {
|
|
721
|
+
var view = self
|
|
722
|
+
view.action = action
|
|
723
|
+
return view
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
### Simple vs Complex Decision
|
|
729
|
+
|
|
730
|
+
| Criteria | Simple | Complex |
|
|
731
|
+
|----------|--------|---------|
|
|
732
|
+
| Properties | ≤3 | >3 |
|
|
733
|
+
| Configuration file | No — props in View directly | Yes — separate struct |
|
|
734
|
+
| +Modifiers file | No | Yes |
|
|
735
|
+
| View file | All-in-one | Renders Configuration |
|
|
736
|
+
|
|
737
|
+
### 3-Layer Test Strategy
|
|
738
|
+
|
|
739
|
+
| Layer | Tool | What It Validates |
|
|
740
|
+
|-------|------|-------------------|
|
|
741
|
+
| Structural | ViewInspector | Hierarchy, subview existence, applied modifiers |
|
|
742
|
+
| Visual | Snapshot Tests | Pixel-correct render: light/dark, RTL/LTR |
|
|
743
|
+
| Behavioral | Unit Tests | State changes, closures, configuration mutations |
|
|
744
|
+
|
|
745
|
+
### Component Checklist (Commit Öncesi)
|
|
746
|
+
|
|
747
|
+
1. Magic number yok — tüm değerler design token veya named constant
|
|
748
|
+
2. Configuration purity — Config'te side-effect veya view mantığı yok
|
|
749
|
+
3. Modifier doğruluğu — fluent API geçerli, paired modifier'lar View'da
|
|
750
|
+
4. Accessibility — her interaktif element'te accessibility label/trait
|
|
751
|
+
5. Preview — tüm anlamlı varyantlar preview'da
|
|
752
|
+
6. Test — structural + unit testler yazıldı
|
|
753
|
+
7. Dark mode — her iki renk şemasında doğru render
|
|
754
|
+
8. Dynamic Type — metin büyük boyutlarda layout kırılmadan ölçekleniyor
|
|
755
|
+
|
|
756
|
+
### Figma URL Verildiğinde
|
|
757
|
+
|
|
758
|
+
Eğer kullanıcı bir Figma URL verirse:
|
|
759
|
+
1. Figma MCP tools ile tasarım verisini çek (get_design_context, get_screenshot)
|
|
760
|
+
2. Design'daki renkleri, spacing'leri, typography'yi projenin token sistemine map et
|
|
761
|
+
3. Yukarıdaki Configuration/View/Modifiers pattern'ini uygula
|
|
762
|
+
4. Screenshot'u referans olarak kullan, kopyalama — projenin mevcut component'lerine adapte et
|
|
763
|
+
|
|
764
|
+
---
|
|
765
|
+
|
|
766
|
+
## Rules
|
|
767
|
+
|
|
768
|
+
- ❌ NEVER put "Copilot", "AI", "generated by" in code or commits
|
|
769
|
+
- ❌ NEVER commit without passing build
|
|
770
|
+
- ❌ NEVER commit without passing review
|
|
771
|
+
- ✅ Follow existing code style and conventions
|
|
772
|
+
- ✅ Use design tokens, no magic numbers
|
|
773
|
+
- ✅ Every public method must have tests
|
|
774
|
+
- ✅ Xcode header on new Swift files
|
|
775
|
+
- ✅ Commit message format:
|
|
776
|
+
- Jira var: `{type}({scope}): description [PROJ-{id}]`
|
|
777
|
+
- Jira yok (generic): `{type}({scope}): description [#{shortId}]`
|
|
778
|
+
- ✅ Git author: resolved from `prefs.global.identities[]` (e.g. `{identity.name} <{identity.email}>`) — NEVER hardcoded
|
|
779
|
+
|
|
780
|
+
---
|
|
781
|
+
|
|
782
|
+
## Skill Injection Strategy
|
|
783
|
+
|
|
784
|
+
Sub-agents have embedded skills in their `.agent.md` files. Each agent is pre-loaded with domain-specific knowledge:
|
|
785
|
+
|
|
786
|
+
### Agent ↔ Skill Matrix
|
|
787
|
+
|
|
788
|
+
| Agent | Embedded Skills | When Activated |
|
|
789
|
+
|-------|----------------|----------------|
|
|
790
|
+
| **code-reviewer** | Code Review Excellence, Security Audit, Performance Review, TDD Verification, Error Detective | Phase 4: Review |
|
|
791
|
+
| **ios-architect** | Spec-Driven Architecture, Context Management, Multi-Agent Coordination, API Design, Performance Architecture, Design System Governance | Phase 2: Planning |
|
|
792
|
+
| **security-auditor** | iOS Security Deep Dive, App Store Review Gates, Third-Party SDK Risk, Error Detective (Security) | Phase 1: Analysis (pre-check) + Phase 4: Review |
|
|
793
|
+
|
|
794
|
+
### Phase → Agent → Skills Flow
|
|
795
|
+
|
|
796
|
+
```
|
|
797
|
+
Phase 1: Analysis
|
|
798
|
+
├─ explore agents (no skills needed — pure file reading)
|
|
799
|
+
└─ security-auditor agent
|
|
800
|
+
└─ Skills: iOS Security Deep Dive, App Store Review Gates, SDK Risk
|
|
801
|
+
|
|
802
|
+
Phase 2: Planning
|
|
803
|
+
└─ ios-architect agent
|
|
804
|
+
└─ Skills: Spec-Driven Architecture, API Design, Performance Architecture
|
|
805
|
+
|
|
806
|
+
Phase 3: Dev
|
|
807
|
+
└─ Ana agent (reads copilot-instructions.md directly)
|
|
808
|
+
└─ TDD, token rules, code style — from global instructions
|
|
809
|
+
|
|
810
|
+
Phase 4: Review (parallel + triage)
|
|
811
|
+
Claude Code (2 parallel):
|
|
812
|
+
├─ code-reviewer (claude-opus) → all 5 review skills
|
|
813
|
+
└─ code-reviewer (claude-sonnet) → all 5 review skills
|
|
814
|
+
Copilot CLI (3 parallel):
|
|
815
|
+
├─ code-reviewer (gpt-5.4) → all 5 review skills
|
|
816
|
+
├─ code-reviewer (claude-opus) → all 5 review skills
|
|
817
|
+
└─ code-reviewer (claude-sonnet) → all 5 review skills
|
|
818
|
+
Triage (both): claude-opus over merged findings
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
### Context-Aware Skill Injection
|
|
822
|
+
|
|
823
|
+
When calling sub-agents, the ana agent SHOULD add task-specific context to the prompt:
|
|
824
|
+
|
|
825
|
+
```
|
|
826
|
+
For code-reviewer in Phase 4:
|
|
827
|
+
"Review this diff for PROJ-{id}. Focus areas based on analysis:
|
|
828
|
+
- {files changed summary from Phase 1}
|
|
829
|
+
- {architecture decisions from Phase 2}
|
|
830
|
+
- {specific risk areas identified}"
|
|
831
|
+
|
|
832
|
+
For ios-architect in Phase 2:
|
|
833
|
+
"Evaluate architecture for PROJ-{id}. Context:
|
|
834
|
+
- {task description from Jira/GitHub}
|
|
835
|
+
- {affected modules from Phase 1 analysis}
|
|
836
|
+
- {existing patterns found by explore agents}"
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
This ensures sub-agents get both their embedded skills AND task-specific context.
|
|
840
|
+
|
|
841
|
+
---
|
|
842
|
+
|
|
843
|
+
## Status Display Format
|
|
844
|
+
|
|
845
|
+
When `multi-agent status` is called, show:
|
|
846
|
+
|
|
847
|
+
```
|
|
848
|
+
🤖 Multi-Agent Tasks
|
|
849
|
+
|
|
850
|
+
| ID | Jira | Branch | Phase | Status | Duration |
|
|
851
|
+
|----|------|--------|-------|--------|----------|
|
|
852
|
+
| #1 | PROJ-12345 | feature/PROJ-12345-... | 3/7 Dev | ⚡ todo-2 in progress | 4m |
|
|
853
|
+
| #2 | PROJ-67890 | feature/PROJ-67890-... | 4/7 Review | 🔍 Waiting consensus | 7m |
|
|
854
|
+
| #3 | PROJ-11111 | feature/PROJ-11111-... | 7/7 DONE | ✅ Complete | 12m |
|
|
855
|
+
|
|
856
|
+
💡 kill #2 | log #1 | resume #3
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
---
|
|
860
|
+
|
|
861
|
+
## Help Display
|
|
862
|
+
|
|
863
|
+
When called with no args or `help`, detect project and show relevant usage with pipeline explanation:
|
|
864
|
+
|
|
865
|
+
First show how it works:
|
|
866
|
+
```
|
|
867
|
+
🤖 How it works (8 phases):
|
|
868
|
+
0. Init — Proje tespiti, worktree oluşturma, state dosyası
|
|
869
|
+
1. Analysis — Codebase tarama (paralel explore agent'lar, Opus)
|
|
870
|
+
2. Planning — Task breakdown, mimari review, kullanıcı onayı
|
|
871
|
+
3. Dev — TDD döngüsü: test yaz → kod yaz → build (Sonnet)
|
|
872
|
+
4. Review — Paralel review + Opus triage. Reviewer seti CLI'a göre:
|
|
873
|
+
• Claude Code → Opus + Sonnet (2 paralel)
|
|
874
|
+
• Copilot CLI → GPT-5.4 + Opus + Sonnet (3 paralel)
|
|
875
|
+
5. Test — Opsiyonel: branch'e geç, Xcode'da manual test
|
|
876
|
+
6. Commit — Commit + push + PR + issue body update (PR links + progress flags)
|
|
877
|
+
7. Report — Tek mantıksal faz (5 adım):
|
|
878
|
+
1) Jira comment (humanizer'dan geçmiş analiz + test senaryoları)
|
|
879
|
+
2) Component wiki + Figma screenshot + wiki push (component task'larda)
|
|
880
|
+
3) Opsiyonel Confluence sayfa güncellemesi
|
|
881
|
+
4) agent-log.md'ye detaylı rapor + Quality & Metrics + telemetri
|
|
882
|
+
5) Knowledge capture (architecture, patterns, gotchas) + memory
|
|
883
|
+
|
|
884
|
+
Her adım agent-log.md'ye loglanır. Herhangi bir fazda hata → pause.
|
|
885
|
+
resume ile kaldığı yerden devam eder.
|
|
886
|
+
```
|
|
887
|
+
|
|
888
|
+
Then show project-specific usage:
|
|
889
|
+
|
|
890
|
+
**my-ios-app:**
|
|
891
|
+
```
|
|
892
|
+
🤖 Multi-Agent Task Orchestrator (my-ios-app)
|
|
893
|
+
|
|
894
|
+
Usage:
|
|
895
|
+
multi-agent "PROJ-XXX" "branch-name" → Full pipeline → assigns #ID
|
|
896
|
+
multi-agent status → All tasks with #ID, phase, status
|
|
897
|
+
multi-agent log [#id] → View task log
|
|
898
|
+
multi-agent resume [#id] → Resume paused task
|
|
899
|
+
multi-agent kill [#id] → Stop + delete worktree/branch/logs
|
|
900
|
+
multi-agent clear-logs → Delete all logs, keep worktrees
|
|
901
|
+
multi-agent purge → ⚠️ Full reset: delete everything
|
|
902
|
+
multi-agent review → Review current diff only
|
|
903
|
+
|
|
904
|
+
Example: multi-agent "PROJ-12345" "feature/PROJ-12345-flight-filter"
|
|
905
|
+
```
|
|
906
|
+
|
|
907
|
+
**my-figma-app:**
|
|
908
|
+
```
|
|
909
|
+
🤖 Multi-Agent Task Orchestrator (figma)
|
|
910
|
+
|
|
911
|
+
Usage:
|
|
912
|
+
multi-agent "github-issue-url" → Full pipeline from issue
|
|
913
|
+
multi-agent status → All tasks with #ID, phase, status
|
|
914
|
+
multi-agent log [#id] → View task log
|
|
915
|
+
multi-agent resume [#id] → Resume paused task
|
|
916
|
+
multi-agent kill [#id] → Stop + delete worktree/branch/logs
|
|
917
|
+
multi-agent clear-logs → Delete all logs, keep worktrees
|
|
918
|
+
multi-agent purge → ⚠️ Full reset: delete everything
|
|
919
|
+
multi-agent review → Review current diff only
|
|
920
|
+
|
|
921
|
+
Example: multi-agent "https://github.com/my-org/my-figma-app/issues/316"
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
**generic (any iOS project):**
|
|
925
|
+
```
|
|
926
|
+
🤖 Multi-Agent Task Orchestrator (generic)
|
|
927
|
+
|
|
928
|
+
Usage:
|
|
929
|
+
multi-agent "bug/feature description" → Full pipeline from free-text
|
|
930
|
+
multi-agent "github-issue-url" → Full pipeline from issue
|
|
931
|
+
multi-agent "PROJ-XXX" "branch-name" → Full pipeline with Jira
|
|
932
|
+
multi-agent status → All tasks with #ID, phase, status
|
|
933
|
+
multi-agent log [#id] → View task log
|
|
934
|
+
multi-agent resume [#id] → Resume paused task
|
|
935
|
+
multi-agent kill [#id] → Stop + delete worktree/branch/logs
|
|
936
|
+
multi-agent clear-logs → Delete all logs, keep worktrees
|
|
937
|
+
multi-agent purge → ⚠️ Full reset: delete everything
|
|
938
|
+
multi-agent review → Review current diff only
|
|
939
|
+
|
|
940
|
+
Example: multi-agent "LoginView'da dark mode'da buton rengi gorunmuyor"
|
|
941
|
+
```
|
|
942
|
+
|
|
943
|
+
Pipeline: Init → Analysis → Planning → Development → Review → User Test → Commit → Wiki → Report
|
|
944
|
+
Each step logged to: .worktrees/{task-id}/agent-log.md
|