@mmerterden/multi-agent-pipeline 20.11.1 → 20.13.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 +51 -0
- package/README.md +1 -1
- package/README.tr.md +1 -1
- package/docs/facts.json +2 -2
- package/install/_common.mjs +1 -1
- package/install/_plugin-skills.mjs +13 -9
- package/install/catalog-history.json +1 -1
- package/install/claude.mjs +9 -0
- package/install/codex.mjs +12 -12
- package/manifest.json +74 -67
- package/package.json +5 -5
- package/pipeline/agents/code-reviewer.md +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +1 -0
- package/pipeline/commands/multi-agent/analysis/SKILL.md +7 -3
- package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +57 -7
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -0
- package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +1 -0
- package/pipeline/commands/multi-agent/doctor/SKILL.md +6 -0
- package/pipeline/commands/multi-agent/feedback/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/forget/SKILL.md +1 -0
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +1 -0
- package/pipeline/commands/multi-agent/kill/SKILL.md +1 -0
- package/pipeline/commands/multi-agent/model/SKILL.md +7 -0
- package/pipeline/commands/multi-agent/prune-logs/SKILL.md +1 -0
- package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +1 -0
- package/pipeline/commands/multi-agent/review/SKILL.md +5 -0
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +7 -2
- package/pipeline/commands/multi-agent/sync/SKILL.md +5 -6
- package/pipeline/lib/agent-model-sync.mjs +95 -0
- package/pipeline/lib/analysis-jira-write.sh +81 -27
- package/pipeline/lib/analysis-quality.mjs +261 -0
- package/pipeline/lib/analysis-sections.mjs +105 -0
- package/pipeline/lib/jira-epic-link.sh +54 -0
- package/pipeline/lib/model-rung.sh +7 -0
- package/pipeline/multi-agent-refs/analysis/locked.md +4 -4
- package/pipeline/multi-agent-refs/analysis/redesign.md +3 -1
- package/pipeline/multi-agent-refs/analysis/render.md +20 -21
- package/pipeline/multi-agent-refs/analysis/resolve.md +1 -1
- package/pipeline/multi-agent-refs/analysis/review.md +16 -3
- package/pipeline/multi-agent-refs/analysis/synthesis.md +10 -2
- package/pipeline/multi-agent-refs/analysis-template-corporate.md +44 -9
- package/pipeline/multi-agent-refs/analysis-template.md +21 -14
- package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -0
- package/pipeline/multi-agent-refs/features/analysis-jira.md +69 -19
- package/pipeline/multi-agent-refs/features/doctor.md +10 -0
- package/pipeline/multi-agent-refs/features/model-fallback.md +10 -0
- package/pipeline/multi-agent-refs/features/phone-api.md +1 -1
- package/pipeline/multi-agent-refs/features/unattended-security.md +2 -2
- package/pipeline/multi-agent-refs/features/usage-reporting.md +13 -0
- package/pipeline/schemas/analysis-spec.schema.json +22 -0
- package/pipeline/schemas/prefs.schema.json +22 -1
- package/pipeline/scripts/analysis-story-body.mjs +210 -0
- package/pipeline/scripts/analysis-story-tree.mjs +73 -12
- package/pipeline/scripts/analysis-tickets-writeback.mjs +101 -0
- package/pipeline/scripts/build-references.mjs +14 -1
- package/pipeline/scripts/confluence-readback.mjs +148 -0
- package/pipeline/scripts/doctor.mjs +48 -0
- package/pipeline/scripts/jira-wiki-escape.mjs +40 -0
- package/pipeline/scripts/migrate-prefs.mjs +14 -0
- package/pipeline/scripts/unattended_policy.py +12 -5
- package/pipeline/scripts/usage-report.mjs +84 -9
- package/pipeline/scripts/validate-analysis-doc.mjs +120 -70
- package/pipeline/skills/.skill-manifest.json +8 -8
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -1
- package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +56 -6
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +6 -0
- package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +6 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +5 -0
- package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +5 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +1 -0
|
@@ -15,6 +15,11 @@ Produces a stakeholder-ready, platform-agnostic feature-spec document set (one m
|
|
|
15
15
|
|
|
16
16
|
> **Language**: Per `refs/rules.md` Language Application matrix - instruction prose stays English. `AskUserQuestion.question`, `.options[].label` and `.options[].description` follow `outputLanguage`; only `header` stays English (<=12-char chip). The emitted document body follows `outputLanguage` (`tr` or `en`).
|
|
17
17
|
|
|
18
|
+
## Gotchas
|
|
19
|
+
|
|
20
|
+
- Design is fetched only inside this command (Locked 29). A variant missing from the document is added by re-running analysis, never by a later phase.
|
|
21
|
+
- `status: final` fails the validator while any `AS-NN` is still open; publish drafts as `draft`.
|
|
22
|
+
|
|
18
23
|
## When to use
|
|
19
24
|
|
|
20
25
|
- Before kicking off a new feature: design + API + business rules + architecture plan + test strategy crystallized into one per-platform document set
|
|
@@ -40,7 +45,7 @@ One run emits one profile. A missing input never blocks either: the gap is writt
|
|
|
40
45
|
|
|
41
46
|
The template has 23 main sections plus footer (Glossary, Changelog). The rendered set is chosen from evidence by the omission table (Locked 2), not by a mode: a section with no evidence drops, and 19 Alternatives, 22 Glossary and 18 Rollout are default-drop.
|
|
42
47
|
|
|
43
|
-
**Section omission**: zero-evidence sections are dropped entirely (no "TBD" placeholder);
|
|
48
|
+
**Section omission**: zero-evidence sections are dropped entirely (no "TBD" placeholder); a rendered section keeps its canonical template number, so the rendered set has gaps. Sections 1, 2, 4, 9, 13, 14, 20, 21 are never omitted.
|
|
44
49
|
|
|
45
50
|
**Two-pass render**: Pass A computes the shared logical content once; Pass B projects it onto each selected platform using conventions extracted from the repos (Phase 1c, seven pattern groups with confidence levels). Every projected cell carries an evidence footnote. A convention preview gate lets the user approve or override cells before any file renders.
|
|
46
51
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: multi-agent-analysis-jira
|
|
3
3
|
description: "Turn a rendered analysis document into a Jira story tree: derive stories from the document's own rule ids, check coverage both ways, preview every byte, then create only what does not already exist. Use when an analysis is final and the work needs tickets."
|
|
4
4
|
user-invocable: true
|
|
5
|
-
argument-hint: "[analysis.md] [--project KEY] - optional; with no argument, pick from the documents this run emitted"
|
|
5
|
+
argument-hint: "[analysis.md] [--project KEY] [--epic KEY] - optional; with no argument, pick from the documents this run emitted"
|
|
6
6
|
metadata:
|
|
7
7
|
language: en
|
|
8
8
|
not-for: create-jira, jira
|
|
@@ -18,13 +18,26 @@ invents a story: every node comes from an id the document defines.
|
|
|
18
18
|
Contract, severities and reasoning:
|
|
19
19
|
`$HOME/.claude/multi-agent-refs/features/analysis-jira.md`.
|
|
20
20
|
|
|
21
|
+
## Gotchas
|
|
22
|
+
|
|
23
|
+
- An issue whose label already exists is skipped, never updated. Editing the document and re-running creates only what is missing; existing tickets keep their old text.
|
|
24
|
+
- A document with no `BR-`/`FG-` ids still plans, from its `4.N` sub-sections, but its coverage verdict is `unverifiable`: there is nothing to check the tree against.
|
|
25
|
+
- An open `EKLENECEK`/`TBD` marker or an open Section 20 row stops planning with exit 4. Resolve them with `/multi-agent-analysis-resolve` first.
|
|
26
|
+
- The epic must already exist: stories are linked to it, never an epic created. On Server/Data Center the Epic Link field is discovered from the site; when none is found the stories are created unlinked and the writer says so.
|
|
27
|
+
- Channel clones (`issueTree.cloneByChannel`) carry their own labels and are searched like stories, so a re-run never doubles them or their links.
|
|
28
|
+
- Story bodies hold only document text. A body warning (no user story, fewer than 2 criteria, no negative criterion) is a gap in the document; fix the document, not the ticket.
|
|
29
|
+
|
|
21
30
|
## Phase 1 - Plan, offline
|
|
22
31
|
|
|
23
32
|
```bash
|
|
24
|
-
node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>" --json > /tmp/ma-plan.json
|
|
25
|
-
node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>"
|
|
33
|
+
node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>" --json $PAGE > /tmp/ma-plan.json
|
|
34
|
+
node "$HOME/.claude/scripts/analysis-story-tree.mjs" "<analysis.md>" $PAGE
|
|
26
35
|
```
|
|
27
36
|
|
|
37
|
+
`$PAGE` is `--page-url <url>` when the document was published (the run's
|
|
38
|
+
`outputs.confluencePages[]`); without it the front-matter `confluence_url` is
|
|
39
|
+
used, and with neither the story bodies carry no analysis link.
|
|
40
|
+
|
|
28
41
|
Exit 4 means the document still carries an open placeholder. Stop and report it:
|
|
29
42
|
the step is `/multi-agent:analysis-resolve`, and a tree built from an open
|
|
30
43
|
question publishes the gap as work somebody is now assigned.
|
|
@@ -48,12 +61,19 @@ what makes a preview meaningful:
|
|
|
48
61
|
- every field beside the pref key it came from, so a wrong setting shows here
|
|
49
62
|
rather than in Jira afterwards
|
|
50
63
|
- the write count
|
|
64
|
+
- every story's full description, as it will be written, with its body
|
|
65
|
+
warnings; `--brief` gives the one-line-per-node view
|
|
66
|
+
|
|
67
|
+
Then ask for the epic, once. `AskUserQuestion`:
|
|
68
|
+
|
|
69
|
+
- **Link to an existing epic** - the user types its key (`--epic <KEY>`)
|
|
70
|
+
- **No epic** - the stories are created unlinked
|
|
51
71
|
|
|
52
72
|
Then the dry run, which is what proves the writer agrees with the plan:
|
|
53
73
|
|
|
54
74
|
```bash
|
|
55
75
|
bash "$HOME/.claude/lib/analysis-jira-write.sh" \
|
|
56
|
-
--plan /tmp/ma-plan.json --project "<KEY>" --dry-run
|
|
76
|
+
--plan /tmp/ma-plan.json --project "<KEY>" [--epic "<EPIC>"] --dry-run
|
|
57
77
|
```
|
|
58
78
|
|
|
59
79
|
## Phase 3 - Approve
|
|
@@ -79,11 +99,14 @@ be reachable.
|
|
|
79
99
|
invented id means the plan cites something the document does not define - treat
|
|
80
100
|
that as a defect in the plan, not a warning to click past.
|
|
81
101
|
|
|
102
|
+
Body warnings are printed before the question too. They do not block: the
|
|
103
|
+
ticket says only what the document says, and the warning names the gap.
|
|
104
|
+
|
|
82
105
|
## Phase 4 - Write
|
|
83
106
|
|
|
84
107
|
```bash
|
|
85
108
|
bash "$HOME/.claude/lib/analysis-jira-write.sh" \
|
|
86
|
-
--plan /tmp/ma-plan.json --project "<KEY>"
|
|
109
|
+
--plan /tmp/ma-plan.json --project "<KEY>" [--epic "<EPIC>"]
|
|
87
110
|
```
|
|
88
111
|
|
|
89
112
|
It searches by label first and skips what exists. Re-running is safe and is the
|
|
@@ -93,9 +116,36 @@ findable rather than duplicable.
|
|
|
93
116
|
**Never pass `--force`-like flags, and never update an existing node.** Jira has
|
|
94
117
|
no backup path for fields other than description.
|
|
95
118
|
|
|
119
|
+
### Write the tickets back
|
|
120
|
+
|
|
121
|
+
The document lists what it produced. Local and idempotent: the table sits
|
|
122
|
+
between `<!-- tickets:start -->` and `<!-- tickets:end -->`, a re-run replaces
|
|
123
|
+
it, and only nodes with a key appear.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
LEDGER="$HOME/.claude/logs/multi-agent/_analysis-jira/$(jq -r '.document.id // "unidentified"' /tmp/ma-plan.json).jsonl"
|
|
127
|
+
node "$HOME/.claude/scripts/analysis-tickets-writeback.mjs" \
|
|
128
|
+
--doc "<analysis.md>" --ledger "$LEDGER" --plan /tmp/ma-plan.json
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
When the document has a Confluence page, updating it is a **separate**
|
|
132
|
+
`AskUserQuestion`, never part of the tree approval:
|
|
133
|
+
|
|
134
|
+
- **Update the Confluence page** - publish the document with its new table
|
|
135
|
+
- **Keep it local** - the page stays as it is
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
python3 "$HOME/.claude/lib/md2confluence-v3.py" update \
|
|
139
|
+
--page-id "<pageId>" --title "<page title>" \
|
|
140
|
+
--markdown "<analysis.md>" --attachments-dir "$(dirname "<analysis.md>")"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Read its JSON envelope as the analysis render step does, and surface any
|
|
144
|
+
missing-attachment warning.
|
|
145
|
+
|
|
96
146
|
## Phase 5 - Report
|
|
97
147
|
|
|
98
|
-
Keys created, keys skipped, the coverage verdict, and the ledger path. If the
|
|
148
|
+
Keys created, keys skipped, the epic linked (or none), the coverage verdict, and the ledger path. If the
|
|
99
149
|
verdict was `unverifiable`, say that in the report too - not only at approval
|
|
100
150
|
time, because the report is what gets pasted elsewhere.
|
|
101
151
|
|
|
@@ -13,6 +13,12 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
Run the task end-to-end with no confirmations.
|
|
15
15
|
|
|
16
|
+
## Gotchas
|
|
17
|
+
|
|
18
|
+
- The guard decides within a 5-second internal deadline and fails closed when unattended. On a heavily loaded machine a correct command can be refused for time, not for policy.
|
|
19
|
+
- An unattended run never pushes or opens a PR itself: it records the request in `pr-request.json` and the runner publishes it.
|
|
20
|
+
- An unattended run cannot run `/multi-agent-stack` or write `.claude/` in the repo; a missing stack toolkit is read from a local marketplace clone instead.
|
|
21
|
+
|
|
16
22
|
## What changes
|
|
17
23
|
|
|
18
24
|
| Phase | Normal | Autopilot |
|
|
@@ -20,6 +20,12 @@ same way - late, mid-run, after the pickers had been answered. A missing script
|
|
|
20
20
|
fails at the call. Malformed preferences fail after Phase 0 has asked five
|
|
21
21
|
questions. A token in a remote URL does not fail at all; it leaks.
|
|
22
22
|
|
|
23
|
+
## Gotchas
|
|
24
|
+
|
|
25
|
+
- Exit 4 means the layout did not resolve and nothing was checked. It is not a pass.
|
|
26
|
+
- Without `--probe` no credential is sent anywhere, so a revoked token still reads as mapped.
|
|
27
|
+
- `usage-report` SKIP means nothing has been sent from this machine yet, not that reporting works.
|
|
28
|
+
|
|
23
29
|
## Run it
|
|
24
30
|
|
|
25
31
|
```bash
|
|
@@ -13,6 +13,11 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
Skip Phase 0-3 and review a diff only. Input shapes: a PR (`#N`, `repo#N`, GitHub/Bitbucket-Server PR URL), a branch name, or empty.
|
|
15
15
|
|
|
16
|
+
## Gotchas
|
|
17
|
+
|
|
18
|
+
- The counterpart-repo comparison needs exactly one resolved candidate. With several, an unattended run skips it silently, so an autopilot review can have no cross-platform section.
|
|
19
|
+
- The counterpart's stack comes from marker files, never from the repo name.
|
|
20
|
+
|
|
16
21
|
## Steps
|
|
17
22
|
|
|
18
23
|
1. **Resolve the input** (`{kind, provider}`):
|
|
@@ -13,6 +13,11 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
`multi-agent-review` judges a diff. This judges the document that diff was supposed to come from, before the code exists. No worktree, no branch, no commit, and the reviewed document is never edited in place.
|
|
15
15
|
|
|
16
|
+
## Gotchas
|
|
17
|
+
|
|
18
|
+
- Validator ERRORs are Blockers and WARNs are Important, unless the document states why the warned-about item is acceptable.
|
|
19
|
+
- Every rubric class is printed, with `none` when empty. A class missing from the verdict did not run; it is not a clean result.
|
|
20
|
+
|
|
16
21
|
## Flow
|
|
17
22
|
|
|
18
23
|
Read `$HOME/.copilot/multi-agent-refs/analysis/review.md` and execute it:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-agent-setup
|
|
3
3
|
description: "First-run setup wizard: keychain token discovery, Git Identity onboarding, and pipeline preparation. Use when the pipeline is being set up for the first time, or tokens and git identity need onboarding."
|
|
4
|
+
argument-hint: "[jira-keys | hosts | accounts] - optional; no argument runs the whole onboarding"
|
|
4
5
|
user-invocable: true
|
|
5
6
|
metadata:
|
|
6
7
|
language: en
|