@mmerterden/multi-agent-pipeline 20.8.2 → 20.9.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 +43 -0
- package/docs/facts.json +1 -1
- package/install/_common.mjs +49 -0
- package/install/_dev-only-files.mjs +1 -0
- package/install/catalog-history.json +1 -0
- package/install/claude.mjs +13 -7
- package/manifest.json +40 -30
- package/package.json +3 -2
- package/pipeline/lib/claude-md-links.mjs +328 -0
- package/pipeline/lib/owned-path-gate.mjs +699 -0
- package/pipeline/lib/repo-profile-derive.mjs +1771 -0
- package/pipeline/lib/repo-profile.mjs +780 -0
- package/pipeline/lib/stack-detect.sh +59 -19
- package/pipeline/lib/unattended.mjs +17 -0
- package/pipeline/multi-agent-refs/features/repo-profile.md +96 -0
- package/pipeline/multi-agent-refs/features/review-decision.md +18 -13
- package/pipeline/multi-agent-refs/features/stack-skill-routing.md +179 -33
- package/pipeline/multi-agent-refs/outside-the-pipeline.md +33 -11
- package/pipeline/multi-agent-refs/phases/phase-1-plan.md +26 -12
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +24 -13
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +16 -4
- package/pipeline/multi-agent-refs/phases/phase-4-commit.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +8 -0
- package/pipeline/rules/outside-the-pipeline.md +6 -1
- package/pipeline/schemas/agent-state.schema.json +66 -2
- package/pipeline/schemas/phases.json +4 -4
- package/pipeline/schemas/repo-profile.schema.json +1107 -0
- package/pipeline/schemas/token-budget.json +4 -4
- package/pipeline/scripts/agent-guard.py +30 -0
- package/pipeline/scripts/owned-path-gate.mjs +205 -0
- package/pipeline/scripts/pre-commit-check.sh +151 -1
- package/pipeline/scripts/repo-profile.mjs +244 -0
- package/pipeline/scripts/review-decision-gate.mjs +42 -18
- package/pipeline/scripts/skill-candidates.mjs +882 -0
- package/pipeline/scripts/unattended_policy.py +90 -0
- package/pipeline/scripts/usage-report.mjs +36 -6
- package/pipeline/skills/.skill-manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,49 @@ Internal file-layout changes that don't affect the slash-command surface are sti
|
|
|
16
16
|
|
|
17
17
|
## [Unreleased]
|
|
18
18
|
|
|
19
|
+
## [20.9.0] - 2026-09-27
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Token ceilings: `phase-1-plan` 10000 to 10250, `phase-4-commit` 6500 to 6600, `phase-5-report` 5550 to 5700, total 63300 to 63550. Phase 1 now reads the repo profile and the documents CLAUDE.md links to, Phase 4 takes the commit format from the profile, and the Phase 5 report carries the repo-profile and skill-routing sections; the same pass removed narrated history from phase-1-plan.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Two toolkits that ship a skill of the same name at the same role and scope resolve to the toolkit the pipeline itself publishes, so an outside toolkit never wins by how its name sorts.
|
|
28
|
+
- `review-decision-gate.mjs --integrity <file>` treats a declared file that does not exist as unreadable (exit 3, recorded in the ledger), never as no findings, and keeps a blocker on a gate's basis only when the tag or fingerprint also matches.
|
|
29
|
+
- The usage report sends a plugin name only for toolkits the pipeline publishes; any other enabled plugin is sent as the constant `private`.
|
|
30
|
+
- Phase 2 stack skill routing no longer routes a repo to another stack's toolkit. `pipeline/scripts/skill-candidates.mjs resolve` reads the effective `enabledPlugins` (user settings, then the repo's `.claude/settings.json` and `.claude/settings.local.json`) and drops a toolkit inherited from user settings whose name or `plugin.json` marks only stacks the repo is not built with, as detected by `lib/stack-detect.sh` and `schemas/stack-adapters.json`. Each exclusion carries its reason. A toolkit the repo enabled itself is never dropped, multi-stack repos keep every matching toolkit, inconclusive detection applies no filter, and `ai-common-toolkit` and `ai-analyst-toolkit` always stay. A detected stack without an enabled toolkit gets a hint (`enable ai-<stack>-toolkit with /multi-agent:stack`) instead of a substitute. The stack words come from the adapter table and the existing aliases, so a new `ai-<x>-toolkit` whose `<x>` is an adapter id is filtered with no code change. The user-level `settings.local.json` (under `CLAUDE_CONFIG_DIR` or `~/.claude`) is read as a second inherited layer. The mode comes from `lib/unattended.mjs`, the helper the gates use.
|
|
31
|
+
- `lib/stack-detect.sh` ignores a marker below the repo root when that stack's language is under 1% of the tracked source files (`git ls-files`, from 50 source files up; `Package.swift` manifests are not counted as source). A subtree copied into a Kotlin app with its own `Package.swift` no longer makes the app an iOS repo, and `why` names the ignored marker. Root markers always count; outside a git work tree nothing changes.
|
|
32
|
+
- An inherited toolkit whose name and `plugin.json` mark no stack is no longer kept in every repo. It is kept in the common role when it ships an `index`, and otherwise listed in `unscoped[]` and not routed to (unattended runs never load it; attended runs only when the user names it). A repo-enabled one is kept as before.
|
|
33
|
+
- Skill routing is Phase 2 throughout: `repoSkillCall()` and `marketplaceSkillCall()` default to `phase: 2`, and `features/stack-skill-routing.md` and its JSON examples say Phase 2. The Phase 2 step runs for every task, so the unattended marketplace fallback also runs when no toolkit is enabled.
|
|
34
|
+
- `usage-report.mjs` no longer sends repo-local skill names: `source: "repo"` calls are sent as `repo-local`, and a `marketplace-fallback` call keeps its name only for a toolkit the public marketplace carries (`marketplace-fallback` otherwise).
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- Repo-local skills (`<repo>/.claude/skills/<name>/SKILL.md`) are routing candidates. The resolver reads each one's name and description, marks it explicit-only from `disable-model-invocation: true`, its description, or CLAUDE.md wording such as "only on explicit request", and pre-ranks them against the task. The task text is read from `--task-file <path>` or stdin (`--task -`), and every pipeline document passes it through a file written with the Write tool instead of a shell string. A repo-local skill wins over a toolkit skill of the same name for that repo and the choice is listed in `decisions[]`. A loaded one is recorded in `state.telemetry.skillCalls[]` with `source: "repo"`; the `agent-state` schema gains the optional `source` field.
|
|
39
|
+
- Unattended and autopilot runs, which cannot run `/multi-agent:stack` or write `.claude/` in the repo, read a detected stack's missing toolkit read-only from a local marketplace clone found through the host's `known_marketplaces.json` and each clone's `marketplace.json`. Loaded skills are recorded with `source: "marketplace-fallback"`, the toolkit name and its `plugin.json` version, and the Phase 5 report carries a line telling the user to enable the stack. No settings are written; when no clone carries the toolkit the gap is recorded and the run continues. Attended runs keep the hint only. Neither mode substitutes another stack's toolkit. The outcome is stored in the new optional `state.telemetry.skillRouting`.
|
|
40
|
+
- Phase 1 reads the in-repo documents that `CLAUDE.md` and `.claude/CLAUDE.md` link to as project rules. `pipeline/lib/claude-md-links.mjs` follows relative markdown links, document paths written as inline code and `@path` imports one hop, at most 10 files and 200 KB in total. References on a line that calls the target authoritative ("See X for", "source of truth") are read first; the file that crosses the byte budget is cut at a character boundary and listed in `truncated[]`. A leading `/` resolves against the repo root when its first segment exists there. It skips `SKILL.md` files and rejects URLs, absolute filesystem and `~/` paths, directories, binary files and any path that resolves outside the repo, including through a symlink and including a symlinked `CLAUDE.md`.
|
|
41
|
+
- `features/stack-skill-routing.md` states the precedence: repo-local skill, then detected-stack toolkit skill, then common toolkit. An enabled differently-named toolkit is a candidate only when it matches the repo's stack, is never required, and is recorded with its name and version. When two kept toolkits ship a skill of the same name, the resolver picks one owner per name (repo-local skill, then stack role over common role, then the narrowest enabling scope, then toolkit name) and records each choice in `overlaps[]` and `decisions[]`.
|
|
42
|
+
- Per-repo project profile. `pipeline/scripts/repo-profile.mjs` derives how a repo works from the repo itself and stores it at `~/.claude/projects/<slug>/repo-profile.json` (mode 0600, never inside the repo; worktrees share their main checkout's profile). It records paths a bot account owns (from commit history and from the `case` patterns and `git diff -- <paths>` pathspecs of workflows that name the bot, with a label bypass; an `on.*.paths` trigger filter is never ownership), generated trees with their input, regeneration command and same-commit rule (from case-insensitive header stamps and `Generated/` directories), the commit subject convention (ticket prefix or suffix, its style, required scope), the work and default branches, exact build, test and lint commands from CI, localization, testing-id and token accessor roots, DI registrar conventions, module layout, mocks, git hooks and whether they amend or rewrite a commit, required checks, the docs `CLAUDE.md` links to, and in-repo skills. Every field carries its source (`derived`, `confirmed`, `manual`), `file:line` or commit evidence, and a confidence. Schema: `schemas/repo-profile.schema.json`.
|
|
43
|
+
- `repo-profile.mjs ensure` runs at Phase 1. A missing profile is derived and saved; a stale one (head no longer an ancestor, more than 200 commits behind, or a workflow file changed) is re-derived keeping confirmed and manual fields. Attended runs ask once to confirm; unattended and autopilot runs never ask. `resolve <field>` applies the confidence policy: confirmed, manual and high are used, medium only for owned paths, generators and the commit format, low is ignored and recorded, and owned paths and generators are always honoured in unattended runs. Phase 2 checks targets against owned paths and generators, Phase 4 places the ticket from the commit format and re-reads the SHA after a rewriting hook, and the Phase 5 report lists derived, confirmed and ignored fields. `state.repoProfile` records the outcome.
|
|
44
|
+
- Owned-path gate. `pipeline/scripts/owned-path-gate.mjs` checks a change set against the repo profile's `ownedPaths[]` under the profile's confidence and mode policy and reports every changed path an honoured entry covers and its `except[]` globs do not. A change is exempt when all its authors match the entry's owner or `bypass.author`, or when the PR carries `bypass.label` (from `--pr-labels`, or read read-only through `gh` when it is installed; a missing `gh` never fails the gate). Change sets: the default diff from the work branch merge-base plus uncommitted and untracked files, `--base <ref>`, `--range <base>..<head>`, `--staged`, or `--paths`. Each violation names the path, glob, owner, evidence, confidence and a fix pointing at the generator input, the authoring command or the next sync. Exit 0 clean or skipped, 1 violations, 2 usage or environment error. Attended runs without a profile skip with a note; unattended runs derive one first, outside the repo. The glob matcher (`**` any depth, `*` one segment, classes, plain directories covering their subtree) has no dependency.
|
|
45
|
+
- The owned-path gate is Gate 0 of the Phase 2 exit gate, run before the build; a violation blocks the phase with its fix text. Phase 3 re-runs it at Step 1.761 and merges its reviewer-shaped findings (`tag: owned_path`, `blocking`) into triage, and `review-decision-gate.mjs` keeps them blocking on the new `owned-path` basis. `--integrity` now repeats, one file per deterministic gate.
|
|
46
|
+
- `pre-commit-check.sh` runs the owned-path gate when the agent commits and blocks with exit 2 on a violation. It judges the commit's own paths: the index, plus what the same command stages (`git add <pathspec>`, `-A`, `-u`) and what `commit -a` or `commit <pathspec>` takes, read by the new `agent-guard.py --commit-scope`; a dirty file the commit leaves out is not judged. It passes `--state auto`, which finds the live run whose `worktreePath` is the checkout. It reads the profile from `~/.claude` or the unattended run root and the globs' literal prefixes without node (`./`, `/` and `//` normalized as the gate does), so a commit touching no owned prefix costs no extra process, and it finds the profile of a repo whose path is not ASCII.
|
|
47
|
+
- Owned-path gate behaviour. A profile that honours no owned entry skips before any git call. Without `--base` the base is looked up from the profile's work and default branch, `origin/HEAD`, `origin/main`, `origin/master`, `main` and `master`; when none resolves, an attended run exits 0 with a note and a run that asks nothing scans the index and working tree, and a shallow clone with no merge-base is named as such. A `--range` or `--base` that git cannot resolve is one readable line. A default change set above 5000 paths is exit 2 (`base looks wrong: N changed paths`); stderr lists the first 50 violations and a count of the rest. `--repo` pointing at a subdirectory sees untracked files anywhere in the repo. When several owned entries cover a path, one entry's `except` releases the path only from that entry. A merge commit counts as changing only the files its author edited while resolving it. `--out` removes the previous file first, so an error never leaves a stale result, and `--help` prints the usage.
|
|
48
|
+
- Globs: a glob ending in `/` covers that directory's subtree, the matcher is linear in the name's length, `a**b` stays inside one segment, and `[]]` is a class holding `]`. `owner` and `bypass.author` are regular expressions when anchored (`^` or `$`) and otherwise one exact name, so `name[bot]` matches itself and `bot` does not match `robot evil`; an unanchored value with regex syntax fails validation.
|
|
49
|
+
- `repo-profile.mjs ensure` saves under the unattended run root (`<root>/repo-profiles/<slug>/`) when an unattended sandbox denies writes under `~/.claude`, and uses the profile from memory with `persisted: false` when nothing is writable. Its output carries `mode`, `policy`, `gatesActive`, `persisted`, `writeError` and `confirmed`.
|
|
50
|
+
- Derivation of owned paths: history candidates are checked against their whole history and narrow to the files and subdirectories only the bot touched; a history-only rule (`basis: "history"`) is at most `medium` and an attended run honours it only once confirmed. Workflow rules come from `case` arms and `git diff -- <paths>` pathspecs, stored repo-relative; an `on.*.paths` trigger filter is never ownership. A case `*` crosses `/`: a star-only segment becomes `**`, a last segment such as `*.swift` becomes `**/*.swift`, and any other star inside a segment widens an owned arm to its literal directory plus `/**` and drops an exception arm. A workflow rule for the same owner replaces a broader history directory it only partly covers. A bot login in a YAML or shell comment is an example, not an owner: the owner is the bot that committed under the job's paths, else the one it names in code.
|
|
51
|
+
- Derivation of the rest: `repo.workBranch` reads `push: branches:` when no pull request names a target, and local branches count in the activity fallback; a build, test or lint step that a pull request runs is `high` confidence. Generator commands drop `2>&1` and `| tee` plumbing, a `--check`, `--verify` or `--dry-run` step is the `check` field, `input` is the common parent of the co-changing directories, and a stamp must be a comment line in the first 5 lines. `mock.system` and `di.injectAttribute` come only from the repo's dominant language with `file:line` evidence, the DI registrar suffix is read from the repo's own file names, and `docs.authoritative` comes from `claude-md-links.mjs`. Non-ASCII paths stay intact, and tracked symlinks and anything that is not a regular file are skipped.
|
|
52
|
+
- The repo profile's mode follows `lib/unattended.mjs` (new `runPosture()`): terminal autopilot is attended with the gates active, so its profile stays under `~/.claude` and it is never asked to confirm. Because nothing is confirmed in it, it applies the unattended confidence policy (new `policyMode()`), in `resolve`, `report`, the owned-path gate and the commit hook.
|
|
53
|
+
- `save --from` replaces the stored profile as given: a manual value wins over a confirmed one and an entry removed in the edit is removed. The runtime validator applies `repo-profile.schema.json`. `--max-behind` is validated like `--history`, and `--help` prints the usage.
|
|
54
|
+
- An explicit-only repo skill is matched only when the task invokes it as `/name`, `` `name` `` or "skill name". A repo `SKILL.md` or skill directory that is a symlink out of the repo is rejected (`rejectedRepoSkills[]`), and a marketplace plugin directory, `skills/` or `index` that resolves outside its clone is treated as absent.
|
|
55
|
+
|
|
56
|
+
## [20.8.3] - 2026-09-27
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
|
|
60
|
+
- Upgrading from an install that copied the knowledge catalog into `~/.claude/skills` removes every copy whose files all match a version the catalog once shipped, not only copies identical to the current one. `install/catalog-history.json` holds the git blob hash of every file each catalog skill has shipped with, generated by `pipeline/scripts/gen-catalog-history.mjs` and checked in `npm test`; a copy with any file that never shipped is kept as the user's and still needs `--prune-external`.
|
|
61
|
+
|
|
19
62
|
## [20.8.2] - 2026-09-27
|
|
20
63
|
|
|
21
64
|
### Fixed
|
package/docs/facts.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "Generated by pipeline/scripts/gen-facts.mjs. Do not hand-edit: the site reads this, and a number edited here instead of at its source is the drift this file removes.",
|
|
3
3
|
"generatedAt": "2026-09-27",
|
|
4
|
-
"version": "20.
|
|
4
|
+
"version": "20.9.0",
|
|
5
5
|
"phaseSchema": 2,
|
|
6
6
|
"phases": [
|
|
7
7
|
{
|
package/install/_common.mjs
CHANGED
|
@@ -1076,6 +1076,55 @@ export function dirsIdentical(a, b) {
|
|
|
1076
1076
|
return true;
|
|
1077
1077
|
}
|
|
1078
1078
|
|
|
1079
|
+
/**
|
|
1080
|
+
* True when every file under `dir` has the bytes of some version the catalog
|
|
1081
|
+
* shipped for that skill, per install/catalog-history.json. Such a copy holds
|
|
1082
|
+
* nothing of the user's; a file that never shipped means it was edited.
|
|
1083
|
+
*
|
|
1084
|
+
* @param {string} dir - installed skill dir
|
|
1085
|
+
* @param {{prefix: number, skills: Record<string, Record<string, string[]>>} | null} history
|
|
1086
|
+
* @param {string} name - catalog skill name
|
|
1087
|
+
* @returns {boolean}
|
|
1088
|
+
*/
|
|
1089
|
+
export function matchesShippedVersion(dir, history, name) {
|
|
1090
|
+
const shipped = history?.skills?.[name];
|
|
1091
|
+
if (!shipped) return false;
|
|
1092
|
+
const walk = (d) =>
|
|
1093
|
+
readdirSync(d, { withFileTypes: true }).flatMap((e) => {
|
|
1094
|
+
const p = join(d, e.name);
|
|
1095
|
+
if (e.isDirectory()) return walk(p);
|
|
1096
|
+
return e.isFile() ? [p] : [null];
|
|
1097
|
+
});
|
|
1098
|
+
const files = walk(dir);
|
|
1099
|
+
if (files.length === 0 || files.includes(null)) return false;
|
|
1100
|
+
return files.every((file) => {
|
|
1101
|
+
const rel = file
|
|
1102
|
+
.slice(dir.length + 1)
|
|
1103
|
+
.split(sep)
|
|
1104
|
+
.join("/");
|
|
1105
|
+
const buf = readFileSync(file);
|
|
1106
|
+
const hash = createHash("sha1")
|
|
1107
|
+
.update(`blob ${buf.length}\0`)
|
|
1108
|
+
.update(buf)
|
|
1109
|
+
.digest("hex")
|
|
1110
|
+
.slice(0, history.prefix);
|
|
1111
|
+
return shipped[rel]?.includes(hash) ?? false;
|
|
1112
|
+
});
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
/**
|
|
1116
|
+
* @param {string} path - install/catalog-history.json
|
|
1117
|
+
* @returns {{prefix: number, skills: Record<string, Record<string, string[]>>} | null}
|
|
1118
|
+
*/
|
|
1119
|
+
export function loadCatalogHistory(path) {
|
|
1120
|
+
try {
|
|
1121
|
+
const data = JSON.parse(readFileSync(path, "utf-8"));
|
|
1122
|
+
return data && data.version === 1 && Number.isInteger(data.prefix) ? data : null;
|
|
1123
|
+
} catch {
|
|
1124
|
+
return null;
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1079
1128
|
/**
|
|
1080
1129
|
* Same `local-only: true` frontmatter convention the command wrappers use:
|
|
1081
1130
|
* a dir carrying it is the user's and no prune path may take it.
|
|
@@ -67,6 +67,7 @@ const DEV_ONLY_TOOLING = Object.freeze([
|
|
|
67
67
|
"lint-mcp-refs.mjs",
|
|
68
68
|
"check-md-links.mjs",
|
|
69
69
|
"check-rewrite-overlap.mjs", // compares a rewrite against a source only a maintainer has
|
|
70
|
+
"gen-catalog-history.mjs", // reads the repo's git history; an install has none
|
|
70
71
|
"gen-ref-toc.mjs", // regenerates the repo's own reference tree; an install has no pipeline/
|
|
71
72
|
"validate-schemas.mjs", // validates the repo's own schema files, needs ajv
|
|
72
73
|
"sync-parity-check.sh",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":1,"prefix":16,"skills":{"accessibility-compliance-accessibility-audit":{"SKILL.md":["32e0d706f70a97da","942f1b56aa62c7be","c1a179a1ef509445","ccdf5ccea77bcc67","e33281303004b7c1"]},"agent-introspection-debugging":{"SKILL.md":["1df7d1b16ec3c72d","9e01fae7f1b115b0","9eb3e213f3af32a2","dea92cb76c90c5f5","f5ce39e9383a348a"]},"agentflow":{"SKILL.md":["0d0a8035f3d4f7b7","6e95c6d8f784b19e","e291ad706b3a825a","e70f05f3463903ac"]},"alarmkit":{"SKILL.md":["26555e9a587d7bc2","61780175798aed7d","7dcd211b193b40b1","a8a5b74647fdcbf9","db377d0483606198"],"evals/evals.json":["524589355d767fd3","ab5b5ad3032cb12e","f66977399dc5d567"],"references/alarmkit-patterns.md":["1bbf687a56d7f58a","66c0681c738889cc","b9fa685d45a64938"]},"android-architecture":{"SKILL.md":["135629ae258804fd","288c16da517161e2","8910a20a3c9ccb39","cd48136310186623","ff7965c5807bab3f"],"references/patterns.md":["098ccbc08f4b2a50"]},"android-build-quality-gates":{"SKILL.md":["23b3bf9279f531c8","4a1ce989aabcfadc","bf0cc4f365a28cd8"],"references/patterns.md":["56c0a99c2092555f","7820cf2feede4a8e"]},"android-datastore":{"SKILL.md":["2ddb95b92c026776","98de84d36c87ea6c"],"references/patterns.md":["2ca8a2cb3037ebdf"]},"android-design-tokens-codegen":{"SKILL.md":["544009394c4efa0f","8a2e09c669e42d29"],"references/patterns.md":["33d867a5058b928a"]},"android-jetpack-compose-expert":{"SKILL.md":["372dac11c9adb7e0","55817790d1eea4cb","7e9b94b3a140eafb","9b286cf5b5c5b2aa","f51303084bb1de9b"],"references/patterns.md":["f83cb7fa77a1d314"]},"android-mvi-viewmodel":{"SKILL.md":["295dd3c0340e1288","44adc6177d49e5d4","c93544173108c986","f44280b9a4c6947c"],"references/patterns.md":["d1f755ea40f92496"]},"android-performance":{"SKILL.md":["16f0b27b2048cfd0","34da231a7c6b285c","94225cc8b6b0c246","a0a901ada347d71e","fca8ae5ba2301f1b"],"references/patterns.md":["1598070ce917afe3","4f926a2c43e8754f","9a84d79e412e8d07"]},"android-security":{"SKILL.md":["01e1c41ed83942a0","9c8b3b2a13d897c9","b7c2921cf1ba2207","b94f1a1855e83f7c"],"references/patterns.md":["036d3e75681357be","82f8dc082fd766e0"]},"android-ui-verification":{"SKILL.md":["66acbbf09f5caf2f","8800946164534181"]},"android_ui_verification":{"SKILL.md":["73af0b93016f29b5","98511618c7accd83"]},"api-patterns":{"SKILL.md":["2f593c2fcdf9ce61","6c6a5227e8ae59b1","75fc5d27b6bd9c5a","a2623a6a6c5f8235","f43343c30fe0282b"],"references/contract-details.md":["2a0f9331caa000f1"]},"api-security-best-practices":{"SKILL.md":["17cebb555c3726d0","65e01ef029feb218","c2b2addc4750f44f","c57c433022d0bab1","f19ff6fea558d1a9"],"references/abuse-controls.md":["7e568b9dc74fac3e"],"references/auth.md":["e94db830ce662797"],"references/identity-and-access.md":["c487e49572f5aaea"],"references/input-validation.md":["fb8ecf918af4f129"],"references/operations.md":["24f1dedb2f4c976c"],"references/rate-limiting.md":["76ced848a677e72f"],"references/request-handling.md":["790539ac90d474a1"]},"app-clips":{"SKILL.md":["7f32e95c0c1d7637","9d325973f4804d02","cbcb6a9d001ce856","deaef00c2b024206","f526f006207792d8"],"evals/evals.json":["18579bae69cbffbb","26e0b581889727ef"],"references/data-handoff-notifications-location.md":["72e1a39343dcceb2","ba607dccc66fc517"],"references/routing-and-experiences.md":["307753daea2bbb09","5c9d417b64552614"],"references/size-capabilities-and-promotion.md":["20557a162d1ce013","9c2238babb2bbb9f"]},"app-intents":{"SKILL.md":["03016eaff64de999","044e7b67bf61d5cf","35856699d0c4c090","87fb435121ead4c0","c362f75db36b345d"],"evals/evals.json":["3c42d73416772990","5de88998af0f7b0d"],"references/appintents-advanced.md":["1eedba8d2688619f","993d078e95f8ded3","be1607869a0c75e5","d2c99c0de6766371","d84c98b9117f73c9"]},"app-store-changelog":{"SKILL.md":["0dbd4205f3d2856a","513bd5de6eb963c3","a8f783ca46809642"],"references/release-notes-guidelines.md":["c0beecb1ec36fa97"],"scripts/collect_release_changes.sh":["f7e4659a351f224d"]},"app-store-optimization":{"SKILL.md":["27cdcd50685f8fa7","5afe9b965b68bd2f","72a649313d0ffa74","7a102fc9cb21203e","86cc78fa34a1a306","f41f3214596ed6ba"],"evals/evals.json":["a0275e15507bce7a","b059e585d37184fc"],"references/keyword-research-methodology.md":["4a96463f01f35da5","83a6ebdb3cece6b6","c7ddc3cd4834ea31"],"references/product-page-variants.md":["2810d4eb04776622","668ada4cf416b2ed","ca44ae2459757bba"]},"app-store-review":{"SKILL.md":["4478fca651dd6b0b","62758307d39ae24a","b45eae30af92e48c","bcb658d0cc965578","d49de9a605bd9b32","f155e8b26ac3dd43"],"evals/evals.json":["32f048bd476860f4","b8223ab948a63b90"],"references/code-signing.md":["08d9cf8781c4811f","db4d593dddbd01f6"],"references/privacy-manifest.md":["05f172e32daebb14","bfa54015da06f374","dd2bd0c523318fa3"],"references/rejection-patterns.md":["16651a986875004f","76fca63cca06065e"],"references/review-checklists.md":["4c116a8804abce01","ec70c6c68f79ac62","f28ebb6f851ab865"]},"apple-on-device-ai":{"SKILL.md":["07a2219619916a51","3772c52eee5c4d2a","656faaa265b93d7b","a5158cfb1717954f","f35cc482c6fad8b8"],"evals/evals.json":["651cc7e36011ba9e","e0f49cf13e1a9187"],"references/coreml-conversion.md":["70827aa681a473b0","ea2761e461a726ff","ed19f597b7d42846"],"references/coreml-optimization.md":["2dcc576e532ee30a","d049fa90f13bd2f6","f7d457e6f52ad0cc"],"references/foundation-models.md":["8b2015b4d4be0ddd","b4824d40cc47f018","f08f94e773e52de3"],"references/mlx-swift.md":["6bf90025da7204fa","798a764f787d2b60","bde80718fe768661"]},"architecture":{"SKILL.md":["031c247d0cd314d0","31a0327a9ea438ab","3e0e7801c6913f78","8fd241f7ee282964"],"references/adr-and-review.md":["62ca6275fb8bd865"]},"authentication":{"SKILL.md":["0107386d5a651aa4","10da7610c921fef8","483ff2c3d32c7e7d","cf635b8dd0e66286","d6f951dc3234f6a6"],"evals/evals.json":["393dcb1f5b7d2943","84912c8d74a016e6"],"references/keychain-biometric.md":["2df057352be6f331","63fca62bfed05ff7","b28eba36b8b97cb9","d21a482f8c8745ec"],"references/passkeys.md":["952d7080c790897e","d61a4cb5ed69b5a9"]},"avkit":{"SKILL.md":["027783075e942078","bcd65242f3cfdfe5","f8877e4afcad50fd"],"evals/evals.json":["4ff764b8f19d61d2","adfbdff445b492c7"],"references/avkit-patterns.md":["23fa4efb083b09cb","bcb1ff6bef259dd6"]},"background-processing":{"SKILL.md":["0b06859fb09dd582","2dd63d1b4d639d52","3a61178c9711dceb","53748934fbb36c17","62b93a2ff73acee0","925057b6fda25151"],"evals/evals.json":["588f381cb072b613","c21922ca151b1a9e"],"references/background-task-patterns.md":["40ca350cfd2e4f4a","a45df5a1e8a0c4a4","bdfb4a45df0b35f8","c3989ffbaebd35ac","ee646ed3b6e89300"]},"backlog":{"BACKLOG.md":["38cc1837268d0113","af8b77957c3a3a57","d492b69f71d839cc"],"SKILL.md":["10c416396082d4e6","4751dda846296583","5c61982308169701","721ff2fda2dc3002","b5de3c49671ca1cc","e09fdb81caba4a06","e5296011423e5612"]},"callkit-voip":{"SKILL.md":["19d421ba3990e647","1e803d2954a55adb","2559172fe7299a35","5bd0be5a1e081597","d0d3baf0a31ccce3"],"evals/evals.json":["0d764542cfb20bc6","2b1460e54014d579","2bd7d5e94737e5f4"],"references/callkit-patterns.md":["5e91a38874979fec","796a989c82e95332","9d95a35c96eb9cff"]},"ci-cd-pipelines":{"SKILL.md":["15a8baa497c78497","64b2b9402ad65e0f","7d124b39024ee42c","807b0714f3eb29ba","a11f65b73f52a430","efc34676a5738233"]},"clean-code":{"SKILL.md":["5976723b1b10aca9","ab827b364fbebdd4","b26bb5f0e390d42f","ddea1c8f7fe1dc26","e556610923eec0cd"]},"closed-loop-delivery":{"SKILL.md":["7847e9c898046ec2","e437620fed0c9a98"]},"cloudkit-sync":{"SKILL.md":["622db8ae64841268","73a86a6083a7fdc2","865486f4bec811dc","a5eb6e6fe703f413","af59ac0bd82349df"],"evals/evals.json":["33a96943b7cabb3c","7c056dcc43fceeee","f5ded29ab40d5f72"],"references/cloudkit-patterns.md":["18595b764bb96ef6","2f3a56c098706028","b6dc9246011a1ea9"]},"compose-components":{"SKILL.md":["1518275e3e954ccb","7fdb05f4fca292fd","d2bdb2a19200c4ce","d3ca84ccce45fb17","da2b67cfdc3ee7a7"],"references/patterns.md":["30f0cee58cae0bf9"]},"compose-navigation":{"SKILL.md":["01d929db483c0151","3afda0796373475d","4558d5f099ed4c6b","9e1867ac33ab46fc","a8dacf3c898b9009","f073cc5d4894487b","fea1c7ea18e9538e"],"references/patterns.md":["94e550dd646dd4c6","bddfa289baf33f89"]},"compose-testing":{"SKILL.md":["2629be3cfda11f39","624ea9355a50d83e","681ce75304045af1","add33bed31fd3ee8","bb7b68ea8c492e1a","ca33d3bb49893a1c","e0d867e2da4f94a5"],"references/patterns.md":["018753f1aaaa7dc4","515e356475534515","7839d3c73eb95794","eea0aa108e13bc98"]},"contacts-framework":{"SKILL.md":["247643d2f0951283","329e95b6101326c3","74661306bf4336eb","fa5d6c1930487a9d"],"evals/evals.json":["d71148dd587f53ec","f9faaf2d85fc2118"],"references/contacts-patterns.md":["1dbb51bc9cd6b198","53e12b91c8667fc1","597cc47382b31487"]},"context-compression":{"SKILL.md":["23d8a0230051b5ed","99dec76fd47cb8b7","9bdbfcc7d77bba31","ef8f6193c8e0916f"]},"core":{"apple-archive-compliance/SKILL.md":["2076b4e8a1d4fbe5","264f369299910811","2eec9a3063520ca9","3aad495762c28733","5fe5dc1dfc8fd519","61b3845f9815d600","6645226b0d1643cc","6d6111c234479d73","7dfce6f8a64c7afa","9425c0160af3fc42","9d44663292f929ce","c93ae68f4523c918","da5462b2744baaea","dd35017231b2d12e","eb90a47043da70fd","f118e7d914aa956b","f78da6666b102602","fb1682ef58af3217"],"apple-archive-compliance/references/rules.yml":["e3e020f0d8221cc1"],"google-play-compliance/SKILL.md":["10ab82c007bb131c","40d35312d62b008c","586fc0658190744a","5eaf0888a27f2e3d","69c60ea6f4a8a33f","6a9cd80ea300cdd2","71953b218facec14","a2ed78be1af1bbdc","ace517f6cb9e6902","cb740051889e2a8e","cc2b509089ac3052","dcc4b20f5afc8c17"],"google-play-compliance/references/rules.yml":["95db9bf7bde0c84c"],"multi-agent-analysis-jira/SKILL.md":["47cddad7c8d9d705","7432db1a829f042b","7bd50c991ea0fba3"],"multi-agent-analysis-resolve/SKILL.md":["058fa7554ee64ba9","71b150a796d1b86f","c2260ab0cc1be800","d8dc207dd5c0997f","e4ed7066cc9be20c","ebf649ad8a7d7e91","fe8b5e8ce6305fda"],"multi-agent-analysis/SKILL.md":["0c8ca90e965b5147","2308b15bf29803b4","44fa8316b61b5f02","621981554f1ec168","935d339881de281a","99d33fba3dbcaa4c","9dbabae3410a0cb9","a3003565a38ca474","bd0a642dbaa1b1e1","bd24742caa36224d","c2efcd29d268f602","fb764635909d8359"],"multi-agent-autopilot-off/SKILL.md":["4dd33a6cee953f10","666043be62c22d0f","6adc0fd60364c5a6","e7363dcb8ae5d570","f2ffcda242c4da61"],"multi-agent-autopilot-on/SKILL.md":["078c8298f3c66426","1d9475ac2bc749eb","35caabe2794e219f","47f69287927c9876","71cf3b6274fb7c0c","7d30625718251a01","86b90dcda0066fc8","b325074bedf439fc"],"multi-agent-autopilot-status/SKILL.md":["1db6a8faae847ad6","3d96399f4044c1f8","4dbac1109a6c9999","63e2bdcc92157692","7b256932fe3e72a5","c42480ca2b6dcb36","cb8b3706cc3b4730"],"multi-agent-autopilot/SKILL.md":["2f96f853bb2b2e2b","35b9a14140cea0e8","5cdae8a5101a193e","64556bd865c5e863","84d15d3de44e521b","8767eae5aa0eb701","89bd3b2d0b02d559","ba0a20b2b941452e","c11153f824d1f02e","f6aaebdd0185b07a","fc7e77cb6e59fd3e"],"multi-agent-build-optimize/SKILL.md":["3622a56355127fdd","45743801e537b077","51de7a347ea2182f","591d8ed8ec0ae21f","9567b9990174ce3f","ce4232bb7aca4c7d"],"multi-agent-channels/SKILL.md":["075f26af8f5cc1b7","089247e700ea61fa","0d51be7e3d04bba1","1a000d668cf1f994","2338d705998896f8","25391ac7f3d5fabd","46211b900464c85a","51f31dfad8492545","5c1b28f6d16cbedf","6159287acae03dd4","656e187078f70de9","6e7de1347c253296","6e8bcf62ea6fa34d","7b1f030080cfcbaf","862276be34d377b6","8a1b5c9b3ede9739","9fc03cab9a4777ab","9fdbeca87d6f0b68","a4c877998beb251e","a95ffd702819630f","cf384aee606f95c8","d3e7616962dd90e6"],"multi-agent-complaint-analysis/SKILL.md":["09c09ff1e3f6470e","15e4ae106f99c133","1cd0dc229e2330eb","ddc56ba318c6b09c"],"multi-agent-create-jira/SKILL.md":["1f36baa3258cb43f","317fdbf57f0fe892","48cca976fbeb43c2","682d255828871f83","86e5a3bc4c75fdd1","b7f845ace8dcccc0"],"multi-agent-delete/SKILL.md":["7a995792b4be9f2b","9066ae13e329d3bc","94c2ea063b99332f","b0b2d57f68507827","c9b98a2204dab607","d541a838966b9b96","e2755a16c907674e"],"multi-agent-design-check/SKILL.md":["0e2e8400aaf00851","1629ded4e00eda24","42bd8456879538f7","4313447b0eca2a68","5686b9b3094896a7","5719babdfcc5755a","75259190e1e0dcbf","aa3e8bd70dd03ddd","c5e161c5ee9aab3d","cc99c1af367df2ac","cd475ac0ec5e1ba1","f9ba07d3e0f7dbc9"],"multi-agent-dev-autopilot/SKILL.md":["13ef3b776508ecfd","211ad3da60613812","24eb0f98c2c699cc","29f89a8cc3cc6d01","38e293cdddba94e9","44792245e40be2cc","4ed70f49e2dd3ae7","697ce248a1c6fe63","89e5611529d13956","97431471bcb0e571","a77f7ea1ec8807a7","c965f47458c8ea88","d5a21d92f6c1cb24","e4611e05106511e5"],"multi-agent-dev-local-autopilot/SKILL.md":["372e2ec22279f091","3d498d33c3a55f34","446fe9fd8510f1cb","466f965ed778cf4d","4d286763aaeb2c46","730487ef93db5742","82b897fd5f0f0aab","98ea72fa3d30ae2d","9c8af37642b389cf","bfed69f41d978a04","d8544143c9a0ffa0"],"multi-agent-dev-local/SKILL.md":["0c5ec22a3806b2de","107aa1bead47442a","19558b11b8c2f57d","203fd3ca1647d5c5","241d19fc3108a63d","36f51cb2863bd19f","60af8d9cd14309d6","71876ca513d8cd27","80e4af89fce1287e","85e7bac9699493d6","8a2544ddfa3c0d98","fed208adfe6dc3dd"],"multi-agent-dev/SKILL.md":["01ee0c8fb42c4a11","07f64e13c524581c","1e2a0456056f3e55","4edf35d36a88c6b1","56883cb2ff72ba53","61d33b3dd2045142","83946f78bdaf0ab0","8eaeb9b315a7652c","97238fc368b547f6","a556477d11bd90b4","bdb56dc093669ecd","c3ee38de5451529c","d57051e6b8adb011","f13d01ead2e0a9c1","fe79571ed64c79cc"],"multi-agent-diff-explain/SKILL.md":["050b10f3c25db4bc","2c981ac11fd32de0","56229381e7235538","57891b86c63d0505","8f6fc0ad6e2b54a6","916652761ad96958","96d5881e2b57ae18","b72b0805f85634f6"],"multi-agent-doctor/SKILL.md":["30642cf21198a0c2","5e56773b8a804b5b"],"multi-agent-enrich/SKILL.md":["db3bc8aa83216c64"],"multi-agent-feedback/SKILL.md":["535e625d2cb4c5cb","fa58816116348f12"],"multi-agent-finish/SKILL.md":["1c73a4abe6ba0020","430c70d080b87f3a","8149042718e5bb9e","94b52a7a69496cbf","9af3957b40728109"],"multi-agent-forget/SKILL.md":["06708ee2a8274f88","2917e82ff1b1be41","b81549fbf346b6d3"],"multi-agent-garbage-collect/SKILL.md":["323b77d840f0bc2a","5e676039d1c7fdb2","a1cdf34761de7422"],"multi-agent-generate-bug/SKILL.md":["791e44e2aba0de55"],"multi-agent-generate-task/SKILL.md":["4707f43a56fc3d68"],"multi-agent-generate/SKILL.md":["ca18bddb38730541"],"multi-agent-graph/SKILL.md":["5347f3380831432e","6bc751e8ed937818","7386961a30558810"],"multi-agent-help/SKILL.md":["044515081d4707c5","0cb3e19b1cef945e","1059d78d29a8cee7","1e65ea8dbccc4cdc","1fba052f83efd7e8","27e027922c15b502","2e120cb4e643f5e7","3217c826c1666018","33424e904c15c21c","38b9b4c62472a27e","41af491c7e0d64b3","43cabf49a4d4918d","46c66449550677e8","51f217a0e863d4c4","539e5c1b0836d2fa","59aa2f5af3668ce3","640add415d2de89c","67a5c26a7d148a1c","8d23aaccd49b2232","8e78aaa595f71b15","95df2ed417a1a172","9dcecee9c029b6ab","9e9c91cf4af18646","aca8b3c80079ac71","b3752780320c4c15","b4e5a97da66bb6b1","b865d631ff741a89","bfa823b2aac42a7b","c2c247ba6725439f","c689d435d2f292aa","cbeb3ded6c571463","d68890931bc7ab55","d778a184e791c4ac","e61e2899670ec104","fc59f0ff566e5ed6","fcc5bb2f1068c192"],"multi-agent-ios-coding-standard/SKILL.md":["1777281398a3589d","5b4faa0a8acec37b","83adae739a9e173f","a579f0794d2d03e0","ac2a2b76f5873b4b","b5b3a819628cbd40","dd373f1b2dd34bbd","dfa867dd33950269"],"multi-agent-issue/SKILL.md":["03ef3fe7457b0e50","1d2e9ca65b6d1e57","41598e52fa6dac03","8165551bface95fc","89f214caa5ce43ee","9d3d1cbfc9e508ba","cb4f7967954cf5ef","f20e056bcb38c5a3","f4b36c0e1374f8f5","f9a518fe6ac56059"],"multi-agent-jira/SKILL.md":["1f78b37d55357c4c","2f4043f524660bb8","37a9ee45628d7300","38d7047da85e516b","70691ca05687c9d2","7314060d391d452e","85878feb8e3d8f19","8e4dc07dbfa73554","cb32b006c08377f5","ec65df0473d51fe9"],"multi-agent-kill/SKILL.md":["0994677e56a71619","3317aa24aad8da73","996e7eb56e6a1c69","9ebe1f9f656debf3","9f32cf3ea3e9fd5b","a26dda7dc548f1f4","dd5b553485346954","e14155fe52a9388d"],"multi-agent-language/SKILL.md":["0dcfe977ecec5f38","1b96fb2b6d1667ad","2dce0d8c9d8a0185","517a7eefb0f7179e","7797ad6324b10236","7dc0034c1926bb25","99e3620390d0aabe","9a59138c32d08137","b36cc8b14c3c19d9","b9a43a9d00bb1ce2"],"multi-agent-local-autopilot/SKILL.md":["21f01e29605de707","2f5ef23db60cdf66","5930b0c20becce82","67d6590f02749b5d","7e627a9e8e100cc7","8ac630128eb2c8c2","98db961e2c771ac5","b768b431ba89b602","c183c3a0be7749f0","d7876488630492bb","f0ff71f1a03cb712","f3bd52b9a7808c62"],"multi-agent-local/SKILL.md":["0433443cb1148f36","469993ba03746b16","8a91eadf06ec8adc","8c1d3f3bae901e06","b453ddc03b46bc34","c4b4b40162e24e33","dbb3806cb48c2415","ee08efa99bfc0cce","f04031a17b92287c"],"multi-agent-log/SKILL.md":["3227822c52de85c2","5a88dafc0d10be7a","6a963822a96146df","8365e15e0e351d1c","85960e56d2da0ad3","dd07c73666d1bac4","e8ed88cc5527c62d"],"multi-agent-manual-test/SKILL.md":["028b3ff3574ad099","20a2098a52a6ca91","30e4785a81ce6003","381215902f668908","697ff6897cdc2156","731ee0926e6e347e","a6fe153b6f59bae8","c0d4f51e0b3e8f8a","c48eca34b6b262b6","d56cea7c1140b96a","f6db50bfaee5440e","fb5f6f52092c1f48"],"multi-agent-model/SKILL.md":["38bdda205647d4ce","52a111482e5e1336"],"multi-agent-prune-logs/SKILL.md":["11b9f69521c5a1e9","202bdc91978df189","bf63f45cd149d913"],"multi-agent-prune-prompts/SKILL.md":["b03d02f407eb9182","e7b2412e1b35525a"],"multi-agent-purge/SKILL.md":["192ef2140617e677","36c6c0c5ad9ed2ae","481ce7da5e54a28b","51b33bf1e1d02a56","7659818320e03624","8c439b3f6a8db592","8f5ad5238dd9ef2b","a7f617e3ef772ce2","e228835627b247e6","e615f9bed1941641"],"multi-agent-refactor/SKILL.md":["0433743e16da7124","07e372f06db74c7e","1ac4a7f82bb2ec04","35176592b0652af0","4deaca8d04c20200","5e751b40815235f6","67f2aac91a4ffba0","7449194ef51b9166","7843c1859f65af7c","7e79602a4c4c9586","858e71ae75718c35","8a00bf74011b7d69","919a9f61e2347b74","a0beb61375f94a40","a610888aa9e7aa8a","c2da073afb68ce5d","d240884322a59ccd","e77b4894cc2609de","f3e747cfcf64ec3b","ffe3b73ffc537758"],"multi-agent-research/SKILL.md":["08cb2fc367a15f72","67366bce76310a42"],"multi-agent-resume-local/SKILL.md":["160a31e3039502dd","283d42f791699112","3a432dd53851eb81","bf2bece615939dbf","ce9243c753954a51"],"multi-agent-resume/SKILL.md":["11810829ed7eb650","11930a831a5606a3","1ed0fab0b334e42a","6858dd6d48f15264","708d3ecf404792bb","b77e20927b8aef87","b81d4624bb8fc500","c5b4161fb2a60142","ecb7ed72d116e001","ef6fac5dac6139b1","fd6b4f56cae9bbf9"],"multi-agent-review-analysis/SKILL.md":["568d0c6b7930c8d5","b5dde07b288581e9"],"multi-agent-review-issue/SKILL.md":["54392721ae5d1aa7","6c6dd284646d20a5","7021273260ddcd81","ff133383cac92512"],"multi-agent-review-jira/SKILL.md":["6368b3fe9fddbc8b","9e7b1d9b22095dc9","fc2cb3f27c917c53"],"multi-agent-review/SKILL.md":["08dee7120ad34c86","1355105137cdeb2d","192e786261f8eebe","2c400152b6ec5a5f","3af239b493d96f0c","57116211a1a6a996","5a6fb87fbde93585","6821d66945a05aa3","7740d7696ae99f37","79e4f9d9ca639c12","9984d8bbfe34a7ac","b57c64c1eb71702c","bc23e7dc39c5d62e","beced644415239e7","c0a258b02ca3e45b","cde9d156898dc2c4","d4401c342826272f","d4db039f98c488a3","e94f1899fb599f00","f7119983a62b6d90"],"multi-agent-route-off/SKILL.md":["2079af7e70a10383","ef46989435d0eb2b"],"multi-agent-route-on/SKILL.md":["3093b2d962652d46","3bace68f3ac9a880"],"multi-agent-route-status/SKILL.md":["066886efef0634a6","c6225747aab4bedd"],"multi-agent-routines/SKILL.md":["2b5a6f58136f17c9","93622057bc9b235b","e5191077237255f7"],"multi-agent-save/SKILL.md":["17499851f45be3b7","326a3bfef7037e16","4d14b067d30564d7","e0cdf936597d5ec6"],"multi-agent-scaffold/SKILL.md":["04080d19c9bfae62","95145a55ee02a840"],"multi-agent-scan/SKILL.md":["4c9e1641667fe2d1","5f05ed81267d2b09","67c461c3bddd7c2f","836664a2f7c3b1c2","8498106a177b8abc","8868d4a2736d14c5","ace82da545ff8c6e","c2afcfb2751c16d8","cc6294f1fa615424","cf5bab9abae18cb8"],"multi-agent-search/SKILL.md":["088e12ca1d74b84d","2693e5ae07a805f9","38afd84d205d9eb6","4014d77589569fc9","83ac835ae0abc04b","9feb0ee22b7fcea7","a07bc06011a4510c","b23727b26ab7f599","bb6b466f23e3d998","c554d54ecfb182fb","fd234d14b28fac78"],"multi-agent-security-review/SKILL.md":["4e168391294b26ae","950d18507cf36be0"],"multi-agent-serve/SKILL.md":["202a420194168c66","37f94171495657b3"],"multi-agent-setup/SKILL.md":["0577ca03b189f506","1253879a39540055","25dfc0efd2501465","3236175c6a93b52f","3a7c0b9df6a91930","42345af927261775","487e977187c40d87","4a3fca42e5db659e","4a5fd2ddc91c3607","6156217950c2531c","61d0b22357daaa24","684e8e858481e185","880e63d1a843dd81","8c00d53c23674564","8cce97779d40b708","945e847009e958f4","b7a6cd3474da36af","c3b1b030fa5ffe91","d13d6441cf82fefc","df8c0b541f06dbbd","e3791d7d0286eb40","e71f2ba601a9c500","f9e855dc4ef7311d"],"multi-agent-ship/SKILL.md":["697ab9a63135cb1f","aae4097349fc4f93"],"multi-agent-stack/SKILL.md":["05c13d9796091913","09784cfd98bd91b0","0fbd4b010fa402ae","16ab28e8b758dfd4","314f2c738c7f78b0","4788cdb777bd24d4","70aa440eeebb689a","8350d84adfac0626","aa4366df2afe034f","ae4c48a2d6449ca9","b31a99f046d526c0","d7ab3d9d1941a5e9","dae8a3696888017a","e400429121838cae","ed8472385fc55994","fa8989ca83a19df2"],"multi-agent-status/SKILL.md":["1d5d22bffa886cfb","2f7647dae4719eef","370f90f5c3bc1b86","59a2ad0e1b16a180","629474f3907862e1","66ff2041e7206aac","6e8685dd37ba0d95","976e98c751067b36","cdbf377f4b349dde","df146523bbd09a05","e1033d5b5a5a2762"],"multi-agent-steer/SKILL.md":["4462e229d9a82a68","4b34476519c3e068","99c4d5d34699b201"],"multi-agent-store-ready/SKILL.md":["59b48c8d2f2369ba","90d969ae2beb89cc","b51e87cd7a1f1c28","bc27c4fb1c80ae81"],"multi-agent-sync/SKILL.md":["064cd39df847019e","078f9508e345a1ad","0aa3873bb2145aad","0c0e2bde0e7a1d7d","0c6883a9f602539e","0cf4696a3500639c","13ec42b9838449f3","1dd14da2715d35be","1e89e7a10d0733ab","210939bef61e58fb","25e40d4baef7344b","26024e8ad9fc3551","2ca583600d457f41","2eb9aea873ec3629","32188d9c8f3ba2ba","35fcf64d836759ed","3a3d31527b0b7b0a","49bb9adbe38012ae","49f1565e2a0a0115","5523dfe40a787e02","58de653129a100a4","6132b18767373789","698bf76539944f07","6c2c2f0b4e9eb8e3","7365a5b7e67d4091","78c9488363ebe115","7c6741b1d7c9fcda","852a584cf7eda252","87523c0741b8bf82","8771fe5bb5ee7995","8a908b08df6df946","8d867cd6239e69f3","8fcf972ea367c7b2","95a51655ac4fd621","985ca20244733fee","9b85c7714ffe01a9","9cffc98ba88147b8","9da02ecc7f910215","9f03e482606d7336","a7b87c5fa34716b0","aa7ce2bb12059c1e","ab589335579110a7","af1156866eb4bf87","b57106747e7960cd","bded710d7c134958","be6e62651c6fc058","c40fb20f9f048679","cdc2b56cb918cb28","cf991be0aa5ebd31","d2416ec606f7b555","e15cd25f196d7eaa","e78d5a4bf90073c8","e7a52d09a735b49b","ef386cd8987e3949","f29482725a768e2b","fb62e1ab6d6454ab","fed566b40cc76721"],"multi-agent-test-accessibility/SKILL.md":["667f3aeed3bb6ebf","d7199412820d5804","fd4283fd06ce82a1"],"multi-agent-test-dark-mode/SKILL.md":["a3b73330861e52b1","d4decfa2cef02f1c","d4e31b7a3bc79c85"],"multi-agent-test-dynamic-type/SKILL.md":["7aad6feee318c2da","921ae85d0a22fea8","a11d1523763c44f8"],"multi-agent-test-screenshots/SKILL.md":["0f3b47efa9e4e92f","74386bf36ecd4929","d9f8940734320fc8"],"multi-agent-test/SKILL.md":["110d3ae358211c3d","3b6261e3c5745799","42e48a273f63b567","6f227609e13426d1","851fb89f2651c36a","8637b961d644de1e","a3bf45a4141cb148","a88550aef3e7b1b0","ab1ce1675c652937","b9f661926502ff9b","cf7b5babe76d07c6","e6b06f7b1432389d"],"multi-agent-testflight-validation/SKILL.md":["09272851496dfd60","3f720f3fb2485173","a66e086fc464dfb5","ae20fee2362865f7"],"multi-agent-uninstall/SKILL.md":["319f1308e7387cc1","441e7052dd73f9be","56416d1321d4c761","79e72c6f0bdd2a0e","ed93a698b46cbce4"],"multi-agent-update/SKILL.md":["0fb99b08d20f8600","143cf4afb234478d","1d23b2a7385a115e","53e0f7510bee231e","61cffb7f13221621","94cff83f55c130f1","9864444a4785257d","cd7245157795cf50","cf7f8cef33d2ba08","cf9ed964e43d1bd7","d1e50444d33bc864","feb7ef0fa2dc01c6"],"multi-agent/SKILL.md":["1404849c6688eee5","22a35dd1b3a78a38","275b2e123d414261","2f240a1e9afca72b","3354a00c3c0207a0","37ad59ecb8577a97","3f50998db79b1639","3f7ecfcfac63f9c7","43d86f5eba1cf90d","4c015af802672b12","4f059d10b6db74ab","53026919eb918a81","5528e1799a055360","577be80b6f36bb13","5f42434e93604ae1","5f87c92ba452b47f","63ced4fd123ebf23","6929313f07daf863","6db755fef0f62607","728ae04ed42a90ee","7ed23065b6681c73","7f520924385a723b","85b3bd28aa435e53","89c7a9d799c8ff13","8a0fa68d72f62719","8f2183d2f5e75ecb","90865ffff8ff2674","90ff40f40a35c4ac","963ec6f11cfc6b8f","967131914860ef4c","99073d380c968203","9ae4e1078c20ec10","9ddcb4976080409d","a7a0a3d8daeb0313","a93453b7a5457c7d","ac8af02fdbed74f9","b0f705deec3a4e00","b1cc1e6bc6f76c39","b1edde323ddfa551","b382e579cfab4cec","b4de5c2f9a01f9c2","b68e8d103c0e5f57","ca721a5e97b66b90","cd5cfc25bcdef577","cfac9b789a7fe3ae","dcb683591fcc6eee","e3d2d06b1ecdcbca","e72f0cbe263f0c21","ef6309e1406f1455","f20d3c1e2714e0bb","f25e202d460cea4b","f7220f085511b63c","ffe8dfdf0ea34beb"]},"core-bluetooth":{"SKILL.md":["0d33b4bfae0e4526","3f07f9d2d821a3cb","544a286865ec0f05","ed686b611a0b5b31","fd9e3ead863cee67"],"evals/evals.json":["45d367cb611c2b57","bf1b420d434415da"],"references/ble-patterns.md":["6c66d37119f404d7","752ed1442dbb09aa","d04428a028ae772a"]},"core-data":{"SKILL.md":["54d5d2de2c34387b","721dfc55dbda295d","86a8558b13bed046","ef964a883504597d"],"evals/evals.json":["2393a1f8ae120012","edbe253ec5bb3dda"]},"core-motion":{"SKILL.md":["0f1a3909c683c2ff","74292779dc827a9d","83c2428f8b6f11f9","e7859b2c4475263c"],"evals/evals.json":["49dd7cd0ad6722c7","b88f25dbb4b466d3"],"references/motion-patterns.md":["9608cf6e667d3a62","e33d878bb315a092","e52eeeb5af46a970"]},"core-nfc":{"SKILL.md":["06936ce8f0665711","34b24c10cb403161","60cb77257ba9acf5","6e0cd3dfc7269f37","fc5d70fba32cb183"],"evals/evals.json":["73809c927bf4b00f","84667f12cd0eb8ce"],"references/nfc-patterns.md":["7bafcd50dbac31c8","dd176c5318a26a98","e676dd486693144c"]},"coreml":{"SKILL.md":["19245b2802ab2eb2","515fcac19ac8990a","8fc9445eb932ee78","9b0a5dd0ff0a0800","e827f3e50b61e4a1"],"evals/evals.json":["89c5447eb8c2dcd3","9a35fbb5c83ad620"],"references/coreml-swift-integration.md":["8c9104ec88e88457","904ed16c2a716528","db03b9e55ece1c4c"]},"council":{"SKILL.md":["834a292c32748435","bd4064c4e88f285b","edccd9c2cf7d90af","fdc7d4e9b94f99e8"]},"cryptokit":{"SKILL.md":["48bc1225a6a40c3c","8fa136ccc7db1f81","ece1eef89e84ae28","ef12fe24722b1a50"],"evals/evals.json":["878406699220dc36","967c4e26f924625d"],"references/cryptokit-patterns.md":["901591202e666a82","dffe1c47568661e4"]},"css-modern":{"SKILL.md":["2a462ab11c0d55ff","89de328ef705c26e","93f6afb494eec4a1","e3d133fa7ca181c1","ed324072e05b80e2","ffe2bb13e899701f"]},"database-patterns":{"SKILL.md":["19505fe3476784ba","2986791ae92bfb06","2f473cbe1ef4ad74","44b5a4e10b191415","91fb8ee35561df2c","ba20bebf445c6c53"]},"debugging-instruments":{"SKILL.md":["08507091c104debf","207dfb181c696ca0","7e0540ea0b82527c","b43a4accf37cb699","ddd9a9b8c7b9a45f"],"evals/evals.json":["4da1f499d666f156","5b455ddeac22d970"],"references/instruments-guide.md":["50f564d2ca19ec5a","559558761e6a0d77","ca887dfbcf8ba229","fef4b7e84c71b323"],"references/lldb-patterns.md":["381c65c4cb452279","48769889e17e4675","e7157e3f180d12a9"]},"debugging-strategies":{"SKILL.md":["1efaba58656478f1","4aed6663af095336","657a187d41e3d0f5","6d6e9af528c9a1f3","801f18c6fce269c6"],"references/hard-cases.md":["ca18d6f13818aa22"]},"device-integrity":{"SKILL.md":["079b0d54adc7104b","1eabe04aba3122b6","40e46f01892e23aa","6b7067d4059ffddf","8c59917638c73db5"],"evals/evals.json":["1148513dd95f2e46","ad6587165cfadcab"],"references/device-integrity-patterns.md":["4de13b25a7c6a5c9","d37a78c2b3f4ece6"]},"docker-expert":{"SKILL.md":["156ef53e23d95b8c","3319d3c85ceabbd0","68cb567bfb4d123c","ca23c3669d66a9bd"],"references/patterns.md":["00f1cff704097883"]},"energykit":{"SKILL.md":["36e7f04ef1ab7488","4ec488cdffe2c84d","bd532145c155a90b","d969b78f8f966481"],"evals/evals.json":["1f3e73aaf7323da8","a2341574af20d874"],"references/energykit-patterns.md":["2e5a9b423cfb24bc","78a70a0e073faa6a","8c2292193cf140cd"]},"eventkit-calendar":{"SKILL.md":["3d48933952dc919d","677215c3fe3b90e7","75fe0cc7cd30fb54","824e746f421723e0","accca4fef6921c9a","e9f6b6427c91e45a"],"evals/evals.json":["1b56d7ceae7e0aa2","5d5040c699a1e1cf","829a40729b4b6540","c1de619f15637f6e"],"references/eventkit-patterns.md":["08a61b8324478560","6580dce711c43b64","7edfb9e0828e3a53"]},"evidence-github":{"SKILL.md":["235d41587d8ef979","2d24f68e2247c914"]},"evidence-registry":{"SKILL.md":["9f739d1e83c40664","bd6200ae3523c292"]},"fastapi-pro":{"SKILL.md":["172e58208d737780","b5b643d264fb0d11","d0d2fc5fce57f50c","d20e3825c81d8672","da9969766126f877"],"references/app-structure.md":["def775d9465a6cf4"],"references/testing-and-deployment.md":["951be08f95a1e42d"]},"firebase":{"SKILL.md":["0adf58c95c029efc","4fede1c4fb5bf6ab","6e43b2a5556f4f92","811518b96a8900b4","8ad436609d5b22a3"]},"github-actions-templates":{"SKILL.md":["1d4ab1162181a401","1e7f32612d41c084","8a630f9851520c10","d85c8bb4b86f16fc","e62bb19ef39ee7eb"],"references/patterns.md":["12c17250fca37871"]},"gradle-kotlin-dsl":{"SKILL.md":["2aba1420004c8312","4595355c626e574e","86b6b3669bc56f41","d5ede438388f58ac"],"references/patterns.md":["5ef241e39894ec07","ba87fd617db2b2a4"]},"healthkit":{"SKILL.md":["2f5d90034b57cc55","873ae11df501f744","c803cc323d4f7fde","df6c325ed6aefbb1"],"evals/evals.json":["00f88e07b8573797","8659444582940680"],"references/healthkit-patterns.md":["2ec3926e011f27f1","c4c77bbd2b6dcc6b","e71dc9d5334988fe"]},"help-skills":{"SKILL.md":["b7f7e83ae40b174e","cb45d81fba1d660e"]},"hig-components-content":{"SKILL.md":["1a0dca3e6c7070fc","3be2dc41ae024a50","4f2aa6b62c723765","7ef239a8cf346be9","bf9e553ad618a551"],"references/content-views.md":["570b044a51cbc3ed"]},"hig-components-layout":{"SKILL.md":["47a5d55bfd19156c","6b0a9317f4050091","a1f32ca7907b5c0c","ace12e49fe3ed33c","ecc585770d33d490"],"references/containers.md":["c68c89156c845ae0"]},"hig-components-status":{"SKILL.md":["2ad17aaccf15b611","60c0951c1ca6067a","66bf5ea253280ee9","724cc55ccce744f8","d0727315f8fb0669"]},"hig-components-system":{"SKILL.md":["07427769b0098df4","1fbb59918c3cc101","30ba379f4701c644","b3778230859f5649","e504853d6f9b421c"],"references/surfaces.md":["f8fcf8242f74b6dc"]},"hig-foundations":{"SKILL.md":["2839448348e9793e","3d1913d5ca83e3af","4c6ed762afc736da","92b27a3f1a49dd02","a80538411af055af"],"references/foundations-detail.md":["acbad265fa711ab9"]},"hig-inputs":{"SKILL.md":["4827ed99795eae59","a27c9f5ddb8c14cf","a627bce4e3c0b795","bd6ebbb846d13da4","f57186a1a6876635"]},"hig-patterns":{"SKILL.md":["1f00eb63ba9313f0","57d7077789a4f596","9dcf809b1e34d354","e4286188faee0170","fc1ed9ed0762fc4a"],"references/patterns.md":["caf2ef18bd21e0a2"]},"hig-platforms":{"SKILL.md":["866c9fe86297eb49","da435958cca677af","e17bbd49b568b6b1","ee41802894b14b5a","f2b72218ffc981a3"]},"hig-technologies":{"SKILL.md":["042260fc2dd40517","78e7ae572a20f00e","84888e011491d646","f1c58991de41265c","fd373e2c1853fa07"],"references/technologies.md":["564d658e81917a99"]},"homekit-matter":{"SKILL.md":["152f49d99ddc865f","42aa350f8b3228ae","574aece4d58c88f1","c8cc6f638b309e28"],"evals/evals.json":["39dc053c13022e28","659714823ea95732","9960addb93133aa5"],"references/matter-commissioning.md":["4331f07835618e9e","613ea49b51d46231","cab0da8d93443175"]},"html-semantic":{"SKILL.md":["8152d95c659ce128","9875670f5bdba860","a6c5f9480b1f5aa8","cc3dbb22eb345570","d1843836d4702e5b","f30c0772d4acfa08"]},"humanizer":{"SKILL.md":["01968736c215f039","1cf50fa053dfd4d6","46639f02c5f24c5c","86dfc78284edede4","8c34edb7d3bbea3a","b04a39a67cb76845","bbc55dd81e7ca632","c999d5e41c3ee7fe","da993d88d5126635"]},"ios-accessibility":{"SKILL.md":["0a93d64c3c43f6cb","6c60e98fb38c34b7","6e2b9f8ef9d98493","94fd8a0a7110d6b9","f86be786edb96bac"],"evals/evals.json":["780b5dc62cdee6c0","b59cca71f0db8f31"],"references/a11y-patterns.md":["15bafeca23f56c20","82c194d08fa91c5a","9acd791bf63a1cd0"],"references/media-accessibility.md":["33c2464ed825cac4","b796732360c1d568"],"references/nutrition-labels.md":["0212023196e18f11","485aeab5971abb3e"]},"ios-coding-standard":{"SKILL.md":["25293b357b6f5099","4f54c1b6bee6dfe9","a40a8c34a4ad0831","ea3dc744539bf26b"],"modules/_TEMPLATE.yml":["27b3eb1107754034","b59a2a6a81032857"],"references/STANDARD.md":["09a6adb2a6a426bb","5a5c41de129d329e","653bb0466648945b","889ac09f8d2d7202","8b3f1c00ec4b0953","ceb33f5b6d591869"],"references/lint-local.sh":["27ef1acc3efade22","54c93f3ac2ab5891","bd645bb569f30fb5","d3968a511097a9db"],"references/rules.yml":["02903330519e6544","15110d2c7df01642","26a2f4dd7d0c4459","3d4618f76c18abc7","726162c87375b59b","aa6d090e684bd584","ab9316af637f8dab","c0e01214c2e3d5d8","edd10ffaf529f437","fadfbca3bc1f851c"],"references/swiftlint.draft.yml":["03ac6c19b6c1fb19","669d0b78ad3b9d2f","6a243b073afcbe72"],"scripts/check_structure.py":["dcb257ec1ef558e8"]},"ios-debugger-agent":{"SKILL.md":["58f6340de97c4616","88b75ff448b714dc","b0b05f1bedae2c09"]},"ios-developer":{"SKILL.md":["272e712e0d0b050a","54d4b2d0680de821","8a0905421f4dd9b5","bc645ab816a4d9af"]},"ios-localization":{"SKILL.md":["11caaaa0b6ec27d9","2e1f4a7aecf17d4f","599fc26c03d5d3fb","7ff4dc059bc3ccce","a50b1fe2638f2358","be5194e57e9308c9","c405f97b7ce02134"],"evals/evals.json":["1c450699c83ae023","638707d041a0b3e9","8c5f668649da3c11"],"references/formatstyle-locale.md":["c28277c853e625ae","dd26836eb8a45b9e","fa9dc7e0d125c081"],"references/string-catalogs.md":["4ed7f1f4337947c1","5337ab405ba42e9e","b1a7647d51956ee0","f290989c3a9c1e78","f6080c1b902c924b"]},"ios-module-structure":{"SKILL.md":["0b76cd3413da1ed6","159a8607aee811ac","2a4fa395cee5b8f8","7e55915567b36729","dda9730225ab1d45"],"modules/_TEMPLATE.yml":["437f148068ea66d1","bb5328c47d29a7ce","d88ec534e1a5fdf3","fe1295ac4548262e"],"references/rules.yml":["3a15cafabd586b50","989120a317109db1","eca0b4dfa8d8d56d"],"scripts/check_structure.py":["2457194d36ebe70a","8b0d019250901a43","dcb257ec1ef558e8","e172f957cda68cfe"]},"ios-networking":{"SKILL.md":["09762878320ae525","65f3932b0cfd68b8","8c1df97237fc3556","8c637779be6e40df","ecb295af3ea82590"],"evals/evals.json":["79c891ea55b043b5","c62efae4c2b067f5"],"references/background-websocket.md":["30af972f07b20c6b","608c53d7214bc9d6","f521b6fb61d7b367"],"references/file-storage-patterns.md":["5795be97b84cc4a1","a6542c638507f1ab"],"references/lightweight-clients.md":["bd8b6786656b8ede","cb64143c87537f36"],"references/network-framework.md":["404d26d3202ae185","6d67f3965bd43e6b","c78091fd5a098182"],"references/urlsession-patterns.md":["750f206902a55f22","a0cb6432b7e12415","c966d568e5310e58"]},"ios-security":{"SKILL.md":["ba88f571c3bd17bf","f92240eac872e67f"],"references/app-review-guidelines.md":["e0d3e8a1a71351ed"],"references/cryptokit-advanced.md":["bb763d38ef77e4ec"],"references/file-storage-patterns.md":["a6542c638507f1ab","f5ea414eefd79320"],"references/privacy-manifest.md":["b8fffd2d756ade38"]},"ios-simulator":{"SKILL.md":["09b6578cd04080b4","14d40bdeecd6967d","403c4da5ec34b4de","63d5821acbb0ffd8"],"evals/evals.json":["68bfa392b92b8c0a","c284a8b91b494f15"],"references/simctl-commands.md":["2e7be8a3d9765a79","5ffcfcac18072e34"]},"kotlin-coroutines-expert":{"SKILL.md":["027416f32fa88335","3cc1d32bcd45e422","3fea5aee506c0129","8a52af6a6d7846c2","ed73e8da02a1690c"],"references/patterns.md":["277afa39fe134053"]},"live-activities":{"SKILL.md":["163faa17504cd882","56e45e23b9a1b1d3","60f68dbcf0eb4e7e","6adcdef27574ce02","9c19650b9234f8da","e88760fc96826849"],"evals/evals.json":["10443dc1bdb76f64","1b04900a76d8b127","3ce618d2b04d8bec","f8e0e25d2a380268"],"references/activitykit-patterns.md":["5078a6d7a45f24fd","fbc5c051a6caa7b4"],"references/live-activity-patterns.md":["6a871bb7c1f34978"]},"localization-reuse-map":{"SKILL.md":["1b92cf31d2965a66","3c1d784ed99a6e7d","4a63c0900c9ebeab","5168d3007200d3c4","77597fbac5afd765","7f5d87a6af9b5e61","9d8c2ec54dfbbded","f39d40437ffb4518","fbbfa7d7b23a71fd"],"example-mapping.json":["007fa6f736eb75e9","1ee120979221e108","837c273598585fd3","8bb0411c97327ca6","907e7cec078242d8","caca4ac3e995b099","d91dfdc8ab7bfb6f"],"reference/format-and-output.md":["1927f8c26861e5d4","5333d8ca7af181db","56f79bc1e1eeeca9","8c14759d8b6d38be","c041819aabb8c79b","e5ba482eab922ff9"],"reference/publish-and-snapshot.md":["015781f2011674d6","1cd88a60432939f4","32dd076420bb9376","71bfc052c6c93033","740794cafbb03905","8ab43a588742aee5"],"reference/sources-and-recipes.md":["1eeef87ccd274955","3c774dd5baa02e7d","3d4c57af1aa26e2e","4bb3f368f4b5915b","515ba3d753368f89","5e2bebec1ebdc65b","6d3b0f3da3779fbe","d3bb4465e97316de"],"scripts/_shared.py":["1a7a69580c4e6922","63f7423ca26ebebb"],"scripts/build-artifact.py":["0be5d8de4bb18e3e","137a381141deed66","5aeaa90bbfe9dce9","77bc49382e1bf5a9","97a48f0faa531b4e","aa054b014b768358","b9422fc60c9dba3c","f215461fdc2449cb"],"scripts/build-spreadsheet.py":["057528e4f6f8e56d","405a019f810e623d","44acb8fe244f7840","68dce8d985fff8f3","a5788ce642eaa7e0"],"scripts/fetch-annotations.py":["42940218db298978","666488b8fbd4c703","8351fe6702611dfc","900c891b63f96c25","99d0dd6d4cde0e33"],"scripts/fetch-legacy-labels.py":["1ab2894e568c131b","34aef04772d763b6","5ffc591e469362b4","a9138c6c52421c54","b8a6b2c470aeb2c4"],"scripts/publish-confluence.py":["060026e36ec44aeb","181a72eeac2bfda9","18adf162da1f8024","47f52f4831750fd8","b42b0b169468929c"],"scripts/render-key-shots.py":["15d9c4dedd242213","945287e54a39c9c0","db62915298956fad","ea413d4e45aa6891"],"scripts/render-overlay.py":["2e95dfb027df8216","3578ccf3a69c62ab","4547162acd4529f6","96bed64a20fd57d6","a1f09ee67e3825f5","d74fa7d6e8993048"],"scripts/resolve-legacy-values.py":["667843569f8355a4","670b099d9a7ac364","7304a32e4120d9ad","a16424ee8472f4b9","bce67a49aa4d325a"],"scripts/resolve-new-values.py":["039a4b99864b9c95","6416222611a31c1d","960e11b052266e45","a1d50de0c4ce42ad","a941dd07064540ac","c00424a82fdf302b","c430b95eca0eba44","dde95c9218a02774"],"scripts/scan-screen-keys.py":["243465eb13679af7","7416dcb9291b60b3","a9b7b346cc152627","db61249042bef220","e979d7a7fc3f7752","fcbd37f546714c97"],"scripts/snapshot-resources.sh":["7f235c25c17e30dc","96b9e09c5815ba8f","a9c30e3ecfb27778"],"scripts/verify-map.py":["57eeef3567ab7af9","6d25e9560001a7bd","a00aa99ae0f24c9e","af924128b536e05f","bedbb09ff883c156","ef745c571b7a0aa3"]},"macos-menubar-tuist-app":{"SKILL.md":["214b97f432fe2de3","6c6f1339a2bd4b2e","e4f0f97faee6ba22"]},"macos-spm-app-packaging":{"SKILL.md":["0ee93e739dab7270","66bfcb4ecadf7b39","bc5f8f4f9afb5c06","c2f973d12328b079","ecf5f31890848618"],"assets/templates/bootstrap/Package.swift":["3207b8e65dc61e41"],"assets/templates/bootstrap/Sources/MyApp/Resources/.keep":["e69de29bb2d1d643"],"assets/templates/bootstrap/Sources/MyApp/main.swift":["e31701692e0f4a14"],"assets/templates/bootstrap/version.env":["6c5435e9d5cd95ff"],"assets/templates/build_icon.sh":["464c485e1cc7c438"],"assets/templates/compile_and_run.sh":["8bec4bc15edb47f6"],"assets/templates/launch.sh":["92af4e19b557bff3"],"assets/templates/make_appcast.sh":["1dce6d9667186a58"],"assets/templates/package_app.sh":["1175cbc3f536c3e4","fc68dfdf9501fc43"],"assets/templates/setup_dev_signing.sh":["2cf19f23d1c369f0","42014d16ca5503db"],"assets/templates/sign-and-notarize.sh":["2e74bbed516aa44f","d6245762ad88d284"],"assets/templates/version.env":["6c5435e9d5cd95ff"],"references/packaging.md":["acaf317c55aa0f2a"],"references/release.md":["55930863c04abed7"],"references/scaffold.md":["1eee900cc5dfea57"]},"mapkit-location":{"SKILL.md":["0072848651e8f423","1573c75070c54c56","201711d9e2613e7b","5ec87b50e43b9d86","6b4d965fbaa466a9","8977477e782ad2ab","9ca941ffaccf3294"],"evals/evals.json":["3c31dd7be56df807","6e10b00dcab44526","7738c274139776fa"],"references/corelocation-patterns.md":["caa47ff80c12d7c0"],"references/mapkit-corelocation-patterns.md":["3a0dde3395636a5c","b04f81d982d40f43"],"references/mapkit-patterns.md":["325d970be1da9fbe","6cdc82673c8a8b7c","7c32b53bc68428a1","fd21b7d83d2c455d"]},"metrickit-diagnostics":{"SKILL.md":["1aa8a3b446e0fabb","71e14c2887586641","ba7b3396286ba023","e5fa7f6a80cea3d0","fccc45302c5569f3"],"evals/evals.json":["2f8e238184a4a57b","8edc989358d6f122","d9b27e8cdf1e5a30"],"references/metrickit-patterns.md":["c75b9e1f1bb945c2","f932cc1cd5684ab9"]},"module-structure":{"SKILL.md":["d8d27ca038271ee3"],"modules/_TEMPLATE.yml":["bb5328c47d29a7ce"],"references/rules.yml":["2f94d772b2482239"],"scripts/check_structure.py":["dc3a03d0291cc8c7"]},"monorepo-architect":{"SKILL.md":["36ea2995a5eaa699","674bfb45e4f5db96","74b9b807a169929b","b98520c93c939af6","f5eeb32f3fceea43"],"references/patterns.md":["aadce352f814d502"]},"multi-agent":{"SKILL.md":["0db5be73fb8fb281","4da1f9fd3c9ef039","7c3900c29284a2b7","b1edde323ddfa551","c6278147e6c72bdb","d15736ffc9131133"]},"multi-agent-autopilot":{"SKILL.md":["c11153f824d1f02e"]},"multi-agent-dev":{"SKILL.md":["4b9a37d3b8b30326","5bc732948290d8ef","97238fc368b547f6","9ba6c4f290934c98","b4ee201feccdcc81","c3dcdcd8359fe6d0"]},"multi-agent-dev-autopilot":{"SKILL.md":["0fa5573ad0cbe4c1","38e293cdddba94e9","dedb4277f45e5530","e633282ee441c6db","e761ebc03be5f681"]},"multi-agent-enrich":{"SKILL.md":["db3bc8aa83216c64"]},"multi-agent-help":{"SKILL.md":["4d9416b9fc21dd65","a094137ba764fb67","a90eadc529cc15ce","bfa823b2aac42a7b","e244fd38af3359c1"]},"multi-agent-issue":{"SKILL.md":["9c519ab66962c698","f4b36c0e1374f8f5"]},"multi-agent-jira":{"SKILL.md":["2f4043f524660bb8","f0cb49725ed969c9"]},"multi-agent-kill":{"SKILL.md":["dd5b553485346954"]},"multi-agent-log":{"SKILL.md":["3227822c52de85c2"]},"multi-agent-purge":{"SKILL.md":["7659818320e03624"]},"multi-agent-refactor":{"SKILL.md":["f3e747cfcf64ec3b"]},"multi-agent-resume":{"SKILL.md":["1ed0fab0b334e42a"]},"multi-agent-review":{"SKILL.md":["c7de3c01ee22e1a0","cde9d156898dc2c4"]},"multi-agent-scan":{"SKILL.md":["cf5bab9abae18cb8"]},"multi-agent-search":{"SKILL.md":["a07bc06011a4510c"]},"multi-agent-setup":{"SKILL.md":["25dfc0efd2501465","4b05ecb77b38519e","4ffda38c9b474df0","65bd62617e407278","7c63b321e2edd7d4","f54c1cb9ddb37759"]},"multi-agent-status":{"SKILL.md":["2f7647dae4719eef"]},"multi-agent-sync":{"SKILL.md":["1e11bed43b4f383e","cdc2b56cb918cb28"]},"multi-agent-test":{"SKILL.md":["8637b961d644de1e"]},"multi-agent-update":{"SKILL.md":["53e0f7510bee231e"]},"musickit-audio":{"SKILL.md":["0a4524a463c773de","4e84041fe3d5e92f","5342e696b829933a","775a2b4021e5bb47"],"evals/evals.json":["1ac6031c8243c1a6","3e4b16788e99538a","97fac6c5927d247a"],"references/musickit-patterns.md":["15250283f82f55cc","6c5702096c31563d","a99a151f398083cb"]},"natural-language":{"SKILL.md":["24d71620fe8a8f3a","38c3cdb651817555","921506abc9555515","e10a35fb7ad5c3e2"],"evals/evals.json":["321e1331ab07259e","4c0cda0b382d174c"],"references/translation-patterns.md":["0e620c63a104c046","7e5cb9bfa1c50f9b","9a211a4ef7d0869c"]},"nextjs-app-router":{"SKILL.md":["3e4cb53dfda41f1b","51861327892d41c0","6736da360de6c4dd","997c86194dbe2fc5","a5b56c74befbb57b","c624c042aab900b0"]},"nodejs-backend-patterns":{"SKILL.md":["5b3028979e5bff17","98a7771eea1fc301","a98f031103b402fb","b9d01b165335cfc5","f02bf0e5f4b25380"],"references/runtime-patterns.md":["b18ac17522f14f0d"],"references/testing-and-frameworks.md":["4a3d566ceea7df5b"]},"observability-engineer":{"SKILL.md":["2240bf2d1f58fc80","6bc408c8d13455cf","b7f6432e3bbb91d3","ee278bdff7d78dc1"],"references/patterns.md":["e4f76f0551b7c8fb"]},"passkit-wallet":{"SKILL.md":["8da312567a9c148e","9b168d546f843018","b0b2866bab8aaaac","cf23cc5e08b4bd88","e448fa1a07b96adb","ff232d1be1dc9c99"],"evals/evals.json":["0ecef4b6354bb21a","43440a65abe1bb8e","446df23a24219fee","f401ad727a05147b"],"references/wallet-passes.md":["48f80441ee58fe4f","9bbc9e263384db28","b0c87a499d05c618","c734579b8e90bfdb","f215e940f5da6bc5"]},"pdfkit":{"SKILL.md":["453f8ae0694d32e5","a5ac1cf6907e31ae","b79039aac542a139"],"evals/evals.json":["7157b6ab88e87250","8b2c7ea3110e1c0b"],"references/pdfkit-patterns.md":["64dc1d2e577ed851","83405bb99df39dba"]},"pencilkit-drawing":{"SKILL.md":["2b81019639188b45","84b6735d56b7037c","896542690c8c341c","daf132d07953dae7","e1f0e2cc7b87235a"],"evals/evals.json":["01fe48b6b1e7ec70","7e885deff030429c","9a32eb172fa00516","e4445c48087aef09"],"references/paperkit-integration.md":["f4c7db2a2edde46f"],"references/pencilkit-patterns.md":["2b6a3f10f830cd53","ac94f3a7f993dcf7","ad5e5f9302c4baf4","cfaf34a7ec848f14"]},"permissionkit":{"SKILL.md":["a41937563e7cfabd","c69a1470fd68c215","cc80baabc40c26ff","d6e0052b2b710e52","dca0a9263f28a993"],"evals/evals.json":["0da830d2b47da4cb","52691489148feb12"],"references/permissionkit-patterns.md":["2feeb247c8f118db","4633bb4c0105ca0a","6c995a41d8e98953","99bd7dd0d4bb522b"]},"photos-camera-media":{"SKILL.md":["6540238c089e4834","a196568345fc11bc","d762b7dafbf3464a","f44ace21c9b0924e","f4a02a02677b0695"],"references/av-playback.md":["bed152ed03d00c66","cf6135cde33faba3"],"references/camera-capture.md":["368fd8ebaa107e29","8ae9d67fb5b4710b","e39b20576c0b1e98"],"references/image-loading-caching.md":["3363d0865ed8774b","7fe9abc791beaa46","a47bdce2062bd381"],"references/photokit-patterns.md":["aafa3d9c43a5ff6f","c14b964c961c5be1"],"references/photospicker-patterns.md":["d3c09b514546611a"]},"play-store-review":{"SKILL.md":["091c3c370f0953d0","378f1076a734abb0"]},"push-notifications":{"SKILL.md":["576a628ee55fdab6","5aa0c47a02719674","818e70b4f41c6c88","8d36cf3e42cca671","c4cf31bf8017b20c","cbbe0509c4fb199a"],"evals/evals.json":["2935fa6c0ddd6eb6","6f48025e8862c671"],"references/notification-patterns.md":["761bc2836fa85042","97c4ad50ea010f92","9d8488d4a74204ed","c22519d90881fa22"],"references/rich-notifications.md":["0dc11156752d13bc","2fe4f8da698acf76","76d09c902ca935b8"]},"python-patterns":{"SKILL.md":["141892979a77d9da","51551fa8fefee10a","8eff447d0766aba8","cd361fdff8600d95","d25fc477c37b0540","d5a07f96797a74a0"]},"react-best-practices":{"SKILL.md":["281275f640f9afd7","420ba7bc13efffda","4e65bf225d2425ff","8abc7a73d4138e37","ad042584e9bfb91e"]},"realitykit-ar":{"SKILL.md":["3b52c43e8a741e99","55515e855565dbb7","616b2bec63cef77d","72c05b3aada79767","a1bd71e96f7cdb39"],"evals/evals.json":["1382f84cfb54354a","67ce095cac657c6e","8648b60f0d380e26","b325a81f622411ed"],"references/realitykit-patterns.md":["12fdbf3996b3af77","2b9b7b3136cb388d","5e11470128ea4e4b"]},"rest-api-design":{"SKILL.md":["092bd328034c9475","a07e8610da1fd460","c0f64d56ad1531ad","c17c817f566ecdf9","ed6af9b97dc414e8","ff59dab91072c85e"]},"retrofit-networking":{"SKILL.md":["02769868225242bc","053009196884580d","1436f4aefe67cec1","884900887b07beb9","f8f3f451977a23a9"],"references/patterns.md":["0435d0c754f25757","e122c1c4e83f2de7","e17336e9c101dfc9"]},"room-database":{"SKILL.md":["1bf058f1918ada6b","83fc6d72d25d22f2","b9c1c6c231ca7ae4","eca2c0457861c88a"],"references/patterns.md":["3a4c63b80420ab1d","4e12e8ad66f2a15e","6bd46d0c06281439","bb12164f5a2d84fd"]},"search-first":{"SKILL.md":["1190ebfea433086d","270bbeb0f97a3551","88c19e94a16df10b","babfc48d74e6ff31"]},"security-review":{"SKILL.md":["7c8c2aa855907c04","b13bd8dc086918fa"],"references/owasp-mobile-top10-2024.md":["9029ac7281fc58ce"],"references/owasp-web-api-top10-2021.md":["3c66827fbac6dbe3"]},"shareplay-activities":{"SKILL.md":["5abee46f722a458c","5ae0d40c0760405c","60cf17d4f691fa8d","b582e1b462992a6e"],"evals/evals.json":["19a4b272f2a7a2a3","69e4653f9aec756a"],"references/shareplay-patterns.md":["a9019f046004cd6e","dcd943ba10e25a5c","f28eac5377a4693a"]},"signal-community":{"SKILL.md":["5abfd8e7db80efac","74853a6871b9b927","9d22d3c701dec4a0","dec093a43badb52f"]},"skill-creator":{"SKILL.md":["41c6011636dd2473","6206f77930083282","99167ad6e017612c","e9b593ca2ae70785"],"audit.md":["32792f90fc9aa709","5c51ff3f7b615d6d","640aa5f06e85d11f"],"checklist.md":["8f4cb25cf66df24f","e11171735d6e00d7","e2696655c4ac4264"],"examples.md":["592d2afbdd3512a7","8de76c287af60b2b","9f516ea4c1042a3a"],"label-check.md":["4a7bea9ebd4f2d49","960ccfed6de90fb2","cdf3ce0d991a1e95"],"scripts/audit-panel.js":["099130784aeeba3a","657d6fbac12e49c2","bd4bdf43e70db99e","bf3a54dd4773c7be"],"template.md":["40d0dfad47efa83a","62bbc0b96bc6e884","807b54eacbfc0046","9ad8f0ef961a9b0d","a0d860b39f95b36d"]},"speech-recognition":{"SKILL.md":["494172755717d2f0","8bd14e9e67ceafef","bbfa8fbf6c325d41","c667ce7490f6069c","fddbc700186da341"],"evals/evals.json":["02ef8a42c979a273","e496b6d9fd6d53a2"],"references/speechanalyzer-patterns.md":["39cabfb3bc1697bf","589fa9af3f5a253d"]},"spm-build-analysis":{"SKILL.md":["21faa3f3cfb5537d","34ce475e429deb67","aba9255761fe43d2"],"references/build-optimization-sources.md":["30d9fa87004a6c7f"],"references/recommendation-format.md":["46affd6e24baaee3"],"references/spm-analysis-checks.md":["d15cd390fe84d185"],"scripts/check_spm_pins.py":["fd11a586516e8ed6"]},"storekit":{"SKILL.md":["0cadea5c9fa2931b","31dea4aa616ed1a3","39b67aa74fc8850e","a0edaf74c83d782f","e4de68439161f077"],"evals/evals.json":["baf61e4561d263ff","d93344af86b43562"],"references/app-review-guidelines.md":["08e583eba1de6b18","2189f562b69f40d8","677f0a9b540f08f6"],"references/core-patterns.md":["c1daab4adeacc777","d6aa671039b1e43d","f3d4df3f5d892936"],"references/storekit-advanced.md":["1ea6b3bf38002015","72088af46ff75685","b119eae778ceff4c"]},"swift-api-design-guidelines":{"SKILL.md":["06a99558d06551e9","2433594a1e129f46","aa4508680cacc3ec","fd55241fa69824d0"],"evals/evals.json":["2eb6a569719f285a","d84ade939f130787"],"references/argument-labels-and-parameters.md":["42f998f9c79120b1","61d813ce3663507e"],"references/conventions-and-special-rules.md":["3c7e5e4f7589d852","3ed58e7a21831bd8"],"references/naming-and-clarity.md":["58f4397ce32a68b0","d80473d6b48cf77b"],"references/side-effects-and-mutating-pairs.md":["028a294b3662ca70","63c53e3cf0a2280f"]},"swift-architecture":{"SKILL.md":["7e52c2144e2ac74b","c5b7a2d16765a684","cbce0b25306986b8"],"evals/evals.json":["4383a336a295ed60","dffa773456f2f4b4"]},"swift-charts":{"SKILL.md":["288a8caa7c65b533","2e87e3e6f4e624a8","ec69f2474896e278","f87c80df2a5561d7"],"evals/evals.json":["624d8d7eb846f853","90d4ba04e9452b1d"],"references/charts-patterns.md":["0d761fdecc37ab13","15ba8e4f36151cfe","d9e7830f4056fdc0"]},"swift-codable":{"SKILL.md":["209eeafbc9073a2a","aa589b35fca705d6","d64bb3d8fdc67ca1","f82c980832051130"],"evals/evals.json":["40fce78c3e084e15","794e949f2ecd52df"]},"swift-concurrency":{"SKILL.md":["582c16df51720042","631f08a6244ff2b7","69c771295ddff2b6","87de919fb02b4a36","936ac8029dd62966","9eccaf7e7c24e049","d1f02b7ada46f026"],"evals/evals.json":["13ee8d6a268b8e75","b6f9d8a4122d27ee"],"references/approachable-concurrency.md":["7a950454f8c4d6b9","b241a85b9ca64ae2","be84e859f6c2bccc"],"references/async-algorithms.md":["3f919fcd5f8f228d","ebec64fec4cb870a"],"references/bridging-interop.md":["17209453e1520f3e","ec5d81163ecec6e3"],"references/concurrency-patterns.md":["1902f2d51098b33e","b9c034a085213572","bc8f936c3781be52"],"references/diagnostics.md":["37b47a18f63d0762","64429701fd85557e"],"references/swift-6-2-concurrency.md":["0f37f08e7d45e7b3","f98fc225500f8020"],"references/swiftui-concurrency.md":["5c0387d24f9d4cf3","84abb9e173dca3c9","f42347d48ab907fe"],"references/synchronization-primitives.md":["23af41b7dcddeadd","7579b3122c8656f8","9bec4d155885c851","ec2d78b099926ff7"]},"swift-concurrency-expert":{"SKILL.md":["1a9e5ab389588402","27ba408185dfd4ce","d6fdd869e76e7fc8","d9bbf7aba93323a4","fb24f4a7baca49e9"],"references/approachable-concurrency.md":["b495d1393e06b603"],"references/swift-6-2-concurrency.md":["3b19511ff2ca1e34"],"references/swiftui-concurrency-tour-wwdc.md":["ab248b25cd728496"]},"swift-concurrency-pro":{"SKILL.md":["5549099b5473626a","60f9e9cf52be824c","91b5944c2e0333d6","b4e1c094e93e6d02"],"references/actors.md":["0067376c30bb4193","aea5bfdca37c1d99"],"references/async-streams.md":["4f345553d4ca2a54","fae21f76066c7bd4"],"references/bridging.md":["13f0560c7cd28f27","1dbcfc4447020755"],"references/bug-patterns.md":["1f66e60c68d3a6e0","2475312120196c7e"],"references/cancellation.md":["cdbb82ec14a1bc91","e6a02711e048d197"],"references/diagnostics.md":["958e617d4f01214c","e1bca7d8b1984ccf"],"references/hotspots.md":["50041984e0914f1d","d405cc4e81370158"],"references/interop.md":["8c6fafb25bf291e2","ce7f24aaa5095ede"],"references/new-features.md":["52a67fd290b6dda0","e48088abb747b1a9"],"references/structured.md":["ca68b24f8802e9a1","e7314ade5ec9511e"],"references/testing.md":["0d46d8aba7fdb0d9","97cbcbe4b0060fd8"],"references/unstructured.md":["d51c1fbe0fcc6609","efe905e8265015ba"]},"swift-formatstyle":{"SKILL.md":["1f11f08e9465f3a5","577ee7b9f4e0fd2e","d97b5ffc55adbafe"]},"swift-language":{"SKILL.md":["04f600280eb8a0fc","2d3d509b222116d3","3c0518453994593e","9fad3739c3098c9f","d855f49f7694fd37"],"evals/evals.json":["2e8e7a01f8641aad","fe9de946b5c1104f"],"references/swift-attributes-interop.md":["2d19098b08a0f98e","a3cf78822388c2a6"],"references/swift-patterns-extended.md":["1d9972e55bb0a1df","4317cda88f0caa9d","94b8a4f596a50da6"]},"swift-security":{"SKILL.md":["05f312790007b910","1cbc8202ad1fc986","ae9bd06f72516b33","caeb7634fe73acb0","db6ebc342db5cf1c"],"evals/evals.json":["52a98ad4ac09067e","e99ef5e8dd02af63"],"references/biometric-authentication.md":["22f1215c864c52dd","fe45994cb7ec2114"],"references/certificate-trust.md":["70773a75fca5367c","864cef3925454dfb","d7133496c358abb1"],"references/common-anti-patterns.md":["619432546bbbdeb2","fbd3d383bdcc9394"],"references/compliance-owasp-mapping.md":["a45ed9b3f3ee83bc","badf4581f4fd2d90"],"references/credential-storage-patterns.md":["6ebe42e722406515","ec9cbe1cfcb7e5bd"],"references/cryptokit-public-key.md":["1a3486c1052de25c","e7565bf1e5e9553a"],"references/cryptokit-symmetric.md":["981676623044f439","dbe25f0b7ac400ba"],"references/keychain-access-control.md":["4bd9f84b87871e26","60a04eefac2a546d"],"references/keychain-fundamentals.md":["3d16e8aaeb9f0f7a","423bd2b2e24a6b95","fa6dedf3a4fb9299"],"references/keychain-item-classes.md":["74676c08d3d8ba5b","cc38f002b69d9f60"],"references/keychain-sharing.md":["57201739cc6db1d5","d9d072d7388dc191"],"references/migration-legacy-stores.md":["21e7209c693d645a","ccae791a3ac84d5b"],"references/secure-enclave.md":["113e26d52d1cd24b","1d7402528eba8f49","8b289dc65c2e4924"],"references/testing-security-code.md":["029975bfab5049eb","878386b4e2300bd0"]},"swift-testing":{"SKILL.md":["53a04af1b34fd174","6f61f7b71ba69f85","811670c43eea4200","85c5bfc91fc0e2eb","d12a5ed7a4dd7cb6"],"evals/evals.json":["28222cc3b5f54e94","46cc49a27649d1aa","4efbe70b713f8d26"],"references/testing-advanced.md":["3e5e637344c9c3d1","932738caa5ad4808","dda63d93bd7f3825"],"references/testing-patterns.md":["4021c8496b39539a","408db833083c44b2","caabfb69b1b9ba12","db7fde7ca065f600"]},"swift-testing-pro":{"SKILL.md":["09549d8855915091","0a5e2567a4394f53","7c73e80b4fc29bd1","b26429479c8615d2"],"references/async-tests.md":["0f78073de51989e5","4e207a4379e1dd6e"],"references/core-rules.md":["a0894956930a71d2","e20e131c7aa45984"],"references/migrating-from-xctest.md":["dc297619536b03e5","eed74b336ebf9bc3"],"references/new-features.md":["53b85df7923d462d","57670a61c233fafb","b1b362281cce86eb"],"references/writing-better-tests.md":["23439fc4a529c019","4a7d0a3f8830c596"]},"swiftdata":{"SKILL.md":["6432478b7d7da3e4","8bf0dd968ce3837c","a829f4b879957186","e3890456d2821071","ea3be9889632e070"],"evals/evals.json":["4ef36c1b1ac66eee","a2d8db55e15bc178"],"references/core-data-coexistence.md":["0033d32e5e52bdf1","5065c366e173a09f","aabf85136ca507c3"],"references/indexing.md":["9edd6d55420c8e4b","b58acec792f148f5"],"references/predicate-pitfalls.md":["04d56b5340e2fcde","5a8fe6f9304b8797"],"references/swiftdata-advanced.md":["0b6812b2a2b7eb43","1c64aa614ed72079","af7bf732b26079f2"],"references/swiftdata-queries.md":["56e650ce97c2ceae","68da6df5ba364f22","f5093ff0f88c9b93"]},"swiftdata-pro":{"SKILL.md":["74039828d0433107","82fcafb62ae54550","83735a31b8b58e3d","a05b5835048630c2"],"references/class-inheritance.md":["bc2e0dd869f3fb42","d64d8d4670bb6356"],"references/cloudkit.md":["1f55a50724cc6325","f08de639727aca20"],"references/core-rules.md":["647894adb5dc9a2e","d8a81666a12ac5ca"],"references/indexing.md":["8e9dadfd91e9d357"],"references/predicates.md":["b4cf2a362b142fac"]},"swiftlint":{"SKILL.md":["24624367a5ae3cb7","5ceacca1ce396c1b","874480dc9a26a418","a5e01149832c5500"],"references/adoption-and-configuration.md":["005fc5ed569abbd6","14234713eca99d42"],"references/custom-rules-and-analyze.md":["5b96c963b7ca545c","eba0602c93280d8e"],"references/plugins-run-scripts-and-integrations.md":["27421bda1d00001d","48a126ad9924e421"],"references/rule-reference.md":["4f407e1937d4aefb","bfc8c33e622cebb0"],"references/rules-suppressions-and-baselines.md":["b0eac573f9f2655a","d3eba6b1ea954191"]},"swiftui-animation":{"SKILL.md":["2fe290f0718d5cd0","50aab94af6df412f","ab02ccdac1e95645","cf7fdf9d421d5bba","d408d7bab838c985"],"references/animation-advanced.md":["11cbcdfa80750733","a2b4899cbd13c9eb","a9bd9544a3b3b65f"],"references/core-animation-bridge.md":["65a50852c7be0c2b","c57256b7390a7424","fa46951493c8ae1d"]},"swiftui-expert-skill":{"SKILL.md":["12963b5e700683d3","729872ad608ef0ee","f12241cbaac234d5"],"references/accessibility-patterns.md":["6f0ea0c1275696c5"],"references/animation-advanced.md":["561e111f2e5d801c"],"references/animation-basics.md":["859682a9106895d7"],"references/animation-transitions.md":["29b3f98430348202"],"references/charts-accessibility.md":["a0f4cd6547a071a1","c641d1bfd1205133"],"references/charts.md":["014adcf19b9cb8e2","c1017071189f88a9"],"references/image-optimization.md":["81ba2c9d5ca3f856","b55f4a6803a1b877"],"references/latest-apis.md":["bba9f7b5af970ed8","c193bfe038e5742a"],"references/layout-best-practices.md":["03e9a6d023290b06","8a14454fbb728210"],"references/liquid-glass.md":["907b5c460d6621c1"],"references/list-patterns.md":["1922789f0f0be8db","64595bccc9fd44aa"],"references/macos-scenes.md":["c0a40b68547aeea2","c6056056e2246c9a"],"references/macos-views.md":["0eadb17b4ed72694","239a6d24329d110a"],"references/macos-window-styling.md":["40825d9b57c36054","4f4126550b189e3d"],"references/performance-patterns.md":["1a595afcb2910729"],"references/scroll-patterns.md":["7fe5001886a100c7"],"references/sheet-navigation-patterns.md":["d06b38782f587146"],"references/state-management.md":["777537b4dc9f134c","7e868bb84f0aa349"],"references/view-structure.md":["7b37816a8920019d","bc80541decc05629"]},"swiftui-gestures":{"SKILL.md":["0749dab3051e66f7","086d63eda518da76","65a559c575948cd6","747e4dd071ec8c2d","7b2d183662d9d876"],"references/gesture-patterns.md":["26172187effbb54e","3ae1202cf6e55c75","439939727e2c2770","cad8986dc1ab3b15"]},"swiftui-layout-components":{"SKILL.md":["34ffcf8b76760fa6","6c313161f162977e","b083849a294ad0c8","c82bd2c8f531ae40"],"references/form.md":["58259c52d6d29218","d993b8c8faf3bc45","e7de4d452c65f7be"],"references/grids.md":["4ea60a33c4633873","59bdcf655d981a45","91f88e900556d630","b1511140b822b977"],"references/list.md":["2fc3a0d0c788d44e","d531ad6b491358c7","ee3f67612b1d72e6"],"references/scrollview.md":["495e5578b6c84f8e","8b874604654a39b6","c3c028a3f8ff5148","d968d3bc9d2076d9"]},"swiftui-liquid-glass":{"SKILL.md":["487f1269a1e9c5c5","b37d88cfa67c9768","bdd79149accb6c8e","f259fe492f5d4895"],"references/liquid-glass.md":["309078adf225435d","6ef03ccd4ac6eadd"]},"swiftui-navigation":{"SKILL.md":["0ac287208933595d","65fa450e97991ef1","a48ba4b45712c392","bb42f9a436340011","d3ff78677d3e026f"],"references/deeplinks.md":["1688b8352019459b","8c341ea9e716189c","ccbd3b991dc729e0","fd193f0d8a07c69a"],"references/navigationstack.md":["1d3cd0fe1c17650b","39592226f06ecf2c","42b9c8a3ee384e6d","b2af1b4af73285a9"],"references/sheets.md":["21d364199327b783","7d3d964a9d2cf91b"],"references/tabview.md":["0e8af9fae1aad3b4","0f27b3d74ed1645d","5f03a45ad9aebece","7aa50b425d3c9a54"]},"swiftui-patterns":{"SKILL.md":["2d7f04bc90b764b7","3ce3fc169e21f780","46c8a3636f84c3c6","77419b8008e89406","855657b7c6f12a39","bdefc10200e1b840"],"references/architecture-patterns.md":["8604b15d17baf2c7","a0a9d969cfe798c1","e2d9bab2741d7f24","f9f8ca1667618a3d"],"references/deprecated-migration.md":["21f393a40070ee00","bd57572dd2afefda","ebf96c85fb318860"],"references/design-polish.md":["2d15a26ed5a6609d","30009a25a45c2f1a","557220389c01254c","5cb2f06dbd0c9556"],"references/platform-and-sharing.md":["03f41dfc521adb33","12123c9b9a16891a","de0d19d925bbb642","fc66454ceddc3297"]},"swiftui-performance":{"SKILL.md":["61dbacd001bde9b5","bcf8de921319a8b0","df977a79c49c68a8","e028c28cac217354","ef66eb840e67fce5"],"references/demystify-swiftui-performance-wwdc23.md":["02a22091e569b069","3eabcc1a5c4f30bb","47ada9b775c93fdf"],"references/optimizing-swiftui-performance-instruments.md":["01040bdf1bdefff0","3080feb7cfac8ec2","60f2d25c3c5d810d"],"references/understanding-hangs-in-your-app.md":["0e5b61fc9f3c93e8","ba627ee895a7b581","e9b80d28eba3a2bf"],"references/understanding-improving-swiftui-performance.md":["5a65ef1f2e004d39","d60d5fa12e509b57","e2a9fbeaae985d18"],"references/wwdc-session-sources.md":["3a0068addc3cf515","53a9ffcc4c08532e"]},"swiftui-performance-audit":{"SKILL.md":["267bdd76473b012c","3e835952e191d330","7d2623e09962db78","fe55a0e6d61dd4aa"],"references/code-smells.md":["8d5a7bb6e4d4fa63"],"references/demystify-swiftui-performance-wwdc23.md":["02a22091e569b069"],"references/optimizing-swiftui-performance-instruments.md":["3080feb7cfac8ec2"],"references/profiling-intake.md":["39b6530de509ec91"],"references/report-template.md":["97982c7a731e4c59"],"references/understanding-hangs-in-your-app.md":["e9b80d28eba3a2bf"],"references/understanding-improving-swiftui-performance.md":["e2a9fbeaae985d18"]},"swiftui-pro":{"SKILL.md":["7ac7bd144401bbad","c97b82f439d26f55","d2705361bd1f781f","e8e699bc72e7d02d"],"references/accessibility.md":["4a4536700df10214","7cb96c146b2e99da"],"references/api.md":["0a7db8c5ce943c44","bfd5199bdadce3ab"],"references/data.md":["952571f8d07f0b4a","c9b394fafb06a638"],"references/design.md":["8e14b6ee8a8204ef","a5956397d61e263e"],"references/hygiene.md":["7593014c094fec70","80bc9c5f5fcda352"],"references/navigation.md":["44b402565600a787","5db9e58e44954dd4"],"references/performance.md":["6b35b9b81918a5a4","72c5a037df7f9038"],"references/swift.md":["7b2f59bf7a03b69a","92f32b1b5829e3c2"],"references/views.md":["064123513acc4162","41ec1bed356ad838"]},"swiftui-ui-patterns":{"SKILL.md":["0bc9699b5505a7fd","4fa8bc0ebe404536","7debb87dd672c762","bcbf1d69a2643e26","e96f7e02c52672c6"],"references/app-wiring.md":["c70eabcd816a7653"],"references/async-state.md":["4fe831372427be00"],"references/components-index.md":["213b32285249f012"],"references/controls.md":["8abfb39cb2f33c2d"],"references/deeplinks.md":["a64894834e31739a"],"references/focus.md":["0642a7632956b439"],"references/form.md":["d993b8c8faf3bc45"],"references/grids.md":["7d2ef51c31af0f83"],"references/haptics.md":["41942bea558ccd8a"],"references/input-toolbar.md":["9506d3fad9dfc9d2"],"references/lightweight-clients.md":["be356f614b8d86bf"],"references/list.md":["7b570fafe064d5da"],"references/loading-placeholders.md":["13775fb2acfe2003"],"references/macos-settings.md":["0e02cb9e7e47aee7"],"references/matched-transitions.md":["3aef1a19ca8732fb"],"references/media.md":["ceedf65018a6111f"],"references/menu-bar.md":["f87f56efe0045154"],"references/navigationstack.md":["decf5c42b056af5a"],"references/overlay.md":["13388c38b659e0f8"],"references/performance.md":["b574e73aa7739a5a"],"references/previews.md":["a07a3d8da098318e"],"references/scroll-reveal.md":["a278ece6c260fa6f"],"references/scrollview.md":["fcabfe5c89fdb432"],"references/searchable.md":["f862c623a34b6037"],"references/sheets.md":["ce52412241bdb3e9"],"references/split-views.md":["fe3734977026e219"],"references/tabview.md":["2a44bfe515720864"],"references/theming.md":["573deae3b6a9b810"],"references/title-menus.md":["707049b85c3c7486"],"references/top-bar.md":["ba7a7b73c7bc70df"]},"swiftui-uikit-interop":{"SKILL.md":["4d11a3d874b523d3","7566b0004f7e3f1c","b4bd47697d8c5386","b8a61906e0d5b1d6"],"references/hosting-migration.md":["27a5c0985cea874a","29a8c09eb8ade0f8","af689a733e99d3b0"],"references/representable-recipes.md":["1201258df1bfcf6d","20e4a4f1ef1a1072","ed03bf511fde9f0a"]},"swiftui-view-refactor":{"SKILL.md":["159999562d79180d","8201c566899d537d","c6adafda1c16216a"],"references/mv-patterns.md":["12d4bcccf5bbe185"]},"swiftui-webkit":{"SKILL.md":["16859d1eb04970f3","330d770f90aec77c","6ceb08075cbb7b10","ad9cd47fe2b7dbbf","ecb2cdb569ffd024"],"references/loading-and-observation.md":["64d612c20f79f873","dd7b1ce558d50b3f"],"references/local-content-and-custom-schemes.md":["11a254728033c5eb","743b53cc7715dcc0"],"references/migration-and-fallbacks.md":["640f3e846f668f8b","6f3bcd72c30e114c","aa52b6bed54305be"],"references/navigation-and-javascript.md":["96c7beceae065447","d57eea517babc987"]},"tailwind-css":{"SKILL.md":["1d8ec088cff4d0ce","437b3fc1999570e9","562cc67d2d4ae6f4","81dcd57d4008278c","90507d86949d428e","c05b214efec5d9f3"]},"testing-backend":{"SKILL.md":["23ea869fbab22191","36d38450a5fa46f1","75a4df19b38f4ce7","7fd771ec1c7375e1","d8015d90e8453357","d90d1c3a92582c77"]},"tipkit":{"SKILL.md":["10992bab0523c1f9","502dafc1ba1366fc","7ed72c0c19ce6755","f21fca74a4fc16b0"],"references/tipkit-patterns.md":["6f4825d5cb5e60d3","9e503f09eaced045","f0f02785eb651a9d"]},"typescript-patterns":{"SKILL.md":["176d5a094cecfdbe","1c7c04f245b71e1c","2a36dc7e1de8e614","2c925c6e0ada0449","ba37c1c542efda0f","d65fc1233cfc8ec3"]},"vision-framework":{"SKILL.md":["1f39df6a36fd1787","58355521fa3ec3ce","8061d2fbc53ea67e","9742f78eb401bcb0","dd9922cd9dbf266e","f7f4b60b2cd3f131"],"references/vision-requests.md":["422a63fad0feef00","691eedb7238c808f","9833a4b08d1c85b2"],"references/visionkit-scanner.md":["20630afc935b1f84","762ba707e9131faa","cc206ad0758c3607"]},"vue-composition":{"SKILL.md":["128961d16ddbb2cf","51216244b426c6b2","899df886590ca302","c4c6a0a91dbc1bee","e6b7d0522dd4e1d9","f9ff96e5f3f38cc1"]},"weatherkit":{"SKILL.md":["38cd012d7472c2a1","90d79a206c114ca2","9fe6bd2c0df81f40","a0aa9ca4304e8567","ee54cedd5d9aa8e1"],"references/weatherkit-patterns.md":["6f9e76fe7f847803","72a96207a0c901be","e728ac1c495a53c6"]},"web-accessibility":{"SKILL.md":["484a6f5c362c0f56","53a9016046073876","7cc32174677b0f85","8b34cf44bf46cb16","d725d695efb82d29"]},"web-performance":{"SKILL.md":["1922a01bab3433fd","42253f076c8981a1","9f7f7303df4a0250","cd95b6e710eeaa0b","db8cc2a87f70fecd","ddfdb76b7eb26afa"]},"web-testing":{"SKILL.md":["4e35d6d7d132bfa7","5fd0fa0b2f62fab7","78aa8aab3e4309cf","8220686d16f48e64","95e5c21b011dfde3","f783dd4d70d54aa4"]},"widgetkit":{"SKILL.md":["0d073cd2b7d5815b","2a5daf1b9fbc00f6","9672e3f6d8b3a328","d894543ce784a89a","d9c2ed0c164568b2","fe904d5ca0d827f2"],"references/widgetkit-advanced.md":["2b84a5d63c35b003","5943cb9db469f22b","71ba48f15b256732","dcceece3c3c47e3a","efe575d5df9859fb","ff26cc8e8cb30c54"]},"xcode-build-benchmark":{"SKILL.md":["32ff2f3d54db92d5","424bde764ebc9958","b4002e3ca46e936f"],"references/benchmark-artifacts.md":["15abe5a05042cca4"],"references/benchmarking-workflow.md":["6bcd530e6cbf4df9"],"schemas/build-benchmark.schema.json":["0ae8a9df71607c89","411dd720f73e450a"],"scripts/benchmark_builds.py":["784a7495b00752a9"]},"xcode-build-fixer":{"SKILL.md":["1edf140969b1ec1c","34781613fac62e15","6c301a0f40efdabb"],"references/build-settings-best-practices.md":["8345167187fde581"],"references/fix-patterns.md":["adf3cd3b8a79e941"],"references/recommendation-format.md":["46affd6e24baaee3"],"scripts/benchmark_builds.py":["784a7495b00752a9"]},"xcode-build-orchestrator":{"SKILL.md":["98eb94c55b4e80c3","b94f7fde8b66d12c","e06ecfa152688918"],"references/benchmark-artifacts.md":["e630b03e54452dc2"],"references/build-settings-best-practices.md":["8345167187fde581"],"references/orchestration-report-template.md":["f598b45b38c63080"],"references/recommendation-format.md":["46affd6e24baaee3"],"scripts/benchmark_builds.py":["784a7495b00752a9"],"scripts/diagnose_compilation.py":["bb97085391b6df63"],"scripts/generate_optimization_report.py":["fc97cec8dd97a0b1"]},"xcode-compilation-analyzer":{"SKILL.md":["0ecf5d0fc7750c61","7d10ec48afe43e79","bb4ce06872edc333"],"references/build-optimization-sources.md":["30d9fa87004a6c7f"],"references/code-compilation-checks.md":["6d2e0577b5df0c9b"],"references/recommendation-format.md":["46affd6e24baaee3"],"scripts/diagnose_compilation.py":["bb97085391b6df63"]},"xcode-project-analyzer":{"SKILL.md":["329045474abc7a8b","eb4e69d7a7bd9281","eee4f6f2466e83ab"],"references/build-optimization-sources.md":["30d9fa87004a6c7f"],"references/build-settings-best-practices.md":["8345167187fde581"],"references/project-audit-checks.md":["cf42305190b14b81"],"references/recommendation-format.md":["46affd6e24baaee3"]}}}
|
package/install/claude.mjs
CHANGED
|
@@ -24,6 +24,8 @@ import {
|
|
|
24
24
|
copySkillsIndex,
|
|
25
25
|
countFiles,
|
|
26
26
|
dirsIdentical,
|
|
27
|
+
loadCatalogHistory,
|
|
28
|
+
matchesShippedVersion,
|
|
27
29
|
ensureDir,
|
|
28
30
|
ensureRealDir,
|
|
29
31
|
isDryRun,
|
|
@@ -487,11 +489,13 @@ function installSkills(opts) {
|
|
|
487
489
|
// Pre-manifest installs (<= v14.x) never wrote that manifest, so the branch
|
|
488
490
|
// above cannot fire for them and the full 151-dir catalog would outlive every
|
|
489
491
|
// upgrade. For those, prune by proof instead of by name: a dir byte-identical
|
|
490
|
-
// to the shipped catalog
|
|
492
|
+
// to the shipped catalog, or to any version of it ever shipped
|
|
493
|
+
// (install/catalog-history.json), contains nothing of the user's and goes now; a dir
|
|
491
494
|
// that differs is kept unless --prune-external explicitly opts in (and even
|
|
492
495
|
// then a `local-only: true` SKILL.md keeps it).
|
|
493
496
|
migratePreManifestExternalSkills(dest, join(pipelineSrc, "skills", "shared", "external"), {
|
|
494
497
|
pruneExternal: Boolean(pruneExternal),
|
|
498
|
+
history: loadCatalogHistory(join(dirname(pipelineSrc), "install", "catalog-history.json")),
|
|
495
499
|
});
|
|
496
500
|
|
|
497
501
|
// Figma component skills moved to the ai-<platform>-toolkit marketplace
|
|
@@ -597,8 +601,8 @@ function pruneManifestDeliveredSkills(dest) {
|
|
|
597
601
|
/**
|
|
598
602
|
* Migration for pre-manifest installs (<= v14.x): the external catalog was
|
|
599
603
|
* copied here with no delivery manifest, so ours and the user's are told apart
|
|
600
|
-
* by content, not by name. Byte-identical to the shipped catalog
|
|
601
|
-
* ours, removed. Different = kept, reported, and removable only via the
|
|
604
|
+
* by content, not by name. Byte-identical to the shipped catalog, or every
|
|
605
|
+
* file matching a version the catalog once shipped = provably ours, removed. Different = kept, reported, and removable only via the
|
|
602
606
|
* explicit `--prune-external` flag (which still honors `local-only: true`).
|
|
603
607
|
*
|
|
604
608
|
* @param {string} dest - the installed skills directory
|
|
@@ -607,7 +611,7 @@ function pruneManifestDeliveredSkills(dest) {
|
|
|
607
611
|
*/
|
|
608
612
|
function migratePreManifestExternalSkills(dest, externalSrc, opts) {
|
|
609
613
|
if (!existsSync(externalSrc) || !existsSync(dest)) return;
|
|
610
|
-
const { pruneExternal } = opts;
|
|
614
|
+
const { pruneExternal, history } = opts;
|
|
611
615
|
let identical = 0;
|
|
612
616
|
let flagged = 0;
|
|
613
617
|
const leftover = [];
|
|
@@ -635,13 +639,15 @@ function migratePreManifestExternalSkills(dest, externalSrc, opts) {
|
|
|
635
639
|
|
|
636
640
|
let provablyOurs;
|
|
637
641
|
try {
|
|
638
|
-
provablyOurs =
|
|
642
|
+
provablyOurs =
|
|
643
|
+
dirsIdentical(join(externalSrc, name), stale) ||
|
|
644
|
+
matchesShippedVersion(stale, history, name);
|
|
639
645
|
} catch {
|
|
640
646
|
provablyOurs = false;
|
|
641
647
|
}
|
|
642
648
|
if (provablyOurs) {
|
|
643
649
|
if (isDryRun()) {
|
|
644
|
-
console.log(` [dry-run] would prune ${name}/ (
|
|
650
|
+
console.log(` [dry-run] would prune ${name}/ (matches a shipped catalog version)`);
|
|
645
651
|
identical++;
|
|
646
652
|
continue;
|
|
647
653
|
}
|
|
@@ -669,7 +675,7 @@ function migratePreManifestExternalSkills(dest, externalSrc, opts) {
|
|
|
669
675
|
}
|
|
670
676
|
if (identical > 0) {
|
|
671
677
|
console.log(
|
|
672
|
-
` -> migration: pruned ${identical} pre-manifest catalog entr(ies)
|
|
678
|
+
` -> migration: pruned ${identical} pre-manifest catalog entr(ies) matching a shipped catalog version (now plugin-only)`,
|
|
673
679
|
);
|
|
674
680
|
}
|
|
675
681
|
if (flagged > 0) {
|