@mmerterden/multi-agent-pipeline 14.2.1 → 15.0.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 +118 -6
- package/README.md +20 -9
- package/README.tr.md +150 -0
- package/docs/FIGMA_PIPELINE.md +3 -3
- package/docs/adr/0006-skills-core-external-split.md +1 -1
- package/docs/adr/0009-claude-stack-skills-plugin-only.md +31 -0
- package/docs/adr/README.md +1 -0
- package/docs/architecture.md +24 -9
- package/docs/ecosystem.md +237 -0
- package/docs/features.md +5 -5
- package/index.js +2 -0
- package/install/_codex-agents.mjs +11 -2
- package/install/_common.mjs +65 -1
- package/install/_dev-only-files.mjs +0 -1
- package/install/_platform-filter.mjs +73 -7
- package/install/_plugin-skills.mjs +33 -8
- package/install/claude.mjs +144 -59
- package/install/codex.mjs +37 -7
- package/install/copilot.mjs +36 -11
- package/install/index.mjs +6 -2
- package/install/templates/codex-instructions.md +1 -1
- package/install/templates/copilot-instructions.md +15 -12
- package/package.json +1 -2
- package/pipeline/commands/multi-agent/SKILL.md +4 -2
- package/pipeline/commands/multi-agent/analysis/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +9 -9
- package/pipeline/commands/multi-agent/channels/SKILL.md +16 -5
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +186 -0
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -4
- package/pipeline/commands/multi-agent/dev/SKILL.md +10 -23
- package/pipeline/commands/multi-agent/dev-autopilot/SKILL.md +10 -2
- package/pipeline/commands/multi-agent/dev-local/SKILL.md +10 -24
- package/pipeline/commands/multi-agent/dev-local-autopilot/SKILL.md +10 -3
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +19 -4
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/jira/SKILL.md +13 -2
- package/pipeline/commands/multi-agent/language/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/local/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/log/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +81 -0
- package/pipeline/commands/multi-agent/resume/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/{ship → resume-local}/SKILL.md +13 -9
- package/pipeline/commands/multi-agent/setup/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/stack/SKILL.md +55 -43
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +3 -3
- package/pipeline/commands/multi-agent/sync/SKILL.md +18 -11
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +2 -0
- package/pipeline/commands/multi-agent/update/SKILL.md +1 -1
- package/pipeline/lib/extract-conventions.sh +44 -15
- package/pipeline/lib/fetch-figma-annotations.sh +8 -1
- package/pipeline/lib/fetch-fortify.sh +23 -8
- package/pipeline/lib/figma-screenshot.sh +11 -1
- package/pipeline/lib/issue-fetcher.sh +77 -10
- package/pipeline/lib/md2confluence-v3.py +16 -2
- package/pipeline/lib/parse-complaints.sh +306 -0
- package/pipeline/lib/plan-todos.sh +5 -2
- package/pipeline/lib/post-pr-review.sh +8 -6
- package/pipeline/lib/shadow-git.sh +50 -9
- package/pipeline/lib/submodule-detector.sh +8 -1
- package/pipeline/multi-agent-refs/_input-parser.md +1 -1
- package/pipeline/multi-agent-refs/channels/confluence.md +3 -0
- package/pipeline/multi-agent-refs/channels/issue-comment.md +2 -2
- package/pipeline/multi-agent-refs/channels/jira.md +13 -2
- package/pipeline/multi-agent-refs/channels/pr-review-actions.md +1 -1
- package/pipeline/multi-agent-refs/channels/pr.md +20 -0
- package/pipeline/multi-agent-refs/channels/wiki.md +4 -4
- package/pipeline/multi-agent-refs/complaint-analysis-template.md +99 -0
- package/pipeline/multi-agent-refs/component-dispatch.md +6 -6
- package/pipeline/multi-agent-refs/cross-cli-contract.md +16 -16
- package/pipeline/multi-agent-refs/features/external-context-injection.md +1 -1
- package/pipeline/multi-agent-refs/features/stack-skill-routing.md +5 -5
- package/pipeline/multi-agent-refs/features/worktree-finalize.md +1 -1
- package/pipeline/multi-agent-refs/generate-issue.md +3 -3
- package/pipeline/multi-agent-refs/issue-jira-triad.md +3 -3
- package/pipeline/multi-agent-refs/payload-contracts.md +67 -0
- package/pipeline/multi-agent-refs/phases/modes.md +20 -0
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +2 -2
- package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +7 -7
- package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
- package/pipeline/multi-agent-refs/phases/phase-3-dev.md +3 -3
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +12 -12
- package/pipeline/multi-agent-refs/phases/phase-5-test.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-6-commit.md +8 -40
- package/pipeline/multi-agent-refs/phases/phase-7-report.md +5 -3
- package/pipeline/multi-agent-refs/phases.md +6 -0
- package/pipeline/multi-agent-refs/rules.md +2 -0
- package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
- package/pipeline/multi-agent-refs/wiki-capture.md +2 -2
- package/pipeline/preferences-template.json +13 -5
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/agent-state.schema.json +1 -1
- package/pipeline/schemas/complaint-analysis-spec.schema.json +216 -0
- package/pipeline/schemas/migrations/prefs-2.5.0-to-2.6.0.mjs +46 -0
- package/pipeline/schemas/prefs.schema.json +277 -67
- package/pipeline/schemas/token-budget.json +2 -2
- package/pipeline/scripts/_stack-routing.mjs +79 -0
- package/pipeline/scripts/audit-log-rotate.sh +14 -1
- package/pipeline/scripts/build-skills-index.mjs +11 -0
- package/pipeline/scripts/build-stack-plugins.mjs +35 -60
- package/pipeline/scripts/check-derived-drift.mjs +65 -29
- package/pipeline/scripts/diff-explain.mjs +41 -3
- package/pipeline/scripts/diff-risk-score.mjs +72 -8
- package/pipeline/scripts/gc-worktrees.sh +4 -1
- package/pipeline/scripts/gen-mode-dispatch.mjs +1 -1
- package/pipeline/scripts/gen-skills-index.mjs +1 -1
- package/pipeline/scripts/learning-curve.mjs +8 -2
- package/pipeline/scripts/match-skills.mjs +8 -2
- package/pipeline/scripts/migrate-prefs.mjs +28 -20
- package/pipeline/scripts/output-quality-check.sh +15 -4
- package/pipeline/scripts/phase-tracker.sh +33 -12
- package/pipeline/scripts/phase0-exit-gate.mjs +3 -2
- package/pipeline/scripts/pre-commit-check.sh +69 -22
- package/pipeline/scripts/render-agent-log-cost.sh +8 -3
- package/pipeline/scripts/render-cost-summary.sh +42 -22
- package/pipeline/scripts/render-work-summary.sh +47 -13
- package/pipeline/scripts/review-scope.mjs +1 -1
- package/pipeline/scripts/run-aggregator.mjs +43 -14
- package/pipeline/scripts/scan-agent-config.sh +1 -1
- package/pipeline/scripts/skill-conformance.mjs +165 -30
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
- package/pipeline/scripts/smoke-schema-validation.sh +5 -1
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +34 -0
- package/pipeline/scripts/test-gap-rules/node.json +29 -0
- package/pipeline/scripts/test-gap-rules/python.json +25 -0
- package/pipeline/scripts/test-gap-scan.mjs +45 -6
- package/pipeline/scripts/uninstall.mjs +196 -14
- package/pipeline/scripts/update-issue-progress.sh +12 -16
- package/pipeline/scripts/validate-complaint-doc.mjs +229 -0
- package/pipeline/scripts/validate-reviewer.mjs +9 -3
- package/pipeline/scripts/worktree-finalize.sh +23 -2
- package/pipeline/skills/.skill-manifest.json +156 -108
- package/pipeline/skills/.skills-index.json +459 -13
- package/pipeline/skills/shared/README.md +15 -11
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +49 -0
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +4 -17
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +8 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +5 -18
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +8 -0
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +4 -0
- package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +83 -0
- package/pipeline/skills/shared/core/{multi-agent-ship → multi-agent-resume-local}/SKILL.md +10 -6
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +79 -22
- package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -8
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +1 -1
- package/pipeline/skills/shared/external/ios-coding-standard/modules/_TEMPLATE.yml +2 -2
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +368 -33
- package/pipeline/skills/shared/external/ios-coding-standard/references/swiftlint.draft.yml +1 -2
- package/pipeline/skills/shared/external/ios-coding-standard/scripts/check_structure.py +765 -0
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +75 -0
- package/pipeline/skills/shared/external/ios-module-structure/modules/_TEMPLATE.yml +131 -0
- package/pipeline/skills/shared/external/ios-module-structure/references/rules.yml +559 -0
- package/pipeline/skills/shared/external/ios-module-structure/scripts/check_structure.py +765 -0
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +302 -0
- package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +187 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +156 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +108 -0
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +176 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +865 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +335 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +344 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +130 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +264 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +298 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +529 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +187 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +171 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +184 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh +26 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +173 -0
- package/pipeline/skills/skills-index.md +9 -5
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Fidelity check - cross-verify a mapping against the REAL sources before publishing.
|
|
3
|
+
|
|
4
|
+
The map can drift from reality (stale keys parsed from an old doc, hallucinated keys,
|
|
5
|
+
a wired key that never made it into a row, an empty value). This script reconciles the
|
|
6
|
+
mapping JSON against the live repos and reports what doesn't hold up - so the page you
|
|
7
|
+
publish reflects the code, not a guess. Read-only.
|
|
8
|
+
|
|
9
|
+
Checks (each reported, never auto-fixed):
|
|
10
|
+
1. newKey ∈ screen code - every row's `newKey` should appear as a wired
|
|
11
|
+
`LocalizationStringKey.<...>` call site (or `"Key".localized`, or a web
|
|
12
|
+
`t('Key')` / `$t('Key')` i18n call) in --screen-path.
|
|
13
|
+
Component-owned keys (`(owned by ...)` / `(DS bileşen...)`) are exempt (they live in the
|
|
14
|
+
component, not the screen file) and listed separately.
|
|
15
|
+
2. code keys ∉ map - `LocalizationStringKey.<...>` wired in the screen but with no
|
|
16
|
+
row → missing coverage (add a row or confirm it's out of scope).
|
|
17
|
+
3. value gaps - `new.tr` empty (verdict≠new), or legacy entirely empty where
|
|
18
|
+
the verdict claims reuse/review.
|
|
19
|
+
4. untranslated - a row whose `new.tr` == `new.en` (flag, as the renderer does).
|
|
20
|
+
5. resources (optional) - with --resources-root, the new key's Suggested/<Key>.json exists.
|
|
21
|
+
|
|
22
|
+
Exit code 2 when any hard fidelity issue is found (unverified non-component key, code key
|
|
23
|
+
missing from the map, or a reuse/review row with no legacy value), so it can gate a run.
|
|
24
|
+
"""
|
|
25
|
+
import argparse
|
|
26
|
+
import json
|
|
27
|
+
import os
|
|
28
|
+
import re
|
|
29
|
+
import sys
|
|
30
|
+
|
|
31
|
+
EXTS = (".swift", ".kt", ".kts", ".xml", ".ts", ".tsx", ".js", ".jsx", ".vue")
|
|
32
|
+
RE_LSK = re.compile(r"LocalizationStringKey\.([A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)+)")
|
|
33
|
+
RE_LITERAL = re.compile(r'"([A-Za-z0-9_.]+)"\s*\.\s*localized')
|
|
34
|
+
# Web (react-i18next / next-intl `t('key')`; vue-i18n `$t('key')`)
|
|
35
|
+
RE_WEB_T = re.compile(r"(?<!\$)\bt\(\s*['\"]([A-Za-z0-9_.\-]+)['\"]")
|
|
36
|
+
RE_WEB_VUE_T = re.compile(r"\$t\(\s*['\"]([A-Za-z0-9_.\-]+)['\"]")
|
|
37
|
+
# RE_LSK is greedy across dots, so `...StringKey.Ns.leaf.localized` captures the accessor
|
|
38
|
+
# too. Strip it, or no call site ever matches its mapping row and every wired key is
|
|
39
|
+
# reported unmapped.
|
|
40
|
+
RE_ACCESSOR = re.compile(r"\.localized\w*$")
|
|
41
|
+
MARKER = re.compile(r"\(.*(owned by|bileşen|component).*\)", re.I)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def clean_key(k):
|
|
45
|
+
"""Strip a trailing '(owned by ...)' / '(DS bileşene ait)' marker → bare dotted key."""
|
|
46
|
+
return re.sub(r"\s*\(.*\)\s*$", "", (k or "")).strip()
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def is_component(k):
|
|
50
|
+
return bool(MARKER.search(k or ""))
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def norm_key(k):
|
|
54
|
+
return clean_key(k).lower()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def scan_code(screen_path):
|
|
58
|
+
"""Return (set of wired dotted keys lowercased, full lowercased corpus text)."""
|
|
59
|
+
keys, corpus = set(), []
|
|
60
|
+
files = []
|
|
61
|
+
if os.path.isfile(screen_path):
|
|
62
|
+
files = [screen_path]
|
|
63
|
+
else:
|
|
64
|
+
for dp, _d, names in os.walk(screen_path):
|
|
65
|
+
if "/.git" in dp:
|
|
66
|
+
continue
|
|
67
|
+
files += [os.path.join(dp, n) for n in names if n.endswith(EXTS)]
|
|
68
|
+
for f in files:
|
|
69
|
+
try:
|
|
70
|
+
txt = open(f, encoding="utf-8", errors="replace").read()
|
|
71
|
+
except OSError:
|
|
72
|
+
continue
|
|
73
|
+
corpus.append(txt.lower())
|
|
74
|
+
for m in RE_LSK.finditer(txt):
|
|
75
|
+
keys.add(RE_ACCESSOR.sub("", m.group(1)).lower())
|
|
76
|
+
for m in RE_LITERAL.finditer(txt):
|
|
77
|
+
keys.add(m.group(1).lower())
|
|
78
|
+
for m in RE_WEB_T.finditer(txt):
|
|
79
|
+
keys.add(m.group(1).lower())
|
|
80
|
+
for m in RE_WEB_VUE_T.finditer(txt):
|
|
81
|
+
keys.add(m.group(1).lower())
|
|
82
|
+
return keys, "\n".join(corpus), len(files)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def leaf_in_corpus(key, corpus):
|
|
86
|
+
"""Weak check: the key's last segment appears as a word in the code corpus."""
|
|
87
|
+
leaf = clean_key(key).split(".")[-1]
|
|
88
|
+
return bool(leaf) and re.search(r"\b" + re.escape(leaf.lower()) + r"\b", corpus) is not None
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def main():
|
|
92
|
+
ap = argparse.ArgumentParser(description=__doc__,
|
|
93
|
+
formatter_class=argparse.RawDescriptionHelpFormatter)
|
|
94
|
+
ap.add_argument("--mapping", required=True)
|
|
95
|
+
ap.add_argument("--screen-path", required=True, help="implemented screen dir/file")
|
|
96
|
+
ap.add_argument("--resources-root", help="resources / snapshot root (checks Suggested/<Key>.json)")
|
|
97
|
+
ap.add_argument("--out", help="write the full report JSON here (default: stdout summary only)")
|
|
98
|
+
args = ap.parse_args()
|
|
99
|
+
|
|
100
|
+
m = json.load(open(args.mapping, encoding="utf-8"))
|
|
101
|
+
rows = m.get("rows", [])
|
|
102
|
+
code_keys, corpus, nfiles = scan_code(args.screen_path)
|
|
103
|
+
|
|
104
|
+
verified, weak, unverified, component = [], [], [], []
|
|
105
|
+
value_gaps, untranslated = [], []
|
|
106
|
+
map_keys = set()
|
|
107
|
+
|
|
108
|
+
for r in rows:
|
|
109
|
+
k = r.get("newKey", "")
|
|
110
|
+
ck = clean_key(k)
|
|
111
|
+
map_keys.add(norm_key(k))
|
|
112
|
+
# 1. newKey in code
|
|
113
|
+
if is_component(k) or k.startswith("(dynamic") or "dinamik" in (r.get("element", "").lower()):
|
|
114
|
+
component.append(k)
|
|
115
|
+
elif norm_key(k) in code_keys:
|
|
116
|
+
verified.append(k)
|
|
117
|
+
elif leaf_in_corpus(k, corpus):
|
|
118
|
+
weak.append(k)
|
|
119
|
+
else:
|
|
120
|
+
unverified.append({"key": k, "element": r.get("element")})
|
|
121
|
+
# 3. value gaps
|
|
122
|
+
nw, lg, vd = r.get("new") or {}, r.get("legacy") or {}, r.get("verdict")
|
|
123
|
+
if vd != "new" and not (nw.get("tr") or "").strip() and not k.startswith("(dynamic"):
|
|
124
|
+
value_gaps.append({"key": k, "issue": "new.tr empty"})
|
|
125
|
+
if vd in ("reuse", "review") and not any((lg.get(l) or "").strip() for l in ("en", "tr")):
|
|
126
|
+
value_gaps.append({"key": k, "issue": f"verdict={vd} but no legacy value"})
|
|
127
|
+
# 4. untranslated
|
|
128
|
+
if (nw.get("tr") or "").strip() and nw.get("tr") == nw.get("en"):
|
|
129
|
+
untranslated.append(k)
|
|
130
|
+
# 5. resources
|
|
131
|
+
if args.resources_root and not is_component(k) and not k.startswith("(dynamic"):
|
|
132
|
+
seg = ".".join(s[:1].upper() + s[1:] if s else s for s in ck.split("."))
|
|
133
|
+
p1 = os.path.join(args.resources_root, "Localization", "Suggested", seg + ".json")
|
|
134
|
+
p2 = os.path.join(args.resources_root, "Resources", "Localization",
|
|
135
|
+
"LocalizationStrings", "Sources", "Suggested", seg + ".json")
|
|
136
|
+
if not (os.path.isfile(p1) or os.path.isfile(p2)):
|
|
137
|
+
value_gaps.append({"key": k, "issue": "no Suggested/<Key>.json"})
|
|
138
|
+
|
|
139
|
+
# 2. code keys not in map
|
|
140
|
+
code_not_mapped = sorted(k for k in code_keys if k not in map_keys)
|
|
141
|
+
|
|
142
|
+
report = {
|
|
143
|
+
"screen": m.get("screen"), "rows": len(rows), "filesScanned": nfiles,
|
|
144
|
+
"newKeyInCode": {"verified": len(verified), "weak": weak,
|
|
145
|
+
"unverified": unverified, "component_or_dynamic": len(component)},
|
|
146
|
+
"codeKeysNotInMap": code_not_mapped,
|
|
147
|
+
"valueGaps": value_gaps, "untranslated": untranslated,
|
|
148
|
+
}
|
|
149
|
+
hard = len(unverified) + len(code_not_mapped) + sum(1 for g in value_gaps if "no legacy" in g["issue"])
|
|
150
|
+
|
|
151
|
+
if args.out:
|
|
152
|
+
with open(args.out, "w", encoding="utf-8") as fh:
|
|
153
|
+
json.dump(report, fh, ensure_ascii=False, indent=2)
|
|
154
|
+
fh.write("\n")
|
|
155
|
+
# summary to stderr (always)
|
|
156
|
+
sys.stderr.write(
|
|
157
|
+
f"# fidelity: {len(rows)} rows · {nfiles} files\n"
|
|
158
|
+
f"# newKey in code: {len(verified)} verified · {len(weak)} weak(leaf) · "
|
|
159
|
+
f"{len(unverified)} UNVERIFIED · {len(component)} component/dynamic (exempt)\n"
|
|
160
|
+
f"# code keys not in map: {len(code_not_mapped)}\n"
|
|
161
|
+
f"# value gaps: {len(value_gaps)} · untranslated(tr==en): {len(untranslated)}\n")
|
|
162
|
+
if unverified:
|
|
163
|
+
sys.stderr.write("# UNVERIFIED keys: " + ", ".join(u["key"] for u in unverified[:12]) + "\n")
|
|
164
|
+
if code_not_mapped:
|
|
165
|
+
sys.stderr.write("# wired-but-unmapped: " + ", ".join(code_not_mapped[:12]) + "\n")
|
|
166
|
+
if not args.out:
|
|
167
|
+
json.dump(report, sys.stdout, ensure_ascii=False, indent=2)
|
|
168
|
+
sys.stdout.write("\n")
|
|
169
|
+
sys.exit(2 if hard else 0)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
if __name__ == "__main__":
|
|
173
|
+
main()
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Auto-generated by `pipeline/scripts/build-skills-index.mjs` - do not hand-edit.
|
|
4
4
|
> Regenerate with `node pipeline/scripts/build-skills-index.mjs`.
|
|
5
5
|
|
|
6
|
-
**
|
|
6
|
+
**205 skills** across 2 groups.
|
|
7
7
|
|
|
8
8
|
| Group | Name | Platform | Description |
|
|
9
9
|
|-------|------|----------|-------------|
|
|
@@ -79,11 +79,13 @@
|
|
|
79
79
|
| external | `ios-debugger-agent` | - | Debug the current iOS project on a booted simulator with XcodeBuildMCP. Use when an iOS bug has to be reproduced and diagnosed on a booted s |
|
|
80
80
|
| external | `ios-developer` | - | Develop native iOS applications with Swift/SwiftUI. Masters iOS 18, SwiftUI, UIKit integration, Core Data, networking, and App Store optimiz |
|
|
81
81
|
| external | `ios-localization` | - | Implement, review, or improve localization and internationalization in iOS/macOS apps - String Catalogs (.xcstrings), generated localizabl |
|
|
82
|
+
| external | `ios-module-structure` | - | The ios-module-structure rule registry: stable-ID rules over where a declaration lives, what its file is called and what its folder must con |
|
|
82
83
|
| external | `ios-networking` | - | Build, review, or improve networking code in iOS/macOS apps using URLSession with async/await, structured concurrency, and modern Swift patt |
|
|
83
84
|
| external | `ios-security` | - | Secure iOS apps with Keychain Services, CryptoKit encryption, biometric authentication (Face ID, Touch ID), Secure Enclave key storage, LACo |
|
|
84
85
|
| external | `ios-simulator` | - | Manages iOS Simulator devices and tests app behaviour with xcrun simctl: device lifecycle, app install and launch, push notification and loc |
|
|
85
86
|
| external | `kotlin-coroutines-expert` | - | Expert patterns for Kotlin Coroutines and Flow, covering structured concurrency, error handling, and testing. Use when writing or reviewing |
|
|
86
87
|
| external | `live-activities` | - | Implement, review, or improve Live Activities and Dynamic Island experiences in iOS apps using ActivityKit. Use when building real-time upda |
|
|
88
|
+
| external | `localization-reuse-map` | - | >- |
|
|
87
89
|
| external | `macos-menubar-tuist-app` | - | Build, refactor, or review SwiftUI macOS menubar apps that use Tuist. Use when building, refactoring or reviewing a SwiftUI macOS menubar ap |
|
|
88
90
|
| external | `macos-spm-app-packaging` | - | Scaffold, build, sign, and package SwiftPM macOS apps without Xcode projects. Use when a SwiftPM macOS app has to be built, signed or packag |
|
|
89
91
|
| external | `mapkit-location` | - | Implement, review, or improve maps and location features in iOS/macOS apps using MapKit and CoreLocation. Use when working with Map views, a |
|
|
@@ -91,10 +93,11 @@
|
|
|
91
93
|
| external | `monorepo-architect` | - | Expert in monorepo architecture, build systems, and dependency management at scale. Masters Nx, Turborepo, Bazel, and Lerna for efficient mu |
|
|
92
94
|
| core | `multi-agent` | - | Task orchestrator: runs the full pipeline from a Jira ID or GitHub Issue URL - analysis → plan → TDD development → parallel review (Fable |
|
|
93
95
|
| core | `multi-agent-analysis` | - | Standalone feature-spec analysis (v3 template). Platform-agnostic concept layer with repo-driven convention extraction and per-platform Pass |
|
|
94
|
-
| core | `multi-agent-analysis-resolve` | - | Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time
|
|
96
|
+
| core | `multi-agent-analysis-resolve` | - | Resolve the Section 20 Risks and Open Questions of an analysis v3 document one row at a time: up to 3 source-labeled answer candidates per r |
|
|
95
97
|
| core | `multi-agent-autopilot` | - | Launch any task in autopilot mode: skips every confirmation, runs end-to-end autonomously. Use when a task should run end to end with no con |
|
|
96
98
|
| core | `multi-agent-build-optimize` | - | Wrapper that dispatches to xcode-build-orchestrator on iOS repos. Benchmarks the current Xcode build, runs compilation / project / SPM analy |
|
|
97
99
|
| core | `multi-agent-channels` | - | Multi-channel reporter - Jira/Confluence/Wiki/PR description. Multi-select channels + content, humanizer pass, reviewer-preserving Bitbuck |
|
|
100
|
+
| core | `multi-agent-complaint-analysis` | - | Customer-complaint triage. Ingests complaints (paste, csv/xlsx/txt/json file, Jira issue, Confluence URL), fetches Graylog evidence per trx/ |
|
|
98
101
|
| core | `multi-agent-create-jira` | - | Create a standards-compliant Jira issue (Task / Bug / Story): asks the type, mines project conventions, drafts from a standard template with |
|
|
99
102
|
| core | `multi-agent-design-check` | - | Mock-mode vs Figma design audit (iOS / Android, local-only). Pick repo + module, gate on mock support, enumerate every state driver into a c |
|
|
100
103
|
| core | `multi-agent-dev` | - | Fast development mode: Init → Dev (Opus) → Review → Test → Commit → Report. Analysis and planning are skipped, review is not. Use when the w |
|
|
@@ -109,15 +112,17 @@
|
|
|
109
112
|
| core | `multi-agent-issue` | - | List unassigned GitHub issues, pick one, auto-assign, and launch the multi-agent pipeline. Use when a GitHub issue should be picked up and s |
|
|
110
113
|
| core | `multi-agent-jira` | - | List open Jira issues, pick one, and launch the multi-agent pipeline. Use when a Jira issue should be picked up and started without knowing |
|
|
111
114
|
| core | `multi-agent-kill` | - | Stop the given task, then remove its worktree and branch. Asks for confirmation. Use when a running or stuck task should be stopped and its |
|
|
112
|
-
| core | `multi-agent-language` | - | Toggle outputLanguage (assistant explanations). promptLanguage is fixed to English
|
|
115
|
+
| core | `multi-agent-language` | - | Toggle outputLanguage (assistant explanations, picker questions, PR/Jira/Confluence bodies). promptLanguage is fixed to English; commit mess |
|
|
113
116
|
| core | `multi-agent-local` | - | Full pipeline in local mode - no worktree, runs directly on the current branch. Use when the full pipeline should run on the current branc |
|
|
114
117
|
| core | `multi-agent-local-autopilot` | - | Full pipeline + local + autopilot - no worktree, no confirmations, all 8 phases run end-to-end on the current branch. Use when the full pi |
|
|
115
118
|
| core | `multi-agent-log` | - | Show the agent-log.md for the given task. With no ID, shows the most recent task. Use when asked what a task did, or to read its log. |
|
|
116
119
|
| core | `multi-agent-manual-test` | - | Switch to the active task's branch and prepare it for manual testing in Xcode. Phase 5 standalone (the UI Bug Hunter lives at multi-agent-te |
|
|
117
120
|
| core | `multi-agent-prune-logs` | - | Delete per-task project logs under ~/.claude/logs/multi-agent (filter by age/project/task). Audit trail + metrics are preserved. Dry-run fir |
|
|
121
|
+
| core | `multi-agent-prune-prompts` | - | Zero-base prompt review: measure the always-on instruction footprint, classify every rule block, propose keep/trial-removal/delete; applies |
|
|
118
122
|
| core | `multi-agent-purge` | - | ⚠️ Wipes every worktree, branch, log, and state file. Irreversible; asks for double confirmation. Use when every worktree, branch, log and s |
|
|
119
123
|
| core | `multi-agent-refactor` | - | Analyse the project: extract adapted best-practices, hunt real bugs + improvement areas, check upstream drift of derived skills, research th |
|
|
120
124
|
| core | `multi-agent-resume` | - | Resume a stopped or failed task from the phase where it left off. Use when a task stopped or failed and should carry on from where it left o |
|
|
125
|
+
| core | `multi-agent-resume-local` | - | Continue already-done LOCAL work through the pipeline tail: Review → Build+Test → Commit/PR → Report (technical analysis + Jira test-scenari |
|
|
121
126
|
| core | `multi-agent-review` | - | Run parallel review on a branch diff or a Pull Request: 2 models on Claude Code (Fable + Sonnet), 3 models on Copilot CLI (GPT + Opus + Sonn |
|
|
122
127
|
| core | `multi-agent-review-issue` | - | Assess whether a GitHub issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / sta |
|
|
123
128
|
| core | `multi-agent-review-jira` | - | Assess whether a Jira issue is ready for multi-agent development: fetch it, grade scope / acceptance criteria / repro / design / API / stack |
|
|
@@ -126,8 +131,7 @@
|
|
|
126
131
|
| core | `multi-agent-scan` | - | Skill security scan: walks local skill directories against a tiered pattern catalog. Use when local skill directories need checking for unsa |
|
|
127
132
|
| core | `multi-agent-search` | - | Log search across every agent-log.md with smart ranking and filters. Optional --semantic flag queries the per-repo triage corpus. Use when s |
|
|
128
133
|
| core | `multi-agent-setup` | - | First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. Use when the pipeline is being set up f |
|
|
129
|
-
| core | `multi-agent-
|
|
130
|
-
| core | `multi-agent-stack` | - | Select the active stack for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json (ios/android/mobile/backend/fr |
|
|
134
|
+
| core | `multi-agent-stack` | - | Select the active stack(s) for this repo by enabling the matching marketplace plugin(s) in .claude/settings.json. Multi-select: pass several |
|
|
131
135
|
| core | `multi-agent-status` | - | Show every multi-agent task's ID, phase, branch, and status. Use when asked what is running, or for an overview of every task. |
|
|
132
136
|
| core | `multi-agent-store-ready` | - | Pre-submission store readiness for a built package, iOS and Android, local-only. Three symmetric gates per platform: a static package audit, |
|
|
133
137
|
| core | `multi-agent-sync` | - | One-shot sync of the entire multi-agent ecosystem: Claude Code, Copilot CLI, pipeline repo, website, and the dev-toolkit MCP server. Use whe |
|