@mmerterden/multi-agent-pipeline 14.1.0 → 14.2.1
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 +177 -1
- package/README.md +4 -4
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +1 -1
- package/package.json +1 -1
- package/pipeline/commands/deploy.md +4 -1
- package/pipeline/commands/multi-agent/SKILL.md +6 -3
- package/pipeline/commands/multi-agent/dev/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +49 -11
- package/pipeline/commands/multi-agent/setup/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +340 -0
- package/pipeline/commands/multi-agent/sync/SKILL.md +11 -5
- package/pipeline/commands/multi-agent/test/SKILL.md +18 -8
- package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +33 -0
- package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +33 -0
- package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +33 -0
- package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +41 -0
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +28 -201
- package/pipeline/commands/sim-test.md +45 -36
- package/pipeline/multi-agent-refs/cross-cli-contract.md +3 -2
- package/pipeline/multi-agent-refs/knowledge.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +7 -4
- package/pipeline/schemas/prefs.schema.json +1 -1
- package/pipeline/schemas/token-budget.json +2 -2
- package/pipeline/scripts/build-stack-plugins.mjs +21 -0
- package/pipeline/scripts/migrate-prefs.mjs +30 -0
- package/pipeline/skills/.skills-index.json +57 -12
- package/pipeline/skills/shared/README.md +11 -6
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +13 -17
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +50 -12
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +18 -3
- package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +50 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +18 -8
- package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +44 -0
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +29 -101
- package/pipeline/skills/shared/external/firebase/SKILL.md +1 -1
- package/pipeline/skills/skills-index.md +9 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: multi-agent-test-screenshots
|
|
3
|
+
language: en
|
|
4
|
+
description: "App Store screenshot set from a booted simulator / emulator in a given locale, taken as an argument and defaulting to tr. Alias pinning the screenshot scenario. Use when generating store screenshots or checking a localised build renders."
|
|
5
|
+
user-invocable: true
|
|
6
|
+
argument-hint: "[locale] - empty = tr; e.g. tr | en | de | ar"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# multi-agent-test-screenshots - Locale screenshot set
|
|
10
|
+
|
|
11
|
+
Fixed-scenario alias, **parameterised by locale**. The scenario is pinned; the language
|
|
12
|
+
is not, because one skill per language would put a parameter in a name.
|
|
13
|
+
|
|
14
|
+
## Locale resolution
|
|
15
|
+
|
|
16
|
+
1. `$ARGUMENTS` names a locale (`tr`, `en`, `de`, `ar`, ...) → use it.
|
|
17
|
+
2. `$ARGUMENTS` empty → `tr`.
|
|
18
|
+
3. `$ARGUMENTS` is something other than a locale → do not guess a language and do not
|
|
19
|
+
silently fall back. Ask which locale, rendered in `outputLanguage`.
|
|
20
|
+
|
|
21
|
+
## Dispatcher
|
|
22
|
+
|
|
23
|
+
Read and follow:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
$HOME/.copilot/multi-agent/sim-test.md
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
(Equivalent on Claude Code: `$HOME/.claude/commands/sim-test.md`.)
|
|
30
|
+
|
|
31
|
+
Run it with **scenario = `screenshot <locale>`**, substituting the locale resolved
|
|
32
|
+
above. That is the tag the target doc matches; passing a bare `screenshot` leaves the
|
|
33
|
+
language unset.
|
|
34
|
+
|
|
35
|
+
## Equivalent
|
|
36
|
+
|
|
37
|
+
`multi-agent-test "screenshot tr"` - identical behaviour. Both forms are supported;
|
|
38
|
+
neither is deprecated.
|
|
39
|
+
|
|
40
|
+
## Requirements
|
|
41
|
+
|
|
42
|
+
- **iOS**: Xcode + booted Simulator (`xcrun simctl list | grep Booted`)
|
|
43
|
+
- **Android**: Android SDK + running emulator or USB device (`adb devices`)
|
|
44
|
+
- **MCP**: `dev-toolkit` MCP server registered (tool names start with `mcp__dev-toolkit__*`)
|
|
@@ -1,120 +1,48 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-agent-testflight-validation
|
|
3
3
|
language: en
|
|
4
|
-
description: "
|
|
4
|
+
description: "iOS-pinned alias of store-ready: same three gates on an iOS build, one implementation. Validates a TestFlight / App Store package, never uploads. Use when an iOS build is about to go to TestFlight, or a submission was rejected and you need why."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
argument-hint: "[repo] - empty = pick from prefs; repo name or path; --ipa=<path>; --archive=<path>; --resume"
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# multi-agent-testflight-validation -
|
|
9
|
+
# multi-agent-testflight-validation - iOS alias for store-ready
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
This skill is an alias. The implementation it used to carry was merged into
|
|
12
|
+
`multi-agent-store-ready`, which runs the same three gates on iOS and adds the
|
|
13
|
+
Android side, so there is one flow to maintain instead of two that had already
|
|
14
|
+
started to drift.
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
The name is kept because it is the one people reach for when the target is
|
|
17
|
+
TestFlight, and removing a surface is a breaking change.
|
|
15
18
|
|
|
16
|
-
##
|
|
19
|
+
## Dispatcher
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
is how a build passes locally and gets rejected anyway.
|
|
21
|
+
Read and follow:
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
| **2. Authoritative** | `ios_testflight_validate` → `altool --validate-app` | `.ipa` + credentials | unregistered bundle ID, profile/app-record mismatch, **version+build already used**, entitlement not provisioned | the Review Guidelines |
|
|
25
|
-
| **3. Guideline** | `app-store-review` skill + repo evidence | repo checkout | ATT, privacy policy, account deletion, IAP, purpose-string wording | anything not in source |
|
|
26
|
-
|
|
27
|
-
Most "we passed validation and still got rejected" cases are Gate 3 findings:
|
|
28
|
-
Apple's validator does not read the Review Guidelines.
|
|
29
|
-
|
|
30
|
-
## Flow
|
|
31
|
-
|
|
32
|
-
**0. Input.** `(empty)` → ask · `my-ios-app`/path → that repo · `--ipa=<path>` →
|
|
33
|
-
Mode B without Gate 1 · `--archive=<path>` → Mode B with all gates · `--resume`.
|
|
34
|
-
State at `~/.claude/logs/multi-agent/<task_id>/agent-state.json`,
|
|
35
|
-
`taskId = TFV-<repo>-<yyyymmddHHMM>`. Register phases with
|
|
36
|
-
`bash ~/.copilot/scripts/phase-tracker.sh` and render with
|
|
37
|
-
`phase-tracker.sh render` at every boundary.
|
|
38
|
-
|
|
39
|
-
**1. Pickers.** Repo (iOS entries in `prefs.projects`; a single match auto-resolves,
|
|
40
|
-
and the breadcrumb says so) → branch → mode. Print
|
|
41
|
-
`Step <i>/<n>: <what this decides>` for each. On `git fetch` failure do **not**
|
|
42
|
-
silently use a cached ref, and **classify the failure before naming a cause**:
|
|
43
|
-
`could not read Password` / `Authentication failed` / `403` is a credential
|
|
44
|
-
problem, not a network one, and a VPN cannot fix it; `Could not resolve host` /
|
|
45
|
-
`Operation timed out` is the network. Show the stderr line verbatim next to your
|
|
46
|
-
classification, then offer the remedy that matches it. Only the network case gets
|
|
47
|
-
the continue-on-a-stale-ref option: for a credential failure, staleness is
|
|
48
|
-
unrelated to what broke.
|
|
49
|
-
|
|
50
|
-
**2. Pre-flight.** `xcrun --find altool` and `xcodebuild -version`; a missing
|
|
51
|
-
prerequisite halts. Resolve credentials and name the active tier in the report:
|
|
52
|
-
tier 1 ASC API key (key id + issuer id from the keychain via
|
|
53
|
-
`prefs.global.keychainMapping`, `.p8` at
|
|
54
|
-
`~/.appstoreconnect/private_keys/AuthKey_<keyId>.p8`), tier 2 Apple ID +
|
|
55
|
-
app-specific password by keychain reference, tier 3 none → **Gate 2 is `SKIPPED`
|
|
56
|
-
and the verdict line says so**. Credentials come from `/multi-agent:setup`; never
|
|
57
|
-
prompt for a secret value in chat. Tier 2 needs no elevated App Store Connect
|
|
58
|
-
role, which matters when API-key creation is not permitted on the account.
|
|
59
|
-
|
|
60
|
-
**3. Obtain the build.**
|
|
61
|
-
- Mode B `.xcarchive` → Gate 1 runs; export with `ios_export_ipa` to reach Gate 2.
|
|
62
|
-
- Mode B `.ipa` only → **Gate 1 `SKIPPED (needs .xcarchive)`**. The static audit
|
|
63
|
-
reads archive structure an `.ipa` does not carry. Do not present a two-gate run
|
|
64
|
-
as a full pass.
|
|
65
|
-
- Mode A → worktree at `{projectRoot}/{worktreeBasePath}/{taskId}` (**never under
|
|
66
|
-
`$HOME`**) → `ios_xcodebuild({action: "archive", configuration: "Release",
|
|
67
|
-
destination: "generic/platform=iOS"})` - the simulator default would produce a
|
|
68
|
-
non-distributable archive - then `ios_export_ipa({method:
|
|
69
|
-
"app-store-connect", team_id, ...})`. Leave `allow_provisioning_updates` off
|
|
70
|
-
unless asked: it lets xcodebuild create or modify profiles in the developer
|
|
71
|
-
account, which a validation run has no business doing.
|
|
72
|
-
|
|
73
|
-
**4. Gate 1.** `ios_app_store_audit({archive_path, rules: "all"})`. `error` blocks,
|
|
74
|
-
`warning` advises. Keep each ITMS code - Gate 2 may return the same one, and that
|
|
75
|
-
agreement tells the user it is real.
|
|
76
|
-
|
|
77
|
-
**5. Gate 2.** `ios_testflight_validate({ipa_path, platform: "ios", <creds>})`.
|
|
78
|
-
Render the verdict as returned: `PASS` / `FAIL` (each issue with ITMS code, mapped
|
|
79
|
-
guideline, hint) / `SKIPPED` (with the reason, **never as a pass**). This is the
|
|
80
|
-
only gate that catches an already-used build number - the most common wasted
|
|
81
|
-
upload - so when it fails on that, name the next free build number.
|
|
82
|
-
|
|
83
|
-
**6. Gate 3.** Load `app-store-review` and check, with an evidence path each:
|
|
84
|
-
purpose strings (present, specific, matching actual use) · `PrivacyInfo.xcprivacy`
|
|
85
|
-
(exists, declares required-reason APIs, matches linked SDKs) · ATT before any
|
|
86
|
-
tracking · in-app account deletion when accounts are created · privacy policy
|
|
87
|
-
reachable · IAP through StoreKit with no external purchase path · Sign in with
|
|
88
|
-
Apple alongside third-party social login. Mark `pass` / `fail` /
|
|
89
|
-
`not-applicable`, and `not-applicable` needs a reason - an unexamined area is not
|
|
90
|
-
a pass.
|
|
23
|
+
```
|
|
24
|
+
$HOME/.copilot/multi-agent/commands/store-ready.md
|
|
25
|
+
```
|
|
91
26
|
|
|
92
|
-
|
|
93
|
-
printed summary:
|
|
27
|
+
(Equivalent on Claude Code: `$HOME/.claude/commands/multi-agent/store-ready/SKILL.md`.)
|
|
94
28
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
Auth: tier <1|2|none> · <method>
|
|
29
|
+
Run it with **platform pinned to `ios`** and skip its platform-detection step. Pass
|
|
30
|
+
`$ARGUMENTS` through verbatim: `--ipa=`, `--archive=`, a repo name or path, and
|
|
31
|
+
`--resume` all mean exactly what they mean there.
|
|
99
32
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
33
|
+
`--aab=` / `--apk=` are Android inputs and are not valid here. If one is supplied,
|
|
34
|
+
do not silently switch platform - say the Android inputs belong to
|
|
35
|
+
`multi-agent-store-ready`, and stop.
|
|
103
36
|
|
|
104
|
-
|
|
105
|
-
[ITMS-90683] Info.plist: NSCameraUsageDescription missing
|
|
106
|
-
guideline 5.1.1 Data Collection and Storage
|
|
107
|
-
<hint> · <file:line>
|
|
37
|
+
## What you get
|
|
108
38
|
|
|
109
|
-
|
|
110
|
-
Gate 1: needs an .xcarchive; only an .ipa was supplied
|
|
111
|
-
```
|
|
39
|
+
Unchanged from before the merge, on the iOS path:
|
|
112
40
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
41
|
+
| Gate | What runs | Needs |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| **1. Static** | `ios_app_store_audit` (18 rules, real ITMS codes) | an `.xcarchive` |
|
|
44
|
+
| **2. Authoritative** | `ios_testflight_validate` → `altool --validate-app` | an `.ipa` + credentials |
|
|
45
|
+
| **3. Policy** | `app-store-review` skill vs repo source | repo checkout |
|
|
116
46
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
`--resume` after fixes and `/multi-agent:fix-bug` for code-level Gate 3 findings.
|
|
120
|
-
Never upload, never bump the build number, never commit.
|
|
47
|
+
A skipped gate is never folded into the pass count, and the run never uploads. The
|
|
48
|
+
report lands in `~/StoreChecks/ios-<repo>-<branch>-<timestamp>/report.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: firebase
|
|
3
|
-
description: "You're a developer who has shipped dozens of Firebase projects. You've seen the
|
|
3
|
+
description: "You're a developer who has shipped dozens of Firebase projects. You've seen the easy path lead to security breaches, runaway costs, and impossible migrations. You know Firebase is powerful, but you also know its sharp edges. Use when integrating or reviewing Firebase: auth, Firestore, functions, or its cost and scaling traps."
|
|
4
4
|
risk: unknown
|
|
5
5
|
source: "vibeship-spawner-skills (Apache 2.0)"
|
|
6
6
|
date_added: "2026-02-27"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Auto-generated by `pipeline/scripts/build-skills-index.mjs` - do not hand-edit.
|
|
4
4
|
> Regenerate with `node pipeline/scripts/build-skills-index.mjs`.
|
|
5
5
|
|
|
6
|
-
**
|
|
6
|
+
**201 skills** across 2 groups.
|
|
7
7
|
|
|
8
8
|
| Group | Name | Platform | Description |
|
|
9
9
|
|-------|------|----------|-------------|
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
| external | `energykit` | - | Query grid electricity forecasts and submit load events using EnergyKit to help users optimize home electricity usage. Use when building sma |
|
|
57
57
|
| external | `eventkit-calendar` | - | Create, read, and manage calendar events and reminders using EventKit and EventKitUI. Use when adding events to the user's calendar, creatin |
|
|
58
58
|
| external | `fastapi-pro` | - | Build high-performance async APIs with FastAPI, SQLAlchemy 2.0, and Pydantic V2. Master microservices, WebSockets, and modern Python async p |
|
|
59
|
-
| external | `firebase` | - | You're a developer who has shipped dozens of Firebase projects. You've seen the
|
|
59
|
+
| external | `firebase` | - | You're a developer who has shipped dozens of Firebase projects. You've seen the easy path lead to security breaches, runaway costs, and impo |
|
|
60
60
|
| external | `github-actions-templates` | - | Production-ready GitHub Actions workflow patterns for testing, building, and deploying applications. Use when a GitHub Actions workflow has |
|
|
61
61
|
| core | `google-play-compliance` | - | Google Play Store publication compliance - bundletool + aapt2 + apksigner orchestration + 21-rule policy catalog with Play Console error c |
|
|
62
62
|
| external | `gradle-kotlin-dsl` | - | Configure Android builds with Gradle Kotlin DSL, version catalogs (libs.versions.toml), convention plugins (build-logic module), common conf |
|
|
@@ -102,7 +102,6 @@
|
|
|
102
102
|
| core | `multi-agent-dev-local` | - | Fast mode + local - Init → Dev(Opus) → Review → Commit → Report, no worktree. Use when a change should be developed and reviewed on the cu |
|
|
103
103
|
| core | `multi-agent-dev-local-autopilot` | - | Fastest + local - Dev(Opus) + autopilot, no worktree, zero interaction. Use when a change should be developed on the current branch with n |
|
|
104
104
|
| core | `multi-agent-diff-explain` | - | Map Phase 4 triage findings to branch diff lines. Read-only post-hoc command, used after review to answer 'which finding lines up with which |
|
|
105
|
-
| core | `multi-agent-ship` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
|
|
106
105
|
| core | `multi-agent-forget` | - | Remove a saved /multi-agent routine (created by /multi-agent:save): deletes its local-only command and its registry entry. Asks which one an |
|
|
107
106
|
| core | `multi-agent-garbage-collect` | - | Sweep leftover /tmp scratch (picker state, review diffs, channel payloads, analysis drafts) from past runs. Dry-run first; confirms before d |
|
|
108
107
|
| core | `multi-agent-help` | - | Multi-agent pipeline usage guide - renders in EN or TR per prefs.global.outputLanguage (falls back to promptLanguage for backward compatib |
|
|
@@ -127,11 +126,17 @@
|
|
|
127
126
|
| core | `multi-agent-scan` | - | Skill security scan: walks local skill directories against a tiered pattern catalog. Use when local skill directories need checking for unsa |
|
|
128
127
|
| core | `multi-agent-search` | - | Log search across every agent-log.md with smart ranking and filters. Optional --semantic flag queries the per-repo triage corpus. Use when s |
|
|
129
128
|
| core | `multi-agent-setup` | - | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. Use when the pipeline is being set up f |
|
|
129
|
+
| core | `multi-agent-ship` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
|
|
130
130
|
| core | `multi-agent-stack` | - | Select the active stack for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json (ios/android/mobile/backend/fr |
|
|
131
131
|
| core | `multi-agent-status` | - | Show every multi-agent task's ID, phase, branch, and status. Use when asked what is running, or for an overview of every task. |
|
|
132
|
+
| core | `multi-agent-store-ready` | - | Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, |
|
|
132
133
|
| core | `multi-agent-sync` | - | One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server. Use whe |
|
|
133
134
|
| core | `multi-agent-test` | - | UI Bug Hunter - iOS Simulator (simctl) + Android Emulator (adb). Auto-detects platform. Screenshot + tap + analyze on the booted device. T |
|
|
134
|
-
| core | `multi-agent-
|
|
135
|
+
| core | `multi-agent-test-accessibility` | - | Accessibility audit on a booted simulator / emulator: VoiceOver labels, sub-44pt tap targets, contrast, traits. Alias pinning the accessibil |
|
|
136
|
+
| core | `multi-agent-test-dark-mode` | - | Dark mode UI test on a booted simulator / emulator: walk every screen light then dark, report contrast + colour bugs. Alias pinning the dark |
|
|
137
|
+
| core | `multi-agent-test-dynamic-type` | - | Dynamic Type layout test on a booted simulator / emulator: re-walk every screen at XL through accessibility-extra-large, report truncation a |
|
|
138
|
+
| core | `multi-agent-test-screenshots` | - | App Store screenshot set from a booted simulator / emulator in a given locale, taken as an argument and defaulting to tr. Alias pinning the |
|
|
139
|
+
| core | `multi-agent-testflight-validation` | - | iOS-pinned alias of store-ready: same three gates on an iOS build, one implementation. Validates a TestFlight / App Store package, never upl |
|
|
135
140
|
| core | `multi-agent-uninstall` | - | Uninstall the pipeline from Claude Code + Copilot CLI. Keychain access tokens are always left untouched; --all-data also clears pipeline set |
|
|
136
141
|
| core | `multi-agent-update` | - | Update the pipeline to the latest version: git pull, install, migrate. Use when the installed pipeline is behind and should be brought to th |
|
|
137
142
|
| external | `musickit-audio` | - | Integrate Apple Music playback, catalog search, and Now Playing metadata using MusicKit and MediaPlayer. Use when adding music search, Apple |
|