@mmerterden/multi-agent-pipeline 14.2.1 → 14.2.2
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 +42 -0
- package/README.md +10 -6
- package/README.tr.md +143 -0
- package/docs/architecture.md +23 -8
- package/docs/ecosystem.md +237 -0
- package/install/_plugin-skills.mjs +16 -2
- package/install/codex.mjs +9 -4
- package/install/templates/copilot-instructions.md +12 -9
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/analysis/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/channels/SKILL.md +15 -4
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/dev/SKILL.md +10 -23
- package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +10 -2
- package/pipeline/commands/multi-agent/dev-local/SKILL.md +10 -24
- package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +10 -3
- package/pipeline/commands/multi-agent/jira/SKILL.md +13 -2
- package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/local/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/log/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/ship/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/sync/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/update/SKILL.md +1 -1
- package/pipeline/lib/extract-conventions.sh +44 -15
- package/pipeline/lib/fetch-figma-annotations.sh +8 -1
- package/pipeline/lib/fetch-fortify.sh +23 -8
- package/pipeline/lib/figma-screenshot.sh +11 -1
- package/pipeline/lib/issue-fetcher.sh +76 -9
- package/pipeline/lib/md2confluence-v3.py +16 -2
- package/pipeline/lib/plan-todos.sh +5 -2
- package/pipeline/lib/post-pr-review.sh +8 -6
- package/pipeline/lib/shadow-git.sh +50 -9
- package/pipeline/lib/submodule-detector.sh +8 -1
- package/pipeline/multi-agent-refs/_input-parser.md +1 -1
- package/pipeline/multi-agent-refs/channels/confluence.md +3 -0
- package/pipeline/multi-agent-refs/channels/issue-comment.md +2 -2
- package/pipeline/multi-agent-refs/channels/jira.md +13 -2
- package/pipeline/multi-agent-refs/channels/pr-review-actions.md +1 -1
- package/pipeline/multi-agent-refs/channels/pr.md +20 -0
- package/pipeline/multi-agent-refs/channels/wiki.md +1 -1
- package/pipeline/multi-agent-refs/cross-cli-contract.md +3 -3
- package/pipeline/multi-agent-refs/features/worktree-finalize.md +1 -1
- package/pipeline/multi-agent-refs/generate-issue.md +2 -2
- package/pipeline/multi-agent-refs/issue-jira-triad.md +3 -3
- package/pipeline/multi-agent-refs/payload-contracts.md +67 -0
- package/pipeline/multi-agent-refs/phases/modes.md +20 -0
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-6-commit.md +8 -40
- package/pipeline/multi-agent-refs/phases/phase-7-report.md +5 -3
- package/pipeline/multi-agent-refs/phases.md +6 -0
- package/pipeline/multi-agent-refs/rules.md +2 -0
- package/pipeline/schemas/prefs.schema.json +1 -1
- package/pipeline/scripts/audit-log-rotate.sh +10 -0
- package/pipeline/scripts/build-stack-plugins.mjs +8 -1
- package/pipeline/scripts/check-derived-drift.mjs +13 -1
- package/pipeline/scripts/diff-explain.mjs +41 -3
- package/pipeline/scripts/diff-risk-score.mjs +72 -8
- package/pipeline/scripts/gen-mode-dispatch.mjs +1 -1
- package/pipeline/scripts/learning-curve.mjs +8 -2
- package/pipeline/scripts/output-quality-check.sh +15 -4
- package/pipeline/scripts/phase-tracker.sh +21 -8
- package/pipeline/scripts/pre-commit-check.sh +69 -22
- package/pipeline/scripts/render-agent-log-cost.sh +8 -3
- package/pipeline/scripts/render-cost-summary.sh +42 -22
- package/pipeline/scripts/render-work-summary.sh +47 -13
- package/pipeline/scripts/review-scope.mjs +1 -1
- package/pipeline/scripts/run-aggregator.mjs +38 -14
- package/pipeline/scripts/smoke-schema-validation.sh +5 -1
- package/pipeline/scripts/test-gap-scan.mjs +45 -6
- package/pipeline/scripts/uninstall.mjs +39 -4
- package/pipeline/scripts/update-issue-progress.sh +12 -16
- package/pipeline/scripts/worktree-finalize.sh +23 -2
- package/pipeline/skills/.skills-index.json +11 -2
- package/pipeline/skills/shared/README.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +4 -17
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +8 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +5 -18
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +8 -0
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-ship/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +2 -2
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +302 -0
- package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +144 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +156 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +108 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +175 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +865 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +335 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +344 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +130 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +264 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +298 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +529 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +187 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +171 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +184 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh +26 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +173 -0
- package/pipeline/skills/skills-index.md +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,48 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
16
16
|
|
|
17
17
|
## [Unreleased]
|
|
18
18
|
|
|
19
|
+
## [14.2.2] - 2026-08-04
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **`localization-reuse-map` skill** added to `shared/external` — a per-screen
|
|
24
|
+
localization-reuse map that ties new/legacy/CMS translation keys together,
|
|
25
|
+
with follow-up fixes for placeholder rendering, snapshot staleness, and the
|
|
26
|
+
three gates its initial commit left red.
|
|
27
|
+
- **`docs/ecosystem.md`** — a detailed diagram of how this repo, the
|
|
28
|
+
`multi-agent-plugins` marketplace, and `dev-toolkit-mcp` compose at install
|
|
29
|
+
time and run time. `docs/architecture.md` cross-links it.
|
|
30
|
+
- **Turkish README (`README.tr.md`)**, cross-linked from `README.md`.
|
|
31
|
+
- Jira intake now surfaces the **parent issue's description** as a
|
|
32
|
+
confirmable candidate when the child issue's own description is empty.
|
|
33
|
+
- `payload-contracts` reference doc, consolidating the required-reading list
|
|
34
|
+
for Phase 6 and 7.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- Corrected stale 44/43-command counts to the real 49 across README,
|
|
39
|
+
`cross-cli-contract.md`, and both sync/update `SKILL.md` copies; fixed a
|
|
40
|
+
hardcoded "42 command specs" log line in `install/codex.mjs` to count the
|
|
41
|
+
actual source tree instead.
|
|
42
|
+
- **`audit-log-rotate.sh` could delete the archive it had just created.**
|
|
43
|
+
`gzip` preserves the source file's mtime by default, so rotating log
|
|
44
|
+
content already older than `KEEP_DAYS` produced a `.gz` that inherited
|
|
45
|
+
that old mtime - and the very next line's retention sweep (`find -mtime
|
|
46
|
+
+$KEEP_DAYS -delete`) deleted it in the same run, before it was ever read.
|
|
47
|
+
The archive's mtime is now reset to rotation time, so retention counts
|
|
48
|
+
from when it was archived, not from the age of the content inside it.
|
|
49
|
+
- The mode banner claimed pickers stay English when they didn't - language +
|
|
50
|
+
dialect resolution fixed.
|
|
51
|
+
- The cost tracker now reads the same state file `phase-tracker.sh` writes.
|
|
52
|
+
- Jira conversion table pipes are now escaped; Intake warnings render at h2.
|
|
53
|
+
- Copilot mode skills carried a stale review claim and missing payload
|
|
54
|
+
pointers - corrected.
|
|
55
|
+
- 18 cross-script drift and edge-case bugs resolved from code review.
|
|
56
|
+
- Markup dialect is now chosen per surface for channel posts; the Jira table
|
|
57
|
+
heading-conversion bug fixed.
|
|
58
|
+
- `localization-reuse-map`: empty-cell placeholder is now a single dash; a
|
|
59
|
+
stale snapshot no longer reads as an unauthored key.
|
|
60
|
+
|
|
19
61
|
## [14.2.1] - 2026-07-30
|
|
20
62
|
|
|
21
63
|
### Changed
|
package/README.md
CHANGED
|
@@ -6,10 +6,14 @@
|
|
|
6
6
|
[](https://github.com/mmerterden/multi-agent-pipeline/blob/main/package.json)
|
|
7
7
|
[](https://scorecard.dev/viewer/?uri=github.com/mmerterden/multi-agent-pipeline)
|
|
8
8
|
|
|
9
|
+
🇹🇷 Türkçe: [README.tr.md](./README.tr.md)
|
|
10
|
+
|
|
9
11
|
An 8-phase AI development pipeline for **Claude Code**, **Copilot CLI** and **Codex CLI**. Drives a Jira issue or GitHub URL to a merged PR in one command - analysis → plan → TDD → review → test → commit → PR - with multi-repo orchestration, a plan-approval gate, CLI-aware parallel review, and store-compliance checks. Component and Figma-to-code work is dispatched to the per-stack marketplace plugins (iOS/SwiftUI, Android/Compose) rather than bundled, so component skills live in one place.
|
|
10
12
|
|
|
11
13
|
Runs natively on Claude Code, Copilot CLI and Codex CLI. macOS / Linux / Windows. Zero runtime dependencies.
|
|
12
14
|
|
|
15
|
+
📐 **[Architecture diagrams](./docs/architecture.md)** - the 8-phase flow, operating modes, review/triage, Figma subphases, component layout. **[Ecosystem diagram](./docs/ecosystem.md)** - how this repo, the `multi-agent-plugins` marketplace and `dev-toolkit-mcp` compose.
|
|
16
|
+
|
|
13
17
|
## Quick Start
|
|
14
18
|
|
|
15
19
|
```bash
|
|
@@ -52,7 +56,7 @@ One command runs 8 phases, with a gate between the risky ones:
|
|
|
52
56
|
|
|
53
57
|
Under the hood: each task runs in its own **git worktree** (or the current branch with `:local`), commits use the **git identity routed from the repo's origin URL**, and **multi-repo** tasks get per-repo worktrees plus an integration build. Tokens stay in the OS keychain; nothing is committed or logged. `/multi-agent:review` can also review an existing GitHub/Bitbucket PR - per-finding inline comments anchored to `file:line` + an explicit Approve / Needs-Work state.
|
|
54
58
|
|
|
55
|
-
The discipline behind all of this - bounded loops, evidence gates, token-budgeted phase docs, immutable tests, fresh-context handoffs - is catalogued in [docs/engineering.md](./docs/engineering.md). The full feature list lives in [docs/features.md](./docs/features.md).
|
|
59
|
+
The discipline behind all of this - bounded loops, evidence gates, token-budgeted phase docs, immutable tests, fresh-context handoffs - is catalogued in [docs/engineering.md](./docs/engineering.md). The full feature list lives in [docs/features.md](./docs/features.md). How this repo, the `multi-agent-plugins` marketplace, and the `dev-toolkit-mcp` server compose at install time and at run time is diagrammed in [docs/ecosystem.md](./docs/ecosystem.md).
|
|
56
60
|
|
|
57
61
|
## Modes
|
|
58
62
|
|
|
@@ -66,7 +70,7 @@ The discipline behind all of this - bounded loops, evidence gates, token-budgete
|
|
|
66
70
|
| Audit | `/multi-agent:design-check` | Mock-mode vs Figma conformance, local-only |
|
|
67
71
|
| Audit | `/multi-agent:testflight-validation` | Pre-submission gates for a TestFlight build: static archive audit → Apple's `altool --validate-app` → Review-Guidelines check. Validates only, never uploads |
|
|
68
72
|
|
|
69
|
-
Helpers: `setup`, `status`, `resume #N`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`.
|
|
73
|
+
Helpers: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. 49 commands in all - full list: `/multi-agent:help`.
|
|
70
74
|
|
|
71
75
|
## Stacks
|
|
72
76
|
|
|
@@ -80,17 +84,17 @@ This enables the matching plugin (+ the shared `ai-common` plugin) in the repo's
|
|
|
80
84
|
|
|
81
85
|
## Tool support
|
|
82
86
|
|
|
83
|
-
The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same
|
|
87
|
+
The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI** - all three install from the same `pipeline/` source and get the same 49 commands.
|
|
84
88
|
|
|
85
89
|
| Tool | Flag | What it installs |
|
|
86
90
|
|---|---|---|
|
|
87
91
|
| Claude Code | `--claude` (default) | slash commands + skills + agents + `PreToolUse` secret-scan hook |
|
|
88
|
-
| Copilot CLI | `--copilot` | instructions +
|
|
89
|
-
| Codex CLI | `--codex` | one router skill +
|
|
92
|
+
| Copilot CLI | `--copilot` | instructions + 49 sub-command skills + scripts |
|
|
93
|
+
| Codex CLI | `--codex` | one router skill + 49 specs as refs + 8 agent TOML + `AGENTS.md` block + `codex mcp add` |
|
|
90
94
|
|
|
91
95
|
Filter skills by stack with `--platform=ios\|android\|all`.
|
|
92
96
|
|
|
93
|
-
**Why Codex gets one skill and not
|
|
97
|
+
**Why Codex gets one skill and not 49.** Codex assembles every discovered skill's name
|
|
94
98
|
and description into a single prompt block and drops entries when it overflows, with no
|
|
95
99
|
error. Measured on 0.145: installing one plugin that declares 142 skills surfaced only
|
|
96
100
|
75 of them and evicted an unrelated user skill. So on Codex the pipeline ships a single
|
package/README.tr.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# @mmerterden/multi-agent-pipeline
|
|
2
|
+
|
|
3
|
+
[](https://github.com/mmerterden/multi-agent-pipeline/releases)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org)
|
|
6
|
+
[](https://github.com/mmerterden/multi-agent-pipeline/blob/main/package.json)
|
|
7
|
+
[](https://scorecard.dev/viewer/?uri=github.com/mmerterden/multi-agent-pipeline)
|
|
8
|
+
|
|
9
|
+
🇬🇧 English: [README.md](./README.md)
|
|
10
|
+
|
|
11
|
+
**Claude Code**, **Copilot CLI** ve **Codex CLI** için 8 fazlı bir AI geliştirme pipeline'ı. Bir Jira issue'sunu veya GitHub URL'sini tek komutla merge edilmiş bir PR'a dönüştürür - analiz → plan → TDD → review → test → commit → PR - çoklu-repo orkestrasyonu, bir plan-onay kapısı, CLI-farkında paralel review ve store-uyumluluk kontrolleriyle birlikte. Component ve Figma-to-code işleri paket içine gömülmek yerine stack başına marketplace plugin'lerine (iOS/SwiftUI, Android/Compose) devredilir, böylece component skill'leri tek bir yerde yaşar.
|
|
12
|
+
|
|
13
|
+
Claude Code, Copilot CLI ve Codex CLI üzerinde native çalışır. macOS / Linux / Windows. Sıfır runtime dependency.
|
|
14
|
+
|
|
15
|
+
📐 **[Mimari diyagramları](./docs/architecture.md)** - 8 faz akışı, çalışma modları, review/triage, Figma subphase'leri, component yapısı. **[Ekosistem diyagramı](./docs/ecosystem.md)** - bu repo, `multi-agent-plugins` marketplace'i ve `dev-toolkit-mcp`'nin nasıl bir araya geldiği.
|
|
16
|
+
|
|
17
|
+
## Hızlı Başlangıç
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# public registry'den (auth gerekmez)
|
|
21
|
+
npx @mmerterden/multi-agent-pipeline install --all # Claude Code + Copilot CLI + Codex CLI
|
|
22
|
+
|
|
23
|
+
# sonra, bir kere:
|
|
24
|
+
/multi-agent:setup # keychain token taraması + git kimliği + varsayılan stack
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Bir görev çalıştır - girdi tipi otomatik algılanır:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
/multi-agent "PROJ-1234" # Jira id → çek, planla, geliştir
|
|
31
|
+
/multi-agent "https://github.com/org/repo/issues/42" # GitHub issue URL'i
|
|
32
|
+
/multi-agent "my-app#42" # repo + issue numarası
|
|
33
|
+
/multi-agent "fix dark-mode contrast on LoginView" # serbest-metin bug/özellik
|
|
34
|
+
/multi-agent:jira # açık Jira issue'larını gez → seç
|
|
35
|
+
/multi-agent:issue # atanmamış GitHub issue'larını gez → seç
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Her girdi aynı kısa intake'ten geçer - **hesap → (repo) → maturity kontrolü → dev-context** - sonra Phase 0'a girer. Bir Jira id'si veya GitHub URL'i hiçbir kod yazılmadan *önce* çekilir ve maturity-kontrol edilir; serbest-metin bu çekimi atlayıp doğrudan planlamaya geçer. Çoklu-repo görevleri dev-context adımında ekstra repo ekler.
|
|
39
|
+
|
|
40
|
+
Onayları atlamak için `autopilot`, hızlı dev-only yol için `--dev`, ya da worktree olmadan mevcut branch'te çalışmak için `--local` ekle (örn. `/multi-agent:autopilot "PROJ-1234"`).
|
|
41
|
+
|
|
42
|
+
Sonra `/multi-agent:update` ile güncelle. Kaldırmak için (tokenlar korunur) `npx @mmerterden/multi-agent-pipeline uninstall`.
|
|
43
|
+
|
|
44
|
+
## Nasıl çalışır
|
|
45
|
+
|
|
46
|
+
Tek komut 8 fazı çalıştırır, riskli olanlar arasında bir kapı ile:
|
|
47
|
+
|
|
48
|
+
- **0 · Init** - girdiyi ayrıştır (Jira id / GitHub URL / serbest metin), hesap + repo(lar) seç, issue'yu çek, maturity kontrolü yap.
|
|
49
|
+
- **1 · Analysis** - stack'i tespit et, codebase'i tara, etkiyi haritala (Opus).
|
|
50
|
+
- **2 · Plan** - bir görev kırılımı yaz ve koda dokunmadan önce **onayın için dur**.
|
|
51
|
+
- **3 · Dev** - TDD: başarısız test → kod → yeşil, repo'nun stiline + aktif stack skill'lerine uyarak.
|
|
52
|
+
- **4 · Review** - önce deterministik kapılar (build / lint / test / secret-scan) geçmeli, sonra bir **CLI-farkında paralel review** - Claude Code 2 model çalıştırır (Fable + Sonnet), Copilot CLI 3 (GPT-5.4 + Opus + Sonnet) - ve bir **Fable triage** sadece aksiyon alınabilir bulguları tutar; blocker'lar Phase 3'e geri döner.
|
|
53
|
+
- **5 · Test** - build + suite'i çalıştır; başarı zorunlu (sahte pass yok).
|
|
54
|
+
- **6 · Commit/PR** - conventional commit, push (başarılı olmalı), bir PR aç (`Ref: #N`, asla otomatik kapatma).
|
|
55
|
+
- **7 · Report** - teknik özet + test senaryolarıyla bir Jira yorumu, channels katmanından gönderilir.
|
|
56
|
+
|
|
57
|
+
Perde arkasında: her görev kendi **git worktree**'sinde çalışır (ya da `:local` ile mevcut branch'te), commit'ler **repo'nun origin URL'inden yönlendirilen git kimliğini** kullanır, ve **çoklu-repo** görevleri repo başına worktree artı bir integration build alır. Tokenlar OS keychain'de kalır; hiçbir şey commit edilmez ya da loglanmaz. `/multi-agent:review` mevcut bir GitHub/Bitbucket PR'ını da review edebilir - `file:line`'a bağlı bulgu-başına inline yorumlar + açık bir Approve / Needs-Work durumu.
|
|
58
|
+
|
|
59
|
+
Bunun arkasındaki disiplin - sınırlı loop'lar, kanıt kapıları, token-bütçeli faz dokümanları, değişmez testler, taze-context handoff'lar - [docs/engineering.md](./docs/engineering.md)'de kataloglanmıştır. Tam özellik listesi [docs/features.md](./docs/features.md)'te. Bu repo, `multi-agent-plugins` marketplace'i ve `dev-toolkit-mcp` sunucusunun install zamanında ve run zamanında nasıl bir araya geldiği [docs/ecosystem.md](./docs/ecosystem.md)'de diyagramlanmıştır.
|
|
60
|
+
|
|
61
|
+
## Modlar
|
|
62
|
+
|
|
63
|
+
| Mod | Komut | Akış |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| Full | `/multi-agent "task"` | Tüm 8 faz, interaktif |
|
|
66
|
+
| Autopilot | `/multi-agent:autopilot "task"` | Tüm 8 faz, onaysız |
|
|
67
|
+
| Dev | `/multi-agent:dev "task"` | Init → Dev → Review → Test → Commit → Report |
|
|
68
|
+
| Local | `/multi-agent:local "task"` | Tam pipeline, mevcut branch (worktree yok) |
|
|
69
|
+
| Ship | `/multi-agent:ship` | Lokal iş üzerinde review→test→commit→report kuyruğunu çalıştır |
|
|
70
|
+
| Audit | `/multi-agent:design-check` | Mock-mode vs Figma uygunluğu, yalnızca lokal |
|
|
71
|
+
| Audit | `/multi-agent:testflight-validation` | TestFlight build için pre-submission kapıları: statik archive denetimi → Apple'ın `altool --validate-app`'i → Review-Guidelines kontrolü. Yalnızca doğrular, asla yüklemez |
|
|
72
|
+
|
|
73
|
+
Yardımcılar: `setup`, `status`, `resume #N`, `kill #N`, `garbage-collect`, `prune-logs`, `purge`, `review`, `test`, `channels`, `stack`, `update`, `sync`, `refactor`, `jira`, `issue`, `analysis`, `create-jira`, `save`, `routines`, `forget`. Toplam 49 komut - tam liste: `/multi-agent:help`.
|
|
74
|
+
|
|
75
|
+
## Stack'ler
|
|
76
|
+
|
|
77
|
+
Stack skill'leri [`mmerterden/multi-agent-plugins`](https://github.com/mmerterden/multi-agent-plugins) marketplace'inde versiyonlu plugin'ler olarak gönderilir. Repo başına bir stack seç:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
/multi-agent:stack ios # veya android / frontend / backend / mobile / all
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Bu, ilgili plugin'i (+ ortak `ai-common` plugin'ini) repo'nun `.claude/settings.json`'unda etkinleştirir. Phase 1, routing için stack'i otomatik tespit eder. Yeni repo'lar varsayılan olarak iOS'tur.
|
|
84
|
+
|
|
85
|
+
## Araç desteği
|
|
86
|
+
|
|
87
|
+
Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çalışır - üçü de aynı `pipeline/` kaynağından kurulur ve aynı 49 komutu alır.
|
|
88
|
+
|
|
89
|
+
| Araç | Bayrak | Ne kurar |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| Claude Code | `--claude` (varsayılan) | slash komutları + skill'ler + agent'lar + `PreToolUse` secret-scan hook'u |
|
|
92
|
+
| Copilot CLI | `--copilot` | talimatlar + 49 alt-komut skill'i + script'ler |
|
|
93
|
+
| Codex CLI | `--codex` | bir router skill + ref olarak 49 spec + 8 agent TOML + `AGENTS.md` bloğu + `codex mcp add` |
|
|
94
|
+
|
|
95
|
+
Skill'leri stack'e göre filtrele: `--platform=ios\|android\|all`.
|
|
96
|
+
|
|
97
|
+
**Codex neden 49 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
|
|
98
|
+
ve açıklamasını tek bir prompt bloğuna toplar ve blok taştığında girdileri hatasızca
|
|
99
|
+
düşürür. 0.145 üzerinde ölçüldü: 142 skill deklare eden bir plugin kurulduğunda sadece
|
|
100
|
+
75'i yüzeye çıktı ve alakasız bir kullanıcı skill'i tahliye edildi. Bu yüzden Codex'te
|
|
101
|
+
pipeline tek bir `multi-agent` router gönderir ve alt-komut spec'lerini, okunana kadar
|
|
102
|
+
hiçbir maliyeti olmayan referans dosyaları olarak tutar - aynı komutlar, aynı davranış,
|
|
103
|
+
host'un gerçekten tutabildiği bir düzen.
|
|
104
|
+
|
|
105
|
+
Reviewer setleri farklı çünkü mevcut modeller farklı: Claude Code 2 reviewer çalıştırır
|
|
106
|
+
(Fable + Sonnet), Copilot CLI 3 (Opus + GPT-5.4 + Sonnet), Codex CLI 3 (xhigh'da
|
|
107
|
+
gpt-5.6, gpt-5.4, medium'da gpt-5.6). Codex tek-vendor olduğu için üçü arasındaki
|
|
108
|
+
konsensüs, iki-vendor'lu bir host'taki aynı konsensüsten daha zayıf bir kanıttır ve
|
|
109
|
+
triage notu bunu belirtir.
|
|
110
|
+
|
|
111
|
+
## Token'lar ve entegrasyonlar
|
|
112
|
+
|
|
113
|
+
`setup` OS keychain'ini tarar ve her token'ı **mantıksal bir isimle** (örn. `jira`) gerçek keychain girdisine eşler - pipeline token'ları bu eşleme üzerinden çözer (`credential-store.sh`), böylece literal keychain isimleri hiçbir sync edilen dosyada görünmez. Token'lar keychain'de kalır (macOS Keychain / Windows Credential Manager / Linux libsecret), **asla commit edilmez ya da loglanmaz**, ve hepsi **opsiyoneldir** - pipeline Phase 0'da ihtiyaç duyduğu herhangi birini sorar.
|
|
114
|
+
|
|
115
|
+
| Token | Ne için kullanılır | Faz |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| `jira` | issue'yu çek · rapor yorumunu gönder | 0, 7 |
|
|
118
|
+
| `github` | issue'lar · PR'lar · `gh` auth | 0, 6 |
|
|
119
|
+
| `bitbucket` | PR create/update (reviewer koruyarak) · diff | 6 |
|
|
120
|
+
| `confluence` | analiz / wiki sayfaları yayınla | 7 |
|
|
121
|
+
| `figma` + `figma_mcp` | design context çek | yalnızca analiz |
|
|
122
|
+
| `fortify` | security-scan bulgu kapısı | 4 |
|
|
123
|
+
| `firebase` | Firebase projeleri için Firebase config (base64 JSON) | gerektiğinde |
|
|
124
|
+
| `jenkins` | CI tetikleme / durum | build / deploy |
|
|
125
|
+
| `npm` | paket publish (çoğunlukla CI) | release |
|
|
126
|
+
| `appstore_connect_*` | TestFlight / App Store pre-submission doğrulaması (opsiyonel, iOS) | `testflight-validation` |
|
|
127
|
+
|
|
128
|
+
**Secret scan**, Claude Code'da bir `PreToolUse` hook'u olarak (bulgu halinde commit'i sert-engeller) ve diğer yerlerde bir pre-push kontrolü olarak çalışır.
|
|
129
|
+
|
|
130
|
+
## Platform desteği
|
|
131
|
+
|
|
132
|
+
**macOS**, **Linux** ve **Windows** (Git Bash / WSL) üzerinde çalışır. Shell ve credential erişimi platform-agnostik bir katmandan geçer - keychain otomatik olarak **macOS Keychain**, **Linux libsecret** (`secret-tool`) veya **Windows Credential Manager**'a çözülür, ve script'ler BSD ile GNU araç varyantları arasında fallback yapar. Node.js 18 / 20 / 22.
|
|
133
|
+
|
|
134
|
+
## Yan repolar
|
|
135
|
+
|
|
136
|
+
| Repo | Ne olduğu |
|
|
137
|
+
|---|---|
|
|
138
|
+
| [`mmerterden/multi-agent-plugins`](https://github.com/mmerterden/multi-agent-plugins) | Stack-başına skill toolkit'lerinin marketplace'i (iOS / Android / Frontend / Backend + common). `/multi-agent:stack` ilgili plugin'i etkinleştirir. |
|
|
139
|
+
| [`mmerterden/dev-toolkit-mcp`](https://github.com/mmerterden/dev-toolkit-mcp) | UI testing / simulator capture / xcodebuild için MCP sunucusu - Phase 5 UI Bug Hunter'ı güçlendirir. Public npm registry'de [`@mmerterden/dev-toolkit-mcp`](https://www.npmjs.com/package/@mmerterden/dev-toolkit-mcp) olarak yayınlanır; installer her CLI'a onu senin için register eder, böylece `npx` ekstra konfigürasyon olmadan onu çözer. |
|
|
140
|
+
|
|
141
|
+
## Lisans
|
|
142
|
+
|
|
143
|
+
MIT - bkz. [LICENSE](./LICENSE). Güvenlik sorunları: bkz. [SECURITY.md](./SECURITY.md) (zafiyetler için public issue açma).
|
package/docs/architecture.md
CHANGED
|
@@ -117,12 +117,12 @@ graph TB
|
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
subgraph "Pipeline Specs"
|
|
120
|
-
CMD[commands/<br/>
|
|
120
|
+
CMD[commands/<br/>49 command files]
|
|
121
121
|
AGT[agents/<br/>8 agent personas]
|
|
122
122
|
RUL[rules/<br/>12 domain rules]
|
|
123
123
|
PHS[multi-agent-refs/phases/<br/>phase specs + contracts]
|
|
124
124
|
CMP[skills/shared/core/<br/>orchestration skills<br/>incl. compliance]
|
|
125
|
-
EXT[skills/shared/external/<br/>
|
|
125
|
+
EXT["skills/shared/external/<br/>150 curated skills<br/>(authoring source for the<br/>multi-agent-plugins marketplace)"]
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
subgraph "Quality Gates"
|
|
@@ -162,18 +162,33 @@ User Input → Phase 0 (Init)
|
|
|
162
162
|
|
|
163
163
|
## Ecosystem Sync Targets
|
|
164
164
|
|
|
165
|
+
`/multi-agent:sync` actually walks **five** targets, not the three shown in earlier
|
|
166
|
+
revisions of this diagram — Codex CLI and the two independently-shipped repos
|
|
167
|
+
(`multi-agent-plugins`, `dev-toolkit-mcp`) are real sync targets too:
|
|
168
|
+
|
|
165
169
|
```mermaid
|
|
166
170
|
graph TD
|
|
167
171
|
CC["Claude Code<br/>(source of truth)"]
|
|
168
|
-
COP["Copilot CLI<br/>(instructions +
|
|
172
|
+
COP["Copilot CLI<br/>(instructions + 49 skills)"]
|
|
173
|
+
COD["Codex CLI<br/>(1 router skill + 49 refs)"]
|
|
169
174
|
REPO["Pipeline Repo<br/>(npm package)"]
|
|
170
|
-
WEB["Website
|
|
171
|
-
|
|
175
|
+
WEB["Website"]
|
|
176
|
+
PLUGREPO["multi-agent-plugins<br/>(5 stack plugins, own repo)"]
|
|
177
|
+
DTK["dev-toolkit-mcp<br/>(own repo, own release cadence)"]
|
|
172
178
|
|
|
173
|
-
CC -->|
|
|
174
|
-
CC -->|
|
|
179
|
+
CC -->|copy + reformat| COP
|
|
180
|
+
CC -->|transform via install.js --codex| COD
|
|
181
|
+
CC -->|genericize| REPO
|
|
175
182
|
CC -->|version + features| WEB
|
|
176
|
-
|
|
183
|
+
REPO -->|build-stack-plugins.mjs| PLUGREPO
|
|
184
|
+
DTK -.->|sync only detects + ships, never authors| CC
|
|
185
|
+
|
|
177
186
|
REPO -->|npm publish| NPM["GitHub Packages"]
|
|
178
187
|
WEB -->|auto-deploy| VERCEL["Vercel"]
|
|
188
|
+
PLUGREPO -->|git push| MKT["Claude marketplace"]
|
|
189
|
+
DTK -->|npm publish| NPM2["GitHub Packages (private)"]
|
|
179
190
|
```
|
|
191
|
+
|
|
192
|
+
Full detail on how these three repos compose at install time and at run time —
|
|
193
|
+
including the Phase 3 → plugin dispatch contract and the Phase 5 → dev-toolkit MCP
|
|
194
|
+
contract — lives in [`docs/ecosystem.md`](./ecosystem.md).
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Ecosystem: Pipeline × Marketplace Plugins × Dev-Toolkit MCP
|
|
2
|
+
|
|
3
|
+
This pipeline is not one repo. It's three, each owned separately, each versioned
|
|
4
|
+
separately, wired together at install time and at run time:
|
|
5
|
+
|
|
6
|
+
| Repo | What it owns | Ships as |
|
|
7
|
+
|---|---|---|
|
|
8
|
+
| **`multi-agent-pipeline`** (this repo) | Orchestration: the 8-phase flow, the 49 slash commands, quality gates, review/triage, cross-CLI parity | npm package (`@mmerterden/multi-agent-pipeline`), installs itself onto Claude Code / Copilot CLI / Codex CLI |
|
|
9
|
+
| **`multi-agent-plugins`** | Stack knowledge: per-platform component/lifecycle skills (iOS, Android, Frontend, Backend) + shared knowledge | Claude Code marketplace, 5 independently-versioned plugins |
|
|
10
|
+
| **`dev-toolkit-mcp`** | The pipeline's hands on devices and browsers: 80 MCP tools across 6 categories (simulator/emulator control, accessibility audit, store compliance, web automation, Figma-vs-mock design audit, an agent-DSL batch runner) | npm package, registered as a standard stdio MCP server on every host |
|
|
11
|
+
|
|
12
|
+
None of the three depends on the others at the code level. They compose through two
|
|
13
|
+
narrow contracts: the **Skill tool** (pipeline → plugin, at Phase 3) and the **MCP
|
|
14
|
+
protocol** (pipeline skills → dev-toolkit, at Phase 5 / design-check / store-ready).
|
|
15
|
+
Either can be swapped or removed without touching the other two's source.
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
graph LR
|
|
19
|
+
subgraph PIPE ["multi-agent-pipeline (orchestrator)"]
|
|
20
|
+
direction TB
|
|
21
|
+
PHASES["8 phases · 49 commands"]
|
|
22
|
+
GATES["deterministic gates + review triage"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
subgraph PLUG ["multi-agent-plugins (stack knowledge)"]
|
|
26
|
+
direction TB
|
|
27
|
+
IOSP["ai-ios-engineering-toolkit"]
|
|
28
|
+
ANDP["ai-android-engineering-toolkit"]
|
|
29
|
+
FEP["ai-frontend-engineering-toolkit"]
|
|
30
|
+
BEP["ai-backend-toolkit"]
|
|
31
|
+
COMP["ai-common-engineering-toolkit"]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
subgraph DTK ["dev-toolkit-mcp (device/browser hands)"]
|
|
35
|
+
direction TB
|
|
36
|
+
DEV["Device Control (58)"]
|
|
37
|
+
A11Y["Accessibility Audit (2)"]
|
|
38
|
+
STORE["Store Compliance (5)"]
|
|
39
|
+
WEB["Web Automation (8)"]
|
|
40
|
+
DESIGN["Design Audit (6)"]
|
|
41
|
+
AGENTDSL["Agent DSL (1)"]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
PHASES -->|"Phase 3: Skill tool<br/>taskType===component"| PLUG
|
|
45
|
+
PHASES -->|"Phase 5 / design-check /<br/>store-ready: MCP tool calls"| DTK
|
|
46
|
+
GATES -.->|"Phase 4 Security Auditor"| STORE
|
|
47
|
+
|
|
48
|
+
style PIPE fill:#ffd,stroke:#333
|
|
49
|
+
style PLUG fill:#dfd,stroke:#333
|
|
50
|
+
style DTK fill:#dff,stroke:#333
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 1. Authoring flow: one source of truth, five sync targets
|
|
56
|
+
|
|
57
|
+
`~/.claude/` on the maintainer's machine is authoritative. Everything else is a
|
|
58
|
+
derived, synced, or independently-shipped artifact. `/multi-agent:sync` is the one
|
|
59
|
+
command that walks all five targets in order, detects which are stale, and updates
|
|
60
|
+
only those:
|
|
61
|
+
|
|
62
|
+
```mermaid
|
|
63
|
+
graph TD
|
|
64
|
+
CC["Claude Code<br/>~/.claude/commands/multi-agent/<br/>(source of truth)"]
|
|
65
|
+
|
|
66
|
+
CC -->|"Step 2: copy + reformat<br/>49 sub-command skills"| COP["Copilot CLI<br/>~/.copilot/skills/"]
|
|
67
|
+
CC -->|"Step 2b: transform<br/>(install.js --codex)"| COD["Codex CLI<br/>1 router skill + 49 refs<br/>+ 8 agent TOML"]
|
|
68
|
+
CC -->|"Step 3: genericize<br/>(strip personal data)"| REPO["multi-agent-pipeline repo<br/>pipeline/"]
|
|
69
|
+
CC -->|"Step 4: version + feature sync"| WEB["Website<br/>projects.ts / i18n.tsx"]
|
|
70
|
+
|
|
71
|
+
REPO -->|"Step 3c: build-stack-plugins.mjs<br/>rebuilds knowledge/ from<br/>shared/external"| PLUGREPO["multi-agent-plugins repo<br/>(5 stack plugins)"]
|
|
72
|
+
|
|
73
|
+
DTK2["dev-toolkit-mcp repo<br/>(own codebase, own gates,<br/>NOT generated from Claude)"]
|
|
74
|
+
SYNC3D["Step 3d: detect movement →<br/>gate → commit → publish"]
|
|
75
|
+
CC -.->|"sync only SHIPS this,<br/>never authors it"| SYNC3D
|
|
76
|
+
SYNC3D -.-> DTK2
|
|
77
|
+
|
|
78
|
+
REPO -->|"npm publish"| NPM["GitHub Packages"]
|
|
79
|
+
WEB -->|"git push → auto-deploy"| VERCEL["Vercel"]
|
|
80
|
+
PLUGREPO -->|"git push"| MKT["Claude Code marketplace"]
|
|
81
|
+
DTK2 -->|"npm publish"| NPM2["GitHub Packages<br/>(private)"]
|
|
82
|
+
|
|
83
|
+
style CC fill:#f9f,stroke:#333
|
|
84
|
+
style DTK2 fill:#dff,stroke:#333,stroke-dasharray: 5 5
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Why `dev-toolkit-mcp` is drawn differently.** The other four targets are *derived*
|
|
88
|
+
from the Claude Code source — sync writes their content. `dev-toolkit-mcp` is not:
|
|
89
|
+
it's a separate codebase developed on its own schedule. Sync's Step 3d only
|
|
90
|
+
*detects* whether it moved (dirty tree, unpushed commits, untagged version), runs
|
|
91
|
+
**its own** gate suite, and ships it — commit, tag, `npm publish`. If the pipeline
|
|
92
|
+
needs a tool that toolkit doesn't have yet, that's a two-repo change: add the tool
|
|
93
|
+
in `dev-toolkit-mcp`, ship it, then bump the minimum version pin back in
|
|
94
|
+
`cross-cli-contract.md` (see §4).
|
|
95
|
+
|
|
96
|
+
**Also not generated: the plugins' own authored skills.** `build-stack-plugins.mjs`
|
|
97
|
+
only rebuilds each plugin's `knowledge/` folder from `pipeline/skills/shared/external/`.
|
|
98
|
+
The plugins' lifecycle skills — `create-component`, `evolve-component`,
|
|
99
|
+
`figma-utility`, `code-connect`, `branch-and-pr`, `fix-bug`, and the rest — are
|
|
100
|
+
hand-authored *inside* `multi-agent-plugins` and are never touched by sync.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 2. Plugin marketplace build: one authoring source, five versioned artifacts
|
|
105
|
+
|
|
106
|
+
```mermaid
|
|
107
|
+
graph TD
|
|
108
|
+
EXT["pipeline/skills/shared/external/<br/>150 skills — single authoring source<br/>(the pipeline's own phases read these too)"]
|
|
109
|
+
|
|
110
|
+
EXT -->|"cross-stack skills"| COMMONP["ai-common-engineering-toolkit<br/>10 skills · v0.2.3"]
|
|
111
|
+
EXT -->|"Apple/Xcode-only"| IOSP["ai-ios-engineering-toolkit<br/>145 skills · v0.6.0"]
|
|
112
|
+
EXT -->|"Android/Kotlin-only"| ANDP["ai-android-engineering-toolkit<br/>29 skills · v0.1.3"]
|
|
113
|
+
EXT -->|"backend-only"| BEP["ai-backend-toolkit<br/>32 skills · v0.1.4"]
|
|
114
|
+
EXT -->|"web/frontend-only"| FEP["ai-frontend-engineering-toolkit<br/>24 skills · v0.1.3"]
|
|
115
|
+
|
|
116
|
+
COMMONP --> BUMP{"skill set<br/>changed?"}
|
|
117
|
+
IOSP --> BUMP
|
|
118
|
+
ANDP --> BUMP
|
|
119
|
+
BEP --> BUMP
|
|
120
|
+
FEP --> BUMP
|
|
121
|
+
BUMP -->|yes| PATCH["bump that plugin's<br/>patch version"]
|
|
122
|
+
BUMP -->|no| SKIP["idempotent no-op"]
|
|
123
|
+
|
|
124
|
+
PATCH --> CONSUMER["/multi-agent:update<br/>→ claude marketplace update multi-agent-plugins"]
|
|
125
|
+
|
|
126
|
+
style EXT fill:#ffd,stroke:#333
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
A skill counted in more than one platform plugin (a cross-stack knowledge skill
|
|
130
|
+
plus, say, an iOS-specific one) is why the plugins' skill counts sum to more than
|
|
131
|
+
the 150-skill source: `ai-common` skills are vendored into every stack plugin's
|
|
132
|
+
`knowledge/`, not deduplicated across them. Versioning is per-plugin and
|
|
133
|
+
patch-only from this generator — a repo enabling only `ai-ios-engineering-toolkit`
|
|
134
|
+
never pulls an Android-only change.
|
|
135
|
+
|
|
136
|
+
**Consumption is pull, not push.** A consumer repo enables a stack plugin once
|
|
137
|
+
(`/multi-agent:stack ios`, writing the enabled-plugins list into
|
|
138
|
+
`.claude/settings.json`) and picks up new plugin versions only when it runs
|
|
139
|
+
`/multi-agent:update`, which calls `claude marketplace update multi-agent-plugins`.
|
|
140
|
+
Publishing a new plugin version does not retroactively change anything already
|
|
141
|
+
running in a consumer's session.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 3. Per-host delivery: the same three repos, three different shapes
|
|
146
|
+
|
|
147
|
+
The three repos land differently on each host, because each host's skill-loading
|
|
148
|
+
behavior is different (see `pipeline/multi-agent-refs/cross-cli-contract.md` for the
|
|
149
|
+
measurements behind this table):
|
|
150
|
+
|
|
151
|
+
| | Claude Code | Copilot CLI | Codex CLI |
|
|
152
|
+
|---|---|---|---|
|
|
153
|
+
| **Pipeline commands** | 49 slash-command skills, native | 49 skills, `multi-agent-{cmd}` naming, copied in | 1 router skill (`multi-agent`) + 49 command specs as reference files — Codex silently truncates its skills block past a few dozen entries, so sub-commands are not peer skills here |
|
|
154
|
+
| **Stack plugins** | Marketplace plugin, loaded natively, resolved by `.claude/settings.json` enabled-list | Enabled plugin's authored skills copied flat into `~/.copilot/skills/`; `knowledge/` **not** re-copied (already delivered via `shared/external`) | Copied as reference files under `~/.codex/multi-agent-refs/skills/`, plugin-prefixed on name clash (e.g. `architecture` → `ai-ios-engineering-toolkit-architecture`) |
|
|
155
|
+
| **Component dispatch (Phase 3)** | Marketplace plugin's `create-component`/`create-screen` skill via the Skill tool | No plugin loader — falls back to local frozen `figma-*` skill copies | Not part of the enforced parity axis; classification + state-shape must match, skill *inventory* does not |
|
|
156
|
+
| **dev-toolkit-mcp** | `claude mcp add dev-toolkit -- npx -y @mmerterden/dev-toolkit-mcp` | `copilot mcp add dev-toolkit -- npx -y @mmerterden/dev-toolkit-mcp` | `codex mcp add dev-toolkit -- npx -y @mmerterden/dev-toolkit-mcp` (skipped with a warning if `codex` isn't on `PATH`) |
|
|
157
|
+
|
|
158
|
+
`smoke-cross-cli-behavior.sh` and `smoke-codex-install.sh` gate the axes that **do**
|
|
159
|
+
have to match (phase labels, placeholder vocabulary, output schemas, command↔skill
|
|
160
|
+
parity count); the table above marks the axes that are allowed to diverge by design.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 4. Runtime: what actually happens during a task
|
|
165
|
+
|
|
166
|
+
Two independent hand-offs happen inside a single pipeline run, neither aware of the
|
|
167
|
+
other:
|
|
168
|
+
|
|
169
|
+
```mermaid
|
|
170
|
+
graph TD
|
|
171
|
+
START["Task running: Phase 3 (Dev)"]
|
|
172
|
+
START -->|"taskType !== component"| TDD["Standard TDD loop<br/>(pipeline's own code)"]
|
|
173
|
+
START -->|"taskType === component<br/>+ figmaUrl present"| VALIDATE["ai-ios-engineering-toolkit:figma-validate<br/>(registry, Code Connect, token compliance)"]
|
|
174
|
+
VALIDATE -->|pass| DISPATCH["Skill tool →<br/>create-component / create-screen<br/>/ evolve-component (dual-name fallback)"]
|
|
175
|
+
VALIDATE -->|fail| HALT1["halt Phase 3, surface why"]
|
|
176
|
+
DISPATCH --> REPORT1["plugin returns build/test status →<br/>dispatch layer writes state.phases['3'].subphases[]"]
|
|
177
|
+
|
|
178
|
+
REPORT1 --> P4["Phase 4: Review"]
|
|
179
|
+
P4 --> P5["Phase 5: Test"]
|
|
180
|
+
|
|
181
|
+
P5 -->|"UI bug hunt / manual-test /<br/>design-check / store-ready"| MCP["MCP tool call over stdio<br/>e.g. ios_xcodebuild, design_visual_compare,<br/>ios_app_store_audit"]
|
|
182
|
+
MCP --> DTKPROC["dev-toolkit-mcp process<br/>(npx @mmerterden/dev-toolkit-mcp)"]
|
|
183
|
+
DTKPROC -->|"result: screenshot / xcresult ID /<br/>18-rule audit verdict"| P5
|
|
184
|
+
|
|
185
|
+
style DISPATCH fill:#dfd,stroke:#333
|
|
186
|
+
style MCP fill:#dff,stroke:#333
|
|
187
|
+
style HALT1 fill:#fdd,stroke:#333
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Phase 3 → plugin** is a one-shot delegation: the plugin skill does its own
|
|
191
|
+
lifecycle (test → code → build → wiki) and reports back a coarse
|
|
192
|
+
`component-build` result; the pipeline does not re-implement any of that logic, and
|
|
193
|
+
a plugin failure counts against the pipeline's own retry cap (`retryCount === 3` →
|
|
194
|
+
hard stop, per `component-dispatch.md`).
|
|
195
|
+
|
|
196
|
+
**Phase 5 (and design-check / store-ready) → dev-toolkit** is a long-lived MCP
|
|
197
|
+
session, not a one-shot call: the same stdio server process answers many tool
|
|
198
|
+
calls across a phase (boot simulator once, then screenshot/tap/screenshot/tap...).
|
|
199
|
+
Several pipeline skills pin a **minimum toolkit version** for a specific tool —
|
|
200
|
+
e.g. `apple-archive-compliance` requires `ios_app_store_audit` from
|
|
201
|
+
`dev-toolkit-mcp ≥ v2.9.0` — enforced in `cross-cli-contract.md` and checked by
|
|
202
|
+
`/multi-agent:sync` Step 3d before any dev-toolkit release ships (a version bump
|
|
203
|
+
that drops or renames a tool a pipeline skill depends on is a **major** bump, by
|
|
204
|
+
that step's own contract).
|
|
205
|
+
|
|
206
|
+
### dev-toolkit-mcp's 80 tools, by category
|
|
207
|
+
|
|
208
|
+
| Category | Tools | Primary pipeline consumers |
|
|
209
|
+
|---|---|---|
|
|
210
|
+
| Device Control | 58 | `/multi-agent:test`, `test-dark-mode`, `test-accessibility`, `test-dynamic-type`, `test-screenshots`, `manual-test`, `design-check` |
|
|
211
|
+
| Accessibility Audit | 2 | `test-accessibility` |
|
|
212
|
+
| Store Compliance | 5 | `store-ready`, `testflight-validation`, `apple-archive-compliance` skill, Phase 4 Security Auditor |
|
|
213
|
+
| Web Automation | 8 | frontend-stack UI testing (via `test`) |
|
|
214
|
+
| Design Audit | 6 | `design-check` (mock-mode vs Figma conformance) |
|
|
215
|
+
| Autonomous Agent DSL | 1 | any skill that needs a scripted multi-step device flow in one round trip |
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 5. Why the boundary is drawn where it is
|
|
220
|
+
|
|
221
|
+
- **Pipeline ↔ plugins boundary = Skill tool, one direction.** The pipeline
|
|
222
|
+
classifies (`taskType`, `componentScope`) and tracks state; it never reads or
|
|
223
|
+
writes plugin-internal files. This is why a corporate marketplace can ship a
|
|
224
|
+
same-named plugin (`ai-ios-engineering-toolkit:create-ui-component` vs the public
|
|
225
|
+
`create-component`) and dispatch still resolves correctly — the dual-name
|
|
226
|
+
fallback lives in the pipeline, the implementation stays entirely in whichever
|
|
227
|
+
plugin is enabled.
|
|
228
|
+
- **Pipeline ↔ dev-toolkit boundary = MCP protocol, versioned contract.** The
|
|
229
|
+
pipeline never shells out to `xcrun simctl` or `adb` directly; every device/browser
|
|
230
|
+
action is a declared MCP tool call with a minimum-version pin. That's what lets
|
|
231
|
+
`dev-toolkit-mcp` ship on its own release cadence (its own gates, its own
|
|
232
|
+
`npm publish`) without a pipeline release, as long as pinned tools keep their
|
|
233
|
+
contract.
|
|
234
|
+
- **Neither boundary is symmetric.** The pipeline depends on both other repos being
|
|
235
|
+
present *for specific task types* (component work, UI testing) but functions
|
|
236
|
+
without either — a non-component bugfix task never touches the plugin marketplace,
|
|
237
|
+
and a task with no UI-testing step never opens the MCP connection.
|
|
@@ -24,9 +24,12 @@
|
|
|
24
24
|
* @module install/_plugin-skills
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
import { existsSync, readFileSync, readdirSync, statSync } from "fs";
|
|
27
|
+
import { existsSync, readFileSync, readdirSync, statSync, writeFileSync } from "fs";
|
|
28
28
|
import { join } from "path";
|
|
29
29
|
|
|
30
|
+
/** Uninstall reads this to know exactly which delivered skill dirs are ours to remove. */
|
|
31
|
+
export const PLUGIN_SKILLS_MANIFEST = ".plugin-skills-manifest.json";
|
|
32
|
+
|
|
30
33
|
import { copyDir, countFiles, ensureDir, ensureRealDir, isDryRun, wipeDir } from "./_common.mjs";
|
|
31
34
|
|
|
32
35
|
/** Subtrees a plugin authors itself. `knowledge/` is generated, so it is excluded. */
|
|
@@ -254,7 +257,18 @@ export function installAuthoredPluginSkills(opts) {
|
|
|
254
257
|
`clone {owner}/multi-agent-plugins or enable them in Claude Code to deliver their skills`,
|
|
255
258
|
);
|
|
256
259
|
}
|
|
257
|
-
|
|
260
|
+
// Uninstall has no way to know which of ~100 flat skill dirs came from a
|
|
261
|
+
// plugin delivery pass rather than the pipeline's own PIPELINE_CORE_SKILL_DIRS
|
|
262
|
+
// allowlist - it silently left all of them behind. Persist exactly the names
|
|
263
|
+
// this pass delivered so uninstall can remove precisely those, nothing more.
|
|
264
|
+
if (!isDryRun()) {
|
|
265
|
+
try {
|
|
266
|
+
writeFileSync(join(dest, PLUGIN_SKILLS_MANIFEST), JSON.stringify([...delivered], null, 2) + "\n");
|
|
267
|
+
} catch {
|
|
268
|
+
/* best-effort - a missing manifest just means uninstall skips this cleanup */
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return { copied, collided, renamed, plugins, missing, selectionSource, deliveredNames: [...delivered] };
|
|
258
272
|
}
|
|
259
273
|
|
|
260
274
|
/**
|
package/install/codex.mjs
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* name + description into a single prompt block and silently drops entries once
|
|
11
11
|
* that block overflows - measured at install-design time, one 142-skill plugin
|
|
12
12
|
* surfaced only 75 of its skills AND evicted an unrelated user skill. So the
|
|
13
|
-
* pipeline contributes exactly one skill (`multi-agent`) and keeps its
|
|
13
|
+
* pipeline contributes exactly one skill (`multi-agent`) and keeps its
|
|
14
14
|
* sub-command specs as reference files that cost nothing until read. Converting
|
|
15
15
|
* them into peer skills would silently lose pipeline commands.
|
|
16
16
|
*
|
|
@@ -230,7 +230,12 @@ function installRouterSkill(pipelineSrc, skillsDir) {
|
|
|
230
230
|
const dest = join(skillsDir, "multi-agent");
|
|
231
231
|
ensureDir(dest);
|
|
232
232
|
writeFile(join(dest, "SKILL.md"), skill);
|
|
233
|
-
|
|
233
|
+
|
|
234
|
+
const commandsDir = join(pipelineSrc, "commands", "multi-agent");
|
|
235
|
+
const specCount = existsSync(commandsDir)
|
|
236
|
+
? readdirSync(commandsDir, { withFileTypes: true }).filter((e) => e.isDirectory()).length
|
|
237
|
+
: 0;
|
|
238
|
+
console.log(` -> 1 router skill written to ${dest} (${specCount} command specs stay as refs)`);
|
|
234
239
|
}
|
|
235
240
|
|
|
236
241
|
/**
|
|
@@ -279,10 +284,10 @@ function installRefs(pipelineSrc, dest) {
|
|
|
279
284
|
let count = 0;
|
|
280
285
|
if (existsSync(refsSrc)) count += copyTreeRewritten(refsSrc, dest);
|
|
281
286
|
|
|
282
|
-
// The
|
|
287
|
+
// The sub-command specs. Skip ONLY the top-level dispatcher SKILL.md -
|
|
283
288
|
// it already shipped as the router skill. The filter is on the path relative
|
|
284
289
|
// to the copy root, not the basename: every sub-command spec is itself named
|
|
285
|
-
// SKILL.md, so a basename filter would copy
|
|
290
|
+
// SKILL.md, so a basename filter would copy N empty directories and leave
|
|
286
291
|
// the orchestrator with nothing to read.
|
|
287
292
|
if (existsSync(commandsSrc)) {
|
|
288
293
|
count += copyTreeRewritten(commandsSrc, join(dest, "commands"), (rel) => rel !== "SKILL.md");
|