@mmerterden/multi-agent-pipeline 16.18.0 → 16.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/README.md +5 -5
- package/README.tr.md +2 -2
- package/docs/FIGMA_PIPELINE.md +1 -1
- package/docs/adr/0001-three-model-triage.md +4 -2
- package/docs/architecture.md +2 -2
- package/docs/ecosystem.md +13 -11
- package/docs/features.md +2 -2
- package/index.js +1 -1
- package/install/_common.mjs +25 -1
- package/install/_dev-only-files.mjs +2 -2
- package/install/_mcp-register.mjs +4 -3
- package/install/_plugin-skills.mjs +1 -3
- package/install/copilot.mjs +18 -9
- package/install/index.mjs +2 -4
- package/install/templates/copilot-instructions.md +7 -7
- package/package.json +1 -1
- package/pipeline/claude-md-template.md +2 -2
- package/pipeline/commands/multi-agent/SKILL.md +5 -5
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/design-check/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/help/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/local-autopilot/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/review/SKILL.md +27 -14
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +1 -1
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/sync/SKILL.md +2 -2
- package/pipeline/commands/sim-test.md +54 -15
- package/pipeline/lib/credential-inventory.sh +15 -2
- package/pipeline/lib/credential-store-resolver.sh +14 -4
- package/pipeline/lib/credential-store.sh +8 -2
- package/pipeline/lib/extract-conventions.sh +1 -14
- package/pipeline/lib/fetch-confluence.sh +12 -4
- package/pipeline/lib/fetch-crashlytics.sh +11 -8
- package/pipeline/lib/fetch-document.sh +1 -1
- package/pipeline/lib/fetch-figma-annotations.sh +7 -5
- package/pipeline/lib/fetch-fortify.sh +5 -3
- package/pipeline/lib/fetch-graylog.sh +5 -3
- package/pipeline/lib/figma-mcp-refresh.sh +1 -1
- package/pipeline/lib/figma-screenshot.sh +27 -24
- package/pipeline/lib/figma-token.sh +8 -4
- package/pipeline/lib/issue-fetcher.sh +0 -1
- package/pipeline/lib/jira-publish.sh +7 -5
- package/pipeline/lib/md2confluence-v3.py +13 -7
- package/pipeline/lib/multi-repo-pipeline.sh +18 -8
- package/pipeline/lib/plan-todos.sh +11 -0
- package/pipeline/lib/post-pr-review.sh +9 -2
- package/pipeline/lib/repo-cache.sh +18 -10
- package/pipeline/lib/review-watch.sh +60 -14
- package/pipeline/lib/shadow-git.sh +8 -4
- package/pipeline/lib/vercel-deploy.sh +2 -2
- package/pipeline/multi-agent-refs/_dev-context.md +5 -2
- package/pipeline/multi-agent-refs/analysis/locked.md +4 -4
- package/pipeline/multi-agent-refs/analysis/render.md +1 -1
- package/pipeline/multi-agent-refs/cross-cli-contract.md +1 -1
- package/pipeline/multi-agent-refs/outside-the-pipeline.md +6 -6
- package/pipeline/multi-agent-refs/phases/log-format.md +1 -1
- package/pipeline/multi-agent-refs/phases/modes.md +1 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +4 -2
- package/pipeline/multi-agent-refs/phases/phase-1-analysis.md +3 -3
- package/pipeline/multi-agent-refs/phases/phase-2-planning.md +5 -5
- package/pipeline/multi-agent-refs/phases/phase-4-review.md +21 -16
- package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
- package/pipeline/rules/figma-pipeline.md +18 -72
- package/pipeline/rules/outside-the-pipeline.md +4 -3
- package/pipeline/schemas/agent-state.schema.json +1 -1
- package/pipeline/schemas/token-budget.json +1 -1
- package/pipeline/scripts/_stack-routing.mjs +1 -1
- package/pipeline/scripts/agent-guard.py +102 -21
- package/pipeline/scripts/anonymize-findings.mjs +7 -6
- package/pipeline/scripts/build-skills-index.mjs +14 -3
- package/pipeline/scripts/cost-budget-check.mjs +5 -3
- package/pipeline/scripts/cost-lib.sh +0 -15
- package/pipeline/scripts/diff-explain.mjs +22 -12
- package/pipeline/scripts/gc-refs.sh +6 -2
- package/pipeline/scripts/gc-tmp.sh +1 -1
- package/pipeline/scripts/gc-worktrees.sh +1 -1
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/github-ssh-setup.sh +7 -2
- package/pipeline/scripts/graph-build.mjs +2 -2
- package/pipeline/scripts/jira-wiki-escape.mjs +2 -1
- package/pipeline/scripts/keychain.py +12 -11
- package/pipeline/scripts/learning-curve.mjs +1 -1
- package/pipeline/scripts/migrate-prefs.mjs +1 -1
- package/pipeline/scripts/output-quality-check.sh +3 -1
- package/pipeline/scripts/phase-tracker.sh +1 -1
- package/pipeline/scripts/phase0-exit-gate.mjs +2 -1
- package/pipeline/scripts/plan-coverage-gate.mjs +2 -1
- package/pipeline/scripts/pre-commit-check.sh +23 -13
- package/pipeline/scripts/prune-logs.sh +1 -1
- package/pipeline/scripts/render-agent-log-cost.sh +3 -1
- package/pipeline/scripts/render-cost-summary.sh +4 -2
- package/pipeline/scripts/render-work-summary.sh +5 -3
- package/pipeline/scripts/repo-map.mjs +3 -2
- package/pipeline/scripts/scan-skills.sh +6 -2
- package/pipeline/scripts/search-logs.sh +8 -6
- package/pipeline/scripts/sign-skills.sh +3 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +1 -1
- package/pipeline/scripts/triage-memory.mjs +25 -4
- package/pipeline/scripts/uninstall.mjs +20 -12
- package/pipeline/scripts/update-check.sh +2 -2
- package/pipeline/scripts/update-issue-progress.sh +6 -5
- package/pipeline/scripts/validate-analysis-doc.mjs +6 -6
- package/pipeline/scripts/verify-skills.sh +3 -1
- package/pipeline/scripts/worktree-finalize.sh +22 -10
- package/pipeline/skills/.skill-manifest.json +81 -57
- package/pipeline/skills/.skills-index.json +19 -19
- package/pipeline/skills/shared/README.md +8 -8
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +7 -7
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +23 -14
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +2 -2
- package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +56 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +0 -4
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +12 -24
- package/pipeline/skills/shared/external/app-store-changelog/references/release-notes-guidelines.md +34 -0
- package/pipeline/skills/shared/external/app-store-changelog/scripts/collect_release_changes.sh +33 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +7 -9
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +0 -4
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +0 -1
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +0 -14
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +13 -13
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +16 -16
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +6 -6
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +13 -13
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +23 -23
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +18 -18
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +30 -30
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +11 -11
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +33 -33
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +52 -52
- package/pipeline/skills/shared/external/ios-coding-standard/references/lint-local.sh +1 -1
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +11 -11
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -1
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +7 -3
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +9 -15
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +0 -5
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/Package.swift +17 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/Sources/MyApp/Resources/.keep +0 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/Sources/MyApp/main.swift +11 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/bootstrap/version.env +2 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/build_icon.sh +49 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/compile_and_run.sh +63 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/launch.sh +28 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/make_appcast.sh +82 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/package_app.sh +206 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/setup_dev_signing.sh +52 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/sign-and-notarize.sh +52 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/assets/templates/version.env +2 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/references/packaging.md +17 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/references/release.md +32 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/references/scaffold.md +79 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +0 -1
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +0 -4
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/approachable-concurrency.md +63 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/swift-6-2-concurrency.md +272 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/references/swiftui-concurrency-tour-wwdc.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/code-smells.md +150 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/profiling-intake.md +44 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/report-template.md +47 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/app-wiring.md +201 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/async-state.md +96 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/components-index.md +46 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/controls.md +57 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/deeplinks.md +66 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/focus.md +90 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/grids.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/haptics.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/input-toolbar.md +51 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/list.md +86 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/macos-settings.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/matched-transitions.md +59 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/media.md +73 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/menu-bar.md +101 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/navigationstack.md +159 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/overlay.md +45 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/performance.md +62 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/previews.md +48 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scrollview.md +87 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/searchable.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/sheets.md +155 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/split-views.md +72 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/tabview.md +114 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/theming.md +71 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/title-menus.md +93 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/references/top-bar.md +49 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/references/mv-patterns.md +161 -0
- package/pipeline/skills/skills-index.md +8 -8
- package/pipeline/skills/shared/external/help-skills/SKILL.md +0 -166
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* Subcommands:
|
|
22
22
|
* ingest --triage <path> --task-id <id> [--task-title "..."] [--stack ios]
|
|
23
23
|
* [--repo-slug <slug>] [--state <agent-state.json>]
|
|
24
|
+
* (--state fills task-id / task-title / stack when the flag is absent)
|
|
24
25
|
* query --issue "<text>" [--file-glob "Auth*"] [--top N]
|
|
25
26
|
* [--repo-slug <slug>] [--json]
|
|
26
27
|
* show --id <id> [--repo-slug <slug>]
|
|
@@ -214,14 +215,34 @@ function writeRow(slug, row) {
|
|
|
214
215
|
appendFileSync(p, JSON.stringify(row) + "\n", "utf8");
|
|
215
216
|
}
|
|
216
217
|
|
|
218
|
+
// --state <agent-state.json> supplies the ingest defaults an explicit flag does
|
|
219
|
+
// not: task id, title and stack, read from the run's own state.
|
|
220
|
+
function stateDefaults() {
|
|
221
|
+
const p = flags.state;
|
|
222
|
+
if (!p || p === true) return {};
|
|
223
|
+
if (!existsSync(p)) die(`state file not found: ${p}`, 1);
|
|
224
|
+
let state;
|
|
225
|
+
try {
|
|
226
|
+
state = JSON.parse(readFileSync(p, "utf8"));
|
|
227
|
+
} catch (e) {
|
|
228
|
+
die(`cannot parse state JSON: ${e.message}`, 1);
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
taskId: state.taskId || null,
|
|
232
|
+
taskTitle: state.taskTitle || state.task?.title || null,
|
|
233
|
+
stack: state.stack?.primary || state.repos?.[0]?.stack || null,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
|
|
217
237
|
function ingest() {
|
|
218
238
|
const triagePath = flags.triage;
|
|
219
239
|
if (!triagePath) die("ingest needs --triage <path>", 1);
|
|
220
240
|
if (!existsSync(triagePath)) die(`triage file not found: ${triagePath}`, 1);
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const
|
|
241
|
+
const fromState = stateDefaults();
|
|
242
|
+
const taskId = flags["task-id"] || fromState.taskId;
|
|
243
|
+
if (!taskId) die("ingest needs --task-id <id> (or --state with a taskId)", 1);
|
|
244
|
+
const taskTitle = flags["task-title"] || fromState.taskTitle || null;
|
|
245
|
+
const stack = flags.stack || fromState.stack || null;
|
|
225
246
|
const slug = repoSlug();
|
|
226
247
|
|
|
227
248
|
let triage;
|
|
@@ -95,11 +95,12 @@ const explicitlyTargeted = flags.some((f) => TOOL_FLAGS.includes(f)) || flags.in
|
|
|
95
95
|
|
|
96
96
|
const forClaude = flags.includes("--claude") || flags.includes("--all") || !explicitlyTargeted;
|
|
97
97
|
const forCopilot = flags.includes("--copilot") || flags.includes("--all") || !explicitlyTargeted;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
|
|
98
|
+
// The legacy adapters wrote into the PROJECT directory (cwd or --target), not
|
|
99
|
+
// into $HOME, so their cleanup is opt-in: a bare `uninstall` must not walk the
|
|
100
|
+
// current directory's AGENTS.md / .cursorrules / .github on the user's behalf.
|
|
101
|
+
const forCursor = flags.includes("--cursor");
|
|
102
|
+
const forCopilotChat = flags.includes("--copilot-chat");
|
|
103
|
+
const forAntigravity = flags.includes("--antigravity");
|
|
103
104
|
const forCodex = flags.includes("--codex") || flags.includes("--all") || !explicitlyTargeted;
|
|
104
105
|
|
|
105
106
|
const dryRun = flags.includes("--dry-run");
|
|
@@ -566,9 +567,16 @@ function legacyTrailingContent(section) {
|
|
|
566
567
|
* Strip a marker-wrapped `<!-- multi-agent-pipeline:begin/end -->` block from
|
|
567
568
|
* a user-owned file. Preserves everything outside the markers. Deletes the
|
|
568
569
|
* file entirely if it becomes empty.
|
|
570
|
+
*
|
|
571
|
+
* `hostFile` marks the instruction files the installers themselves write
|
|
572
|
+
* (~/.copilot/copilot-instructions.md, ~/.codex/AGENTS.md). Only there is a
|
|
573
|
+
* `# Multi-Agent Development Pipeline` heading provably ours, so only there
|
|
574
|
+
* does the heading-bounded legacy path apply. A project file with that heading
|
|
575
|
+
* and no marker is user prose and is left alone.
|
|
569
576
|
* @param {string} filePath
|
|
577
|
+
* @param {{hostFile?: boolean}} [opts]
|
|
570
578
|
*/
|
|
571
|
-
function stripManagedBlock(filePath) {
|
|
579
|
+
function stripManagedBlock(filePath, { hostFile = false } = {}) {
|
|
572
580
|
if (!existsSync(filePath)) return false;
|
|
573
581
|
const content = readFileSync(filePath, "utf-8");
|
|
574
582
|
const re = /\s*<!-- multi-agent-pipeline:begin -->[\s\S]*?<!-- multi-agent-pipeline:end -->\s*/m;
|
|
@@ -578,7 +586,7 @@ function stripManagedBlock(filePath) {
|
|
|
578
586
|
// pipeline section; strip only the start..end span so user content BELOW
|
|
579
587
|
// the section survives. Legacy files without the end marker are bounded
|
|
580
588
|
// at the next top-level heading outside code fences, else EOF.
|
|
581
|
-
if (content.includes("# Multi-Agent Development Pipeline")) {
|
|
589
|
+
if (hostFile && content.includes("# Multi-Agent Development Pipeline")) {
|
|
582
590
|
const marker = "# Multi-Agent Development Pipeline";
|
|
583
591
|
const idx = content.indexOf(marker);
|
|
584
592
|
if (idx >= 0) {
|
|
@@ -823,7 +831,7 @@ export async function main() {
|
|
|
823
831
|
// Agent definitions are FILES; remove only the pipeline-shipped names so
|
|
824
832
|
// user-authored agents survive.
|
|
825
833
|
rmMatchingFiles(join(COP, "agents"), (name) => PIPELINE_AGENT_FILES.includes(name));
|
|
826
|
-
stripManagedBlock(join(COP, "copilot-instructions.md"));
|
|
834
|
+
stripManagedBlock(join(COP, "copilot-instructions.md"), { hostFile: true });
|
|
827
835
|
}
|
|
828
836
|
|
|
829
837
|
// Full cleanup: pipeline settings, the log root, and the per-repo memory
|
|
@@ -851,9 +859,9 @@ export async function main() {
|
|
|
851
859
|
rmIfExists(join(HOME, ".claude", "knowledge"));
|
|
852
860
|
}
|
|
853
861
|
|
|
854
|
-
// Legacy adapter-file cleanup (adapters removed in v10.7.0)
|
|
855
|
-
// delete files a pre-v10.7.0 install generated; they never touch
|
|
856
|
-
// outside the multi-agent-* namespace /
|
|
862
|
+
// Legacy adapter-file cleanup (adapters removed in v10.7.0), opt-in per flag.
|
|
863
|
+
// These blocks delete files a pre-v10.7.0 install generated; they never touch
|
|
864
|
+
// user files outside the multi-agent-* namespace / begin-end markers.
|
|
857
865
|
if (forCursor) {
|
|
858
866
|
console.log("");
|
|
859
867
|
console.log(` [Cursor - legacy cleanup] Removing from ${adapterTarget}...`);
|
|
@@ -913,7 +921,7 @@ export async function main() {
|
|
|
913
921
|
rmIfExists(join(CODEX, "prompts", "multi-agent.md"));
|
|
914
922
|
removeGeneratedCodexAgents(join(CODEX, "agents"));
|
|
915
923
|
|
|
916
|
-
stripManagedBlock(join(CODEX, "AGENTS.md"));
|
|
924
|
+
stripManagedBlock(join(CODEX, "AGENTS.md"), { hostFile: true });
|
|
917
925
|
|
|
918
926
|
// The MCP entry was written by `codex mcp add`, so hand it back the same
|
|
919
927
|
// way rather than editing config.toml - Codex also stores marketplace and
|
|
@@ -48,8 +48,8 @@ PRINT_REQUIRED=0
|
|
|
48
48
|
|
|
49
49
|
while [ $# -gt 0 ]; do
|
|
50
50
|
case "$1" in
|
|
51
|
-
--local) LOCAL_VERSION="${2:-}"; shift
|
|
52
|
-
--ttl-hours) TTL_HOURS="${2:-24}"; shift
|
|
51
|
+
--local) LOCAL_VERSION="${2:-}"; shift; [ $# -gt 0 ] && shift ;;
|
|
52
|
+
--ttl-hours) TTL_HOURS="${2:-24}"; shift; [ $# -gt 0 ] && shift ;;
|
|
53
53
|
--force) FORCE=1; shift ;;
|
|
54
54
|
--print-required) PRINT_REQUIRED=1; shift ;;
|
|
55
55
|
*) shift ;;
|
|
@@ -134,8 +134,9 @@ G_CC=$(glyph_for "$F_CC")
|
|
|
134
134
|
G_WIKI=$(glyph_for "$F_WIKI")
|
|
135
135
|
|
|
136
136
|
# Fetch current body, replace the Progress table, write back.
|
|
137
|
-
TMP_BODY=$(mktemp /tmp/issue-progress
|
|
138
|
-
|
|
137
|
+
TMP_BODY=$(mktemp "/tmp/issue-progress-${TASK_ID}.XXXXXX")
|
|
138
|
+
TMP_NEW=$(mktemp "/tmp/issue-progress-${TASK_ID}.new.XXXXXX")
|
|
139
|
+
trap 'rm -f "$TMP_BODY" "$TMP_NEW"' EXIT
|
|
139
140
|
|
|
140
141
|
gh issue view "$ISSUE_NUM" --repo "$ORG_REPO" --json body --jq .body > "$TMP_BODY"
|
|
141
142
|
|
|
@@ -144,16 +145,16 @@ NEW_BLOCK=$(build_progress_block "$G_IMPL" "$G_TEST" "$G_CC" "$G_WIKI")
|
|
|
144
145
|
|
|
145
146
|
# Replace the table between `### Progress` and the first terminator (legend
|
|
146
147
|
# comment, next heading, or EOF) - see rewrite_progress_body above.
|
|
147
|
-
rewrite_progress_body "$NEW_BLOCK" "$TMP_BODY" > "$
|
|
148
|
+
rewrite_progress_body "$NEW_BLOCK" "$TMP_BODY" > "$TMP_NEW"
|
|
148
149
|
|
|
149
150
|
# Check if body actually changed (idempotent no-op).
|
|
150
|
-
if cmp -s "$TMP_BODY" "$
|
|
151
|
+
if cmp -s "$TMP_BODY" "$TMP_NEW"; then
|
|
151
152
|
echo "update-issue-progress: no change for #$ISSUE_NUM (idempotent no-op)" >&2
|
|
152
153
|
exit 0
|
|
153
154
|
fi
|
|
154
155
|
|
|
155
156
|
# Apply.
|
|
156
|
-
if ! gh issue edit "$ISSUE_NUM" --repo "$ORG_REPO" --body-file "$
|
|
157
|
+
if ! gh issue edit "$ISSUE_NUM" --repo "$ORG_REPO" --body-file "$TMP_NEW" >/dev/null; then
|
|
157
158
|
echo "update-issue-progress: gh issue edit failed for #$ISSUE_NUM" >&2
|
|
158
159
|
exit 4
|
|
159
160
|
fi
|
|
@@ -271,7 +271,7 @@ function main() {
|
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
// 2b. JSON does not fit in a table cell (
|
|
274
|
+
// 2b. JSON does not fit in a table cell (analysis-template.md Section 9.2 / 9.3).
|
|
275
275
|
//
|
|
276
276
|
// One document rendered `Request` as inline JSON with a field note glued to
|
|
277
277
|
// the end, and `Response` as a proper fenced block below the table: two
|
|
@@ -284,7 +284,7 @@ function main() {
|
|
|
284
284
|
if (/[{}]/.test(cell)) {
|
|
285
285
|
errors.push(
|
|
286
286
|
`line ${i + 1}: ${/Request/.test(line) ? "Request" : "Response"} cell holds JSON; ` +
|
|
287
|
-
"put the payload in a fenced block under the table (
|
|
287
|
+
"put the payload in a fenced block under the table (analysis-template.md Section 9.2 / 9.3)",
|
|
288
288
|
);
|
|
289
289
|
}
|
|
290
290
|
}
|
|
@@ -335,7 +335,7 @@ function main() {
|
|
|
335
335
|
// place a Turkish document can quietly go ASCII: one run shipped `Hayir` and
|
|
336
336
|
// `Basarili` in its flow chart while every other line was correct. A warning,
|
|
337
337
|
// not an error - node ids are legitimately ASCII, only labels are checked.
|
|
338
|
-
if (parsed
|
|
338
|
+
if (parsed?.fm?.language === "tr") {
|
|
339
339
|
const mmLines = text.split("\n");
|
|
340
340
|
let inMermaid = false;
|
|
341
341
|
for (let i = 0; i < mmLines.length; i++) {
|
|
@@ -353,12 +353,12 @@ function main() {
|
|
|
353
353
|
for (const lbl of labels) {
|
|
354
354
|
if (
|
|
355
355
|
/^[\x20-\x7E]+$/.test(lbl) &&
|
|
356
|
-
/\b(Hayir|Basarili|Basarisiz|Odeme|Iptal|Gecerli|Gecersiz|Secim|Dogrulama|Uyari|Baslangic|Bitis|
|
|
356
|
+
/\b(Hayir|Basarili|Basarisiz|Odeme|Iptal|Gecerli|Gecersiz|Secim|Dogrulama|Uyari|Baslangic|Bitis|Aciklama)\b/.test(
|
|
357
357
|
lbl,
|
|
358
358
|
)
|
|
359
359
|
) {
|
|
360
|
-
|
|
361
|
-
`
|
|
360
|
+
warns.push(
|
|
361
|
+
`line ${i + 1}: diagram label "${lbl}" looks like Turkish flattened to ASCII (Locked 7)`,
|
|
362
362
|
);
|
|
363
363
|
}
|
|
364
364
|
}
|
|
@@ -31,7 +31,9 @@ ROOT_OVERRIDE=""
|
|
|
31
31
|
QUIET=0
|
|
32
32
|
while [ $# -gt 0 ]; do
|
|
33
33
|
case "$1" in
|
|
34
|
-
--root)
|
|
34
|
+
--root)
|
|
35
|
+
[ $# -ge 2 ] || { echo "verify-skills: --root needs a value" >&2; exit 1; }
|
|
36
|
+
ROOT_OVERRIDE="$2"; shift 2 ;;
|
|
35
37
|
--quiet) QUIET=1; shift ;;
|
|
36
38
|
*) shift ;;
|
|
37
39
|
esac
|
|
@@ -34,14 +34,16 @@ WORKTREE=""; PROJECT_ROOT=""; TASK_ID=""; PROJECT=""; BRANCH=""
|
|
|
34
34
|
LOGS_ROOT="${HOME}/.claude/logs/multi-agent"
|
|
35
35
|
DRY=0; JSON=0
|
|
36
36
|
|
|
37
|
+
need_value() { [ $# -ge 2 ] || { echo "ERR: $1 needs a value" >&2; exit 1; }; }
|
|
38
|
+
|
|
37
39
|
while [ $# -gt 0 ]; do
|
|
38
40
|
case "$1" in
|
|
39
|
-
--worktree) WORKTREE="$
|
|
40
|
-
--project-root) PROJECT_ROOT="$
|
|
41
|
-
--task-id) TASK_ID="$
|
|
42
|
-
--project) PROJECT="$
|
|
43
|
-
--branch) BRANCH="$
|
|
44
|
-
--logs-root) LOGS_ROOT="$
|
|
41
|
+
--worktree) need_value "$@"; WORKTREE="$2"; shift 2 ;;
|
|
42
|
+
--project-root) need_value "$@"; PROJECT_ROOT="$2"; shift 2 ;;
|
|
43
|
+
--task-id) need_value "$@"; TASK_ID="$2"; shift 2 ;;
|
|
44
|
+
--project) need_value "$@"; PROJECT="$2"; shift 2 ;;
|
|
45
|
+
--branch) need_value "$@"; BRANCH="$2"; shift 2 ;;
|
|
46
|
+
--logs-root) need_value "$@"; LOGS_ROOT="$2"; shift 2 ;;
|
|
45
47
|
--dry-run) DRY=1; shift ;;
|
|
46
48
|
--json) JSON=1; shift ;;
|
|
47
49
|
*) echo "usage: worktree-finalize.sh --worktree <p> --project-root <p> --task-id <id> [--project <s>] [--branch <b>] [--logs-root <d>] [--dry-run] [--json]" >&2; exit 1 ;;
|
|
@@ -129,10 +131,16 @@ esac
|
|
|
129
131
|
|
|
130
132
|
# Must be a worktree git actually knows about, so a mistyped path cannot delete an
|
|
131
133
|
# unrelated directory.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
registered=""
|
|
135
|
+
while IFS= read -r w; do
|
|
136
|
+
[ -n "$w" ] || continue
|
|
137
|
+
w_rp="$(cd "$w" 2>/dev/null && pwd -P)" || continue
|
|
138
|
+
registered="$registered$w_rp
|
|
139
|
+
"
|
|
140
|
+
done <<EOF_WT
|
|
141
|
+
$(git -C "$rp_pr" worktree list --porcelain 2>/dev/null | awk '/^worktree /{print substr($0,10)}')
|
|
142
|
+
EOF_WT
|
|
143
|
+
if ! printf '%s' "$registered" | grep -qxF "$rp_wt"; then
|
|
136
144
|
skip "not a registered worktree of $rp_pr"
|
|
137
145
|
fi
|
|
138
146
|
|
|
@@ -212,6 +220,7 @@ copy_one() {
|
|
|
212
220
|
return 0
|
|
213
221
|
fi
|
|
214
222
|
mkdir -p "$DEST/$(dirname "$1")" 2>/dev/null
|
|
223
|
+
[ -d "$DEST/$1" ] && rm -rf "${DEST:?}/$1"
|
|
215
224
|
cp -R "$src" "$DEST/$1" 2>/dev/null && SALVAGED="${SALVAGED:+$SALVAGED,}\"$1\""
|
|
216
225
|
}
|
|
217
226
|
|
|
@@ -223,6 +232,9 @@ copy_one() {
|
|
|
223
232
|
# actually fired for either file.
|
|
224
233
|
copy_from_logs() {
|
|
225
234
|
src="$LOGS_TASK_DIR/$1"
|
|
235
|
+
# phase-tracker.sh writes tracker-state.json to <logs-root>/<task-id>/ with
|
|
236
|
+
# no project segment; the project-scoped dir is agent-state.json's home.
|
|
237
|
+
[ -e "$src" ] || src="$LOGS_ROOT/$TASK_ID/$1"
|
|
226
238
|
[ -e "$src" ] || return 0
|
|
227
239
|
if [ "$DRY" = "1" ]; then
|
|
228
240
|
SALVAGED="${SALVAGED:+$SALVAGED,}\"$1\""
|