@mmerterden/multi-agent-pipeline 16.18.0 → 16.19.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 +45 -0
- package/README.md +5 -5
- package/README.tr.md +2 -2
- package/docs/FIGMA_PIPELINE.md +1 -1
- package/docs/adr/0001-three-model-triage.md +4 -2
- package/docs/architecture.md +2 -2
- package/docs/ecosystem.md +13 -11
- package/docs/features.md +2 -2
- package/index.js +1 -1
- package/install/_common.mjs +25 -1
- package/install/_dev-only-files.mjs +2 -2
- package/install/_mcp-register.mjs +4 -3
- package/install/_plugin-skills.mjs +1 -3
- package/install/copilot.mjs +18 -9
- package/install/index.mjs +2 -4
- package/install/templates/copilot-instructions.md +7 -7
- package/package.json +1 -1
- package/pipeline/claude-md-template.md +2 -2
- package/pipeline/commands/multi-agent/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/design-check/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/review/SKILL.md +27 -14
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/sync/SKILL.md +2 -2
- package/pipeline/commands/sim-test.md +54 -15
- package/pipeline/lib/credential-inventory.sh +15 -2
- package/pipeline/lib/credential-store-resolver.sh +14 -4
- package/pipeline/lib/credential-store.sh +8 -2
- package/pipeline/lib/extract-conventions.sh +1 -14
- package/pipeline/lib/fetch-confluence.sh +12 -4
- package/pipeline/lib/fetch-crashlytics.sh +11 -8
- package/pipeline/lib/fetch-document.sh +1 -1
- package/pipeline/lib/fetch-figma-annotations.sh +7 -5
- package/pipeline/lib/fetch-fortify.sh +5 -3
- package/pipeline/lib/fetch-graylog.sh +5 -3
- package/pipeline/lib/figma-mcp-refresh.sh +1 -1
- package/pipeline/lib/figma-screenshot.sh +27 -24
- package/pipeline/lib/figma-token.sh +8 -4
- package/pipeline/lib/issue-fetcher.sh +0 -1
- package/pipeline/lib/jira-publish.sh +7 -5
- package/pipeline/lib/md2confluence-v3.py +13 -7
- package/pipeline/lib/multi-repo-pipeline.sh +18 -8
- package/pipeline/lib/plan-todos.sh +11 -0
- package/pipeline/lib/post-pr-review.sh +9 -2
- package/pipeline/lib/repo-cache.sh +18 -10
- package/pipeline/lib/review-watch.sh +60 -14
- package/pipeline/lib/shadow-git.sh +8 -4
- package/pipeline/lib/vercel-deploy.sh +2 -2
- package/pipeline/multi-agent-refs/_dev-context.md +5 -2
- package/pipeline/multi-agent-refs/analysis/locked.md +4 -4
- package/pipeline/multi-agent-refs/analysis/render.md +1 -1
- package/pipeline/multi-agent-refs/cross-cli-contract.md +1 -1
- package/pipeline/multi-agent-refs/outside-the-pipeline.md +6 -6
- package/pipeline/multi-agent-refs/phases/log-format.md +1 -1
- package/pipeline/multi-agent-refs/phases/modes.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +4 -2
- package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +3 -3
- package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +21 -16
- package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
- package/pipeline/rules/figma-pipeline.md +18 -72
- package/pipeline/rules/outside-the-pipeline.md +4 -3
- package/pipeline/schemas/agent-state.schema.json +1 -1
- package/pipeline/schemas/token-budget.json +1 -1
- package/pipeline/scripts/_stack-routing.mjs +1 -1
- package/pipeline/scripts/agent-guard.py +102 -21
- package/pipeline/scripts/anonymize-findings.mjs +7 -6
- package/pipeline/scripts/build-skills-index.mjs +14 -3
- package/pipeline/scripts/cost-budget-check.mjs +5 -3
- package/pipeline/scripts/cost-lib.sh +0 -15
- package/pipeline/scripts/diff-explain.mjs +22 -12
- package/pipeline/scripts/gc-refs.sh +6 -2
- package/pipeline/scripts/gc-tmp.sh +1 -1
- package/pipeline/scripts/gc-worktrees.sh +1 -1
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/github-ssh-setup.sh +7 -2
- package/pipeline/scripts/graph-build.mjs +2 -2
- package/pipeline/scripts/jira-wiki-escape.mjs +2 -1
- package/pipeline/scripts/keychain.py +12 -11
- package/pipeline/scripts/learning-curve.mjs +1 -1
- package/pipeline/scripts/migrate-prefs.mjs +1 -1
- package/pipeline/scripts/output-quality-check.sh +3 -1
- package/pipeline/scripts/phase-tracker.sh +1 -1
- package/pipeline/scripts/phase0-exit-gate.mjs +2 -1
- package/pipeline/scripts/plan-coverage-gate.mjs +2 -1
- package/pipeline/scripts/pre-commit-check.sh +23 -13
- package/pipeline/scripts/prune-logs.sh +1 -1
- package/pipeline/scripts/render-agent-log-cost.sh +3 -1
- package/pipeline/scripts/render-cost-summary.sh +4 -2
- package/pipeline/scripts/render-work-summary.sh +5 -3
- package/pipeline/scripts/repo-map.mjs +3 -2
- package/pipeline/scripts/scan-skills.sh +6 -2
- package/pipeline/scripts/search-logs.sh +8 -6
- package/pipeline/scripts/sign-skills.sh +3 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
- package/pipeline/scripts/triage-memory.mjs +25 -4
- package/pipeline/scripts/uninstall.mjs +20 -12
- package/pipeline/scripts/update-check.sh +2 -2
- package/pipeline/scripts/update-issue-progress.sh +6 -5
- package/pipeline/scripts/validate-analysis-doc.mjs +6 -6
- package/pipeline/scripts/verify-skills.sh +3 -1
- package/pipeline/scripts/worktree-finalize.sh +22 -10
- package/pipeline/skills/.skill-manifest.json +81 -57
- package/pipeline/skills/.skills-index.json +19 -19
- package/pipeline/skills/shared/README.md +8 -8
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +7 -7
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +23 -14
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +2 -2
- package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +56 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +0 -4
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +12 -24
- package/pipeline/skills/shared/external/app-store-changelog/references/release-notes-guidelines.md +34 -0
- package/pipeline/skills/shared/external/app-store-changelog/scripts/collect_release_changes.sh +33 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +7 -9
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +0 -4
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +0 -1
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +0 -14
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +13 -13
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +16 -16
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +6 -6
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +13 -13
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +23 -23
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +18 -18
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +30 -30
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +11 -11
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +33 -33
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +52 -52
- package/pipeline/skills/shared/external/ios-coding-standard/references/lint-local.sh +1 -1
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +11 -11
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -1
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +7 -3
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +9 -15
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +0 -5
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/Package.swift +17 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/Sources/MyApp/Resources/.keep +0 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/Sources/MyApp/main.swift +11 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/version.env +2 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/build_icon.sh +49 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/compile_and_run.sh +63 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/launch.sh +28 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/make_appcast.sh +82 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/package_app.sh +206 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/setup_dev_signing.sh +52 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/sign-and-notarize.sh +52 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/version.env +2 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/references/packaging.md +17 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/references/release.md +32 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/references/scaffold.md +79 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +0 -1
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +0 -4
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/approachable-concurrency.md +63 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/swift-6-2-concurrency.md +272 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/swiftui-concurrency-tour-wwdc.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/code-smells.md +150 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/profiling-intake.md +44 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/report-template.md +47 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/app-wiring.md +201 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/async-state.md +96 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/components-index.md +46 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/controls.md +57 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/deeplinks.md +66 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/focus.md +90 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/grids.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/haptics.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/input-toolbar.md +51 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/list.md +86 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/macos-settings.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/matched-transitions.md +59 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/media.md +73 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/menu-bar.md +101 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/navigationstack.md +159 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/overlay.md +45 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/performance.md +62 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/previews.md +48 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scrollview.md +87 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/searchable.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/sheets.md +155 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/split-views.md +72 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/tabview.md +114 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/theming.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/title-menus.md +93 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/top-bar.md +49 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/references/mv-patterns.md +161 -0
- package/pipeline/skills/skills-index.md +8 -8
- package/pipeline/skills/shared/external/help-skills/SKILL.md +0 -166
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,51 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
16
16
|
|
|
17
17
|
## [Unreleased]
|
|
18
18
|
|
|
19
|
+
## [16.19.0] - 2026-09-02
|
|
20
|
+
|
|
21
|
+
A review of the three repositories together (pipeline, toolkit MCP, plugin marketplace) with every test suite green found the defects the suites could not see. This release fixes what was found in the pipeline; `@mmerterden/multi-agent-toolkit-mcp` 3.8.0 and the marketplace plugins carry their own halves.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **The accessibility scenario audits, it does not only look.** `/multi-agent:test "accessibility"` promised "visual + MCP audit tool" and then inspected screenshots. It now calls `ios_accessibility_audit` / `android_accessibility_audit` on every screen, treats `measurable:false` as not audited rather than clean, and runs `ios_accessibility_audit_deep` when an XCUITest target exists. The full scenario ends with a crash sweep through `ios_list_crashes` / `android_list_crashes`. Nineteen of the toolkit's 87 tools had no pipeline caller; the ones the flows claim now have one.
|
|
26
|
+
- **The UI bug hunter reads before it looks.** `/multi-agent:test` took a full-resolution screenshot after every tap and sent it through the model: 2.9 MB of PNG per step, which is what made the loop feel slow. The flow now reads `ios_get_ui_tree` first (text, ~0.1 s) and picks tap targets from element frames, batches tap / wait / capture / tree sequences into one `agent_run_steps` round trip, writes bulk captures to files and looks only at the screens whose tree changed. Inline screenshots are compact by default in toolkit 3.9.0.
|
|
27
|
+
- **`lint-mcp-refs --strict-tools` probes the sibling checkout.** The tool-existence check only ran when a local path was registered; an `npx` registration meant it was skipped on every machine, including the maintainer's. It now also tries `$MULTI_AGENT_TOOLKIT_REPO` and `~/multi-agent-toolkit-mcp`, so the 73 referenced tools are verified against the live server.
|
|
28
|
+
- **`triage-memory --state` and `diff-explain --task-id` do what their usage said.** Both flags were documented and dead.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **Three reviewers on Claude Code, everywhere it is written down.** 16.12.0 added Opus as the third reviewer and left eight documents saying two: the orchestrator's own description, the standalone `review` command (which dispatched two agents under a "3 in parallel" heading), the triage prompt ("two reviewers returned findings"), the consensus rationale, `modes.md`, the architecture diagram, the README's "two-vendor host" claim and ADR-0001. Every host runs three; the Codex set is now in the standalone command too.
|
|
33
|
+
- **Phase 1 is Sonnet, Phase 2 is Fable, and the template, refs, help and telemetry tags all say so.** Four documents had three answers, and the cost ledger was attributing Phase 1 and 2 spend to opus.
|
|
34
|
+
- **Platform parity has one source order.** The schema and `_dev-context.md` said the check reads `state.siblings[]` "and nothing else"; the contract lists it fourth of four. A model following the schema skipped the step on every standalone review.
|
|
35
|
+
- **`rules/figma-pipeline.md` no longer ships a 31-command catalog of which 30 do not exist.** New installs received the retired list; the current skill surfaces replace it. Its CI claim for `smoke-no-mcp-in-dev-phases` now says where the gate actually runs.
|
|
36
|
+
- **Counts the tree can check.** 55 commands (not 51), 36 Locked decisions (not 35), "80+" toolkit tools where "83" was asserted, and the ecosystem table lists the eight tool categories that sum to 87. `package-lock.json` had stayed at 16.15.0 for three releases.
|
|
37
|
+
- **Phase-doc token budget 57850 -> 58250.** The three-reviewer roster, the worktree convention and the model corrections are real content; the total was sitting 18 tokens under its ceiling.
|
|
38
|
+
- **`install --target=` is refused instead of ignored.** No installer read it; it installed into `$HOME` and said nothing.
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- **The secret gate could not block a commit.** `pre-commit-check.sh` exited 1 and printed to stdout; the PreToolUse contract blocks on exit 2. A staged token went through. It also resolved staged paths against the working directory, so from a subdirectory every file was skipped. Exit 2, stderr, repo-root paths.
|
|
43
|
+
- **The attribution guard never saw the pipeline's own commits.** `git -C <worktree> commit` did not match `git\s+commit`. The guard now tokenises git's global options, and force-push is also caught for `+refspec` and `refs/heads/<protected>` forms.
|
|
44
|
+
- **Three smokes were decorative.** `smoke-language-axis`, `smoke-no-token-prompt` and `smoke-worktree-path-convention` did `cd pipeline` and then grepped `pipeline/...`, a path that does not exist, and printed ok. Pointed at the tree they found three real violations, now fixed, and one undocumented convention (worktrees live at `{projectRoot}/.worktrees/{taskId}`, now in Phase 0 Step 6).
|
|
45
|
+
- **Garbage collection could delete a running task's scratch.** The fresh-item guard was `find | head -1 | grep -q` under pipefail; with many fresh files `find` died of SIGPIPE and the guard failed open. `-print -quit` instead, in `gc-tmp`, `gc-worktrees` and `prune-logs`.
|
|
46
|
+
- **`uninstall` with no flags deleted the project's own `AGENTS.md` prose** from the pipeline heading to the next H1, through a fallback written for marker-less host files. Legacy adapter cleanup is opt-in and the fallback applies only to host files.
|
|
47
|
+
- **Every install removed `$HOME/.multi-agent` unconditionally,** a path also used for live per-repo state. Only known legacy entries are removed.
|
|
48
|
+
- **`install --copilot --link` wrote generated files into the source checkout** through the skills symlink. The skills root is a real directory; only authored trees are linked.
|
|
49
|
+
- **Four scripts did nothing from a path with a space.** The main-guard compared `import.meta.url` with an unencoded `file://` string; two of them are dispatch gates. `pathToFileURL` now.
|
|
50
|
+
- **Option parsers that hung or lied.** `fetch-figma-annotations.sh` spun at 100% CPU when an option was the last argument; twenty parsers in `lib/` and `scripts/` now fail with their documented exit code and a message instead of `shift` failing silently.
|
|
51
|
+
- **`vercel-deploy.sh deploy --prod` failed under the only bash macOS ships** (3.2.57: empty array under `set -u`).
|
|
52
|
+
- **`worktree-finalize.sh` reported every worktree but the last as unregistered** (a `while read` loop writing into a closed pipe), salvaged the tracker from a directory nothing writes to, and nested `.pipeline/.pipeline/` on a re-run.
|
|
53
|
+
- **`keychain.py set` put the secret on `security`'s argv,** visible in `ps`, and `credential-store.sh` routed every macOS write through it. Both use `security -i` over stdin; keychain.py's exit codes 2 and 4 are propagated.
|
|
54
|
+
- **`review-watch.sh` marked pull requests reviewed without reviewing them.** It now runs `post-pr-review.sh` for a head with findings and stamps only on success. `post-pr-review.sh`'s Bitbucket verdict PUT checks the status code; a 401 was "approve posted".
|
|
55
|
+
- **`figma-screenshot.sh --discover-sections` answered "this file holds no design" on an expired token** (curl without `--fail`). It exits 2 with the auth message; its temp files have traps and its output dir comes from `mktemp`.
|
|
56
|
+
- **`fetch-crashlytics.sh` and `figma-mcp-refresh.sh` exited with raw child codes** under `set -e`, so a VPN drop was diagnosed as a missing credential. Mapped to the documented 3 and 2.
|
|
57
|
+
- **Sourced from zsh, `credential-store-resolver.sh` printed the store path to stdout** and `figma-token.sh` asked for a single key named `figma figma_pat`.
|
|
58
|
+
- **`validate-analysis-doc.mjs` crashed on a document without front matter,** failed the gate on a check it called a warning, listed the correct Turkish word `Onay` as a typo, and cited "Locked 37" in a list of 36.
|
|
59
|
+
- **`multi-repo-pipeline.sh` committed `git add -A`** while its header said staged changes, and ignored `state.identity`. `plan-todos.sh` returned 0 for an unknown id. `update-issue-progress.sh` failed on macOS `mktemp` on the second call.
|
|
60
|
+
- **Smoke hygiene.** Thirty-six smokes: five asserted against the installed `~/.claude` copy instead of the repo, one passed when `sha256sum` was missing (`"" = ""`), eleven used predictable `/tmp` paths, five wrote probe files into the repo tree, five wrote into the real `$HOME`, four turned errexit on halfway through, four had assertions that could not fail, and the `THY` personal-data pattern matched `thyme` under `grep -i`.
|
|
61
|
+
- **Smaller ones.** `build-skills-index.mjs` recorded `|` and `>-` as descriptions for five skills, so `match-skills` could never score them; `learning-curve` and `aggregate-metrics` computed "cache ratio" with different formulas; `graph-build` omitted Go; `repo-map --include` matched substrings while documented as globs; `eval-mine-corpus` read the corpus from a path the writer never used inside a worktree; `gen-mode-dispatch` defaulted to a mode removed in 16.0.0; `scorecard` claimed no network and ran `npm audit`; `_dev-only-files` misgrouped its regex; `render-cost-summary` selected 0/0 phases; `gc-refs` matched `pr-body-final.md`; `credential-inventory` reported every key missing with rc 0 when no backend existed; `repo-cache` and `issue-fetcher` split scan roots on whitespace; `md2confluence-v3.py` detected every document as Turkish and its residual-character warning could never fire; `github-ssh-setup.sh` wrote `UseKeychain` on Linux; dead functions and stale headers in `cost-lib`, `extract-conventions`, `shadow-git`, `fetch-document`, `benchmark-phase-0`, `sync-parity-check`, `_mcp-register`, `_plugin-skills`, `cost-budget-check`, `triage-memory`, `migrate-prefs`, `eval-golden-tasks`; dangling references to `figma-navigation`, `/multi-agent:fix-bug`, `ask_choice.sh`, `refs/frontend-guide.md` and a `-v610` anchor.
|
|
62
|
+
- **Vendored knowledge skills point at files that exist.** Twenty-six external skills linked 184 files that were never vendored; 58 were fetched from their upstream (Dimillian/Skills, MIT, provenance recorded), the rest de-linked. `help-skills` (Turkish, install-path catalog) is retired; `ios-module-structure` resolves its scripts relative to the skill; `ios-coding-standard` examples use a neutral domain.
|
|
63
|
+
|
|
19
64
|
## [16.18.0] - 2026-09-01
|
|
20
65
|
|
|
21
66
|
### Changed
|
package/README.md
CHANGED
|
@@ -219,7 +219,7 @@ The pipeline runs natively on **Claude Code**, **Copilot CLI** and **Codex CLI**
|
|
|
219
219
|
|
|
220
220
|
Filter skills by stack with `--platform=ios\|android\|all`.
|
|
221
221
|
|
|
222
|
-
**Why Codex gets one skill and not
|
|
222
|
+
**Why Codex gets one skill and not 55.** Codex assembles every discovered skill's name
|
|
223
223
|
and description into a single prompt block and drops entries when it overflows, with no
|
|
224
224
|
error. Measured on 0.145: installing one plugin that declares 142 skills surfaced only
|
|
225
225
|
75 of them and evicted an unrelated user skill. So on Codex the pipeline ships a single
|
|
@@ -228,9 +228,9 @@ nothing until read - same commands, same behaviour, a layout the host can actual
|
|
|
228
228
|
|
|
229
229
|
Reviewer sets differ because the available models do: Claude Code runs 3 reviewers
|
|
230
230
|
(Fable + Opus + Sonnet), Copilot CLI 3 (Opus + GPT-5.4 + Sonnet), Codex CLI 3 (gpt-5.6 at
|
|
231
|
-
xhigh, gpt-5.4, gpt-5.6 at medium). Codex
|
|
232
|
-
is weaker evidence than the same consensus on
|
|
233
|
-
says so.
|
|
231
|
+
xhigh, gpt-5.4, gpt-5.6 at medium). Claude Code and Codex are single-vendor panels, so
|
|
232
|
+
consensus among their three is weaker evidence than the same consensus on Copilot CLI,
|
|
233
|
+
the one host whose panel spans two vendors, and the triage note says so.
|
|
234
234
|
|
|
235
235
|
## Tokens & integrations
|
|
236
236
|
|
|
@@ -257,7 +257,7 @@ Installing the pipeline is not only useful when you run it. Open an ordinary ses
|
|
|
257
257
|
|
|
258
258
|
- **Services you already onboarded.** The token `setup` mapped is readable now - resolve the logical name through `credential-store.sh` and fetch the issue, the page, the log. **Reads are ordinary work; writes are not.** Posting a Jira comment, editing an issue or opening a PR goes through the pipeline commands, because the rules that make those safe (never auto-close, `Ref:` not `Closes:`, humanizer on outward prose) live there.
|
|
259
259
|
- **The stack skills `/multi-agent:stack` enabled for the repo.** Each toolkit's own `index` skill routes; the pipeline keeps no copy of that table.
|
|
260
|
-
- **The `multi-agent-toolkit` MCP.**
|
|
260
|
+
- **The `multi-agent-toolkit` MCP.** 80+ tools for a running app - screen state, crash logs, design comparison, store pre-submission.
|
|
261
261
|
|
|
262
262
|
Uninstall preserves this layer: the tokens, the reader that opens them, the mapping that names them, and the MCP registration. Removing the pipeline should not cost you the credentials you onboarded through it.
|
|
263
263
|
|
package/README.tr.md
CHANGED
|
@@ -219,7 +219,7 @@ Pipeline **Claude Code**, **Copilot CLI** ve **Codex CLI** üzerinde native çal
|
|
|
219
219
|
|
|
220
220
|
Skill'leri stack'e göre filtrele: `--platform=ios\|android\|all`.
|
|
221
221
|
|
|
222
|
-
**Codex neden
|
|
222
|
+
**Codex neden 55 değil de tek bir skill alıyor.** Codex, keşfettiği her skill'in adını
|
|
223
223
|
ve açıklamasını tek bir prompt bloğuna toplar ve blok taştığında girdileri hatasızca
|
|
224
224
|
düşürür. 0.145 üzerinde ölçüldü: 142 skill deklare eden bir plugin kurulduğunda sadece
|
|
225
225
|
75'i yüzeye çıktı ve alakasız bir kullanıcı skill'i tahliye edildi. Bu yüzden Codex'te
|
|
@@ -258,7 +258,7 @@ Pipeline'ı kurmak yalnız onu çalıştırdığında işe yaramıyor. Sıradan
|
|
|
258
258
|
|
|
259
259
|
- **Zaten onboard ettiğin servisler.** `setup`'ın eşlediği token okunabilir durumda - mantıksal adı `credential-store.sh` ile çöz, issue'yu, sayfayı, logu getir. **Okuma sıradan iş, yazma değil.** Jira yorumu, issue düzenleme ve PR açma pipeline komutlarından geçer, çünkü onları güvenli kılan kurallar (issue asla otomatik kapanmaz, `Closes:` değil `Ref:`, dışa dönük metinde humanizer) orada yaşıyor.
|
|
260
260
|
- **`/multi-agent:stack`'in bu repo için açtığı stack skilleri.** Yönlendirmeyi her toolkit'in kendi `index` skill'i yapar; pipeline o tablonun kopyasını tutmaz.
|
|
261
|
-
- **`multi-agent-toolkit` MCP.** Çalışan uygulama için
|
|
261
|
+
- **`multi-agent-toolkit` MCP.** Çalışan uygulama için 80+ araç - ekran durumu, crash logu, tasarım karşılaştırma, store ön-kontrolü.
|
|
262
262
|
|
|
263
263
|
Uninstall bu katmanı korur: token'lar, onları açan okuyucu, adlarını tutan eşleme ve MCP kaydı. Pipeline'ı kaldırmak, onun üzerinden onboard ettiğin credential'ları kaybetmek anlamına gelmemeli.
|
|
264
264
|
|
package/docs/FIGMA_PIPELINE.md
CHANGED
|
@@ -71,7 +71,7 @@ Minimum viable config:
|
|
|
71
71
|
|
|
72
72
|
Android projects swap the `build` section to `{ "gradleModule": ":components:button", "variant": "debug" }` and set `project.platform` to `"android"`.
|
|
73
73
|
|
|
74
|
-
**Optional `ui` block - UI interaction systems.** Consumed by the `
|
|
74
|
+
**Optional `ui` block - UI interaction systems.** Consumed by the enabled stack plugin's `navigation` / `overlays` / `bottom-sheets` skills (`ai-ios-toolkit:*` / `ai-android-toolkit:*`) and Phase 4 review. Omit it (or set `mode: "native"`) and the pipeline generates stock SwiftUI (`NavigationStack`, `.alert`/`.sheet(item:)`, `.sheet`+`presentationDetents`). Set `mode: "custom"` to route to a project-supplied system by type name:
|
|
75
75
|
|
|
76
76
|
```json
|
|
77
77
|
"ui": {
|
|
@@ -69,8 +69,10 @@ Negative / costs:
|
|
|
69
69
|
- Cross-provider (GPT) dependency on Copilot CLI - if the provider is down,
|
|
70
70
|
the pipeline continues with 2 reviewers (Opus + Sonnet) and a warning.
|
|
71
71
|
- Cross-CLI asymmetry: Copilot CLI catches a slice of failures (edge cases
|
|
72
|
-
via GPT diversity) that Claude Code's 2-model set
|
|
73
|
-
tradeoff against platform reachability.
|
|
72
|
+
via GPT diversity) that Claude Code's 2-model set missed. Accepted then as a
|
|
73
|
+
tradeoff against platform reachability; v16.12.0 closed the count gap (three
|
|
74
|
+
reviewers on every host, see the note at the top), while the vendor gap
|
|
75
|
+
remains: Claude Code's Fable + Opus + Sonnet panel is single-vendor.
|
|
74
76
|
|
|
75
77
|
## Alternatives Considered
|
|
76
78
|
|
package/docs/architecture.md
CHANGED
|
@@ -9,7 +9,7 @@ graph TD
|
|
|
9
9
|
P1["Phase 1: Analysis<br/>Codebase scan (parallel Explore agents)"]
|
|
10
10
|
P2["Phase 2: Planning<br/>Task breakdown, architecture review"]
|
|
11
11
|
P3["Phase 3: Dev<br/>TDD: RED → GREEN → REFACTOR"]
|
|
12
|
-
P4["Phase 4: Review<br/>Parallel + Fable triage<br/>(
|
|
12
|
+
P4["Phase 4: Review<br/>Parallel + Fable triage<br/>(3 reviewers per host: Claude Code Fable + Opus + Sonnet · Copilot GPT-5.4 + Opus + Sonnet)"]
|
|
13
13
|
P5["Phase 5: Test<br/>Optional manual testing"]
|
|
14
14
|
P6["Phase 6: Commit<br/>Git commit, PR creation"]
|
|
15
15
|
P7["Phase 7: Report<br/>Jira · Wiki+Figma · Confluence · Log · Knowledge"]
|
|
@@ -169,7 +169,7 @@ revisions of this diagram - Codex CLI and the two independently-shipped repos
|
|
|
169
169
|
```mermaid
|
|
170
170
|
graph TD
|
|
171
171
|
CC["Claude Code<br/>(source of truth)"]
|
|
172
|
-
COP["Copilot CLI<br/>(instructions +
|
|
172
|
+
COP["Copilot CLI<br/>(instructions + 55 skills)"]
|
|
173
173
|
COD["Codex CLI<br/>(1 router skill + 55 refs)"]
|
|
174
174
|
REPO["Pipeline Repo<br/>(npm package)"]
|
|
175
175
|
WEB["Website"]
|
package/docs/ecosystem.md
CHANGED
|
@@ -106,14 +106,14 @@ hand-authored *inside* `multi-agent-plugins` and are never touched by sync.
|
|
|
106
106
|
|
|
107
107
|
```mermaid
|
|
108
108
|
graph TD
|
|
109
|
-
EXT["pipeline/skills/shared/external/<br/>
|
|
109
|
+
EXT["pipeline/skills/shared/external/<br/>153 skills - single authoring source<br/>(the pipeline's own phases read these too)"]
|
|
110
110
|
|
|
111
|
-
EXT -->|"cross-stack skills"| COMMONP["ai-common-toolkit<br/>11 skills · v0.2.
|
|
112
|
-
EXT -->|"outside facts for analysis"| ANAP["ai-analyst-toolkit<br/>5 skills · v0.1.
|
|
113
|
-
EXT -->|"Apple/Xcode-only"| IOSP["ai-ios-toolkit<br/>
|
|
114
|
-
EXT -->|"Android/Kotlin-only"| ANDP["ai-android-toolkit<br/>30 skills · v0.1.
|
|
115
|
-
EXT -->|"backend-only"| BEP["ai-backend-toolkit<br/>33 skills · v0.1.
|
|
116
|
-
EXT -->|"web/frontend-only"| FEP["ai-frontend-toolkit<br/>25 skills · v0.1.
|
|
111
|
+
EXT -->|"cross-stack skills"| COMMONP["ai-common-toolkit<br/>11 skills · v0.2.10"]
|
|
112
|
+
EXT -->|"outside facts for analysis"| ANAP["ai-analyst-toolkit<br/>5 skills · v0.1.3"]
|
|
113
|
+
EXT -->|"Apple/Xcode-only"| IOSP["ai-ios-toolkit<br/>133 skills · v0.12.1"]
|
|
114
|
+
EXT -->|"Android/Kotlin-only"| ANDP["ai-android-toolkit<br/>30 skills · v0.1.5"]
|
|
115
|
+
EXT -->|"backend-only"| BEP["ai-backend-toolkit<br/>33 skills · v0.1.7"]
|
|
116
|
+
EXT -->|"web/frontend-only"| FEP["ai-frontend-toolkit<br/>25 skills · v0.1.5"]
|
|
117
117
|
|
|
118
118
|
COMMONP --> BUMP{"skill set<br/>changed?"}
|
|
119
119
|
ANAP --> BUMP
|
|
@@ -206,16 +206,18 @@ e.g. `apple-archive-compliance` requires `ios_app_store_audit` from
|
|
|
206
206
|
that drops or renames a tool a pipeline skill depends on is a **major** bump, by
|
|
207
207
|
that step's own contract).
|
|
208
208
|
|
|
209
|
-
### multi-agent-toolkit-mcp's
|
|
209
|
+
### multi-agent-toolkit-mcp's tools, by category (87 at the toolkit README's last count; the pipeline says "80+" elsewhere so the number does not go stale with every toolkit release)
|
|
210
210
|
|
|
211
211
|
| Category | Tools | Primary pipeline consumers |
|
|
212
212
|
|---|---|---|
|
|
213
|
-
| Device Control |
|
|
214
|
-
|
|
|
213
|
+
| Device Control | 59 | `/multi-agent:test`, `test-dark-mode`, `test-accessibility`, `test-dynamic-type`, `test-screenshots`, `manual-test`, `design-check` |
|
|
214
|
+
| Memory | 2 (`ios_leaks`, `android_meminfo`) | none yet; available outside the pipeline |
|
|
215
|
+
| Crash Diagnostics | 2 (`ios_list_crashes`, `android_list_crashes`) | `/multi-agent:test` full scenario (end-of-run crash sweep), outside-the-pipeline sessions |
|
|
216
|
+
| Accessibility Audit | 3 (`ios_accessibility_audit`, `android_accessibility_audit`, `ios_accessibility_audit_deep`) | `/multi-agent:test` accessibility scenario, `test-accessibility` |
|
|
215
217
|
| Store Compliance | 5 | `store-ready`, `testflight-validation`, `apple-archive-compliance` skill, Phase 4 Security Auditor |
|
|
216
218
|
| Web Automation | 8 | frontend-stack UI testing (via `test`) |
|
|
217
219
|
| Design Audit | 6 | `design-check` (mock-mode vs Figma conformance) |
|
|
218
|
-
| Autonomous Agent DSL |
|
|
220
|
+
| Autonomous Agent DSL | 2 (`agent_run_steps`, `agent_query_output`) | any skill that needs a scripted multi-step device flow in one round trip |
|
|
219
221
|
|
|
220
222
|
---
|
|
221
223
|
|
package/docs/features.md
CHANGED
|
@@ -36,7 +36,7 @@ The install is not only useful while `/multi-agent` is running. `rules/outside-t
|
|
|
36
36
|
|
|
37
37
|
- **Onboarded service credentials.** Resolve the logical name through `credential-store.sh` and read the issue, page or log. Writes route through the pipeline commands, which carry the rules that make them safe - issues are never auto-closed, PR bodies use `Ref:`, outward prose goes through the humanizer.
|
|
38
38
|
- **The stack skills enabled for this repo.** Each toolkit's own `index` skill routes. The pipeline reads the effective `enabledPlugins` rather than keeping a stack table, so a seventh toolkit needs no code change.
|
|
39
|
-
- **The `multi-agent-toolkit` MCP.**
|
|
39
|
+
- **The `multi-agent-toolkit` MCP.** 80+ tools for a running app.
|
|
40
40
|
|
|
41
41
|
Uninstall preserves the whole layer - tokens, the reader that opens them, the mapping that names them, the MCP registration. It is 1.5 kB of always-loaded text; the detail lives in a ref that loads on demand, and a gate keeps both under a ceiling because every byte there is paid by every session.
|
|
42
42
|
|
|
@@ -55,7 +55,7 @@ Measured on a 4,300-file Swift app against a grep-and-read baseline at the same
|
|
|
55
55
|
| iOS/Swift | `.xcodeproj`, `Package.swift` | `refs/swiftui-guide.md` |
|
|
56
56
|
| Android/Kotlin | `build.gradle[.kts]` | `refs/android-guide.md` |
|
|
57
57
|
| Backend | `requirements.txt`, `package.json`, `go.mod` | `refs/backend-guide.md` |
|
|
58
|
-
| Frontend | `package.json` + framework detection | `refs/
|
|
58
|
+
| Frontend | `package.json` + framework detection | `refs/web-guide.md` |
|
|
59
59
|
| Docker | `Dockerfile`, `docker-compose.yml` | `refs/backend-guide.md` |
|
|
60
60
|
|
|
61
61
|
Build commands, test runners, lint tools, and review focus areas all adapt to the detected stack.
|
package/index.js
CHANGED
|
@@ -73,7 +73,7 @@ if (command === "--version" || command === "-v" || command === "version") {
|
|
|
73
73
|
|
|
74
74
|
Options:
|
|
75
75
|
--no-color Disable colored output
|
|
76
|
-
--target=<path>
|
|
76
|
+
--target=<path> Uninstall only: project dir for the legacy adapter cleanup (--cursor / --copilot-chat / --antigravity; defaults to cwd). Install always targets $HOME.
|
|
77
77
|
--platform=ios|android|all Filter external skills by platform (default: all)
|
|
78
78
|
|
|
79
79
|
After installation:
|
package/install/_common.mjs
CHANGED
|
@@ -278,11 +278,29 @@ const ABANDONED_TREES = Object.freeze([
|
|
|
278
278
|
{
|
|
279
279
|
dir: ".multi-agent",
|
|
280
280
|
root: "home",
|
|
281
|
+
// `.multi-agent/` is also the live per-repo path memory-save.sh and the
|
|
282
|
+
// offload-ref writer use (memory/, refs/, .gitignore). If $HOME is itself a
|
|
283
|
+
// repo, or anything else put an unknown entry there, the tree is not ours.
|
|
284
|
+
knownEntries: ["scripts", "lib", "schemas", ".DS_Store"],
|
|
281
285
|
reason:
|
|
282
286
|
"shared runtime for the Cursor / Antigravity / Copilot Chat adapters, all deleted in v10.7.0",
|
|
283
287
|
},
|
|
284
288
|
]);
|
|
285
289
|
|
|
290
|
+
/**
|
|
291
|
+
* @param {string} target
|
|
292
|
+
* @param {ReadonlyArray<string>|undefined} knownEntries
|
|
293
|
+
* @returns {boolean} true when every top-level entry is one the abandoned tree is known to contain
|
|
294
|
+
*/
|
|
295
|
+
function isKnownLegacyTree(target, knownEntries) {
|
|
296
|
+
if (!knownEntries) return true;
|
|
297
|
+
try {
|
|
298
|
+
return readdirSync(target).every((name) => knownEntries.includes(name));
|
|
299
|
+
} catch {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
286
304
|
/**
|
|
287
305
|
* Registry of command renames. Command names are an interface: users type
|
|
288
306
|
* them, docs and saved routines reference them, and Copilot installs derive
|
|
@@ -311,10 +329,16 @@ export const COMMAND_RENAMES = Object.freeze({
|
|
|
311
329
|
*/
|
|
312
330
|
export function pruneAbandonedTrees(claudeDir, home = dirname(claudeDir)) {
|
|
313
331
|
let removed = 0;
|
|
314
|
-
for (const { dir, root, reason } of ABANDONED_TREES) {
|
|
332
|
+
for (const { dir, root, reason, knownEntries } of ABANDONED_TREES) {
|
|
315
333
|
const base = root === "home" ? home : claudeDir;
|
|
316
334
|
const target = join(base, dir);
|
|
317
335
|
if (!existsSync(target)) continue;
|
|
336
|
+
if (!isKnownLegacyTree(target, knownEntries)) {
|
|
337
|
+
console.log(
|
|
338
|
+
` kept ${target}: holds entries no abandoned install wrote, so it is not ours to remove`,
|
|
339
|
+
);
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
318
342
|
if (dryRun) {
|
|
319
343
|
console.log(` [dry-run] would remove abandoned tree ${target} (${reason})`);
|
|
320
344
|
removed++;
|
|
@@ -44,9 +44,9 @@ export const CONSUMER_SMOKES = Object.freeze([
|
|
|
44
44
|
* notices - the safe direction for reason 2 above.
|
|
45
45
|
*/
|
|
46
46
|
export const MAINTAINER_SMOKES = new RegExp(
|
|
47
|
-
`^smoke-(
|
|
47
|
+
`^smoke-(?!(?:${CONSUMER_SMOKES.map((n) => n.replace(/^smoke-/, "").replace(/\./g, "\\.")).join(
|
|
48
48
|
"|",
|
|
49
|
-
)}$)`,
|
|
49
|
+
)})$)`,
|
|
50
50
|
);
|
|
51
51
|
|
|
52
52
|
/**
|
|
@@ -154,9 +154,10 @@ function saysAlreadyExists(text) {
|
|
|
154
154
|
* "skipped MCP registration (Command failed)" would send the user to fix something that
|
|
155
155
|
* is already correct, and that is exactly what the first version of this did.
|
|
156
156
|
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
157
|
+
* An existing entry under the same name is removed and re-added so its spec follows
|
|
158
|
+
* the installed version (the entry is installer-owned; the reason is at the remove
|
|
159
|
+
* below). A user who points the toolkit at a local checkout registers it under a
|
|
160
|
+
* different name or re-applies the change after an update.
|
|
160
161
|
*
|
|
161
162
|
* Never fatal: a missing CLI or a failed write must not fail the install, because the
|
|
162
163
|
* rest of the tree is still correct and useful. It prints the manual command instead.
|
|
@@ -30,7 +30,7 @@ import { join } from "path";
|
|
|
30
30
|
/** Uninstall reads this to know exactly which delivered skill dirs are ours to remove. */
|
|
31
31
|
export const PLUGIN_SKILLS_MANIFEST = ".plugin-skills-manifest.json";
|
|
32
32
|
|
|
33
|
-
import { copyDir, countFiles, ensureDir,
|
|
33
|
+
import { copyDir, countFiles, ensureDir, isDryRun, wipeDir } from "./_common.mjs";
|
|
34
34
|
|
|
35
35
|
/** Subtrees a plugin authors itself. `knowledge/` is generated, so it is excluded. */
|
|
36
36
|
const AUTHORED_GROUPS = Object.freeze(["index", "reference", "workflow", "tools"]);
|
|
@@ -341,5 +341,3 @@ export function pipelineOwnedSkillNames(pipelineSrc) {
|
|
|
341
341
|
}
|
|
342
342
|
return owned;
|
|
343
343
|
}
|
|
344
|
-
|
|
345
|
-
export { ensureRealDir };
|
package/install/copilot.mjs
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
isDryRun,
|
|
23
23
|
pruneOrphanSkillFiles,
|
|
24
24
|
removePipelineAgentFiles,
|
|
25
|
+
symlinkDir,
|
|
25
26
|
wipeDir,
|
|
26
27
|
writeFile,
|
|
27
28
|
} from "./_common.mjs";
|
|
@@ -303,9 +304,12 @@ function installSkills(opts) {
|
|
|
303
304
|
const { home, pipelineSrc, dest, indexOnly, useSymlinks, platformFlag } = opts;
|
|
304
305
|
console.log(" [Copilot CLI] Installing skills...");
|
|
305
306
|
|
|
306
|
-
//
|
|
307
|
-
//
|
|
308
|
-
|
|
307
|
+
// The skills root is always a real directory, in --link mode too: the manifest,
|
|
308
|
+
// index and README written below are generated files, and an older --link
|
|
309
|
+
// install pointed the whole root at pipeline/skills/shared/core, so every one
|
|
310
|
+
// of those writes (and the external / plugin symlinks) landed in the checkout.
|
|
311
|
+
// Link mode now links each authored skill dir individually instead.
|
|
312
|
+
ensureRealDir(dest);
|
|
309
313
|
|
|
310
314
|
if (indexOnly) {
|
|
311
315
|
try {
|
|
@@ -334,7 +338,7 @@ function installSkills(opts) {
|
|
|
334
338
|
let pruned = 0;
|
|
335
339
|
for (const entry of readdirSync(dest, { withFileTypes: true })) {
|
|
336
340
|
if (
|
|
337
|
-
entry.isDirectory() &&
|
|
341
|
+
(entry.isDirectory() || entry.isSymbolicLink()) &&
|
|
338
342
|
entry.name.startsWith("multi-agent") &&
|
|
339
343
|
!sourceNames.has(entry.name)
|
|
340
344
|
) {
|
|
@@ -358,10 +362,15 @@ function installSkills(opts) {
|
|
|
358
362
|
|
|
359
363
|
if (existsSync(sharedCoreSrc)) {
|
|
360
364
|
if (useSymlinks) {
|
|
361
|
-
// --link (dev) mode points at the repo, so there is nothing
|
|
362
|
-
// and rewriting would mean editing the checkout.
|
|
363
|
-
|
|
364
|
-
|
|
365
|
+
// --link (dev) mode points each skill dir at the repo, so there is nothing
|
|
366
|
+
// to rewrite - and rewriting would mean editing the checkout.
|
|
367
|
+
ensureDir(dest);
|
|
368
|
+
for (const e of readdirSync(sharedCoreSrc, { withFileTypes: true })) {
|
|
369
|
+
if (!e.isDirectory()) continue;
|
|
370
|
+
wipeDir(join(dest, e.name));
|
|
371
|
+
symlinkDir(join(sharedCoreSrc, e.name), join(dest, e.name));
|
|
372
|
+
copilotSkillCount += countFiles(join(sharedCoreSrc, e.name));
|
|
373
|
+
}
|
|
365
374
|
} else {
|
|
366
375
|
// Wipe each pipeline-owned skill dir before refilling it. Copying only ADDS,
|
|
367
376
|
// so a subtree from an older layout survives inside a directory the installer
|
|
@@ -399,7 +408,7 @@ function installSkills(opts) {
|
|
|
399
408
|
for (const name of keep) {
|
|
400
409
|
const src = join(sharedExternalSrc, name);
|
|
401
410
|
const dst = join(dest, name);
|
|
402
|
-
|
|
411
|
+
wipeDir(dst);
|
|
403
412
|
copyDir(src, dst, { useSymlinks });
|
|
404
413
|
copilotSkillCount += countFiles(src);
|
|
405
414
|
}
|
package/install/index.mjs
CHANGED
|
@@ -54,7 +54,7 @@ export async function runInstall(argv) {
|
|
|
54
54
|
"--dry-run",
|
|
55
55
|
"--prune-external",
|
|
56
56
|
];
|
|
57
|
-
const KNOWN_PREFIXES = ["--
|
|
57
|
+
const KNOWN_PREFIXES = ["--platform="];
|
|
58
58
|
const unknown = flags.filter(
|
|
59
59
|
(f) =>
|
|
60
60
|
f.startsWith("--") &&
|
|
@@ -63,9 +63,7 @@ export async function runInstall(argv) {
|
|
|
63
63
|
);
|
|
64
64
|
if (unknown.length > 0) {
|
|
65
65
|
console.error(`Error: unknown flag(s): ${unknown.join(", ")}`);
|
|
66
|
-
console.error(
|
|
67
|
-
`Supported: ${[...KNOWN_FLAGS, "--target=<path>", "--platform=<ios|android|all>"].join(" ")}`,
|
|
68
|
-
);
|
|
66
|
+
console.error(`Supported: ${[...KNOWN_FLAGS, "--platform=<ios|android|all>"].join(" ")}`);
|
|
69
67
|
process.exit(1);
|
|
70
68
|
}
|
|
71
69
|
|
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
1. **Analysis** - Stack detection, codebase exploration
|
|
13
13
|
2. **Planning** - Task decomposition, architecture review, user approval
|
|
14
14
|
3. **Dev** - TDD cycle: test -> code -> build
|
|
15
|
-
4. **Review** - Deterministic gates + CLI-aware parallel review +
|
|
16
|
-
|
|
17
|
-
cross-provider diversity) + Opus (security + architecture) + Sonnet
|
|
18
|
-
correctness)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
4. **Review** - Deterministic gates + CLI-aware parallel review + triage.
|
|
16
|
+
Every host dispatches **3 reviewers in parallel**. Copilot CLI: GPT-5.4 (edge
|
|
17
|
+
cases + cross-provider diversity) + Opus (security + architecture) + Sonnet
|
|
18
|
+
(quality + correctness), followed by an Opus triage pass. Claude Code: Fable +
|
|
19
|
+
Opus + Sonnet, followed by a Fable triage pass (GPT-5.4 is not natively
|
|
20
|
+
reachable there - the only intentional cross-CLI asymmetry for Phase 4). Triage
|
|
21
|
+
filters false-positives and out-of-scope items before looping back to Phase 3.
|
|
22
22
|
5. **Test** - Optional manual testing + on-demand device audits
|
|
23
23
|
6. **Commit** - Secret scan · commit · push · PR creation
|
|
24
24
|
7. **Report** - Jira comment · Wiki + Figma screenshots · Confluence · log · knowledge + memory
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mmerterden/multi-agent-pipeline",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.19.0",
|
|
4
4
|
"description": "8-phase AI development pipeline with full orchestration on Claude Code, Copilot CLI and Codex CLI. Analysis, planning, TDD, CLI-aware parallel review with consensus surfacing + Fable triage, default-FAIL evidence gates, secret + intent guards, per-phase cost ledger, persistent learnings memory, wiki generation, commit automation. Token-preserving uninstall.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.js",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
|
|
14
14
|
### Pipeline Phases
|
|
15
15
|
|
|
16
|
-
1. Analysis (
|
|
17
|
-
2. Planning (Opus) -> spec, task breakdown
|
|
16
|
+
1. Analysis (Sonnet, `explorer` persona) -> scope, impact analysis
|
|
17
|
+
2. Planning (Fable; Opus when the fallback ladder engages) -> spec, task breakdown
|
|
18
18
|
3. Development (Sonnet) -> TDD, code, build
|
|
19
19
|
4. Review -> deterministic gates + parallel review + Fable triage
|
|
20
20
|
- Claude Code: Fable + Opus + Sonnet (3 paralel)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Task orchestrator - full pipeline via Jira ID + branch or GitHub Issue URL: analysis, plan, TDD development, parallel review + Fable triage (
|
|
2
|
+
description: "Task orchestrator - full pipeline via Jira ID + branch or GitHub Issue URL: analysis, plan, TDD development, parallel review + Fable triage (3 reviewers per host: Fable + Opus + Sonnet on Claude Code, GPT-5.4 + Opus + Sonnet on Copilot CLI), commit, log. Use when given a Jira ID, a GitHub issue or a free-text task and the whole pipeline should run."
|
|
3
3
|
description-tr: "Görev orkestratörü - Jira ID + branch veya GitHub Issue URL ile tam pipeline: analiz, plan, TDD geliştirme, paralel review + Fable triyajı (CLI'ya göre: Claude Code'da 3, Copilot CLI'da 3 model), commit, log"
|
|
4
4
|
allowed-tools: Agent, Bash, Read, Write, Edit, Glob, Grep, TaskCreate, TaskUpdate, TaskList, TaskGet, AskUserQuestion, WebFetch, WebSearch, NotebookEdit, Skill
|
|
5
5
|
---
|
|
@@ -48,7 +48,7 @@ Classification schema lives in `$HOME/.claude/multi-agent-refs/_input-parser.md`
|
|
|
48
48
|
| 7 | `issue` | full picker | account → repo (multi) → issue → maturity → dev-context |
|
|
49
49
|
| 8 | Free-text | `freetext` | account → repo (single) → dev-context (maturity skip) |
|
|
50
50
|
|
|
51
|
-
**Rule**: Whatever the type, **account is always asked** (autopilot picks a default). After issue fetch, **maturity check is mandatory** - blockers halt the pipeline. Picker `
|
|
51
|
+
**Rule**: Whatever the type, **account is always asked** (autopilot picks a default). After issue fetch, **maturity check is mandatory** - blockers halt the pipeline. Picker `header` renders in English (the 12-char chip); the `question`, each option's `label` and each option's `description` render in `outputLanguage`, per the canonical matrix in `multi-agent-refs/rules.md`.
|
|
52
52
|
|
|
53
53
|
Lib scripts (`~/.claude/lib/`):
|
|
54
54
|
- `account-resolver.sh` - keychain account inventory
|
|
@@ -102,8 +102,8 @@ Lib scripts (`~/.claude/lib/`):
|
|
|
102
102
|
This command uses lazy loading for token efficiency. Read the relevant sub-file based on the routed action:
|
|
103
103
|
|
|
104
104
|
**File layout:**
|
|
105
|
-
- `commands/multi-agent
|
|
106
|
-
- `$HOME/.claude/multi-agent-refs/**` → **internal references**, read by the main command, never invoked directly
|
|
105
|
+
- `commands/multi-agent/{cmd}/SKILL.md` → **invocable actions** (each gets its own `/multi-agent:<name>` slash command)
|
|
106
|
+
- `$HOME/.claude/multi-agent-refs/**` → **internal references**, read by the main command, never invoked directly. They live outside `commands/` precisely so they never appear in slash-command autocomplete.
|
|
107
107
|
|
|
108
108
|
| Route | File to Read |
|
|
109
109
|
|-------|-------------|
|
|
@@ -262,7 +262,7 @@ When called with `review`:
|
|
|
262
262
|
1. Detect current branch and project from cwd (or ask)
|
|
263
263
|
2. Get diff: `git diff HEAD` (unstaged + staged)
|
|
264
264
|
3. If no diff, get diff against base branch: `git diff origin/{baseBranch}...HEAD`
|
|
265
|
-
4. Launch Phase 4 review (parallel + Fable triage -
|
|
265
|
+
4. Launch Phase 4 review (parallel + Fable triage - 3 reviewers on every host: Fable + Opus + Sonnet on Claude Code, GPT-5.4 + Opus + Sonnet on Copilot CLI) on the diff
|
|
266
266
|
5. No worktree, no state file - lightweight one-shot review
|
|
267
267
|
6. Print findings to terminal
|
|
268
268
|
|
|
@@ -127,7 +127,7 @@ Set `phase: "drafting"`.
|
|
|
127
127
|
### Phase 4 - Draft, humanize, buffer
|
|
128
128
|
|
|
129
129
|
1. Render the report per `$HOME/.claude/multi-agent-refs/complaint-analysis-template.md` (8 fixed sections; single-language body in `outputLanguage`; verdict tokens English per Locked 9) to `/tmp/complaint-analysis-<run-slug>-<UTC-iso8601>/report.md`. Store `outputs.draftDir`.
|
|
130
|
-
2. **Humanizer pass (
|
|
130
|
+
2. **Humanizer pass (required: actually invoke the `ai-common-toolkit:humanizer` skill; the punctuation grep alone does NOT satisfy this)** with `language: <tr|en>`, `tone: technical-explanatory`, `stripFancyPunctuation: true`. Diacritics preserved (Locked 8).
|
|
131
131
|
3. Punctuation gate: `node $HOME/.claude/scripts/validate-complaint-doc.mjs <draft>` reports no banned-punctuation error. It checks the policy in Node, so the same result holds on macOS, Linux and Windows; `grep -P` is absent from BSD grep and would never run there.
|
|
132
132
|
4. Show the draft path + size to the user. Set `phase: "awaiting_output_decision"`.
|
|
133
133
|
|
|
@@ -133,7 +133,7 @@ for l in sys.stdin:
|
|
|
133
133
|
Print the resolved set grouped by screen **with its relaunch cost**: `<n> targets · <relaunchCount> relaunches`. Read the cost from `plan`, not from the target count - one relaunch serves every in-app target on that screen, so a 50-target module is typically a dozen relaunches, not fifty. **Whole-module is the intended default**; only ask for confirmation when `relaunchCount` exceeds `config coverage.confirmAbove` (default 25), and phrase it as a cost estimate, not as an invitation to shrink the audit. Never propose a smaller scope as the easy path - a scoped run is for resuming or for a focused re-check, not for avoiding work.
|
|
134
134
|
7. **`--resume`** - read the most recent `~/DesignChecks/{repo}__{module}/*/run-state.json`; the scope becomes that run's targets minus its `covered` and minus its `skipped` entries. Skips carry a reason and are honoured, so a resume covers the genuinely unaudited remainder. No previous run → tell the user and fall back to whole-module scope after confirmation.
|
|
135
135
|
8. **Report dir** - create `~/DesignChecks/{repo}__{module}/{UTC-timestamp}/` (and `assets/` inside it) now, and persist it as `state.designCheck.reportDir`. Phase 3 writes captures, comparison images, and `run-state.json` into it, so it must exist before driving starts - not at export time. This is report output, not a worktree; $HOME is intended here.
|
|
136
|
-
9. **Worktree** - build the Debug app in an isolated worktree so the user's tree is untouched. Follow `phase-0-init.md` Step
|
|
136
|
+
9. **Worktree** - build the Debug app in an isolated worktree so the user's tree is untouched. Follow the `phase-0-init.md` Step 6 worktree location convention exactly: `{projectRoot}/.worktrees/{taskId}` with `taskId` = `DC-<shortId>`, **never under $HOME** (the `.worktrees` segment is fixed, not a preference). Stale-lock heal (`git worktree prune`) + residue guard (`.worktrees/` in `.git/info/exclude`) first. Local mode is not offered - the audit always uses a worktree checkout of the current branch's HEAD (no fetch/push).
|
|
137
137
|
|
|
138
138
|
Persist `agent-state.json` with `taskId`, `mode: "design-check"`, `platform`, `projectRoot`, `worktreePath`, `module`, `designCheck`.
|
|
139
139
|
|
|
@@ -53,7 +53,7 @@ How It Works (Phase 0 - Interactive Flow):
|
|
|
53
53
|
Pipeline (after Phase 0) - shown as visual cards in terminal:
|
|
54
54
|
|
|
55
55
|
Phase 0: Init -> The 8 steps above
|
|
56
|
-
Phase 1: Analysis -> Stack detection + codebase scan (
|
|
56
|
+
Phase 1: Analysis -> Stack detection + codebase scan (Sonnet)
|
|
57
57
|
Phase 2: Planning -> Task breakdown + architecture review + Plan Approval Gate
|
|
58
58
|
(clarification max 2 rounds + approval loop - Full + interactive
|
|
59
59
|
only; a Short run has no plan, autopilot may not ask)
|
|
@@ -331,7 +331,7 @@ Nasıl Çalışır (Phase 0 - İnteraktif Akış):
|
|
|
331
331
|
Pipeline (Phase 0'dan sonra) - terminalde görsel kart olarak görünür:
|
|
332
332
|
|
|
333
333
|
Phase 0: Init -> Yukarıdaki 8 adım
|
|
334
|
-
Phase 1: Analysis -> Stack tespiti + codebase taraması (
|
|
334
|
+
Phase 1: Analysis -> Stack tespiti + codebase taraması (Sonnet)
|
|
335
335
|
Phase 2: Planning -> Task kırılımı + mimari inceleme + Plan Onay Kapısı
|
|
336
336
|
(clarification max 2 tur + onay döngüsü - sadece Tam +
|
|
337
337
|
etkileşimli; Kısa'da plan yok, autopilot soru soramaz)
|
|
@@ -67,7 +67,7 @@ Depth is a separate axis, asked at Phase 0 Step 7.5 rather than encoded in the c
|
|
|
67
67
|
|
|
68
68
|
## Delegation
|
|
69
69
|
|
|
70
|
-
Orchestrator routing: the routing table in `$HOME/.claude/commands/multi-agent/SKILL.md` resolves `local-autopilot` as the union of the `dev-local` + `autopilot` mode mixins. Contract details: `$HOME/.claude/multi-agent-refs/phases/phase-0-init.md` Step
|
|
70
|
+
Orchestrator routing: the routing table in `$HOME/.claude/commands/multi-agent/SKILL.md` resolves `local-autopilot` as the union of the `dev-local` + `autopilot` mode mixins. Contract details: `$HOME/.claude/multi-agent-refs/phases/phase-0-init.md` Step 6 (local branch) + `$HOME/.claude/multi-agent-refs/phases/phase-2-planning.md` Step 5 (autopilot gate skip + safety classifier).
|
|
71
71
|
## Required: outward-facing payload contracts
|
|
72
72
|
|
|
73
73
|
Before writing anything outward-facing - PR body, Jira comment, Confluence page, closing report - load `$HOME/.claude/multi-agent-refs/payload-contracts.md`. It names the canonical section set for each payload, the markup dialect per surface (PR body is Markdown, Jira is wiki markup - mixing them is a defect), and the token/duration numbers the closing report must carry. Improvising a payload shape from memory is the most common failure of the short modes.
|