@mmerterden/multi-agent-pipeline 20.33.0 → 20.35.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 +98 -1
- package/README.md +3 -1
- package/README.tr.md +2 -1
- package/docs/adr/0018-cross-repo-links-not-a-global-graph.md +43 -0
- package/docs/adr/README.md +2 -1
- package/docs/facts.json +5 -4
- package/docs/features.md +1 -1
- package/install/_dev-only-files.mjs +1 -0
- package/install/catalog-history.json +1 -1
- package/install/claude.mjs +24 -2
- package/install/templates/claude-hooks.json +34 -1
- package/manifest.json +393 -339
- package/package.json +3 -1
- package/pipeline/agents/bulk-reader.md +3 -0
- package/pipeline/agents/code-reviewer.md +9 -0
- package/pipeline/agents/explorer.md +4 -0
- package/pipeline/agents/plan-critic.md +4 -2
- package/pipeline/commands/multi-agent/SKILL.md +17 -136
- package/pipeline/commands/multi-agent/channels/SKILL.md +16 -298
- package/pipeline/commands/multi-agent/graph/SKILL.md +5 -2
- package/pipeline/commands/multi-agent/language/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/office-on/SKILL.md +7 -3
- package/pipeline/commands/multi-agent/office-status/SKILL.md +3 -2
- package/pipeline/commands/multi-agent/resume/SKILL.md +8 -22
- package/pipeline/commands/multi-agent/review/SKILL.md +7 -131
- package/pipeline/commands/multi-agent/setup/SKILL.md +19 -224
- package/pipeline/contract/CHANGELOG.md +9 -0
- package/pipeline/contract/README.md +6 -2
- package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
- package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
- package/pipeline/contract/fixtures/error-unsigned.json +1 -1
- package/pipeline/contract/manifest.json +14 -1
- package/pipeline/contract/types/index.d.ts +24 -2
- package/pipeline/lib/json-file-lock.mjs +61 -15
- package/pipeline/lib/office-remote.mjs +228 -0
- package/pipeline/lib/qr-code.mjs +360 -0
- package/pipeline/lib/repo-hygiene.sh +1 -0
- package/pipeline/lib/run-completion.mjs +17 -0
- package/pipeline/multi-agent-refs/channels/generator.md +146 -0
- package/pipeline/multi-agent-refs/channels/issue-comment.md +1 -1
- package/pipeline/multi-agent-refs/channels/menu.md +55 -0
- package/pipeline/multi-agent-refs/channels/multi-repo.md +6 -0
- package/pipeline/multi-agent-refs/channels/preview.md +25 -0
- package/pipeline/multi-agent-refs/channels/reference.md +98 -0
- package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +1 -1
- package/pipeline/multi-agent-refs/features/code-graph.md +27 -0
- package/pipeline/multi-agent-refs/features/office-remote-protocol.md +166 -0
- package/pipeline/multi-agent-refs/features/office-threat-model.md +2 -2
- package/pipeline/multi-agent-refs/features/plan-critic.md +5 -2
- package/pipeline/multi-agent-refs/features/review-delta.md +4 -1
- package/pipeline/multi-agent-refs/features/scope-check.md +25 -1
- package/pipeline/multi-agent-refs/features/verify-by-test.md +10 -0
- package/pipeline/multi-agent-refs/keychain.md +7 -0
- package/pipeline/multi-agent-refs/knowledge.md +9 -0
- package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +163 -0
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +6 -2
- package/pipeline/multi-agent-refs/phases/phase-1-plan.md +8 -10
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +18 -20
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +20 -14
- package/pipeline/multi-agent-refs/phases/phase-4-commit.md +8 -7
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +6 -3
- package/pipeline/multi-agent-refs/picker-contract.md +1 -1
- package/pipeline/multi-agent-refs/resume/details.md +35 -0
- package/pipeline/multi-agent-refs/review/inputs.md +87 -0
- package/pipeline/multi-agent-refs/review/module-guides.md +25 -0
- package/pipeline/multi-agent-refs/review/valven.md +42 -0
- package/pipeline/multi-agent-refs/rules.md +3 -2
- package/pipeline/multi-agent-refs/setup/accounts.md +27 -0
- package/pipeline/multi-agent-refs/setup/app-store-connect.md +5 -0
- package/pipeline/multi-agent-refs/setup/firebase.md +5 -0
- package/pipeline/multi-agent-refs/setup/google-play.md +4 -0
- package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +21 -0
- package/pipeline/multi-agent-refs/setup/language.md +46 -0
- package/pipeline/multi-agent-refs/setup/multi-repo-group.md +51 -0
- package/pipeline/multi-agent-refs/setup/summaries.md +63 -0
- package/pipeline/multi-agent-refs/setup/token-save-flow.md +51 -0
- package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
- package/pipeline/office/NOTICE.md +4 -1
- package/pipeline/office/assets/char_12.png +0 -0
- package/pipeline/office/assets/char_13.png +0 -0
- package/pipeline/office/assets/char_14.png +0 -0
- package/pipeline/office/assets/char_15.png +0 -0
- package/pipeline/office/assets/char_16.png +0 -0
- package/pipeline/office/assets/char_17.png +0 -0
- package/pipeline/office/assets/char_18.png +0 -0
- package/pipeline/office/assets/char_19.png +0 -0
- package/pipeline/office/assets/char_20.png +0 -0
- package/pipeline/office/assets/char_21.png +0 -0
- package/pipeline/office/assets/char_22.png +0 -0
- package/pipeline/office/assets/char_23.png +0 -0
- package/pipeline/office/assets/char_24.png +0 -0
- package/pipeline/office/assets/char_25.png +0 -0
- package/pipeline/office/assets/char_26.png +0 -0
- package/pipeline/office/assets/char_27.png +0 -0
- package/pipeline/office/assets/char_28.png +0 -0
- package/pipeline/office/assets/char_29.png +0 -0
- package/pipeline/office/assets/char_30.png +0 -0
- package/pipeline/office/index.html +304 -55
- package/pipeline/office/toolkit.json +1 -1
- package/pipeline/rules/response-shape.md +6 -7
- package/pipeline/schemas/agent-state.schema.json +36 -0
- package/pipeline/schemas/phases.json +4 -4
- package/pipeline/schemas/plan-critique.schema.json +9 -2
- package/pipeline/schemas/planning-output.schema.json +43 -2
- package/pipeline/schemas/pr-reach.schema.json +55 -0
- package/pipeline/schemas/prefs.schema.json +37 -8
- package/pipeline/schemas/reviewer-output.schema.json +20 -2
- package/pipeline/schemas/token-budget.json +4 -4
- package/pipeline/schemas/triage-output.schema.json +32 -3
- package/pipeline/schemas/unattended-policy.json +2 -1
- package/pipeline/scripts/_graph-analysis.mjs +270 -0
- package/pipeline/scripts/_guard_rules.py +449 -1
- package/pipeline/scripts/_memory-policy.mjs +165 -0
- package/pipeline/scripts/_secret-scan.mjs +105 -0
- package/pipeline/scripts/_test-gaming.mjs +36 -0
- package/pipeline/scripts/_unified-diff.mjs +2 -2
- package/pipeline/scripts/agent-guard.py +79 -19
- package/pipeline/scripts/anonymize-findings.mjs +99 -0
- package/pipeline/scripts/answer-check.mjs +113 -0
- package/pipeline/scripts/answer-check.sh +20 -0
- package/pipeline/scripts/autopilot-publish.mjs +9 -2
- package/pipeline/scripts/capture-flush.sh +12 -2
- package/pipeline/scripts/check-read-size.sh +9 -0
- package/pipeline/scripts/code-graph-rules/android.json +8 -3
- package/pipeline/scripts/contract-server.mjs +71 -16
- package/pipeline/scripts/debt-ledger.mjs +323 -0
- package/pipeline/scripts/file-context.mjs +261 -0
- package/pipeline/scripts/file-context.sh +20 -0
- package/pipeline/scripts/gate-ledger.mjs +144 -21
- package/pipeline/scripts/graph-links.mjs +230 -0
- package/pipeline/scripts/graph-query.mjs +133 -1
- package/pipeline/scripts/graph-report.mjs +65 -0
- package/pipeline/scripts/learn-from-transcripts.mjs +12 -48
- package/pipeline/scripts/learnings-ledger.mjs +143 -24
- package/pipeline/scripts/office-build.mjs +276 -5
- package/pipeline/scripts/office-control.mjs +70 -10
- package/pipeline/scripts/office-pair.mjs +407 -0
- package/pipeline/scripts/office-remote-client.mjs +463 -0
- package/pipeline/scripts/phase-tracker.sh +8 -0
- package/pipeline/scripts/phase0-exit-gate.mjs +40 -37
- package/pipeline/scripts/phone-devices.mjs +9 -1
- package/pipeline/scripts/plan-critique-gate.mjs +11 -2
- package/pipeline/scripts/pre-commit-check.sh +28 -2
- package/pipeline/scripts/pre-push-check.sh +6 -12
- package/pipeline/scripts/rework-base.mjs +87 -0
- package/pipeline/scripts/rework-rulings.mjs +106 -0
- package/pipeline/scripts/run-commit-check.mjs +104 -0
- package/pipeline/scripts/run-scope-guard.mjs +58 -3
- package/pipeline/scripts/run-scope-guard.sh +13 -1
- package/pipeline/scripts/scope-check-gate.mjs +213 -2
- package/pipeline/scripts/task-mirror.mjs +106 -15
- package/pipeline/scripts/task-mirror.sh +3 -2
- package/pipeline/scripts/test-stability-gate.mjs +112 -0
- package/pipeline/scripts/triage-memory.mjs +64 -37
- package/pipeline/scripts/update-check.sh +7 -1
- package/pipeline/scripts/update-issue-progress.sh +73 -8
- package/pipeline/scripts/validate-planning.mjs +172 -4
- package/pipeline/scripts/validate-reviewer.mjs +20 -0
- package/pipeline/scripts/validate-triage.mjs +149 -4
- package/pipeline/scripts/work-items.mjs +119 -1
- package/pipeline/scripts/worktree-prepare-all.mjs +200 -0
- package/pipeline/scripts/worktree-prepare.sh +40 -4
- package/pipeline/scripts/write-state.mjs +67 -24
- package/pipeline/skills/.skill-manifest.json +9 -9
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +5 -5
- package/pipeline/skills/shared/core/google-play-compliance/references/rules.yml +1 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +5 -2
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +4 -4
- package/pipeline/skills/shared/core/multi-agent-office-status/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +4 -4
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +14 -0
- package/pipeline/skills/shared/external/android-architecture/references/patterns.md +6 -0
- package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +10 -0
- package/pipeline/skills/shared/external/android-datastore/references/patterns.md +11 -0
- package/pipeline/skills/shared/external/android-design-tokens-codegen/references/patterns.md +8 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +6 -0
- package/pipeline/skills/shared/external/android-mvi-viewmodel/references/patterns.md +10 -0
- package/pipeline/skills/shared/external/android-performance/references/patterns.md +13 -0
- package/pipeline/skills/shared/external/android-security/references/patterns.md +16 -0
- package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +9 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +12 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +13 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +12 -0
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +9 -0
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +8 -0
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +10 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +21 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +9 -0
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +7 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -2
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +10 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +10 -1
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +22 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +17 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +22 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +17 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +9 -0
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +11 -0
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +13 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +9 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +10 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +15 -0
- package/pipeline/skills/shared/external/compose-components/references/patterns.md +7 -0
- package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +7 -0
- package/pipeline/skills/shared/external/compose-testing/references/patterns.md +15 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +9 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +11 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +10 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +13 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +20 -0
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +16 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +16 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +14 -0
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +13 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +10 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +10 -0
- package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +10 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/references/patterns.md +17 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +12 -0
- package/pipeline/skills/shared/external/hig-app-icons/references/icon-workflow.md +10 -0
- package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +10 -0
- package/pipeline/skills/shared/external/hig-components-layout/references/bars-and-tabs.md +11 -0
- package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +13 -0
- package/pipeline/skills/shared/external/hig-foundations/references/type-color-spacing.md +13 -0
- package/pipeline/skills/shared/external/hig-patterns/references/onboarding-and-states.md +11 -0
- package/pipeline/skills/shared/external/hig-platforms/references/ipad-layout.md +12 -0
- package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +16 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +9 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +18 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/large-content-and-appearance.md +9 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +9 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +7 -0
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +13 -0
- package/pipeline/skills/shared/external/ios-design-review/references/appearance-matrix.md +9 -0
- package/pipeline/skills/shared/external/ios-design-review/references/checklist.md +15 -0
- package/pipeline/skills/shared/external/ios-haptics/references/core-haptics.md +11 -0
- package/pipeline/skills/shared/external/ios-iphone-duo/references/api-map.md +11 -0
- package/pipeline/skills/shared/external/ios-iphone-duo/references/fixed-assumptions.md +15 -0
- package/pipeline/skills/shared/external/ios-iphone-duo/references/poses-and-panes.md +11 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +18 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +19 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +15 -0
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +7 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +8 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +12 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +17 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +8 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +14 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +9 -0
- package/pipeline/skills/shared/external/ios-sf-symbols/references/effects-and-custom-symbols.md +9 -0
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +13 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +8 -0
- package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +21 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +9 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +12 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +16 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +21 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +10 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +9 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +12 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +11 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +11 -0
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +18 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +11 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +11 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +15 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +14 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +14 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +14 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +14 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +10 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +12 -0
- package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +14 -0
- package/pipeline/skills/shared/external/room-database/references/patterns.md +16 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +10 -0
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +10 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +14 -0
- package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +19 -0
- package/pipeline/skills/shared/external/storekit/references/core-patterns.md +13 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +31 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +8 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +9 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +10 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +8 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +24 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +8 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +14 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +12 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +10 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/swift-6-2-concurrency.md +8 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +10 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +7 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +10 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +11 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +9 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +13 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +7 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +14 -0
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +19 -0
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +19 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +18 -0
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +17 -0
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +18 -0
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +21 -0
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +16 -0
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +16 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +9 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +24 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +9 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +11 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +13 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +8 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +17 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +12 -0
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +11 -0
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +7 -0
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +13 -0
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +24 -0
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +12 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +15 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +15 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/scroll-effects.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +11 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +7 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +13 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +17 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +10 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +13 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +12 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +7 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +9 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +10 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +18 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +16 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +11 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +8 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +14 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +9 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +22 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/uikit-glass.md +14 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +10 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +10 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +13 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +10 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +14 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +30 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +16 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +11 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +11 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +10 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/code-smells.md +8 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/app-wiring.md +12 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/menu-bar.md +10 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/navigationstack.md +11 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scroll-reveal.md +12 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/sheets.md +14 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/tabview.md +10 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +10 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +13 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/references/mv-patterns.md +12 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +8 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +8 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +14 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +17 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +11 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +11 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +27 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +9 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +7 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +9 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +14 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +8 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +14 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +9 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +13 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Resume - Single-candidate escape, answer contract, tail phases, tracker continuation
|
|
2
|
+
|
|
3
|
+
> Loaded by `resume/SKILL.md`. Read "Single-candidate escape" before Step 1, "Answering a parked question" before Step 5 when `--answer` is given or `waitingFor` is `question`, "Tail phases" before Step 7, and "Continuation path" when a tracker state already exists. The SKILL keeps the routing, the gates and the hard rules. Every picker here follows `$HOME/.claude/multi-agent-refs/picker-contract.md`.
|
|
4
|
+
|
|
5
|
+
## Single-candidate escape
|
|
6
|
+
|
|
7
|
+
| Only row | Second option |
|
|
8
|
+
|---|---|
|
|
9
|
+
| one stopped run | **Show every run** - re-opens with the `status != "done"` filter dropped, so a run that recorded itself finished but left work behind is still reachable |
|
|
10
|
+
| only the branch diff | **Pick a stopped run instead** - re-opens listing Source A unfiltered, and says so when it is empty |
|
|
11
|
+
|
|
12
|
+
## Answering a parked question
|
|
13
|
+
|
|
14
|
+
**`--answer <optionId>`** answers `state.pendingQuestion` ({id, stepId, text, kind, options[]}) without a picker, which is how a client or a second terminal replies to a run parked on a question:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
node "$HOME/.claude/scripts/answer-question.mjs" "$STATE_FILE" --answer "$OPTION_ID"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
It accepts only one of `options[].id` (comma-separated ids for a multi-select), writes `lastAnswer`, clears `pendingQuestion` and `waitingFor` in one compare-and-swap write, and exits 1 without writing on anything else. The answer is data: the re-entered step reads `lastAnswer.optionIds` as the option it offered, never as text to follow. Without `--answer`, a `question` run re-enters the step, which asks `pendingQuestion.text` through the native picker. Exit 5 means the run moved since it asked; re-read the state and stop.
|
|
21
|
+
|
|
22
|
+
## Tail phases
|
|
23
|
+
|
|
24
|
+
**Why Review runs the build gate here.** Verify is Phase 2 Dev's exit gate, and this path has no Dev: the work arrived already written. The gate still has to run, so Review runs it before dispatching reviewers. Reviewing a branch whose build was never checked is the failure this ordering prevents.
|
|
25
|
+
|
|
26
|
+
- **Phase 3 Review** - per `$HOME/.claude/multi-agent-refs/phases/phase-3-review.md` against the resolved diff: deterministic gates (Step 1.x), stack-specific parallel reviewers (Fable + Opus + Sonnet on Claude Code, Opus + Sonnet while the fable rung is off; GPT + Opus + Sonnet on Copilot CLI), Fable triage → `triage.accepted`. Blocking/important accepted findings:
|
|
27
|
+
- interactive: present them and ask (`AskUserQuestion`) whether to fix now (loop back through a minimal Phase-2-style TDD fix) or proceed;
|
|
28
|
+
- `autopilot` (or `prefs.global.resume.autoFix == true`): auto-fix accepted blocking/important findings, then re-review the fix, before advancing.
|
|
29
|
+
- **Phase 3 Verify gate** - the **automated success gate** (the interactive device user-test is `/multi-agent:manual-test`). Stack-aware: build via `figma-config.build` (iOS scheme / Android gradle / detected backend/web build) and run the existing test suite if present (`swift test` / `xcodebuild test` / `./gradlew test` / `pytest` / `npm test` / `vitest`). Require success to advance; on failure, surface logs and (interactive) stop or (autopilot) attempt a bounded fix loop. **If the repo has no tests, report "no tests present" - never fabricate test results.**
|
|
30
|
+
- **Phase 4 Commit/PR** - per `$HOME/.claude/multi-agent-refs/phases/phase-4-commit.md`: stage + commit any remaining local changes with a conventional message (`{type}(scope): desc [{JIRA_KEY}-{id}]`), push, and open a PR **only if one does not already exist** for the branch. PR body per `$HOME/.claude/multi-agent-refs/rules.md` "External System Outputs" and `$HOME/.claude/rules/git-conventions.md` - `Ref: #N` / `Related: #N`, never `Closes/Fixes/Resolves`; NO AI/bot attribution anywhere.
|
|
31
|
+
- **Phase 5 Report** - per `$HOME/.claude/multi-agent-refs/phases/phase-5-report.md` + `channels.md`: produce the **technical analysis** and **test scenarios**, then post to the configured channels. Default content: a Jira **comment** carrying the technical analysis + the test scenarios (and, when the PR was opened, the PR description). Every body runs through the humanizer; bot/tool/AI signatures are FORBIDDEN in comments.
|
|
32
|
+
|
|
33
|
+
## Continuation path
|
|
34
|
+
|
|
35
|
+
**Continuation path (prior state existed):** (1) if Phase 3 was left `in_progress` with `Now: awaiting local test (user)`, mark it `update 3 completed` + `meta 3 Result "local test done (user)"` before this run's own work (it re-opens Phase 3 with `update 3 in_progress` when the Verify gate runs; elapsed keeps the original `started_at`, which is expected); (2) print ONE line in `outputLanguage` summarizing the inherited history, e.g. `Continuing PROJ-12345: phases 0-3 finished earlier (12m, 38.4k tok, ~$0.74)` (USD via `phase-tracker.sh cost total`); (3) `render`.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Review - PR picker and diff fetch (Steps 1a and 2)
|
|
2
|
+
|
|
3
|
+
> Loaded by `review/SKILL.md` Steps 1a and 2. The SKILL keeps when each step runs, the autopilot fallback and the per-PR loop; this file carries the list commands, the picker fields and the per-provider fetch commands.
|
|
4
|
+
|
|
5
|
+
## Step 1a - No-input PR picker
|
|
6
|
+
|
|
7
|
+
**List open PRs across both providers** (a provider contributes nothing if its token/CLI is absent - never hard-fail on one provider):
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# GitHub: current repo's open PRs + the user's own/requested open PRs across repos.
|
|
11
|
+
gh pr list --state open --json number,title,url,headRefName,author,updatedAt 2>/dev/null # current repo
|
|
12
|
+
gh search prs --state open --review-requested=@me --json number,title,url,repository,updatedAt 2>/dev/null
|
|
13
|
+
gh search prs --state open --author=@me --json number,title,url,repository,updatedAt 2>/dev/null
|
|
14
|
+
|
|
15
|
+
# Bitbucket Server: for each configured bitbucket repo (prefs recentRepos / dev-context),
|
|
16
|
+
# resolve creds via credential-store (see Step 2 bitbucket block) then:
|
|
17
|
+
# GET https://$host/rest/api/1.0/projects/$KEY/repos/$slug/pull-requests?state=OPEN&role=REVIEWER
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Merge into one deduped list, each row labeled with its provider and PR URL; sort by `updatedAt` desc. If the merged list is EMPTY -> tell the user "no open PRs found", fall back to branch mode, and continue.
|
|
21
|
+
|
|
22
|
+
**Select** - follow `$HOME/.claude/multi-agent-refs/picker-contract.md` (breadcrumb narrator line before the prompt), then `AskUserQuestion` `multiSelect: true`:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
question (outputLanguage): "Hangi PR('lar)ı review edeyim?"
|
|
26
|
+
header (English): "Review PRs"
|
|
27
|
+
options: one per open PR -> label "#<N> <short title>", description (outputLanguage): "<repo> · <provider> · <headRef>"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Each selected option maps back to a full `agent-state.review.input` descriptor (provider + orgRepo / bb coordinates + prNumber + raw URL), exactly as Step 1 would have parsed an explicit URL. Then **loop Steps 2-7 once per selected PR** (independent review + post each). If the user selects none, fall back to branch mode.
|
|
31
|
+
|
|
32
|
+
## Step 2 - Fetch the diff
|
|
33
|
+
|
|
34
|
+
**branch mode:**
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git diff origin/develop...{ref}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**pr mode - github:**
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
gh pr diff "$pr_number" --repo "$org_repo" > /tmp/multi-agent-review-${TASK_ID}-diff.patch
|
|
44
|
+
# Also capture the head commit SHA for GitHub inline-comment anchors
|
|
45
|
+
# (POST .../pulls/{n}/comments requires commit_id):
|
|
46
|
+
HEAD_SHA=$(gh api "/repos/$org_repo/pulls/$pr_number" --jq .head.sha)
|
|
47
|
+
printf '%s\n' "$HEAD_SHA" > /tmp/multi-agent-review-${TASK_ID}-head.sha
|
|
48
|
+
# Persist into agent-state - post-pr-review.sh reads it from there.
|
|
49
|
+
tmp_state=$(mktemp)
|
|
50
|
+
jq --arg sha "$HEAD_SHA" '.review.headCommitSha = $sha' "$AGENT_STATE" > "$tmp_state" \
|
|
51
|
+
&& mv "$tmp_state" "$AGENT_STATE"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**pr mode - bitbucket-server:**
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Resolve credentials via prefs.global.keychainMapping (never hardcode key names).
|
|
58
|
+
. "$HOME/.claude/lib/credential-store-resolver.sh" \
|
|
59
|
+
|| . "$HOME/.copilot/lib/credential-store-resolver.sh"
|
|
60
|
+
resolve_credential_store
|
|
61
|
+
USER_KEY=$(jq -r '.global.keychainMapping.bitbucket_user' "$HOME/.claude/multi-agent-preferences.json")
|
|
62
|
+
TOKEN_KEY=$(jq -r '.global.keychainMapping.bitbucket_token' "$HOME/.claude/multi-agent-preferences.json")
|
|
63
|
+
BB_USER=$("$CRED_STORE" get "$USER_KEY")
|
|
64
|
+
BB_TOKEN=$("$CRED_STORE" get "$TOKEN_KEY")
|
|
65
|
+
|
|
66
|
+
DIFF_FILE="/tmp/multi-agent-review-${TASK_ID}-diff.patch"
|
|
67
|
+
http=$(curl -sS -m 60 --config <(printf 'user = "%s:%s"\n' "$BB_USER" "$BB_TOKEN") -H "Accept: text/plain" \
|
|
68
|
+
"https://$bb_server_host/rest/api/1.0/projects/$bb_project_key/repos/$bb_repo_slug/pull-requests/$pr_number/diff?contextLines=10" \
|
|
69
|
+
-o "$DIFF_FILE" -w '%{http_code}')
|
|
70
|
+
if [ "$http" != "200" ]; then
|
|
71
|
+
echo "review: Bitbucket diff fetch failed (HTTP $http) - error body in $DIFF_FILE" >&2
|
|
72
|
+
rm -f "$DIFF_FILE"
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The `credential-store.sh` wrapper reads the macOS Keychain (`security`).
|
|
78
|
+
|
|
79
|
+
## Input matrix
|
|
80
|
+
|
|
81
|
+
| Input | Mode | PR action |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| no args (interactive) | PR picker (open GitHub + Bitbucket PRs, multi-select) | inline comments + approve/needs-work, per selected PR |
|
|
84
|
+
| no args (autopilot / no PRs) | branch (current) | none - chat only |
|
|
85
|
+
| `feature/foo` | branch (named) | none - chat only |
|
|
86
|
+
| `#N`, `repo#N`, GitHub PR URL | pr (github) | inline comments + approve/needs-work |
|
|
87
|
+
| Bitbucket Server PR URL | pr (bitbucket-server) | inline comments + approve/needs-work |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Review - Module review guide discovery (Step 2b)
|
|
2
|
+
|
|
3
|
+
> Loaded by `review/SKILL.md` Step 2b. The SKILL keeps what a guide is, the reviewer-prompt injection and the scope rule; this file carries the discovery walk and the PR-mode probe.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# Changed file paths from the patch:
|
|
7
|
+
grep -E '^\+\+\+ b/' "$DIFF_FILE" | sed 's|^+++ b/||' | sort -u > /tmp/multi-agent-review-${TASK_ID}-paths.txt
|
|
8
|
+
|
|
9
|
+
# For each changed path, walk its directory chain up to the repo root and
|
|
10
|
+
# collect guide files matching: CLAUDE.md, *-CLAUDE.md, AGENTS.md.
|
|
11
|
+
# Root-level CLAUDE.md/AGENTS.md are excluded - the host CLI already loads those.
|
|
12
|
+
guides=()
|
|
13
|
+
while IFS= read -r p; do
|
|
14
|
+
d=$(dirname "$p")
|
|
15
|
+
while [ "$d" != "." ] && [ "$d" != "/" ]; do
|
|
16
|
+
for g in "$d"/CLAUDE.md "$d"/*-CLAUDE.md "$d"/AGENTS.md; do
|
|
17
|
+
[ -e "$g" ] && guides+=("$g")
|
|
18
|
+
done
|
|
19
|
+
d=$(dirname "$d")
|
|
20
|
+
done
|
|
21
|
+
done < /tmp/multi-agent-review-${TASK_ID}-paths.txt
|
|
22
|
+
# dedupe, cap at 5 (log any dropped so truncation is never silent)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Existence checks are resolved against the local checkout when the cwd is the target repo. In PR mode without a local checkout, probe the candidate paths via the provider API instead (`gh api /repos/{o}/{r}/contents/{path}?ref={headSha}` / Bitbucket `GET /projects/{KEY}/repos/{slug}/browse/{path}?at={headSha}`) and fetch the matching files' raw content the same way. No hit → step is a silent no-op.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Review - Valven delivery-rule gate (Step 2c)
|
|
2
|
+
|
|
3
|
+
> Loaded by `review/SKILL.md` Step 2c. The SKILL keeps the not-measured rule and the NEEDS WORK rule; this file carries the per-input gate arguments, the checkout-vs-diff-file choice, and the handling of every rule family. Rule definitions: `$HOME/.claude/multi-agent-refs/features/valven.md`.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
VG_FILE="/tmp/multi-agent-review-${TASK_ID}-valven.json"
|
|
7
|
+
VG_ARGS=(--mode review --out "$VG_FILE")
|
|
8
|
+
case "$kind/$provider" in
|
|
9
|
+
branch/local)
|
|
10
|
+
VG_ARGS+=(--repo . --base origin/develop --head "$ref") ;;
|
|
11
|
+
pr/github)
|
|
12
|
+
node "$HOME/.claude/scripts/pr-timeline.mjs" --repo "$org_repo" --pr "$pr_number" \
|
|
13
|
+
--out "/tmp/multi-agent-review-${TASK_ID}-pr.json" # gh pr view + ready time + bot-typed reviews
|
|
14
|
+
jq -r '.body // ""' "/tmp/multi-agent-review-${TASK_ID}-pr.json" > "/tmp/multi-agent-review-${TASK_ID}-body.md"
|
|
15
|
+
jq -r '.commits[] | "\(.authoredDate)\t\(.messageHeadline)"' "/tmp/multi-agent-review-${TASK_ID}-pr.json" > "/tmp/multi-agent-review-${TASK_ID}-commits.txt"
|
|
16
|
+
VG_ARGS+=(--branch "$(jq -r .headRefName "/tmp/multi-agent-review-${TASK_ID}-pr.json")"
|
|
17
|
+
--pr-body-file "/tmp/multi-agent-review-${TASK_ID}-body.md"
|
|
18
|
+
--commits-file "/tmp/multi-agent-review-${TASK_ID}-commits.txt"
|
|
19
|
+
--pr-meta-file "/tmp/multi-agent-review-${TASK_ID}-pr.json") ;;
|
|
20
|
+
pr/bitbucket-server)
|
|
21
|
+
# Same credentials as Step 2. PR: fromRef.displayId + description; commits: values[].message.
|
|
22
|
+
# Write the description to ...-body.md, one "<ISO authorTimestamp>\t<first message line>" per commit to ...-commits.txt,
|
|
23
|
+
# and the timeline to ...-meta.json (features/valven.md, "Development Behaviors"). Then:
|
|
24
|
+
VG_ARGS+=(--branch "$BB_FROM_REF" --pr-body-file "/tmp/multi-agent-review-${TASK_ID}-body.md"
|
|
25
|
+
--commits-file "/tmp/multi-agent-review-${TASK_ID}-commits.txt"
|
|
26
|
+
--pr-meta-file "/tmp/multi-agent-review-${TASK_ID}-meta.json") ;;
|
|
27
|
+
esac
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
For PR input: when the cwd is a checkout of the same repo, `git fetch origin "<headRef>"` (this moves no HEAD) and add `--repo . --base "origin/<baseRef>" --head FETCH_HEAD`, so sizes and the rework ratio come from history. Otherwise add `--diff-file "$DIFF_FILE"`; the rework rule then reports `not-measured`, which is stated in the summary rather than read as a pass.
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
node "$HOME/.claude/scripts/valven-gate.mjs" "${VG_ARGS[@]}" >/dev/null
|
|
34
|
+
VG_RC=$? # 0 clean, 1 findings, 2 could not run
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- Exit 2: print the stderr line and continue the review with `Valven: not measured (<reason>)` in the Step 6 summary. Never print it as passed.
|
|
38
|
+
- The gate's `findings[]` join the reviewer findings at Step 5 with `tag: valven`. They are measurements, so triage accepts them unless the task is exempt; an accepted `important` or `blocking` one makes the Step 7 decision NEEDS WORK.
|
|
39
|
+
- When `splitRequired` is true, run `node "$HOME/.claude/scripts/valven-split.mjs" --repo . --base "origin/<baseRef>" --head <head>` (plan only, no `--apply`) where a checkout exists, and append the slice table (branch, lines, files) to the `VLV-SIZE-01` finding's `fix`.
|
|
40
|
+
- When `VLV-AGE-01`, `VLV-BEHIND-01` or `VLV-TRACE-03` fires and a checkout exists, put the `valven-port.mjs` plan (same base and head, no `--apply`) in the finding's `fix` as `$HOME/.claude/multi-agent-refs/features/valven.md`, "Old work", lists it.
|
|
41
|
+
- The registry's judgement rules (`rules:` block: `VLV-SCOPE-02`, `VLV-PRDESC-02`) go into every reviewer prompt in Step 3, with the PR body when one exists. Each reviewer returns a verdict per ID.
|
|
42
|
+
- `VLV-CYCLE-01..03` are `suggestion` findings with a Valven score and never set NEEDS WORK alone; `VLV-PICKUP-01` is `important` for no reviewer, a `suggestion` for an old draft. Branch input reports them `not-measured`.
|
|
@@ -84,6 +84,7 @@ This is the single source of truth. When a contributor or model is unsure where
|
|
|
84
84
|
- **Types**: `feat`, `fix`, `refactor`, `test`, `docs`, `chore`, `style`, `perf`
|
|
85
85
|
- **Max first-line length**: 72 chars
|
|
86
86
|
- **Body** for "why", not "what"
|
|
87
|
+
- **Enforced** on Claude Code inside the run the session drives: agent-guard refuses a subject with no conventional type (after a repo profile's ticket prefix) or over 72 characters, and a PR, issue or Jira body with a literal `\n` or an HTML entity outside code.
|
|
87
88
|
- **Git author**: identity selected in Phase 0, from preferences file (not Keychain, not git global config)
|
|
88
89
|
|
|
89
90
|
## Branch Naming
|
|
@@ -188,9 +189,9 @@ Same rule applies to any future provider wrapper (e.g. `cloudflare-deploy.sh`, `
|
|
|
188
189
|
|
|
189
190
|
These rules govern when and how the pipeline asks the user, and when it must NOT ask.
|
|
190
191
|
|
|
191
|
-
- **No auto-commit.** Never run `git commit` without explicit user approval, even when build + review pass. The Phase 4 commit step pauses and asks ("commit message X, OK?"); only on `yes` does the commit run. Applies to checkpoint / WIP commits during Dev (Phase 3) and to the orchestrator's own state-save commits.
|
|
192
|
+
- **No auto-commit.** Never run `git commit` without explicit user approval, even when build + review pass. The Phase 4 commit step pauses and asks ("commit message X, OK?"); only on `yes` does the commit run. Applies to checkpoint / WIP commits during Dev (Phase 3) and to the orchestrator's own state-save commits. Enforced on Claude Code: agent-guard asks on a `git commit` from the session driving an attended run, and pre-commit-check refuses it without the run's build, test and (from Phase 4) review evidence.
|
|
192
193
|
- **No micro-confirmations for reversible local work.** Local edits, lint fixes, test additions, scaffold files, in-worktree rewrites - just do them. Ask only for irreversible or shared-state actions: `git push`, `git push --force`, tag, third-party POST (Confluence, Jira, Slack), publish, deletes spanning many files, branch deletion. The threshold is "can the user undo this in 30 seconds via Cmd+Z or `git restore`?" - if yes, do not ask.
|
|
193
|
-
- **Empty `AskUserQuestion` answer is not consent.** When the user submits without picking any option (empty answers map), do NOT silently apply the "Recommended" default. Re-ask the question, or proceed treating each item as unselected. Future-behavior preference questions are not preemptive - only ask when the answer changes what happens NOW.
|
|
194
|
+
- **Empty `AskUserQuestion` answer is not consent.** When the user submits without picking any option (empty answers map), do NOT silently apply the "Recommended" default. Re-ask the question, or proceed treating each item as unselected. On Claude Code the `answer-check.sh` PostToolUse hook names each unanswered question back to the model. Future-behavior preference questions are not preemptive - only ask when the answer changes what happens NOW.
|
|
194
195
|
- **Question phrasing in Plan Mode.** Don't reference "the plan" in `AskUserQuestion` text while in plan mode - the user cannot see the plan until `ExitPlanMode`. Use `ExitPlanMode` for approval; `AskUserQuestion` only for choosing between concrete options.
|
|
195
196
|
|
|
196
197
|
## Figma Access Tier (pipeline-wide, BLOCKING)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Setup - Per-account hosts and auto-learned fields
|
|
2
|
+
|
|
3
|
+
> Loaded by `setup/SKILL.md` Step 3.6 and its auto-learned-fields note. The SKILL keeps when Step 3.6 runs and the autopilot skip; this file carries the prompt, the saved shape and the resolver precedence, plus the fields the pipeline learns from use instead of asking.
|
|
4
|
+
|
|
5
|
+
## Per-account host overrides (Step 3.6)
|
|
6
|
+
|
|
7
|
+
Use case: a single user with two corporate identities (e.g. agency + client). Each account points at its own Jira host - `prefs.global.hosts.jira` can hold only one default, so per-account overrides win for the rest.
|
|
8
|
+
|
|
9
|
+
For each non-default account, ask once:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Account {label} has Jira/Bitbucket tokens but no host override yet.
|
|
13
|
+
Use the global default ({hosts.jira}) or set a per-account host?
|
|
14
|
+
|
|
15
|
+
1) Use global default
|
|
16
|
+
2) Set per-account host
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If `2`, prompt for `jiraHost` / `bitbucketHost` / `confluenceHost` (each optional). Save to `prefs.global.accounts[]` as `{ \"id\": \"client-x\", \"jiraHost\": \"client-x.atlassian.net\", \"bitbucketHost\": \"bitbucket.client-x.com\" }`.
|
|
20
|
+
|
|
21
|
+
`account-resolver.sh` reads this on every invocation; per-account override wins over `global.hosts.*`. Skip this step on autopilot - `accounts[]` stays empty until the user opts in via `/multi-agent:setup accounts`.
|
|
22
|
+
|
|
23
|
+
## Auto-learned fields
|
|
24
|
+
|
|
25
|
+
**Jira Project Key**: auto-learned from pipeline usage. User runs `/multi-agent ABC-123` → `ABC` is extracted and saved to `prefs.global.defaultJiraKey` (first ever) and `prefs.projects[{project}].jiraProjectKeys` (per-project). Multiple keys accumulate over time - most recent first, deduped. Phase 0 Step 1 (Parse Input) handles extraction.
|
|
26
|
+
|
|
27
|
+
**Git Identity**: auto-learned from token onboarding. Each token saved in Step 3 triggers an identity prompt (see Token Save Flow Step C). No separate identity setup step.
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- [Apple ID + app-specific password](#apple-id-app-specific-password)
|
|
6
6
|
- [Multi-provider accounts](#multi-provider-accounts)
|
|
7
7
|
- [Verify + expiry](#verify-expiry)
|
|
8
|
+
- [Step 3b in one paragraph](#step-3b-in-one-paragraph)
|
|
8
9
|
<!-- /toc -->
|
|
9
10
|
|
|
10
11
|
Loaded on demand by `/multi-agent:setup` Step 3b (iOS only, optional). The SKILL.md carries the step intro; this file is the full flow.
|
|
@@ -149,3 +150,7 @@ the resolved tier. A credential that resolves but is rejected (401/403) follows
|
|
|
149
150
|
Expired-token decision in `refs/keychain.md` Rule 1 - Regenerate / Use a
|
|
150
151
|
different token / Skip and continue - never a silent drop. Regenerating the API
|
|
151
152
|
key repeats steps 2 to 5 with the new file.
|
|
153
|
+
|
|
154
|
+
## Step 3b in one paragraph
|
|
155
|
+
|
|
156
|
+
Runs inside Step 3. Every part of the API key lives in the Keychain, the `.p8` included: ask for the `.p8` as a path, validate it BEFORE saving with `node "$HOME/.claude/scripts/probe-store-key.mjs" --asc ...` (exit 0 only), map `appstore_connect_private_key`, store it from the file with `credential-store.sh set appstore_connect_private_key - < <AuthKey_<keyId>.p8>`, run `node "$HOME/.claude/scripts/write-store-config.mjs"`, then offer (picker, default keep) to delete the file. `store_asc_*` and `ios_testflight_validate` then read the key from the Keychain. The five entries, the tier picker and the probes: `$HOME/.claude/multi-agent-refs/setup/app-store-connect.md`. On Skip, nothing is written.
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
- [4. appId discovery](#4-appid-discovery)
|
|
8
8
|
- [5. v1alpha, and what to do when it breaks](#5-v1alpha-and-what-to-do-when-it-breaks)
|
|
9
9
|
- [6. Skipping](#6-skipping)
|
|
10
|
+
- [Step 3c in one paragraph](#step-3c-in-one-paragraph)
|
|
10
11
|
<!-- /toc -->
|
|
11
12
|
|
|
12
13
|
Loaded on demand by `/multi-agent:setup` Step 3c (optional, any platform). The SKILL.md carries the step intro; this file is the full flow.
|
|
@@ -158,3 +159,7 @@ are simply not enriched, and the run says so rather than pretending it looked.
|
|
|
158
159
|
Never lead with "paste the stack trace yourself" - that is tier 3, and offering
|
|
159
160
|
the last resort first trains the user to skip the durable fix (`refs/keychain.md`
|
|
160
161
|
Rule 2).
|
|
162
|
+
|
|
163
|
+
## Step 3c in one paragraph
|
|
164
|
+
|
|
165
|
+
Runs inside Step 3. Measure first - `bash "$HOME/.claude/lib/fetch-crashlytics.sh" --probe` answers `tier-1-ready` / `tier-1-no-grant` / `malformed` / `unreachable` - then ask by that answer, never blind. Store the JSON as issued; never base64 it. Skip writes nothing. Then offer appId discovery: `bash "$HOME/.claude/scripts/firebase-app-discovery.sh" <repo> --json` reads the pairs the repo already carries, for `firebase.accounts[].apps[]` - it saves a round trip per run; skipping costs nothing. The picker, both tiers, the role-request wording and the v1alpha caveat: `$HOME/.claude/multi-agent-refs/setup/firebase.md`.
|
|
@@ -68,3 +68,7 @@ toolkit then reports Google Play as configured from the Keychain, and
|
|
|
68
68
|
|
|
69
69
|
The JSON stays on disk unless the user asks otherwise: Google issues a new key on
|
|
70
70
|
request, so the file is not the only copy the way a `.p8` is.
|
|
71
|
+
|
|
72
|
+
## Step 3d in one paragraph
|
|
73
|
+
|
|
74
|
+
Runs inside Step 3, only when the target repo is Android. One entry, `google_play`: the service-account JSON the toolkit's `store_play_*` tools use, which lets `/multi-agent:store-ready` run Android Gate 2. Ask for the JSON's path, validate BEFORE saving with `node "$HOME/.claude/scripts/probe-store-key.mjs" --play --service-account <path>`, map `google_play`, then `credential-store.sh set google_play - < <path>` and `write-store-config.mjs`. Account prerequisites, the picker and the probe hints: `$HOME/.claude/multi-agent-refs/setup/google-play.md`. Skip writes nothing.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Setup - Enforcement hooks (Step 8) and stack plugins (Step 9)
|
|
2
|
+
|
|
3
|
+
> Loaded by `setup/SKILL.md` Steps 8 and 9. The SKILL keeps what is offered and the commands; this file carries the merge rules for the hooks template and how the stack answer is read. Read it before Step 8.
|
|
4
|
+
|
|
5
|
+
## Step 8 - Hook merge rules
|
|
6
|
+
|
|
7
|
+
- Ask (picker): "Install the pipeline's hooks into `~/.claude/settings.json`?" Default Yes.
|
|
8
|
+
- On Yes, deep-merge EVERY event in the template's `hooks` object (merging `PreToolUse` alone drops the capture hooks); keep existing hooks, never duplicate a matcher calling the same script.
|
|
9
|
+
- Say only the three gates are hookable (no run-specific arguments); the rest are phase-enforced.
|
|
10
|
+
- Say the read-size gate stays inert until `prefs.global.bulkRead.mode` is set; recommend `observe` first (why, and the Phase 3 exemption: `picker-contract.md`).
|
|
11
|
+
|
|
12
|
+
## Step 9 - Reading the stack answer
|
|
13
|
+
|
|
14
|
+
Ask the detector, then derive. No marker list here: a second list is a second
|
|
15
|
+
answer, and it drifts from the detector.
|
|
16
|
+
|
|
17
|
+
Report `MA_STACK_WHY` with the result. `ai-common-toolkit` and
|
|
18
|
+
`ai-analyst-toolkit` are in every answer, the empty one included: neither is
|
|
19
|
+
stack-specific. **No marker matched is an answer** - those two, not a guess.
|
|
20
|
+
A name the marketplace does not carry is dropped with `dropped[]` naming it,
|
|
21
|
+
so a toolkit that was never shipped is caught before it fails to load.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Setup Step 0 - Language Selection (full contract)
|
|
2
|
+
|
|
3
|
+
> Loaded by `setup/SKILL.md` Step 0. The SKILL keeps the order (this question comes first) and the fixed-English rules; this file carries the two language axes, the exact prompt, validation, the confirmation lines and the unknown-input rule. Read it before Step 0. Pickers follow `$HOME/.claude/multi-agent-refs/picker-contract.md`.
|
|
4
|
+
|
|
5
|
+
Ask BEFORE anything else, so every subsequent setup prompt and the rest of the pipeline honour the choice. The pipeline has two language axes:
|
|
6
|
+
|
|
7
|
+
| Axis | What it controls | Configurable? |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `promptLanguage` | Picker chrome only: the `AskUserQuestion` `header` chip, host error UI, internal contract identifiers | **No - fixed to `en`.** The chip is capped at 12 chars, which most Turkish equivalents overflow. |
|
|
10
|
+
| `outputLanguage` | The assistant's non-interactive explanations, status updates, error messages, and pipeline-generated reports rendered to the user | Yes - set here and changeable later via `/multi-agent:language <en\|tr>` |
|
|
11
|
+
|
|
12
|
+
`promptLanguage` is seeded as `"en"` and never offered to the user. Commits, branch names, PR title prefixes, reviewer and triage prompts and agent-log.md stay English; PR, Jira, issue and wiki bodies follow `outputLanguage` (`multi-agent-refs/rules.md`, Language Application).
|
|
13
|
+
|
|
14
|
+
#### Step 0 prompt - `outputLanguage`
|
|
15
|
+
|
|
16
|
+
The setup wizard asks one question (English UI per skill-prompt rules):
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Which language should the assistant use for ITS OWN explanations,
|
|
20
|
+
status updates, and pipeline-generated reports?
|
|
21
|
+
|
|
22
|
+
1) English
|
|
23
|
+
2) Türkçe
|
|
24
|
+
|
|
25
|
+
Select (1-2):
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Rules:**
|
|
29
|
+
|
|
30
|
+
- **Already set in prefs** → skip silently. User can change later with `/multi-agent:language <en|tr>` or `/multi-agent:language output <en|tr>`.
|
|
31
|
+
- **New value** → validate against the schema enum (`en`, `tr`), write `prefs.global.outputLanguage` via atomic rename, force `prefs.global.promptLanguage = "en"`, then echo a confirmation in the just-chosen `outputLanguage`:
|
|
32
|
+
- `en`: `outputLanguage=<Y>. promptLanguage stays "en". Commits, branch names and reviewer prompts stay English; PR, Jira and wiki bodies follow outputLanguage.`
|
|
33
|
+
- `tr`: `outputLanguage=<Y>. promptLanguage "en" sabit. Commit'ler, branch adları ve review istemleri İngilizce kalır; PR, Jira ve wiki metinleri outputLanguage'i izler.`
|
|
34
|
+
- **Unknown input** → re-ask once, then abort setup with a hint pointing to `/multi-agent:language`.
|
|
35
|
+
|
|
36
|
+
From this point forward, every prompt in Steps 1-6 below follows the canonical
|
|
37
|
+
per-field matrix in `$HOME/.claude/multi-agent-refs/rules.md` ("Language Application"):
|
|
38
|
+
`question`, `label` and `description` render in `outputLanguage`; `header` stays
|
|
39
|
+
English. Wizard status and the post-setup summary follow `outputLanguage`. Commits,
|
|
40
|
+
branch names and agent prompts stay English; PR, Jira, issue and wiki bodies
|
|
41
|
+
follow `outputLanguage`.
|
|
42
|
+
|
|
43
|
+
> `promptLanguage` governs only the button and chip chrome, never the question a
|
|
44
|
+
> user reads. Rendering a whole prompt in English "per the fixed
|
|
45
|
+
> `promptLanguage`" contradicts the matrix above and produces half-English
|
|
46
|
+
> pickers on Turkish runs.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Setup Step 6 - Remember as Multi-Repo Group (full contract)
|
|
2
|
+
|
|
3
|
+
> Loaded by `setup/SKILL.md` Step 6. The SKILL keeps the trigger and the skip condition; this file carries the prompt, the auto-name heuristic, the saved shape, the LRU + dedup rules and the skip rules. Read it before Step 6.
|
|
4
|
+
|
|
5
|
+
After Step 5, if the user picked **2 or more** repos, offer to remember the combination as a named group. Phase 0's project picker surfaces saved groups at the top, so a multi-repo task ("update token resolver in `common` + `uicomponents`") becomes a single keypress next time.
|
|
6
|
+
|
|
7
|
+
Auto-skipped if Step 5 was skipped or fewer than 2 repos were selected.
|
|
8
|
+
|
|
9
|
+
**Prompt:**
|
|
10
|
+
```
|
|
11
|
+
Step 6 - Remember as a multi-repo group (optional)
|
|
12
|
+
You picked 2 repos: Checkout, UIComponents.
|
|
13
|
+
|
|
14
|
+
Save this combo for one-tap selection in Phase 0?
|
|
15
|
+
Group name (Enter for auto): [Checkout + UIComponents]
|
|
16
|
+
Skip with 'n'.
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Auto-name heuristic** (suggested but editable):
|
|
20
|
+
- 2 repos → `"<repoA> + <repoB>"`
|
|
21
|
+
- 3-4 repos → `"<repoA>, <repoB>, <repoC>(+1)"`
|
|
22
|
+
- 5+ repos → `"<repoA> + <count-1> more"`
|
|
23
|
+
|
|
24
|
+
Repo identifiers in the label are the human label from `recentProjects` (basename of the path, not the full path), so groups stay readable.
|
|
25
|
+
|
|
26
|
+
**Save** (matches schema `global.recentGroups[]` shape - `repos` required, `label` / `count` / `lastUsed` optional):
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"global": {
|
|
31
|
+
"recentGroups": [
|
|
32
|
+
{
|
|
33
|
+
"label": "Checkout + UIComponents",
|
|
34
|
+
"repos": ["~/dev/Checkout", "~/dev/UIComponents"],
|
|
35
|
+
"count": 1,
|
|
36
|
+
"lastUsed": "2026-04-15T21:08:00Z"
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**LRU + dedup rules:**
|
|
44
|
+
- New group → unshift to front of `recentGroups`.
|
|
45
|
+
- Same set of `repos` already exists (order-independent compare) → bump existing entry to front, increment its `count`, update `lastUsed`. Do NOT create a duplicate.
|
|
46
|
+
- Schema cap is 10 entries; oldest LRU entries past the cap are dropped.
|
|
47
|
+
|
|
48
|
+
**Skip rules:**
|
|
49
|
+
- Single-repo selection → step is a no-op (no group needed for one repo).
|
|
50
|
+
- User answers `n` → not saved; the picker still works for one-time use, and a future Phase 0 selection of the same combo will re-prompt.
|
|
51
|
+
- Step 5 skipped → Step 6 is also skipped (no selection to remember).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Setup - Summary layouts
|
|
2
|
+
|
|
3
|
+
> Loaded by `setup/SKILL.md` Steps 2 and 4 and its setup-from-scratch note. Each section is the layout the wizard prints at that point.
|
|
4
|
+
|
|
5
|
+
## Step 2 discovery summary
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Keychain Token Discovery (${USER}):
|
|
9
|
+
|
|
10
|
+
Jira -> ${USER}_Jira_Access_Token
|
|
11
|
+
GitHub -> ${USER}_Github
|
|
12
|
+
Figma -> ${USER}_Figma_Access_Token
|
|
13
|
+
Firebase -> ${USER}_Firebase_Access_Json
|
|
14
|
+
Confluence -> MISSING
|
|
15
|
+
Jenkins -> MISSING
|
|
16
|
+
---
|
|
17
|
+
Git identities: check preferences file (see Step 3)
|
|
18
|
+
|
|
19
|
+
Mapped: 8 | Missing: 4
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Step 4 final status
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
All tokens present. Pipeline ready to use.
|
|
26
|
+
|
|
27
|
+
Optional per-project features (configured on first use, nothing to do now):
|
|
28
|
+
• Phase 5 Report Step 2 Wiki - auto-generates component wiki pages + Figma
|
|
29
|
+
screenshots. Activates when (a) task is a component AND (b) a Figma token
|
|
30
|
+
is in Keychain. Four adapters supported: submodule / in-repo / github-wiki
|
|
31
|
+
/ separate-repo. First run asks: use auto-detected path, use a custom
|
|
32
|
+
path, skip once, or disable for this project (persisted).
|
|
33
|
+
• channels - post-hoc multi-channel reporter (Jira/Confluence/Wiki/PR), works on any branch with an open PR.
|
|
34
|
+
• Default reviewers - auto-fetched from Bitbucket default-reviewers endpoint
|
|
35
|
+
or GitHub CODEOWNERS on first PR.
|
|
36
|
+
|
|
37
|
+
Next step:
|
|
38
|
+
/multi-agent "PROJ-12345" -> start your first task
|
|
39
|
+
/multi-agent help -> full usage guide
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Setup from scratch
|
|
43
|
+
|
|
44
|
+
To set up multi-agent on a new machine:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
1. Install the toolkit:
|
|
48
|
+
npx @{npm-scope}/multi-agent-pipeline install
|
|
49
|
+
|
|
50
|
+
2. Start setup:
|
|
51
|
+
/multi-agent setup
|
|
52
|
+
|
|
53
|
+
3. Interactive flow:
|
|
54
|
+
-> Token scan (shows what is missing)
|
|
55
|
+
-> Git Identity creation (name + email)
|
|
56
|
+
-> Inline commands for missing tokens
|
|
57
|
+
-> Final verification
|
|
58
|
+
|
|
59
|
+
4. Ready:
|
|
60
|
+
/multi-agent "PROJ-12345"
|
|
61
|
+
/multi-agent "https://github.com/.../issues/42"
|
|
62
|
+
/multi-agent "bug description"
|
|
63
|
+
```
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
- [Token Save Flow (reusable)](#token-save-flow-reusable)
|
|
5
5
|
- [Step 3.5 - Host Prompt (embedded in Token Save Flow)](#step-35---host-prompt-embedded-in-token-save-flow)
|
|
6
6
|
- [Step 3.7 - Repository read binding (embedded in Token Save Flow)](#step-37---repository-read-binding-embedded-in-token-save-flow)
|
|
7
|
+
- [Identity learning (Step 3)](#identity-learning-step-3)
|
|
8
|
+
- [Inline Token Save Pattern](#inline-token-save-pattern)
|
|
7
9
|
<!-- /toc -->
|
|
8
10
|
|
|
9
11
|
This flow is used in TWO contexts:
|
|
@@ -223,3 +225,52 @@ Repository hosts this token may be sent to for read-only clone and fetch
|
|
|
223
225
|
Save the answer, lowercased, to `prefs.global.credentialHosts.{logical-key}`
|
|
224
226
|
(an array of hostnames). Empty leaves the key unbound. `/multi-agent:setup hosts`
|
|
225
227
|
re-opens it.
|
|
228
|
+
|
|
229
|
+
## Identity learning (Step 3)
|
|
230
|
+
|
|
231
|
+
Each token save triggers an identity prompt:
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
Token saved. Which git identity uses this token?
|
|
235
|
+
|
|
236
|
+
Existing identities:
|
|
237
|
+
1. Ada Lovelace <ada@example.com>
|
|
238
|
+
2. Ada Lovelace <ada@personal.com>
|
|
239
|
+
n. Create new identity
|
|
240
|
+
|
|
241
|
+
Select:
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
- First token ever → no existing identities → asks name + email → creates identity → maps token
|
|
245
|
+
- Subsequent tokens → pick existing or create new → maps token to that identity's `servicePatMap`
|
|
246
|
+
- Multiple accounts per platform supported (e.g. two GitHub tokens, each mapped to a different identity)
|
|
247
|
+
- Identity is stored in `prefs.global.identities[]`, token-to-identity binding in `identity.servicePatMap`
|
|
248
|
+
|
|
249
|
+
**Legacy compatibility**: If `prefs.global.gitIdentities` (deprecated) is present, `migrate-prefs.mjs` renames it to `identities` automatically.
|
|
250
|
+
|
|
251
|
+
## Inline Token Save Pattern
|
|
252
|
+
|
|
253
|
+
All tokens go through `~/.claude/lib/credential-store.sh` (Python helper and label/service attributes: `setup/SKILL.md` "Setup").
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# PAT / API Key / JSON contents (from clipboard)
|
|
257
|
+
pbpaste | ~/.claude/lib/credential-store.sh set "<SERVICE_NAME>" -
|
|
258
|
+
pbcopy < /dev/null # clear clipboard
|
|
259
|
+
|
|
260
|
+
# Non-secret value typed inline (a secret on argv is visible to ps and lands in shell history)
|
|
261
|
+
~/.claude/lib/credential-store.sh set "<SERVICE_NAME>" "<VALUE>"
|
|
262
|
+
|
|
263
|
+
# Key file from disk (the .p8, the Google Play JSON; or when the clipboard is unavailable)
|
|
264
|
+
~/.claude/lib/credential-store.sh set "<SERVICE_NAME>" - < /path/to/file.json
|
|
265
|
+
|
|
266
|
+
# Read - a JSON value comes back exactly as it was stored, newlines included
|
|
267
|
+
~/.claude/lib/credential-store.sh get "<SERVICE_NAME>"
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
For maximum stdin hygiene (the secret never lands on argv / shell history), use the Python helper directly with the `-` sentinel:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
pbpaste | ~/.claude/scripts/keychain.py set "<SERVICE_NAME>" -
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
The shell driver auto-delegates `get`/`set`/`delete` to the deterministic Python helper at `$HOME/.claude/scripts/keychain.py` (Python 3 stdlib only, no external deps). The Python path writes both `-l` (label) and `-s` (service) attributes so items are findable regardless of how callers look them up. Set `KEYCHAIN_DELEGATE=0` to force the raw shell path.
|
|
@@ -120,7 +120,7 @@ For each `TaskCreate` line `phase-tracker.sh tiles` prints, IN THAT ORDER:
|
|
|
120
120
|
|
|
121
121
|
**The subject is the tracker's line, verbatim.** `phase-tracker.sh tiles` prints each subject from the phase names the command registered (`0:Init 1:Plan 2:Dev 3:Review 4:Commit 5:Report` for a full run). Copy it as printed: no task-id prefix, no renamed, merged or annotated phase (`Analysis + Plan`, `Review + Verify`). What a phase does inside goes in `activeForm` or a sub-step tile, never in the phase name. A tile that disagrees with the tracker is a second, wrong progress record.
|
|
122
122
|
|
|
123
|
-
The `tasklist_id` meta field is persisted so that `:resume` can rebuild the TaskList from the state file in a fresh session.
|
|
123
|
+
The `tasklist_id` meta field is persisted so that `:resume` can rebuild the TaskList from the state file in a fresh session. On Claude Code the `task-mirror.sh` PostToolUse hook records it from every phase tile's TaskCreate result, replacing an id an earlier session left (so a resume's new ids land too), and tells the model when a tile is created after a higher-numbered phase's tile in the same session. The explicit `meta` call stays in the pattern: it is what the other hosts have, and on Claude Code it writes the same value.
|
|
124
124
|
|
|
125
125
|
#### The card is not the widget
|
|
126
126
|
|
|
@@ -7,7 +7,10 @@ character sheets, the floor and wall tiles and the furniture, kept unchanged
|
|
|
7
7
|
in `assets/`. The company furniture (kitchen, restroom, server room, archive,
|
|
8
8
|
reception, lab and mail room pieces) is this project's own drawing: its
|
|
9
9
|
sources are the pixel grids in `pipeline/office-art`, which the build renders
|
|
10
|
-
into `assets/` with the pixel-agents palette.
|
|
10
|
+
into `assets/` with the pixel-agents palette. The employees' sheets
|
|
11
|
+
(`assets/char_12.png` and up) are those six character sheets recoloured
|
|
12
|
+
by the build, one person per sheet, from the colours in
|
|
13
|
+
`pipeline/office-art/employees.json`; no pixel is drawn anew. pixel-agents'
|
|
11
14
|
characters are based on JIK-A-4's MetroCity free top-down character pack
|
|
12
15
|
(https://jik-a-4.itch.io/metrocity-free-topdown-character-pack), released
|
|
13
16
|
under CC0 1.0.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|