@mmerterden/multi-agent-pipeline 20.25.0 → 20.26.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 +18 -0
- package/README.md +6 -7
- package/README.tr.md +6 -7
- package/docs/architecture.md +3 -3
- package/docs/ecosystem.md +5 -5
- package/docs/facts.json +4 -5
- package/install/catalog-history.json +1 -1
- package/manifest.json +36 -37
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/channels/SKILL.md +4 -2
- package/pipeline/commands/multi-agent/sync/SKILL.md +3 -3
- package/pipeline/lib/_jira-auth.sh +3 -1
- package/pipeline/lib/jira-family-write.sh +339 -0
- package/pipeline/lib/jira-publish.sh +28 -1
- package/pipeline/multi-agent-refs/channels/jira.md +2 -0
- package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
- package/pipeline/multi-agent-refs/features/jira-family.md +175 -0
- package/pipeline/multi-agent-refs/help/en.md +0 -1
- package/pipeline/multi-agent-refs/help/tr.md +0 -1
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +3 -1
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +0 -2
- package/pipeline/schemas/agent-state.schema.json +36 -5
- package/pipeline/schemas/phases.json +0 -4
- package/pipeline/schemas/prefs.schema.json +23 -23
- package/pipeline/scripts/jira-family.mjs +947 -0
- package/pipeline/scripts/jira-wiki-escape.mjs +3 -3
- package/pipeline/skills/.skill-manifest.json +5 -9
- package/pipeline/skills/.skills-index.json +1 -12
- package/pipeline/skills/shared/README.md +3 -4
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +5 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +3 -3
- package/pipeline/skills/skills-index.md +1 -2
- package/pipeline/commands/multi-agent/deps/SKILL.md +0 -61
- package/pipeline/multi-agent-refs/features/dep-bump.md +0 -176
- package/pipeline/scripts/dep-bump.mjs +0 -1556
- package/pipeline/skills/shared/core/multi-agent-deps/SKILL.md +0 -60
|
@@ -251,7 +251,7 @@ Classify and fetch external data. The fetched issue title (GitHub `title`, Jira
|
|
|
251
251
|
- `question` -> the user asked something conceptual, not a task to implement. Do NOT create a branch/worktree/Jira. Surface a picker (picker-contract): **Answer here** (default) / **Treat as a task**. On "Answer here" (autopilot default for `question`), answer the question directly in chat and end the run cleanly - no dev chain, no commits. On "Treat as a task", fall through to step 1 below.
|
|
252
252
|
- `ambiguous` or `task` -> proceed to step 1 (normal task flow). Ambiguous input is treated as a task; the guard never blocks an actionable request.
|
|
253
253
|
|
|
254
|
-
|
|
254
|
+
The check is a deterministic local classifier, no model call. Other input types (Jira id, issue URL/number, repo#N) are always explicit tasks and skip the guard.
|
|
255
255
|
|
|
256
256
|
1. Store as description. No external fetch.
|
|
257
257
|
2. After project selection (Step 2), ask with a native `AskUserQuestion` picker (never a typed y/n):
|
|
@@ -550,6 +550,8 @@ Single-repo mode (`projects.length === 1` or scalar-only) uses the legacy single
|
|
|
550
550
|
|
|
551
551
|
The block validates against `agent-state.schema.json` (a unit test holds it there); the schema is the full contract. Enum fields show one value: `remoteType` github|bitbucket|gitlab|generic-git|local, `baseFetchStatus` fresh|cached-stale|local-branch|aborted, `inputType` github-issue-url|github-issue-number|jira-url|jira-id|free-text. `shortId` is the integer from the counter. `write-state.mjs` stamps `schemaVersion` when it creates the file.
|
|
552
552
|
|
|
553
|
+
**Issue family** (Jira input, state file now exists): `bash "$HOME/.claude/lib/jira-family-write.sh" resolve --state "$STATE_FILE"`; asks and writes nothing (`$HOME/.claude/multi-agent-refs/features/jira-family.md`).
|
|
554
|
+
|
|
553
555
|
`sessionId`: write `$MULTI_AGENT_SESSION_ID` verbatim when it is set and non-empty, at creation, and never change it. A continuous-mode launch sets it to the session id it started, and finds this state by it; an attended run has no such variable and writes nothing.
|
|
554
556
|
|
|
555
557
|
**Local-only flow** - when every entry in `state.projects[]` has `provider="local"`:
|
|
@@ -57,8 +57,6 @@ Phase 2 consumes the Phase 1 output object conforming to `$HOME/.claude/schemas/
|
|
|
57
57
|
|
|
58
58
|
**Shadow-Git checkpoints (opt-in)**: gated by `prefs.global.shadowGit.enabled` (default: `false`). When enabled, the orchestrator snapshots the worktree via `$HOME/.claude/lib/shadow-git.sh` so sub-phase rollback is possible without touching the project's real `.git` history. Lifecycle: `shadow-git.sh init` (Phase 0 baseline), `shadow-git.sh snapshot` (per step after `plan-todos complete`), `shadow-git.sh restore <sha> --files` (rollback). Modes: `per-todo-step` (default) or `per-tool-call`. Full wiring + storage cap: `$HOME/.claude/multi-agent-refs/features/shadow-git.md`.
|
|
59
59
|
|
|
60
|
-
**Dependency bump** (`state.mode == "deps"`): `dep-bump.mjs apply` first, then capped fix rounds: `$HOME/.claude/multi-agent-refs/features/dep-bump.md`.
|
|
61
|
-
|
|
62
60
|
#### Component tasks - delegated dispatch (taskType === "component")
|
|
63
61
|
|
|
64
62
|
When Phase 0 Step 7 classified the task as `component`, Phase 2 delegates the entire phase to the enabled `ai-<platform>-toolkit` marketplace plugin's component skill (`create-component`, fallback `create-ui-component`) via the Skill tool and does NOT run the TDD loop below. The dispatch layer passes the plugin skill the analysis Section 6 (Bileşen Envanteri) entry + Section 13.1 conventions for the named component as context. Because plugin skills do not write pipeline state, the **dispatch layer** (not the skill) owns `state.phases["2"].subphases[]`, recording a coarse component-build row - multi-agent's `phase-tracker` reads that array with no special case. Plugin resolution (dual-name), dispatch call, failure/resume, multi-repo, and the intentional cross-CLI divergence live in `$HOME/.claude/multi-agent-refs/component-dispatch.md` - read it before editing component-task behaviour here. Phase 2 still owns: progress line `-> dispatching create-component <name>`, `retryCount` cap at 3, and fallthrough to the TDD path when dispatch prerequisites are missing (`taskType` absent OR the plugin is not enabled in this repo -> log anomaly, halt or run TDD per component-dispatch.md).
|
|
@@ -782,11 +782,6 @@
|
|
|
782
782
|
"enum": ["component", "bugfix", "feature", "refactor", "chore"],
|
|
783
783
|
"description": "Phase 0 Step 7 classification. Phase 2 branches on it, and phase0-exit-gate.mjs fails a run that reaches Phase 1 without it. A Figma reference forces component."
|
|
784
784
|
},
|
|
785
|
-
"depBump": {
|
|
786
|
-
"type": ["object", "null"],
|
|
787
|
-
"additionalProperties": true,
|
|
788
|
-
"description": "A /multi-agent:deps run (state.mode \"deps\"): the bump dep-bump.mjs applied (ecosystem, name, manifest, from, to, risk, lock, alsoMoves, commitMessage), the fix rounds taken against depBump.maxFixRounds, the scope verdict and, when the cap was reached, rolledBack plus what still failed. Contract: multi-agent-refs/features/dep-bump.md."
|
|
789
|
-
},
|
|
790
785
|
"plan": {
|
|
791
786
|
"type": ["object", "null"],
|
|
792
787
|
"description": "The Phase 1 plan as a Todo list, written by plan-todos.sh when prefs.global.planTodos.enabled is true. Shape: plan-todos.schema.json, which plan-todos.sh validates on write, including the optional todos[].type, the todos[].tdd evidence record, the drift record (the todo ended off-plan) and the needsReplan flag (a step it depends on drifted; it does not start until confirm-replan); absent when the opt-in is off."
|
|
@@ -2103,6 +2098,42 @@
|
|
|
2103
2098
|
"sha": { "type": "string" }
|
|
2104
2099
|
}
|
|
2105
2100
|
},
|
|
2101
|
+
"jiraFamily": {
|
|
2102
|
+
"type": ["object", "null"],
|
|
2103
|
+
"additionalProperties": false,
|
|
2104
|
+
"description": "The issue family of a run that started from a Jira story or sub-task (multi-agent-refs/features/jira-family.md), written by Phase 0 from scripts/jira-family.mjs resolve and read by the channels Jira adapter. writes[] is the outcome of lib/jira-family-write.sh apply.",
|
|
2105
|
+
"properties": {
|
|
2106
|
+
"inputKey": { "type": ["string", "null"] },
|
|
2107
|
+
"inputRole": { "enum": ["subtask", "story"] },
|
|
2108
|
+
"storyKey": { "type": ["string", "null"] },
|
|
2109
|
+
"devTaskKey": { "type": ["string", "null"] },
|
|
2110
|
+
"devCandidates": { "type": "array", "items": { "type": "string" } },
|
|
2111
|
+
"testTaskKey": { "type": ["string", "null"] },
|
|
2112
|
+
"testCandidates": { "type": "array", "items": { "type": "string" } },
|
|
2113
|
+
"storyFormat": {
|
|
2114
|
+
"type": "object",
|
|
2115
|
+
"additionalProperties": false,
|
|
2116
|
+
"properties": {
|
|
2117
|
+
"status": { "enum": ["conforms", "nonconforming", "empty", "unknown", "not-a-story"] },
|
|
2118
|
+
"reasons": { "type": "array", "items": { "type": "string" } }
|
|
2119
|
+
}
|
|
2120
|
+
},
|
|
2121
|
+
"writes": {
|
|
2122
|
+
"type": "array",
|
|
2123
|
+
"items": {
|
|
2124
|
+
"type": "object",
|
|
2125
|
+
"additionalProperties": false,
|
|
2126
|
+
"required": ["id", "issue", "status"],
|
|
2127
|
+
"properties": {
|
|
2128
|
+
"id": { "enum": ["story", "dev", "test", "story-tests"] },
|
|
2129
|
+
"issue": { "type": "string" },
|
|
2130
|
+
"status": { "enum": ["written", "exists", "skipped", "failed", "dry-run"] },
|
|
2131
|
+
"reason": { "type": "string" }
|
|
2132
|
+
}
|
|
2133
|
+
}
|
|
2134
|
+
}
|
|
2135
|
+
}
|
|
2136
|
+
},
|
|
2106
2137
|
"decisions": {
|
|
2107
2138
|
"type": "array",
|
|
2108
2139
|
"description": "Choices an autopilot run made where an attended run would have asked (multi-agent-refs/features/autopilot-decisions.md): parks (gate-ledger.mjs), blockers lowered to important (review-decision-gate.mjs), rework escalations (rework-escalation.mjs), pickers resolved without asking, split consensus taken on the triage verdict, a date-gate model fallback (decisions-log.mjs add). Written only while the quality gates are active. Rendered, redacted, in the Phase 5 report and appended to the autopilot PR body; an empty or absent list renders nothing.",
|
|
@@ -1884,29 +1884,6 @@
|
|
|
1884
1884
|
"timeoutSec": 120
|
|
1885
1885
|
}
|
|
1886
1886
|
},
|
|
1887
|
-
"depBump": {
|
|
1888
|
-
"type": "object",
|
|
1889
|
-
"additionalProperties": false,
|
|
1890
|
-
"description": "/multi-agent:deps (multi-agent-refs/features/dep-bump.md): bump one dependency, build and test, fix only the breakage the bump caused, review and open a PR. pipeline/scripts/dep-bump.mjs applies the bump and reads these settings through its config command.",
|
|
1891
|
-
"properties": {
|
|
1892
|
-
"maxFixRounds": {
|
|
1893
|
-
"type": "integer",
|
|
1894
|
-
"minimum": 0,
|
|
1895
|
-
"maximum": 5,
|
|
1896
|
-
"default": 2,
|
|
1897
|
-
"description": "Fix rounds a red build or test run may take after the bump. When the cap is reached and the run is still red, the worktree is rolled back to the recorded base and the run reports what broke instead of committing. 0 means a bump that does not pass as-is is rolled back at once."
|
|
1898
|
-
},
|
|
1899
|
-
"queryRegistry": {
|
|
1900
|
-
"type": "boolean",
|
|
1901
|
-
"default": true,
|
|
1902
|
-
"description": "true = the candidate list asks the package registry for newer versions through the ecosystem's own tool (npm view, git ls-remote, Maven or PyPI metadata). A failed query is noted per package and the list falls back to the manifests, lockfiles and local caches. false = offline listing only."
|
|
1903
|
-
}
|
|
1904
|
-
},
|
|
1905
|
-
"default": {
|
|
1906
|
-
"maxFixRounds": 2,
|
|
1907
|
-
"queryRegistry": true
|
|
1908
|
-
}
|
|
1909
|
-
},
|
|
1910
1887
|
"bulkRead": {
|
|
1911
1888
|
"type": "object",
|
|
1912
1889
|
"additionalProperties": false,
|
|
@@ -2395,6 +2372,29 @@
|
|
|
2395
2372
|
"type": "string",
|
|
2396
2373
|
"default": "Blocks",
|
|
2397
2374
|
"description": "The link type written from a prerequisite story to the story that depends on it (a `Depends on:` clause in the analysis document), by this site's name. The prerequisite is the link's source."
|
|
2375
|
+
},
|
|
2376
|
+
"familyWrites": {
|
|
2377
|
+
"type": "boolean",
|
|
2378
|
+
"default": true,
|
|
2379
|
+
"description": "When a run starts from a Jira story or one of its sub-tasks, write to the whole family (features/jira-family.md): the story description reformatted into the story format, the Phase 5 comment on the development sub-task, the test scenarios on the test sub-task. false keeps the single Phase 5 comment on the issue the run started from."
|
|
2380
|
+
},
|
|
2381
|
+
"storyIssueTypes": {
|
|
2382
|
+
"type": "array",
|
|
2383
|
+
"items": { "type": "string" },
|
|
2384
|
+
"default": [],
|
|
2385
|
+
"description": "Issue type names, by this site's own name, that count as a story for the issue family: only such an issue's description is reformatted into the story format. Empty means storyIssueType (Story when unset)."
|
|
2386
|
+
},
|
|
2387
|
+
"testSubtaskTypes": {
|
|
2388
|
+
"type": "array",
|
|
2389
|
+
"items": { "type": "string" },
|
|
2390
|
+
"default": [],
|
|
2391
|
+
"description": "Sub-task type names, by this site's own name, that mark a test sub-task. Empty means discover: the project's sub-task types from createmeta whose name carries the word test (e.g. Sub Test Execution, Test Task)."
|
|
2392
|
+
},
|
|
2393
|
+
"devSubtaskTypes": {
|
|
2394
|
+
"type": "array",
|
|
2395
|
+
"items": { "type": "string" },
|
|
2396
|
+
"default": [],
|
|
2397
|
+
"description": "Sub-task type names that mark a development sub-task, used when a run starts from the story. Empty means a type whose name carries dev, development or geliştirme."
|
|
2398
2398
|
}
|
|
2399
2399
|
}
|
|
2400
2400
|
},
|