@mmerterden/multi-agent-pipeline 16.11.0 → 16.13.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 +49 -0
- package/README.md +9 -7
- package/README.tr.md +9 -7
- package/docs/adr/0001-three-model-triage.md +5 -0
- package/docs/adr/0010-own-code-graph.md +129 -0
- package/docs/adr/README.md +1 -0
- package/docs/architecture.md +2 -2
- package/docs/ecosystem.md +5 -5
- package/docs/features.md +26 -2
- package/package.json +1 -1
- package/pipeline/claude-md-template.md +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/graph/SKILL.md +105 -0
- package/pipeline/commands/multi-agent/help/SKILL.md +10 -10
- package/pipeline/commands/multi-agent/resume-local/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/review/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/sync/SKILL.md +12 -12
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +9 -7
- package/pipeline/lib/figma-screenshot.sh +107 -7
- package/pipeline/lib/md2confluence-v3.py +133 -25
- package/pipeline/multi-agent-refs/analysis/locked.md +4 -3
- package/pipeline/multi-agent-refs/analysis/render.md +44 -9
- package/pipeline/multi-agent-refs/analysis/review.md +17 -1
- package/pipeline/multi-agent-refs/analysis-template-corporate.md +14 -3
- package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -10
- package/pipeline/multi-agent-refs/features/code-graph.md +62 -0
- package/pipeline/multi-agent-refs/features/model-fallback.md +44 -2
- package/pipeline/multi-agent-refs/knowledge.md +7 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +5 -0
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +9 -9
- package/pipeline/multi-agent-refs/phases/phase-7-report.md +2 -0
- package/pipeline/preferences-template.json +2 -0
- package/pipeline/schemas/analysis-spec.schema.json +2 -0
- package/pipeline/schemas/code-graph.schema.json +91 -0
- package/pipeline/schemas/prefs.schema.json +45 -0
- package/pipeline/schemas/reviewer-output.schema.json +1 -1
- package/pipeline/schemas/token-budget.json +2 -2
- package/pipeline/schemas/triage-output.schema.json +1 -1
- package/pipeline/scripts/_code-graph.mjs +518 -0
- package/pipeline/scripts/_path-match.mjs +87 -0
- package/pipeline/scripts/anonymize-findings.mjs +1 -1
- package/pipeline/scripts/code-graph-rules/android.json +130 -0
- package/pipeline/scripts/code-graph-rules/ios.json +95 -0
- package/pipeline/scripts/code-graph-rules/node.json +151 -0
- package/pipeline/scripts/code-graph-rules/python.json +91 -0
- package/pipeline/scripts/graph-affected.mjs +161 -0
- package/pipeline/scripts/graph-build.mjs +157 -0
- package/pipeline/scripts/graph-query.mjs +191 -0
- package/pipeline/scripts/graph-report.mjs +237 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +13 -10
- package/pipeline/scripts/test-gap-rules/ios.json +38 -10
- package/pipeline/scripts/test-gap-scan.mjs +2 -21
- package/pipeline/scripts/uninstall.mjs +11 -2
- package/pipeline/scripts/validate-analysis-doc.mjs +85 -23
- package/pipeline/scripts/validate-code-graph.mjs +174 -0
- package/pipeline/skills/.skills-index.json +14 -3
- package/pipeline/skills/shared/README.md +6 -5
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +106 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +11 -11
- package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +4 -4
- package/pipeline/skills/skills-index.md +4 -3
|
@@ -9,14 +9,14 @@ Called with no args or `help`, show the usage guide in the user's preferred lang
|
|
|
9
9
|
|
|
10
10
|
## Language resolution
|
|
11
11
|
|
|
12
|
-
Help is the assistant's own explanation to the user - render it in `prefs.global.outputLanguage
|
|
12
|
+
Help is the assistant's own explanation to the user - render it in `prefs.global.outputLanguage`, falling back to `prefs.global.promptLanguage` on prefs files written before it existed. Two valid values: `"en"` (default) and `"tr"`; missing or malformed → `"en"`.
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
15
|
PREFS="$HOME/.claude/multi-agent-preferences.json"
|
|
16
16
|
LANG=$(jq -r '.global.outputLanguage // .global.promptLanguage // "en"' "$PREFS" 2>/dev/null || echo "en")
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Render **exactly one** of the two blocks below - the one matching `LANG`.
|
|
19
|
+
Render **exactly one** of the two blocks below - the one matching `LANG`. Never print both.
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -59,7 +59,7 @@ Pipeline (after Phase 0) - shown as visual cards in terminal:
|
|
|
59
59
|
only; a Short run has no plan, autopilot may not ask)
|
|
60
60
|
Phase 3: Dev -> TDD: test -> code -> build (Sonnet) + build queue
|
|
61
61
|
Phase 4: Review -> Deterministic gates + parallel AI review + Fable triage
|
|
62
|
-
(Claude Code: Fable + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
62
|
+
(Claude Code: Fable + Opus + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
63
63
|
Phase 5: Test -> Optional: switch to branch, test in Xcode
|
|
64
64
|
(only /multi-agent has it; every autopilot and local entry drops it)
|
|
65
65
|
Phase 6: Commit -> Commit -> push -> PR + issue body update (never auto-closes)
|
|
@@ -127,12 +127,12 @@ Post-Hoc & Side-Channel:
|
|
|
127
127
|
/multi-agent:build-optimize iOS-only Xcode build perf wrapper → benchmark + analyze + recommend-first .build-benchmark/optimization-plan.md
|
|
128
128
|
/multi-agent:create-jira ["desc"] [figma-url] [swagger-url] Create a Jira Task/Bug/Story matching team conventions (asks type + mining + active sprint + auto-sizing sections + preview & approval)
|
|
129
129
|
/multi-agent:diff-explain Map a Phase 4 triage finding back to specific diff lines
|
|
130
|
+
/multi-agent:graph Build and query the repo code graph (symbols, imports, references), LLM-free
|
|
130
131
|
/multi-agent:search Cross-task log search with smart ranking; --semantic queries triage corpus
|
|
131
132
|
/multi-agent:scan Skill security scan against tiered pattern catalog
|
|
132
133
|
/multi-agent:refactor Best practices + bug hunt + upstream drift + toolkit MCP research -> one plan, approval, dev + sync
|
|
133
134
|
/multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] [--skip-sweep] Pre-submission store readiness, iOS + Android, local-only: three symmetric gates per platform plus the running-app sweep. A skipped gate is never a pass. Validates only, never uploads.
|
|
134
|
-
/multi-agent:testflight-validation [repo] [--ipa=|--archive=] iOS-pinned alias of :store-ready
|
|
135
|
-
the name you reach for when the target is TestFlight. Same three gates, one implementation.
|
|
135
|
+
/multi-agent:testflight-validation [repo] [--ipa=|--archive=] iOS-pinned alias of :store-ready. Same three gates, one implementation.
|
|
136
136
|
/multi-agent:ios-coding-standard [module] Audit an iOS module against the 99-rule coding-standard registry -> remediation
|
|
137
137
|
plan + one-page onboarding summary -> hand off to /multi-agent or :local. Read-only, never edits source.
|
|
138
138
|
|
|
@@ -143,7 +143,7 @@ Setup & Maintenance:
|
|
|
143
143
|
/multi-agent:stack [ids...] Enable stack plugin(s); multi-select: ids together (ios backend) or no arg -> native picker (common always on)
|
|
144
144
|
/multi-agent:sync Sync ecosystem (Claude Code + Copilot CLI + pipeline + website + toolkit MCP)
|
|
145
145
|
/multi-agent:update Pull latest pipeline + reinstall + run migrations
|
|
146
|
-
/multi-agent:uninstall Uninstall pipeline from every CLI (--all-data also clears settings +
|
|
146
|
+
/multi-agent:uninstall Uninstall pipeline from every CLI (--all-data also clears settings, logs, memory + knowledge; tokens always intact)
|
|
147
147
|
|
|
148
148
|
------------------------------------------------------------
|
|
149
149
|
|
|
@@ -334,7 +334,7 @@ Pipeline (Phase 0'dan sonra) - terminalde görsel kart olarak görünür:
|
|
|
334
334
|
etkileşimli; Kısa'da plan yok, autopilot soru soramaz)
|
|
335
335
|
Phase 3: Dev -> TDD: test -> kod -> build (Sonnet) + build queue
|
|
336
336
|
Phase 4: Review -> Deterministik kapılar + paralel AI review + Fable triage
|
|
337
|
-
(Claude Code: Fable + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
337
|
+
(Claude Code: Fable + Opus + Sonnet · Copilot CLI: GPT-5.4 + Opus + Sonnet)
|
|
338
338
|
Phase 5: Test -> Opsiyonel: branch'e geç, Xcode'da test
|
|
339
339
|
(yalnız /multi-agent'ta var; her autopilot ve local girişi düşürür)
|
|
340
340
|
Phase 6: Commit -> Commit -> push -> PR + issue body güncelleme (hiç auto-close yok)
|
|
@@ -401,12 +401,12 @@ Post-Hoc & Side-Channel:
|
|
|
401
401
|
/multi-agent:build-optimize iOS-only Xcode build performance wrapper → benchmark + analiz + recommend-first .build-benchmark/optimization-plan.md
|
|
402
402
|
/multi-agent:create-jira ["açıklama"] [figma-url] [swagger-url] Takım standartlarına uygun Jira Task/Bug/Story oluştur (tip sorar + convention mining + aktif sprint + auto-sizing bölümler + önizleme & onay)
|
|
403
403
|
/multi-agent:diff-explain Phase 4 triage bulgusunu diff satırlarına eşle
|
|
404
|
+
/multi-agent:graph Repo kod grafiğini kur ve sorgula (semboller, import'lar, referanslar), LLM'siz
|
|
404
405
|
/multi-agent:search Task log'larında akıllı arama; --semantic triage corpus'unu sorgular
|
|
405
406
|
/multi-agent:scan Skill güvenlik taraması (tiered pattern catalog)
|
|
406
407
|
/multi-agent:refactor Uyarlanmış best-practice + bug avı + upstream-drift + multi-agent-toolkit MCP araştırması -> tek plan, onay, dev + sync
|
|
407
408
|
/multi-agent:store-ready [repo] [--archive=|--ipa=|--aab=|--apk=] [--skip-sweep] Yükleme öncesi store hazırlığı, iOS + Android, yalnızca lokal: platform başına 3 simetrik kapı artı çalışan-app sweep'i. Atlanan kapı asla pass sayılmaz. Sadece doğrular, asla yüklemez.
|
|
408
|
-
/multi-agent:testflight-validation [repo] [--ipa=|--archive=] :store-ready'nin iOS
|
|
409
|
-
TestFlight olduğunda akla gelen isim olduğu için korunuyor. Aynı 3 kapı, tek implementasyon.
|
|
409
|
+
/multi-agent:testflight-validation [repo] [--ipa=|--archive=] :store-ready'nin iOS alias'ı. Aynı 3 kapı, tek implementasyon.
|
|
410
410
|
/multi-agent:ios-coding-standard [modül] Bir iOS modülünü 99 kurallık kodlama-standardı registry'sine göre denetler -> düzeltme
|
|
411
411
|
planı + tek sayfalık onboarding özeti -> /multi-agent veya :local'e devreder. Read-only, kaynağı hiç düzenlemez.
|
|
412
412
|
|
|
@@ -417,7 +417,7 @@ Setup & Maintenance:
|
|
|
417
417
|
/multi-agent:stack [ids...] Stack plugin'lerini etkinleştir; çoklu seçim: id'ler yan yana (ios backend) ya da argümansız -> native picker (common hep açık)
|
|
418
418
|
/multi-agent:sync Ekosistemi senkronize et (Claude Code + Copilot CLI + pipeline + website + multi-agent-toolkit MCP)
|
|
419
419
|
/multi-agent:update En son pipeline'ı çek + reinstall + migration çalıştır
|
|
420
|
-
/multi-agent:uninstall Pipeline'ı tüm CLI'lerden kaldır (--all-data ayar +
|
|
420
|
+
/multi-agent:uninstall Pipeline'ı tüm CLI'lerden kaldır (--all-data ayar, log, hafıza + bilgi tabanını da siler; token'a dokunulmaz)
|
|
421
421
|
|
|
422
422
|
------------------------------------------------------------
|
|
423
423
|
|
|
@@ -34,7 +34,7 @@ You already did the work locally - wrote code on the current branch and maybe
|
|
|
34
34
|
|
|
35
35
|
```
|
|
36
36
|
Phase 0: Init → project/branch detect, resolve base + diff (work-already-done), Jira id, state (NO worktree)
|
|
37
|
-
Phase 4: Review → deterministic gates + parallel review (Fable + Sonnet) + Fable triage
|
|
37
|
+
Phase 4: Review → deterministic gates + parallel review (Fable + Opus + Sonnet) + Fable triage
|
|
38
38
|
Phase 5: Build+Test → stack-aware build gate + run existing tests; SUCCESS required (automated, not the interactive user-test)
|
|
39
39
|
Phase 6: Commit → commit remaining local changes + push + open PR if none exists
|
|
40
40
|
Phase 7: Report → technical analysis + Jira comment with test scenarios (channels: Jira / PR / Confluence / Wiki)
|
|
@@ -52,7 +52,7 @@ Phases 1-3 (Analysis / Planning / Dev) are skipped by design - `ship` treats t
|
|
|
52
52
|
|
|
53
53
|
## Phase execution (reuse the existing phase contracts)
|
|
54
54
|
|
|
55
|
-
- **Phase 4 Review** - run per `$HOME/.claude/multi-agent-refs/phases/phase-4-review.md` against the resolved diff: deterministic gates (Step 1.x), stack-specific parallel reviewers (Fable + Sonnet on Claude Code; GPT + Opus + Sonnet on Copilot CLI), Fable triage → `triage.accepted`. Blocking/important accepted findings:
|
|
55
|
+
- **Phase 4 Review** - run per `$HOME/.claude/multi-agent-refs/phases/phase-4-review.md` against the resolved diff: deterministic gates (Step 1.x), stack-specific parallel reviewers (Fable + Opus + Sonnet on Claude Code; GPT + Opus + Sonnet on Copilot CLI), Fable triage → `triage.accepted`. Blocking/important accepted findings:
|
|
56
56
|
- interactive: present them and ask (`AskUserQuestion`) whether to fix now (loop back through a minimal Phase-3-style TDD fix) or proceed;
|
|
57
57
|
- `autopilot` (or `prefs.global.resumeLocal.autoFix == true`): auto-fix accepted blocking/important findings, then re-review the fix, before advancing.
|
|
58
58
|
- **Phase 5 Build+Test** - the **automated success gate** (this is what "build+test success" means here; 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.**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Run parallel review on a branch's diff or a Pull Request:
|
|
3
|
-
description-tr: "Bir branch diff'i veya Pull Request üzerinde paralel review koşar: Claude Code'da
|
|
2
|
+
description: "Run parallel review on a branch's diff or a Pull Request: 3 models on Claude Code (Fable + Opus + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonnet). On PR input, posts per-finding inline comments and sets approve/needs-work review state. Use when a branch diff or a pull request needs reviewing before it merges."
|
|
3
|
+
description-tr: "Bir branch diff'i veya Pull Request üzerinde paralel review koşar: Claude Code'da 3 model (Fable + Opus + Sonnet), Copilot CLI'da 3 model (GPT + Opus + Sonnet). PR girdisinde bulgu başına inline yorum atar ve approve/needs-work durumunu işaretler."
|
|
4
4
|
argument-hint: "[#N | repo#N | PR-URL | branch] - optional: PR by number/URL, repo+number, or local branch. Supports GitHub and Bitbucket Server URLs. If omitted (interactive), open GitHub + Bitbucket PRs are listed for multi-select; autopilot falls back to the current branch."
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -175,7 +175,7 @@ Scope note: a guide governs only files under its own directory - a guide found
|
|
|
175
175
|
|
|
176
176
|
### 3. Launch parallel reviewers - host-CLI dependent
|
|
177
177
|
|
|
178
|
-
**Claude Code (
|
|
178
|
+
**Claude Code (3 in parallel):**
|
|
179
179
|
- Agent 1: `claude-fable-5` → security + architecture
|
|
180
180
|
- Agent 2: `claude-sonnet-5` → general quality
|
|
181
181
|
|
|
@@ -16,7 +16,7 @@ Read `$HOME/.claude/multi-agent-refs/analysis/review.md` and execute it:
|
|
|
16
16
|
|
|
17
17
|
1. **Resolve** the document from a local path, a Confluence URL or `pageId`, or a Jira key. With no argument, offer the recent analyses from `~/Desktop/multiAgentAnalysis/` and from each selected repo's `analysis/`, newest first.
|
|
18
18
|
2. **Deterministic gates first**: `validate-analysis-doc.mjs` on the document, and `build-references.mjs --check` when the run's state JSON is available (`--state`, or a fresh analysis). Their output is reported verbatim, before any model reads the document. A finding a script already proves does not need an opinion.
|
|
19
|
-
3. **Parallel model review** against the rubric (buildability, evidence, spine, altitude, admitted gaps, contradiction), CLI-aware:
|
|
19
|
+
3. **Parallel model review** against the rubric (buildability, evidence, spine, altitude, admitted gaps, contradiction), CLI-aware: 3 models on Claude Code, 3 on Copilot CLI.
|
|
20
20
|
4. **Fable triage** into Blocker / Important / Suggestion, dropping duplicates and anything the document answers elsewhere.
|
|
21
21
|
5. **Report**, naming the profile it judged against and, explicitly, what was NOT checked.
|
|
22
22
|
6. **Output** on request only: chat (default), Confluence comment, Jira comment, or a `-review.md` beside the document.
|
|
@@ -16,7 +16,7 @@ When invoked, it synchronizes all targets in order. It detects what changed, upd
|
|
|
16
16
|
| Arg | Meaning |
|
|
17
17
|
|---|---|
|
|
18
18
|
| (none) | Full ecosystem sync: Claude Code, Copilot CLI, pipeline repo, website, multi-agent-toolkit MCP server. |
|
|
19
|
-
| `release` | Full sync + version bump + tag + npm publish + website deploy (
|
|
19
|
+
| `release` | Full sync + version bump + tag + npm publish + website deploy (plus the multi-agent-toolkit ship path) |
|
|
20
20
|
| `multi-agent-toolkit` | Run Step 3d only: gate, commit and publish the companion MCP server |
|
|
21
21
|
| `--platform=<macos\|linux\|windows>` | Override automatic platform detection. For CI / cross-platform smoke. |
|
|
22
22
|
| `"change description"` | Apply the description to every target at once |
|
|
@@ -59,7 +59,7 @@ Run every step automatically:
|
|
|
59
59
|
```
|
|
60
60
|
Step 1: PLATFORM Detect macOS / Linux / Windows (Git Bash / WSL); export PLATFORM env
|
|
61
61
|
Step 1.5: DETECT Compare timestamps, find stale targets
|
|
62
|
-
Step 2: COPILOT Claude Code -> Copilot CLI (instructions +
|
|
62
|
+
Step 2: COPILOT Claude Code -> Copilot CLI (instructions + 54 sub-command skills)
|
|
63
63
|
Step 2b: CODEX Claude Code -> Codex CLI (1 router skill + 51 specs as refs + 8 agent TOML)
|
|
64
64
|
Step 3: REPO Claude Code -> pipeline repo (genericized, personal data scrub, bash -n on all sh)
|
|
65
65
|
Step 3c: PLUGINS pipeline shared/external -> multi-agent-plugins marketplace (rebuild knowledge/,
|
|
@@ -166,7 +166,7 @@ If nothing is stale → report "All targets up to date" and stop.
|
|
|
166
166
|
Unlike the Copilot step, this one does **not** hand-copy files. The Codex tree is a
|
|
167
167
|
*transform* of the Claude tree, not a mirror of it, and the transform is real work:
|
|
168
168
|
|
|
169
|
-
- the
|
|
169
|
+
- the 54 sub-command specs become reference files, because Codex silently truncates
|
|
170
170
|
its skills block (see `cross-cli-contract.md` 2.6 for the measurement)
|
|
171
171
|
- every `$HOME/.claude/...` reference to a CLI-owned tree is retargeted, with
|
|
172
172
|
`agents/<persona>.md` becoming `.toml` and the dispatcher becoming the router skill
|
|
@@ -467,7 +467,7 @@ When invoked with the `release` argument:
|
|
|
467
467
|
3. LINT + TEST ESLint + smoke tests
|
|
468
468
|
4. VERSION package.json version bump (patch/minor/major)
|
|
469
469
|
5. Commit + TAG git commit + git tag v{VERSION}
|
|
470
|
-
6. PUSH git push --tags
|
|
470
|
+
6. PUSH git push --tags; publish is local (release.yml off)
|
|
471
471
|
7. DEV-TOOLKIT Ship the companion MCP server if it moved (Step 3d gates, then publish)
|
|
472
472
|
8. WEBSITE Version + features -> {website-host} (maintainer identity, build verified Ready)
|
|
473
473
|
9. COPILOT Copilot CLI instructions + skills sync
|
|
@@ -489,18 +489,18 @@ same 51 specs as reference files rather than as peer skills, via Step 2b - see
|
|
|
489
489
|
|-------------|-------------|
|
|
490
490
|
| `~/.claude/commands/multi-agent/{cmd}/SKILL.md` | `~/.copilot/skills/multi-agent-{cmd}/SKILL.md` |
|
|
491
491
|
|
|
492
|
-
**
|
|
492
|
+
**54 commands are synced** (canonical inventory - must match `cross-cli-contract.md` section 1; drift = contract violation):
|
|
493
493
|
|
|
494
494
|
```
|
|
495
495
|
analysis, analysis-resolve, autopilot, build-optimize, channels,
|
|
496
496
|
complaint-analysis, create-jira, design-check, dev, dev-autopilot, dev-local,
|
|
497
|
-
dev-local-autopilot, diff-explain, feedback, forget, garbage-collect,
|
|
498
|
-
ios-coding-standard, issue, jira, kill, language, local,
|
|
499
|
-
log, manual-test, prune-logs, prune-prompts, purge,
|
|
500
|
-
resume-local, review, review-analysis, review-issue,
|
|
501
|
-
save, scan, search, setup, stack, status,
|
|
502
|
-
|
|
503
|
-
testflight-validation, uninstall, update
|
|
497
|
+
dev-local-autopilot, diff-explain, feedback, forget, garbage-collect,
|
|
498
|
+
graph, help, ios-coding-standard, issue, jira, kill, language, local,
|
|
499
|
+
local-autopilot, log, manual-test, prune-logs, prune-prompts, purge,
|
|
500
|
+
refactor, resume, resume-local, review, review-analysis, review-issue,
|
|
501
|
+
review-jira, routines, save, scan, search, setup, stack, status,
|
|
502
|
+
store-ready, sync, test, test-accessibility, test-dark-mode,
|
|
503
|
+
test-dynamic-type, test-screenshots, testflight-validation, uninstall, update
|
|
504
504
|
```
|
|
505
505
|
|
|
506
506
|
**NOT synced**: `$HOME/.claude/multi-agent-refs/*` - lazy-load references, Claude Code specific
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are always left untouched; --all-data also clears pipeline settings and
|
|
2
|
+
description: "Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are always left untouched; --all-data also clears pipeline settings, logs, per-repo memory and the knowledge base. Asks for double confirmation. Use when the pipeline should be removed from Claude Code and Copilot CLI."
|
|
3
3
|
disable-model-invocation: true
|
|
4
|
-
description-tr: "Pipeline'ı Claude Code + Copilot CLI'dan kaldırır. Keychain erişim token'larına asla dokunulmaz; --all-data ayrıca pipeline
|
|
4
|
+
description-tr: "Pipeline'ı Claude Code + Copilot CLI'dan kaldırır. Keychain erişim token'larına asla dokunulmaz; --all-data ayrıca pipeline ayarlarını, loglarını, repo bazlı hafızayı ve bilgi tabanını da siler. Çift onay ister."
|
|
5
5
|
argument-hint: "[--dry-run] [--all-data] [--claude] [--copilot] [--target=<path>]"
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -19,7 +19,7 @@ Uninstalls the pipeline itself from the system. **This is different from `:purge
|
|
|
19
19
|
| Mode | Flag | Removes | Keeps |
|
|
20
20
|
|---|---|---|---|
|
|
21
21
|
| **Standard** (default) | (none) | distributed files: commands, skills, agents, scripts, refs, schemas, lib (except the credential reader) | tokens + `lib/credential-store.sh` + the `multi-agent-toolkit` MCP registration, `CLAUDE.md`, `rules/`, `multi-agent-preferences.json`, all logs |
|
|
22
|
-
| **Full cleanup** | `--all-data` | standard PLUS `~/.claude/logs/multi-agent/` (task logs, state, metrics, audit) and everything in `multi-agent-preferences.json` **except `global.keychainMapping`** | tokens + the credential reader + the mapping that names them + the MCP registration, `CLAUDE.md`, `rules/` (user-owned) |
|
|
22
|
+
| **Full cleanup** | `--all-data` | standard PLUS `~/.claude/logs/multi-agent/` (task logs, state, metrics, audit), `~/.claude/memory/multi-agent/` (learnings ledger + triage corpus), `~/.claude/knowledge/` (per-repo knowledge base + code graph) and everything in `multi-agent-preferences.json` **except `global.keychainMapping`** | tokens + the credential reader + the mapping that names them + the MCP registration, `CLAUDE.md`, `rules/` (user-owned) |
|
|
23
23
|
|
|
24
24
|
Tokens in the OS credential store are NEVER removed by either mode.
|
|
25
25
|
|
|
@@ -35,22 +35,24 @@ Tokens in the OS credential store are NEVER removed by either mode.
|
|
|
35
35
|
- Local-only alias wrappers (`local-only: true` frontmatter) under `commands/multi-agent/` (user-authored, exist nowhere else)
|
|
36
36
|
- User-authored skill dirs and agent files (only pipeline-shipped names are removed)
|
|
37
37
|
|
|
38
|
-
Settings (`multi-agent-preferences.json`)
|
|
38
|
+
Settings (`multi-agent-preferences.json`), the log root (`~/.claude/logs/multi-agent/`), the memory root (`~/.claude/memory/multi-agent/`) and the knowledge root (`~/.claude/knowledge/`) are kept by default and removed only when the user picks full cleanup (`--all-data`). The last two are the ones a user usually means by "remove everything": they hold prose about a private codebase and, in `code-graph.json`, every symbol name in it.
|
|
39
|
+
|
|
40
|
+
Per-repo memory written INSIDE a repo (`$PROJECT_ROOT/.multi-agent/memory/`) is never touched by either mode. It lives in the user's working tree, may be committed, and uninstalling a tool is not a licence to edit their repos.
|
|
39
41
|
|
|
40
42
|
## Steps
|
|
41
43
|
|
|
42
44
|
1. **Determine scope** - parse `$ARGUMENTS`:
|
|
43
45
|
- No target flag: every installed target (default)
|
|
44
46
|
- `--claude / --copilot`: selective
|
|
45
|
-
- `--all-data`: full cleanup (also removes settings
|
|
47
|
+
- `--all-data`: full cleanup (also removes settings, logs, per-repo memory and the knowledge base)
|
|
46
48
|
- `--target=<path>`: adapter target (default: cwd)
|
|
47
49
|
- `--dry-run`: report only, delete nothing
|
|
48
50
|
|
|
49
51
|
2. **Ask the cleanup depth** (skip if the user already passed `--all-data` or `--dry-run`) - native `AskUserQuestion` picker in `outputLanguage`:
|
|
50
52
|
- `question`: "How much should uninstall remove? Tokens are preserved either way."
|
|
51
53
|
- `header`: "Scope" · `options`:
|
|
52
|
-
`{ label: "Standard", description: "Remove pipeline files; keep settings
|
|
53
|
-
`{ label: "Full cleanup", description: "Also remove settings
|
|
54
|
+
`{ label: "Standard", description: "Remove pipeline files; keep settings, logs, memory, knowledge" }`,
|
|
55
|
+
`{ label: "Full cleanup", description: "Also remove settings, logs, per-repo memory and the knowledge base" }`
|
|
54
56
|
- **Full cleanup** adds `--all-data` to the flag set below.
|
|
55
57
|
|
|
56
58
|
3. **Show a preview** (run the script with `--dry-run`, carrying the chosen flags):
|
|
@@ -88,6 +88,8 @@ MAX_IDS_PER_CALL=50
|
|
|
88
88
|
FILE_KEY=""
|
|
89
89
|
NODE_ID=""
|
|
90
90
|
SECTION_URL=""
|
|
91
|
+
DISCOVER=0
|
|
92
|
+
FEATURE_SLUG=""
|
|
91
93
|
OUTPUT_DIR=""
|
|
92
94
|
SCALE="2"
|
|
93
95
|
FORMAT="png"
|
|
@@ -118,6 +120,12 @@ Options:
|
|
|
118
120
|
--file-key Figma file key (or branchKey for branch URLs).
|
|
119
121
|
--node-id Node id; may use either "-" or ":" separator.
|
|
120
122
|
--section Section URL; child FRAMEs are auto-discovered.
|
|
123
|
+
--discover-sections With --file-key and --feature-slug: list every SECTION or
|
|
124
|
+
FRAME in the file whose name matches the feature, with a
|
|
125
|
+
channel guess. One GET ?depth=2. Answers "does this file also
|
|
126
|
+
hold the other channel's design" before a run may write that a
|
|
127
|
+
channel has none. Emits JSON, downloads nothing.
|
|
128
|
+
--feature-slug Feature name to match against, for --discover-sections.
|
|
121
129
|
--output-dir Output directory. Default: /tmp/figma-screenshots-<ts>.
|
|
122
130
|
--scale Render scale (1-4). Default: 2.
|
|
123
131
|
--format Image format. Default: png.
|
|
@@ -387,6 +395,8 @@ while [ "$#" -gt 0 ]; do
|
|
|
387
395
|
--file-key) FILE_KEY="${2:-}"; shift 2 ;;
|
|
388
396
|
--node-id) NODE_ID="${2:-}"; shift 2 ;;
|
|
389
397
|
--section) SECTION_URL="${2:-}"; shift 2 ;;
|
|
398
|
+
--discover-sections) DISCOVER=1; shift ;;
|
|
399
|
+
--feature-slug) FEATURE_SLUG="${2:-}"; shift 2 ;;
|
|
390
400
|
--output-dir) OUTPUT_DIR="${2:-}"; shift 2 ;;
|
|
391
401
|
--scale) SCALE="${2:-2}"; shift 2 ;;
|
|
392
402
|
--format) FORMAT="${2:-png}"; shift 2 ;;
|
|
@@ -394,12 +404,16 @@ while [ "$#" -gt 0 ]; do
|
|
|
394
404
|
esac
|
|
395
405
|
done
|
|
396
406
|
|
|
397
|
-
if [
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
if [ -
|
|
402
|
-
|
|
407
|
+
if [ "$DISCOVER" -eq 1 ]; then
|
|
408
|
+
[ -n "$FILE_KEY" ] || die 1 "--discover-sections requires --file-key"
|
|
409
|
+
[ -n "$FEATURE_SLUG" ] || die 1 "--discover-sections requires --feature-slug"
|
|
410
|
+
else
|
|
411
|
+
if [ -n "$SECTION_URL" ] && { [ -n "$FILE_KEY" ] || [ -n "$NODE_ID" ]; }; then
|
|
412
|
+
die 1 "--section is mutually exclusive with --file-key/--node-id"
|
|
413
|
+
fi
|
|
414
|
+
if [ -z "$SECTION_URL" ] && { [ -z "$FILE_KEY" ] || [ -z "$NODE_ID" ]; }; then
|
|
415
|
+
die 1 "either --section <url> or both --file-key and --node-id are required"
|
|
416
|
+
fi
|
|
403
417
|
fi
|
|
404
418
|
|
|
405
419
|
require_cmd curl
|
|
@@ -421,6 +435,90 @@ if [ -z "$OUTPUT_DIR" ]; then
|
|
|
421
435
|
fi
|
|
422
436
|
mkdir -p "$OUTPUT_DIR"
|
|
423
437
|
|
|
438
|
+
# --- Discovery mode ---------------------------------------------------------
|
|
439
|
+
# One GET /v1/files/{key}?depth=3 lists every page, its sections and their frames,
|
|
440
|
+
# which is what makes frameCount real rather than always zero.
|
|
441
|
+
# That is enough to answer "does this file also hold the other channel's design",
|
|
442
|
+
# which a run has to ask before it may write that a channel has no design at all.
|
|
443
|
+
# Matching is diacritic- and case-insensitive because the same feature is spelled
|
|
444
|
+
# "Elite Kart" on one section and "Elit Kart" on its sibling.
|
|
445
|
+
|
|
446
|
+
run_discover_mode() {
|
|
447
|
+
local body
|
|
448
|
+
# Same as fetch_with_retry: the token goes through a curl config on a process
|
|
449
|
+
# substitution, never argv, because argv is readable from ps.
|
|
450
|
+
body=$(curl -sS --max-time "$HTTP_TIMEOUT" --connect-timeout 5 \
|
|
451
|
+
-K <(printf 'header = "X-Figma-Token: %s"\n' "$FIGMA_TOKEN") \
|
|
452
|
+
"https://api.figma.com/v1/files/${FILE_KEY}?depth=3") || die 3 "file tree fetch failed"
|
|
453
|
+
|
|
454
|
+
printf '%s' "$body" | FEATURE_SLUG="$FEATURE_SLUG" FILE_KEY="$FILE_KEY" python3 -c '
|
|
455
|
+
import json, os, re, sys, unicodedata
|
|
456
|
+
|
|
457
|
+
def fold(t):
|
|
458
|
+
t = unicodedata.normalize("NFKD", t)
|
|
459
|
+
t = "".join(c for c in t if not unicodedata.combining(c))
|
|
460
|
+
# Turkish dotless i and the rest survive NFKD, so map them explicitly.
|
|
461
|
+
t = t.translate(str.maketrans("ıİşŞğĞçÇöÖüÜ", "iIsSgGcCoOuU"))
|
|
462
|
+
return re.sub(r"[^a-z0-9]+", " ", t.lower()).strip()
|
|
463
|
+
|
|
464
|
+
CHANNELS = [
|
|
465
|
+
("mobileweb", ["mobileweb", "mobile web", "mobil web", "responsive"]),
|
|
466
|
+
("mobile", ["mobile app", "mobil uygulama", "app", "ios", "android", "mobil", "mobile"]),
|
|
467
|
+
("desktop", ["desktop", "masaustu", "web"]),
|
|
468
|
+
]
|
|
469
|
+
|
|
470
|
+
def channel_of(name):
|
|
471
|
+
f = fold(name)
|
|
472
|
+
for label, tokens in CHANNELS:
|
|
473
|
+
for tok in tokens:
|
|
474
|
+
if re.search(r"\b" + re.escape(fold(tok)) + r"\b", f):
|
|
475
|
+
return label
|
|
476
|
+
return None
|
|
477
|
+
|
|
478
|
+
raw = sys.stdin.read()
|
|
479
|
+
try:
|
|
480
|
+
doc = json.loads(raw).get("document", {})
|
|
481
|
+
except Exception:
|
|
482
|
+
print(json.dumps({"error": "unparseable file response"})); sys.exit(3)
|
|
483
|
+
|
|
484
|
+
slug_words = [w for w in fold(os.environ["FEATURE_SLUG"]).split() if len(w) > 2]
|
|
485
|
+
out, weak, pages = [], [], 0
|
|
486
|
+
for page in doc.get("children", []) or []:
|
|
487
|
+
pages += 1
|
|
488
|
+
for node in page.get("children", []) or []:
|
|
489
|
+
if node.get("type") not in ("SECTION", "FRAME"):
|
|
490
|
+
continue
|
|
491
|
+
name = node.get("name", "")
|
|
492
|
+
f = fold(name)
|
|
493
|
+
hits = [w for w in slug_words if w in f]
|
|
494
|
+
if not hits:
|
|
495
|
+
continue
|
|
496
|
+
# A single shared word is not a match: "Mil Hediye Et" shares "hediye" with
|
|
497
|
+
# "Elite Kart Hediye Et" and is a different feature. Require half the slug,
|
|
498
|
+
# at least two words. Weak hits are reported separately, never dropped in
|
|
499
|
+
# silence, because a run has to be able to say what it looked at.
|
|
500
|
+
need = max(2, (len(slug_words) + 1) // 2) if len(slug_words) > 1 else 1
|
|
501
|
+
row = {
|
|
502
|
+
"id": node.get("id"),
|
|
503
|
+
"name": name,
|
|
504
|
+
"type": node.get("type"),
|
|
505
|
+
"page": page.get("name"),
|
|
506
|
+
"frameCount": len(node.get("children", []) or []),
|
|
507
|
+
"channelGuess": channel_of(name),
|
|
508
|
+
"matchedWords": hits,
|
|
509
|
+
}
|
|
510
|
+
(out if len(hits) >= need else weak).append(row)
|
|
511
|
+
print(json.dumps({
|
|
512
|
+
"fileKey": os.environ["FILE_KEY"],
|
|
513
|
+
"featureSlug": os.environ["FEATURE_SLUG"],
|
|
514
|
+
"pagesScanned": pages,
|
|
515
|
+
"tokensTried": slug_words,
|
|
516
|
+
"candidates": sorted(out, key=lambda c: (c["channelGuess"] or "zz", c["id"])),
|
|
517
|
+
"weakMatches": sorted(weak, key=lambda c: c["id"]),
|
|
518
|
+
}, ensure_ascii=False, indent=2))
|
|
519
|
+
'
|
|
520
|
+
}
|
|
521
|
+
|
|
424
522
|
# --- Section mode -----------------------------------------------------------
|
|
425
523
|
|
|
426
524
|
run_section_mode() {
|
|
@@ -548,7 +646,9 @@ PY
|
|
|
548
646
|
|
|
549
647
|
# --- Dispatch ---------------------------------------------------------------
|
|
550
648
|
|
|
551
|
-
if [
|
|
649
|
+
if [ "$DISCOVER" -eq 1 ]; then
|
|
650
|
+
run_discover_mode
|
|
651
|
+
elif [ -n "$SECTION_URL" ]; then
|
|
552
652
|
run_section_mode
|
|
553
653
|
else
|
|
554
654
|
run_single_mode
|