@mmerterden/multi-agent-pipeline 20.36.0 → 20.37.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 +12 -0
- package/docs/facts.json +1 -1
- package/install/catalog-history.json +1 -1
- package/manifest.json +194 -122
- package/package.json +1 -1
- package/pipeline/commands/multi-agent/SKILL.md +33 -154
- package/pipeline/commands/multi-agent/analysis/SKILL.md +14 -68
- package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +5 -8
- package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +38 -109
- package/pipeline/commands/multi-agent/channels/SKILL.md +38 -167
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +37 -144
- package/pipeline/commands/multi-agent/design-check/SKILL.md +27 -131
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +22 -48
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +37 -180
- package/pipeline/commands/multi-agent/jira/SKILL.md +16 -46
- package/pipeline/commands/multi-agent/refactor/SKILL.md +23 -184
- package/pipeline/commands/multi-agent/resume/SKILL.md +30 -136
- package/pipeline/commands/multi-agent/review/SKILL.md +24 -199
- package/pipeline/commands/multi-agent/setup/SKILL.md +25 -181
- package/pipeline/commands/multi-agent/stack/SKILL.md +9 -53
- package/pipeline/commands/multi-agent/status/SKILL.md +13 -2
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +27 -226
- package/pipeline/commands/multi-agent/sync/SKILL.md +35 -164
- package/pipeline/commands/multi-agent/test-gen/SKILL.md +2 -4
- package/pipeline/commands/multi-agent/update/SKILL.md +18 -60
- package/pipeline/contract/CHANGELOG.md +9 -0
- package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
- package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
- package/pipeline/contract/fixtures/error-unsigned.json +1 -1
- package/pipeline/contract/fixtures/runs-awaiting-question.json +1 -1
- package/pipeline/contract/fixtures/runs-empty.json +1 -1
- package/pipeline/contract/fixtures/runs-failed.json +1 -1
- package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
- package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
- package/pipeline/contract/fixtures/runs-running.json +1 -1
- package/pipeline/contract/manifest.json +5 -5
- package/pipeline/contract/types/index.d.ts +3 -2
- package/pipeline/multi-agent-refs/autopilot-on/details.md +148 -0
- package/pipeline/multi-agent-refs/channels/generator.md +14 -0
- package/pipeline/multi-agent-refs/channels/preview.md +13 -0
- package/pipeline/multi-agent-refs/channels/reference.md +46 -0
- package/pipeline/multi-agent-refs/complaint-analysis/phases.md +159 -0
- package/pipeline/multi-agent-refs/design-check/export.md +1 -0
- package/pipeline/multi-agent-refs/design-check/init-inventory.md +1 -1
- package/pipeline/multi-agent-refs/design-check/scope-and-ledger.md +64 -0
- package/pipeline/multi-agent-refs/features/analysis-command-notes.md +53 -0
- package/pipeline/multi-agent-refs/garbage-collect/phases.md +60 -0
- package/pipeline/multi-agent-refs/ios-coding-standard/plan.md +71 -0
- package/pipeline/multi-agent-refs/ios-coding-standard/resolve-and-scan.md +135 -0
- package/pipeline/multi-agent-refs/jira/picker-detail.md +71 -0
- package/pipeline/multi-agent-refs/orchestrator/copilot-pipeline.md +88 -0
- package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +96 -1
- package/pipeline/multi-agent-refs/refactor/sweep.md +190 -0
- package/pipeline/multi-agent-refs/resume/details.md +115 -2
- package/pipeline/multi-agent-refs/review/inputs.md +33 -1
- package/pipeline/multi-agent-refs/review/module-guides.md +9 -1
- package/pipeline/multi-agent-refs/review/panel.md +75 -0
- package/pipeline/multi-agent-refs/review/valven.md +5 -1
- package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +4 -0
- package/pipeline/multi-agent-refs/setup/token-save-flow.md +13 -0
- package/pipeline/multi-agent-refs/stack/background.md +72 -0
- package/pipeline/multi-agent-refs/store-ready/gates.md +139 -0
- package/pipeline/multi-agent-refs/store-ready/report.md +40 -2
- package/pipeline/multi-agent-refs/sync/office.md +10 -0
- package/pipeline/multi-agent-refs/sync/overview.md +61 -0
- package/pipeline/multi-agent-refs/sync/repo.md +91 -0
- package/pipeline/multi-agent-refs/update/details.md +83 -0
- package/pipeline/schemas/runs-index.schema.json +2 -1
- package/pipeline/scripts/contract-server.mjs +1 -1
- package/pipeline/scripts/runs-index.mjs +34 -7
- package/pipeline/scripts/status-overview.mjs +401 -0
- package/pipeline/skills/.skill-manifest.json +63 -63
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +7 -70
- package/pipeline/skills/shared/core/apple-archive-compliance/references/examples.md +67 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/references/version-history.md +8 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +10 -72
- package/pipeline/skills/shared/core/google-play-compliance/references/examples.md +69 -0
- package/pipeline/skills/shared/core/google-play-compliance/references/notes.md +7 -0
- package/pipeline/skills/shared/core/google-play-compliance/references/version-history.md +5 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +39 -262
- package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +35 -73
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +37 -337
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +27 -122
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +8 -340
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +37 -180
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +23 -184
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +14 -82
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +25 -277
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +13 -2
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +73 -217
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +11 -162
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-code.md +257 -0
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +7 -58
- package/pipeline/skills/shared/external/android-architecture/references/code-examples.md +68 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +3 -45
- package/pipeline/skills/shared/external/app-intents/references/code-examples.md +54 -0
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +5 -81
- package/pipeline/skills/shared/external/app-store-optimization/references/engagement-and-localization.md +96 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +6 -112
- package/pipeline/skills/shared/external/app-store-review/references/monetization-and-submission.md +138 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +10 -117
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models-code.md +186 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +3 -50
- package/pipeline/skills/shared/external/authentication/references/code-examples.md +59 -0
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +3 -84
- package/pipeline/skills/shared/external/callkit-voip/references/code-examples.md +93 -0
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -263
- package/pipeline/skills/shared/external/ci-cd-pipelines/references/pipeline-examples.md +281 -0
- package/pipeline/skills/shared/external/clean-code/SKILL.md +8 -41
- package/pipeline/skills/shared/external/clean-code/references/code-examples.md +56 -0
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +8 -146
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-code.md +214 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +6 -80
- package/pipeline/skills/shared/external/compose-components/references/code-examples.md +89 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +5 -64
- package/pipeline/skills/shared/external/compose-navigation/references/code-examples.md +70 -0
- package/pipeline/skills/shared/external/core-data/SKILL.md +9 -157
- package/pipeline/skills/shared/external/core-data/references/core-data-code.md +221 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +3 -89
- package/pipeline/skills/shared/external/core-nfc/references/code-examples.md +98 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +17 -133
- package/pipeline/skills/shared/external/coreml/references/coreml-code.md +208 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +8 -131
- package/pipeline/skills/shared/external/css-modern/references/code-examples.md +142 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -103
- package/pipeline/skills/shared/external/database-patterns/references/orm-examples.md +112 -0
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +7 -48
- package/pipeline/skills/shared/external/html-semantic/references/code-examples.md +54 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +6 -19
- package/pipeline/skills/shared/external/humanizer/references/voice.md +24 -0
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +13 -170
- package/pipeline/skills/shared/external/ios-accessibility/references/assistive-tech-review.md +224 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +2 -24
- package/pipeline/skills/shared/external/ios-localization/references/code-examples.md +30 -0
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +3 -58
- package/pipeline/skills/shared/external/ios-networking/references/code-examples.md +67 -0
- package/pipeline/skills/shared/external/ios-security/SKILL.md +4 -64
- package/pipeline/skills/shared/external/ios-security/references/code-examples.md +74 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -90
- package/pipeline/skills/shared/external/live-activities/references/code-examples.md +108 -0
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +9 -23
- package/pipeline/skills/shared/external/localization-reuse-map/references/project-settings.md +22 -0
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +5 -95
- package/pipeline/skills/shared/external/mapkit-location/references/code-examples.md +117 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +7 -106
- package/pipeline/skills/shared/external/nextjs-app-router/references/app-router-examples.md +124 -0
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -31
- package/pipeline/skills/shared/external/permissionkit/references/code-examples.md +37 -0
- package/pipeline/skills/shared/external/play-store-review/SKILL.md +6 -74
- package/pipeline/skills/shared/external/play-store-review/references/signing-and-policies.md +83 -0
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +8 -125
- package/pipeline/skills/shared/external/push-notifications/references/notification-code.md +176 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +7 -158
- package/pipeline/skills/shared/external/python-patterns/references/python-examples.md +176 -0
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +7 -157
- package/pipeline/skills/shared/external/rest-api-design/references/api-examples.md +175 -0
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +11 -230
- package/pipeline/skills/shared/external/swift-architecture/references/pattern-examples.md +295 -0
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +17 -149
- package/pipeline/skills/shared/external/swift-codable/references/codable-recipes.md +207 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +12 -99
- package/pipeline/skills/shared/external/swift-concurrency/references/code-examples.md +100 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-additions.md +18 -0
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +9 -78
- package/pipeline/skills/shared/external/swift-formatstyle/references/formatstyle-examples.md +113 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -56
- package/pipeline/skills/shared/external/swift-language/references/code-examples.md +65 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +1 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +6 -122
- package/pipeline/skills/shared/external/swiftdata/references/code-examples.md +140 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -139
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/interop-code.md +198 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +9 -81
- package/pipeline/skills/shared/external/tailwind-css/references/code-examples.md +91 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +7 -207
- package/pipeline/skills/shared/external/testing-backend/references/testing-examples.md +225 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +8 -89
- package/pipeline/skills/shared/external/typescript-patterns/references/code-examples.md +100 -0
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -20
- package/pipeline/skills/shared/external/vision-framework/references/code-examples.md +26 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -169
- package/pipeline/skills/shared/external/vue-composition/references/vue-examples.md +187 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +7 -174
- package/pipeline/skills/shared/external/web-accessibility/references/a11y-examples.md +192 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -66
- package/pipeline/skills/shared/external/web-performance/references/code-examples.md +77 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +11 -186
- package/pipeline/skills/shared/external/web-testing/references/testing-examples.md +213 -0
- /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/format-and-output.md +0 -0
- /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/publish-and-snapshot.md +0 -0
- /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/sources-and-recipes.md +0 -0
|
@@ -13,10 +13,9 @@ metadata:
|
|
|
13
13
|
Turns on the mode that picks work up without being asked. **No repo is included
|
|
14
14
|
by default and none is ever added implicitly** - you choose, here, every time.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this selection, and it is per machine.
|
|
16
|
+
The gate is this selection, per machine; a label alone is only a filter.
|
|
17
|
+
Reasoning and detail for every step: `$HOME/.claude/multi-agent-refs/autopilot-on/details.md`. Read it
|
|
18
|
+
when Jira is a source or a step's reasoning is needed.
|
|
20
19
|
|
|
21
20
|
## Steps
|
|
22
21
|
|
|
@@ -28,8 +27,7 @@ command -v jq >/dev/null 2>&1 || echo "BLOCKED: jq is required"
|
|
|
28
27
|
node "$HOME/.claude/scripts/doctor.mjs" >/dev/null 2>&1; [ "$?" -ge 2 ] && echo "BLOCKED: doctor reports a blocking problem - fix it first"
|
|
29
28
|
```
|
|
30
29
|
|
|
31
|
-
Any BLOCKED line stops here and is reported.
|
|
32
|
-
that `doctor` calls broken produces a queue of failures, one per item.
|
|
30
|
+
Any BLOCKED line stops here and is reported.
|
|
33
31
|
|
|
34
32
|
### 2. The repo list, both halves of it
|
|
35
33
|
|
|
@@ -42,9 +40,7 @@ Two states come back and **both are shown**:
|
|
|
42
40
|
- `eligible` - push rights and a checkout on this machine
|
|
43
41
|
- `unavailable` - push rights, no local checkout, listed WITH that reason
|
|
44
42
|
|
|
45
|
-
Never hide the second list.
|
|
46
|
-
permissions problem, and the user goes hunting for a token fault that does not
|
|
47
|
-
exist.
|
|
43
|
+
Never hide the second list.
|
|
48
44
|
|
|
49
45
|
### 3. Pick, with the current selection already checked
|
|
50
46
|
|
|
@@ -55,43 +51,29 @@ Read `~/.claude/autopilot/config.json` if it exists, then one `AskUserQuestion`
|
|
|
55
51
|
- `header`: "Repos" (English, UI contract)
|
|
56
52
|
- `options`: one per eligible repo, currently-selected ones marked "(seçili)" / "(selected)"
|
|
57
53
|
|
|
58
|
-
**This is how repos are added and removed
|
|
59
|
-
|
|
60
|
-
command, because two entry points to one list is two lists.
|
|
54
|
+
**This is how repos are added and removed** (check adds, uncheck removes); there
|
|
55
|
+
is no `add-repo` / `remove-repo` command.
|
|
61
56
|
|
|
62
57
|
Unavailable repos are printed above the question as a plain list with their
|
|
63
58
|
reason, not offered as options.
|
|
64
59
|
|
|
65
60
|
### 4. Sources and label, per selected repo
|
|
66
61
|
|
|
67
|
-
One `AskUserQuestion` per newly added repo (
|
|
68
|
-
answers - re-running must not re-ask what was already settled):
|
|
62
|
+
One `AskUserQuestion` per newly added repo (never re-ask a configured one):
|
|
69
63
|
|
|
70
64
|
- Sources: `GitHub issues` / `Jira` / both
|
|
71
65
|
- Label: default **`agent-queue`** on both sides, editable
|
|
72
66
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
| GitHub | `gh issue list --repo <r> --label <label> --assignee @me --state open` | **assigned to you** (`githubAssignee`, `"*"` for any), so a label an issue form applies is not enough |
|
|
78
|
-
| Jira | `assignee = currentUser() AND labels = "<label>" AND resolution = EMPTY AND status not in (Done, Closed, Cancelled)` | **assigned to you**, so a label somebody else adds is not enough |
|
|
79
|
-
|
|
80
|
-
Two Jira caveats worth saying out loud when Jira is selected: labels are one
|
|
81
|
-
global namespace across the whole instance and anyone can write them, so on a
|
|
82
|
-
shared instance prefer a qualified name (`agent-queue-<team>`); and the Labels
|
|
83
|
-
field has to be on the edit screen for the issue types in play. An instance where
|
|
84
|
-
neither holds is a `jiraJql` config change - a saved filter, a component - not a
|
|
85
|
-
redesign.
|
|
67
|
+
Both sources pick up only items **assigned to you** that carry the label; the
|
|
68
|
+
query per source is in `details.md`, "Source queries". When Jira is selected,
|
|
69
|
+
state the two Jira caveats from that section (global label namespace, Labels
|
|
70
|
+
field on the edit screen).
|
|
86
71
|
|
|
87
72
|
### 5. Keep the Mac awake: display on, or allowed to sleep
|
|
88
73
|
|
|
89
|
-
While the mode is on,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
and launchd does not wake it for the next one: the queue stops with nothing to
|
|
93
|
-
say so. `-s` holds system sleep off on AC power; `-i` holds idle sleep off on
|
|
94
|
-
battery too.
|
|
74
|
+
While the mode is on, a second launchd agent, `com.multi-agent.autopilot-awake`,
|
|
75
|
+
runs `/usr/bin/caffeinate -s -i` so the Mac does not sleep between ticks (why:
|
|
76
|
+
`details.md`, "Keeping the Mac awake").
|
|
95
77
|
|
|
96
78
|
One `AskUserQuestion` decides the display:
|
|
97
79
|
|
|
@@ -102,8 +84,7 @@ One `AskUserQuestion` decides the display:
|
|
|
102
84
|
Branch on the option selected: **Display may sleep** writes `awake.display:
|
|
103
85
|
false`, **Keep display on** writes `awake.display: true`, both with
|
|
104
86
|
`awake.enabled: true`. A config that already carries `awake` shows its current
|
|
105
|
-
answer as the first option.
|
|
106
|
-
sleep can, which is the part `-s -i` prevents regardless of this answer.
|
|
87
|
+
answer as the first option.
|
|
107
88
|
|
|
108
89
|
### 6. Write the config
|
|
109
90
|
|
|
@@ -111,10 +92,9 @@ Validate against `schemas/autopilot-config.schema.json`, then write
|
|
|
111
92
|
`~/.claude/autopilot/config.json` (0600, in a 0700 directory) via
|
|
112
93
|
`ma_ap_write` in `lib/autopilot-state.sh`. Defaults that are not asked:
|
|
113
94
|
`slots: 1`, `scanIntervalSeconds: 120`, `maxAttempts: 2`,
|
|
114
|
-
`costCeilingUsd: 25`. `awake` carries the answer from the previous step.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
still accepts them and nothing reads them, so drop them when rewriting the file.
|
|
95
|
+
`costCeilingUsd: 25`. `awake` carries the answer from the previous step. Never
|
|
96
|
+
write `askOnLowMaturity`, `reportStatus`, `sendItemKeys` or `depthRouter`; drop
|
|
97
|
+
them when rewriting an older file.
|
|
118
98
|
|
|
119
99
|
### 7. Build the menu bar indicator (best effort)
|
|
120
100
|
|
|
@@ -126,15 +106,10 @@ if command -v swiftc >/dev/null 2>&1; then
|
|
|
126
106
|
fi
|
|
127
107
|
```
|
|
128
108
|
|
|
129
|
-
Built from source on demand, never shipped as a binary
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
The compiled binary is the one thing an update does not replace, so the runner
|
|
135
|
-
rebuilds it on the first tick after `autopilot-menubar.swift` becomes newer than
|
|
136
|
-
`bin/menubar`. A machine that is already on picks up a new indicator without
|
|
137
|
-
running this command again.
|
|
109
|
+
Built from source on demand, never shipped as a binary. No `swiftc` means no
|
|
110
|
+
indicator and nothing else changes - say so in one line rather than failing.
|
|
111
|
+
`autopilot-status` works either way. The runner rebuilds it when the source is
|
|
112
|
+
newer.
|
|
138
113
|
|
|
139
114
|
### 8. Confirm the schedule, naming the file
|
|
140
115
|
|
|
@@ -148,10 +123,7 @@ node "$HOME/.claude/scripts/autopilot-arming.mjs" probe
|
|
|
148
123
|
`PROBE_READY=false` removes **Start** from the question below: each
|
|
149
124
|
`PROBE_PROBLEM=` line names the logical key (or GitHub) and the fix, and is shown
|
|
150
125
|
as it is. "Configure only" stays available. `PROBE_WARNING=` lines are shown and
|
|
151
|
-
do not block:
|
|
152
|
-
now and locked for the tick after the Mac slept, which every tick checks again
|
|
153
|
-
and refuses with the same message. `features/autopilot-operations.md` has the
|
|
154
|
-
probe's rules.
|
|
126
|
+
do not block (why: `details.md`, "Probe warnings").
|
|
155
127
|
|
|
156
128
|
Render `templates/multi-agent-autopilot.plist.template` and show the resolved
|
|
157
129
|
**path** and interval, then `AskUserQuestion`:
|
|
@@ -159,22 +131,17 @@ Render `templates/multi-agent-autopilot.plist.template` and show the resolved
|
|
|
159
131
|
- `question`: install the schedule at `~/Library/LaunchAgents/com.multi-agent.autopilot.plist`, and the awake agent at `~/Library/LaunchAgents/com.multi-agent.autopilot-awake.plist`, and start picking work up?
|
|
160
132
|
- options: `{ label: "Start" }` / `{ label: "Configure only", description: "Save the repo selection, do not schedule anything yet" }`
|
|
161
133
|
|
|
162
|
-
"Configure only" is a real answer and the safe default to offer first
|
|
163
|
-
can be watched with `autopilot-status` for a while before anything runs.
|
|
134
|
+
"Configure only" is a real answer and the safe default to offer first.
|
|
164
135
|
|
|
165
|
-
On **Start**, load the schedule and the awake agent
|
|
166
|
-
|
|
136
|
+
On **Start**, load the schedule and the awake agent, naming every repo selected
|
|
137
|
+
in step 3:
|
|
167
138
|
|
|
168
139
|
```bash
|
|
169
140
|
node "$HOME/.claude/scripts/autopilot-control.mjs" on --repo <owner/name> [--repo <owner/name>...]
|
|
170
141
|
```
|
|
171
142
|
|
|
172
|
-
It
|
|
173
|
-
(`
|
|
174
|
-
`templates/multi-agent-autopilot.plist.template` with its seven placeholders
|
|
175
|
-
(NODE, TICK, LABEL, ROOT, INTERVAL, HOME, CLAUDE), loads it with `launchctl
|
|
176
|
-
bootstrap` (falling back to `load`) and installs the awake agent with the
|
|
177
|
-
`awake.display` answer saved above. `scheduled: false` with probe problems means
|
|
143
|
+
It re-probes credentials, renders and loads the plist and installs the awake
|
|
144
|
+
agent (detail: `details.md`). `scheduled: false` with probe problems means
|
|
178
145
|
nothing was loaded; say so with the problems. Exit 1 with `launchd refused`
|
|
179
146
|
means launchd refused the job: say so, with its path, and say the Mac may sleep
|
|
180
147
|
between ticks until it is fixed. "Configure only" is `--configure-only`, which
|
|
@@ -182,21 +149,16 @@ saves the selection and installs neither.
|
|
|
182
149
|
|
|
183
150
|
### 9. Report what is now true
|
|
184
151
|
|
|
185
|
-
Say all five
|
|
186
|
-
|
|
187
|
-
run (launchd loads at **login** - not boot, and that is correct, because the login
|
|
188
|
-
keychain is what unlocks the tokens, so a run before login could not reach Jira or
|
|
189
|
-
GitHub anyway); that the machine is kept awake for as long as the mode is on (system sleep on AC, idle sleep on battery too) and whether the display is kept on; the slot count
|
|
152
|
+
Say all five: which repos and which labels; that it survives a restart with no
|
|
153
|
+
command to run (launchd loads at **login**, not boot); that the machine is kept awake while the mode is on and whether the display is kept on; the slot count
|
|
190
154
|
and the ceiling this machine would allow (`ma_ap_slot_ceiling`); and that
|
|
191
155
|
`/multi-agent:autopilot-off` is the only way to stop it.
|
|
192
156
|
|
|
193
157
|
## What this does not do
|
|
194
158
|
|
|
195
|
-
- **No cap on PRs.**
|
|
196
|
-
|
|
197
|
-
hold - never a daily count.
|
|
159
|
+
- **No cap on PRs.** Every labelled item becomes a PR; the bounds are
|
|
160
|
+
`costCeilingUsd` over a rolling 24 hours and machine capacity, never a daily count.
|
|
198
161
|
- **Does not merge.** The runner stops at an open PR; the merge decision stays
|
|
199
162
|
yours.
|
|
200
|
-
- **Does not touch an attended run.**
|
|
201
|
-
|
|
202
|
-
`.git/index.lock`.
|
|
163
|
+
- **Does not touch an attended run.** Per-repo concurrency is 1: the queue skips
|
|
164
|
+
a repo you are working in.
|
|
@@ -7,362 +7,62 @@ metadata:
|
|
|
7
7
|
language: en
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# multi-agent-channels
|
|
10
|
+
# multi-agent-channels - Multi-Channel Reporter
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
>
|
|
14
|
-
> **Replaces the old enrich skill in v5.7+** - all enrich capabilities (diff auto-summarize, manual mode, reviewer-preserving Bitbucket PR PUT) are preserved and extended with two additional channels (Confluence, Wiki).
|
|
12
|
+
Single entry point for posting a task report to Jira, Confluence, Wiki (component-only) and the PR description. Phase 5 delegates here; users also invoke it post-hoc by Jira ID / PR URL / branch. Copilot CLI: `multi-agent-channels <target>`; Claude Code: `/multi-agent:channels <target>`. Prompts are byte-identical between the two (`smoke-cross-cli-behavior.sh`).
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
**Claude Code equivalent:** `/multi-agent:channels <target>` (slash namespace).
|
|
18
|
-
|
|
19
|
-
Both CLIs read the same underlying logic - see `~/.claude/commands/multi-agent/channels/SKILL.md` (Claude) or this file (Copilot). Prompts MUST be byte-identical; `smoke-cross-cli-behavior.sh` asserts parity.
|
|
20
|
-
|
|
21
|
-
## Input
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
multi-agent-channels # cwd + current branch
|
|
25
|
-
multi-agent-channels PROJ-12345 # Jira ID
|
|
26
|
-
multi-agent-channels #42 # GitHub issue/PR number
|
|
27
|
-
multi-agent-channels https://github.com/<org>/<repo>/pull/N
|
|
28
|
-
multi-agent-channels https://<bitbucket-host>/projects/.../pull-requests/N
|
|
29
|
-
multi-agent-channels https://<jira-host>/browse/PROJ-12345
|
|
30
|
-
|
|
31
|
-
multi-agent-channels PROJ-12345 --channels jira,confluence # non-interactive channel
|
|
32
|
-
multi-agent-channels PROJ-12345 --content auto-diff # non-interactive content
|
|
33
|
-
multi-agent-channels PROJ-12345 --message "root: ..." # manual source
|
|
34
|
-
multi-agent-channels PROJ-12345 --message-file notes.md # manual, long
|
|
35
|
-
multi-agent-channels PROJ-12345 --dry-run # preview, no POST
|
|
36
|
-
```
|
|
14
|
+
References under `$HOME/.claude/multi-agent-refs/channels/` are installed with Claude Code. Before step 1, read `reference.md` there: input forms, flags, target resolution, the mode table, error handling, examples and the Phase 5 delegation contract.
|
|
37
15
|
|
|
38
16
|
## Flow
|
|
39
17
|
|
|
40
|
-
1. **Target resolution
|
|
41
|
-
2. **Context source
|
|
42
|
-
3. **Menu (multi-select)
|
|
43
|
-
4. **Mode short-circuit
|
|
44
|
-
5. **Generator
|
|
45
|
-
6. **Body preview + approval gate
|
|
46
|
-
7. **
|
|
47
|
-
8. **Summary
|
|
48
|
-
|
|
49
|
-
## Multi-select menu
|
|
50
|
-
|
|
51
|
-
Rendered in English (`promptLanguage` is locked to `en`).
|
|
52
|
-
|
|
53
|
-
```
|
|
54
|
-
┌─ Kanallar ────────────────────────────────────────────
|
|
55
|
-
│ [x] PR description (replace / append)
|
|
56
|
-
│ [x] Jira comment (jiraId: PROJ-12345)
|
|
57
|
-
│ [ ] Confluence page
|
|
58
|
-
│ [ ] Wiki (taskType=component + wiki.enabled gerekli)
|
|
59
|
-
└───────────────────────────────────────────────────────
|
|
60
|
-
|
|
61
|
-
┌─ İçerik ──────────────────────────────────────────────
|
|
62
|
-
│ [x] Normal analiz (Phase 1+2+4'ten - high-level impact + risks)
|
|
63
|
-
│ [ ] Teknik analiz (Changes · Architecture · Dependencies)
|
|
64
|
-
│ [x] Test senaryoları (Phase 1+2+4'ten)
|
|
65
|
-
│ [ ] Test Koşumu (Xray) (flow runner history.jsonl)
|
|
66
|
-
│ [ ] PR diff'ten auto-gen (PR varsa diff'i summarize eder)
|
|
67
|
-
│ [ ] Manuel not (--message / --message-file)
|
|
68
|
-
└───────────────────────────────────────────────────────
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
**Greyed-out rules:**
|
|
72
|
-
- Wiki unselectable unless `state.taskType === "component"` AND `figmaConfig.wiki.enabled === true`.
|
|
73
|
-
- Normal analiz + Test senaryoları unselectable if no pipeline log found.
|
|
74
|
-
- Teknik analiz unselectable if no Phase 1 planning log AND no PR diff.
|
|
75
|
-
- Auto-diff unselectable if no PR found.
|
|
76
|
-
- Manuel not always available.
|
|
77
|
-
- Test Koşumu (Xray) unselectable when `render-flow-run.mjs --json` reports `available: false`; its `reason` is shown.
|
|
18
|
+
1. **Target resolution**: classify the argument (Jira id / url, GitHub or Bitbucket PR URL, `#N`, empty = cwd + branch), resolve Jira <-> PR, detect the remote type. A Phase 5 call passes a state bundle and skips this step.
|
|
19
|
+
2. **Context source**: pipeline log (`$HOME/.claude/logs/multi-agent/<project>/<task-id>/agent-log.md`), PR diff, or `--message`. Read `channels/menu.md`.
|
|
20
|
+
3. **Menu (multi-select)**: channels + content, pre-ticked from `prefs.global.reportChannels` / `prefs.global.reportContent`; unavailable rows greyed with a reason (`menu.md`).
|
|
21
|
+
4. **Mode short-circuit**: `--channels` + `--content` skip the menu. Autopilot always pauses at the menu.
|
|
22
|
+
5. **Generator**: one section per content source, humanizer per channel. Read `channels/generator.md`.
|
|
23
|
+
6. **Body preview + approval gate**: interactive runs render every final body and ask Approve & post / Edit (loop) / Skip channels / Cancel BEFORE any external write. Skipped only by autopilot and `--dry-run`. What is posted is byte-identical to the approved preview. Read `channels/preview.md`.
|
|
24
|
+
7. **Dispatch**: parallel adapters, never before the gate resolves.
|
|
25
|
+
8. **Summary**: one status line per adapter; persist the selections to prefs.
|
|
78
26
|
|
|
79
27
|
## Channel adapters
|
|
80
28
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
PR_JSON=$(curl -s --config <(printf 'user = "%s:%s"\n' "$BB_USER" "$BB_TOKEN") "$PR_URL")
|
|
85
|
-
REVIEWERS=$(jq '[.reviewers[] | {user: {name: .user.name}, approved, status}]' <<< "$PR_JSON")
|
|
86
|
-
VERSION=$(jq -r '.version' <<< "$PR_JSON")
|
|
87
|
-
TITLE=$(jq -r '.title' <<< "$PR_JSON")
|
|
88
|
-
FROM_REF=$(jq '.fromRef | {id, repository}' <<< "$PR_JSON")
|
|
89
|
-
TO_REF=$(jq '.toRef | {id, repository}' <<< "$PR_JSON")
|
|
90
|
-
DRAFT=$(jq -r '.draft // false' <<< "$PR_JSON")
|
|
91
|
-
|
|
92
|
-
jq -n --rawfile body /tmp/channels-$TASK_ID-pr.md \
|
|
93
|
-
--argjson version "$VERSION" --arg title "$TITLE" \
|
|
94
|
-
--argjson reviewers "$REVIEWERS" \
|
|
95
|
-
--argjson fromRef "$FROM_REF" --argjson toRef "$TO_REF" \
|
|
96
|
-
--argjson draft "$DRAFT" \
|
|
97
|
-
'{version: $version, title: $title, description: $body,
|
|
98
|
-
reviewers: $reviewers, fromRef: $fromRef, toRef: $toRef, draft: $draft}' \
|
|
99
|
-
> /tmp/channels-$TASK_ID-pr-payload.json
|
|
100
|
-
|
|
101
|
-
curl -s -X PUT --config <(printf 'user = "%s:%s"\n' "$BB_USER" "$BB_TOKEN") -H "Content-Type: application/json" \
|
|
102
|
-
--data-binary @/tmp/channels-$TASK_ID-pr-payload.json "$PR_URL"
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
**(strict):** every Bitbucket PR PUT MUST include `reviewers`, `fromRef`, `toRef`, `draft`. Omitting any resets that field server-side (default reviewers wiped, branch link broken).
|
|
106
|
-
|
|
107
|
-
GitHub uses `gh pr edit --body-file` - reviewers independent, no risk.
|
|
108
|
-
|
|
109
|
-
### Jira comment (wiki markup)
|
|
110
|
-
|
|
111
|
-
Four sections in this fixed order, the PR link on line 1. Jira is read by the
|
|
112
|
-
person who filed the ticket and by whoever tests it, so the comment carries the
|
|
113
|
-
development summary, the scenarios to run and the impact - never class names,
|
|
114
|
-
never file paths, never a diff walk. The technical view lives in the PR, one
|
|
115
|
-
click away through that first line.
|
|
116
|
-
|
|
117
|
-
```
|
|
118
|
-
PR: {prUrl}
|
|
119
|
-
|
|
120
|
-
h2. Geliştirme Özeti
|
|
121
|
-
|
|
122
|
-
{2-5 sentences: what changed, where the user meets it, and the size of the
|
|
123
|
-
effect when it is measurable}
|
|
124
|
-
|
|
125
|
-
h2. Test Senaryoları
|
|
126
|
-
|
|
127
|
-
*1. {what this scenario exercises}*
|
|
128
|
-
# {step the tester performs, in the app's own words}
|
|
129
|
-
# {step}
|
|
130
|
-
# *Beklenen:* {what they should see}
|
|
131
|
-
|
|
132
|
-
*2. {regression scenario}*
|
|
133
|
-
# {step}
|
|
134
|
-
# *Beklenen:* {what should still behave as before}
|
|
135
|
-
|
|
136
|
-
h2. Etki Analizi
|
|
137
|
-
|
|
138
|
-
*1 - Problemin Tanımı*
|
|
139
|
-
{what was wrong and since when}
|
|
140
|
-
|
|
141
|
-
*2 - Yapılan Geliştirme*
|
|
142
|
-
{what the change does, and why the behaviour around it is unchanged}
|
|
143
|
-
|
|
144
|
-
*3 - Etkilenen Fonksiyonlar*
|
|
145
|
-
{the screens and flows that must be tested}
|
|
146
|
-
|
|
147
|
-
*4 - Diğer Sistemlere Etkisi*
|
|
148
|
-
{none, or which service, contract or channel}
|
|
149
|
-
|
|
150
|
-
h2. Bağlantılar
|
|
151
|
-
|
|
152
|
-
* Crashlytics / Confluence / Figma: {url}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Reproduction scenarios first, then regressions for whatever the change could
|
|
156
|
-
have disturbed. Full contract: `channels/jira.md`.
|
|
157
|
-
|
|
158
|
-
`{{file.ext → func}}`, `*Root cause:*` and `*Changed files:*` are deliberately
|
|
159
|
-
NOT this template. That shape puts a hash-table mutation walk in front of a
|
|
160
|
-
tester, and `{{file → func}}` is exactly where a Swift selector like
|
|
161
|
-
`hash(into:)` ends up - whose trailing `:)` Jira renders as a smiley.
|
|
162
|
-
|
|
163
|
-
**Post through the publisher, never a hand-rolled `curl`:**
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
bash "$HOME/.claude/lib/jira-publish.sh" --issue "$JIRA_ID" --body-file "$F" --target comment
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
It escapes every body unconditionally before sending and keeps the token off
|
|
170
|
-
argv. Jira turns `:)` `(x)` `(!)` `(/)` into emoticon images, including inside
|
|
171
|
-
`{{monospace}}`; an escape that has to be remembered is one that is eventually
|
|
172
|
-
forgotten, and that is how the selector above shipped.
|
|
173
|
-
|
|
174
|
-
**Issue family** (`state.jiraFamily` set by Phase 0): the same body goes to the development sub-task, the test scenarios to the test sub-task (or, with none, the story) and a reformat of a story outside the story format to the story. `plan` prints one grouped confirmation ("3 yazma: story açıklaması, dev yorumu, test yorumu") and any question; show every write's body from `jira-family/plan.json` as one multi-select, re-run `plan` with `--skip <deselected ids>` (or `--dev-task` / `--test-task` for a question), then `apply`. Autopilot runs both back to back and records its choices in `state.decisions[]`:
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
bash "$HOME/.copilot/lib/jira-family-write.sh" plan --state "$STATE_FILE" --dev-body "$F"
|
|
178
|
-
bash "$HOME/.copilot/lib/jira-family-write.sh" apply --state "$STATE_FILE"
|
|
179
|
-
```
|
|
29
|
+
- **PR description**: Bitbucket uses a reviewer-preserving PUT built with `jq -n --rawfile`; every PUT includes `reviewers`, `fromRef`, `toRef`, `draft` (and `version`), or the server resets them. GitHub uses `gh pr edit --body-file`. Payload snippet and retry: `channels/pr.md`.
|
|
30
|
+
- **Jira comment**: PR link on line 1, then `h2. Geliştirme Özeti`, `h2. Test Senaryoları`, `h2. Etki Analizi`, `h2. Bağlantılar` in that order: never class names, file paths or a diff walk; the technical view stays in the PR. Template: `channels/jira.md`. Post through the publisher, never a hand-rolled `curl`:
|
|
180
31
|
|
|
181
|
-
|
|
32
|
+
```bash
|
|
33
|
+
bash "$HOME/.claude/lib/jira-publish.sh" --issue "$JIRA_ID" --body-file "$F" --target comment
|
|
34
|
+
```
|
|
182
35
|
|
|
183
|
-
|
|
184
|
-
2. Parent page URL prompt; recent URLs from `prefs.projects[<project>].confluenceUrls` (LRU, max 5).
|
|
185
|
-
3. Extract `spaceKey` + `parentId` from URL.
|
|
186
|
-
4. Auto-suggest page title `"{jiraId} - {taskTitle}"`, editable.
|
|
187
|
-
5. POST `/rest/api/content` - humanizer'd storage-format body.
|
|
188
|
-
6. Save URL to prefs for next run.
|
|
36
|
+
Issue family (`state.jiraFamily` set): show every write from `jira-family/plan.json` as one multi-select, re-plan with `--skip` for deselected ids, then apply (`$HOME/.claude/multi-agent-refs/features/jira-family.md`):
|
|
189
37
|
|
|
190
|
-
|
|
38
|
+
```bash
|
|
39
|
+
bash "$HOME/.copilot/lib/jira-family-write.sh" plan --state "$STATE_FILE" --dev-body "$F"
|
|
40
|
+
bash "$HOME/.copilot/lib/jira-family-write.sh" apply --state "$STATE_FILE"
|
|
41
|
+
```
|
|
191
42
|
|
|
192
|
-
|
|
43
|
+
- **Confluence page**: token from `keychainMapping.confluence` via `~/.copilot/lib/credential-store.sh get` (missing: Token Save Flow from the setup skill); parent page from recents or a pasted URL. Contract: `channels/confluence.md`.
|
|
44
|
+
- **Wiki** (component tasks only): Case A scope multi-select when `taskType=component` and `wiki.enabled=true`, otherwise the Case B menu in `refs/wiki-capture.md`. Contract: `channels/wiki.md`.
|
|
193
45
|
|
|
194
|
-
|
|
46
|
+
## Store compliance
|
|
195
47
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
```markdown
|
|
199
|
-
### Analysis ← if "Normal analiz" selected
|
|
200
|
-
{impact summary, risks - high-level}
|
|
201
|
-
|
|
202
|
-
### Technical Details ← if "Teknik analiz" selected
|
|
203
|
-
#### Changes
|
|
204
|
-
{Per changed-file-group, what changed + why - from Phase 2 dev log}
|
|
205
|
-
#### Architecture
|
|
206
|
-
{Structural decisions, pattern changes - from Phase 1 plan}
|
|
207
|
-
#### Dependencies
|
|
208
|
-
{New imports / frameworks / packages - from git diff --stat, or "None"}
|
|
209
|
-
|
|
210
|
-
### Root Cause ← if "Auto-diff" selected
|
|
211
|
-
{single paragraph - from diff}
|
|
212
|
-
|
|
213
|
-
- `path/to/File.ext → funcName`: {why it broke}
|
|
214
|
-
|
|
215
|
-
### Solution ← if "Auto-diff" selected
|
|
216
|
-
- `path/to/File.ext:LINE-LINE` - {change, one line}
|
|
217
|
-
|
|
218
|
-
### Changed Files ← if "Auto-diff" selected
|
|
219
|
-
| File | +/- |
|
|
220
|
-
|------|-----|
|
|
221
|
-
| `path/to/File.ext` | +N / -M |
|
|
222
|
-
|
|
223
|
-
### Test Scenarios ← if "Test senaryoları" OR "Auto-diff"
|
|
224
|
-
**1. {what this scenario exercises}**
|
|
225
|
-
1. {step the tester performs}
|
|
226
|
-
2. **Expected:** {what they should see}
|
|
227
|
-
|
|
228
|
-
**2. {regression scenario}**
|
|
229
|
-
1. {step}
|
|
230
|
-
2. **Expected:** {what should still behave as before}
|
|
231
|
-
|
|
232
|
-
### Test Koşumu ← if "Test Koşumu (Xray)" selected
|
|
233
|
-
{`render-flow-run.mjs` output, unedited: Xray Test Execution, Test Set / Plan, run, results, one row per scenario. Read-only; a key the run history does not record is never written. Full contract: `channels/test-run.md`.}
|
|
234
|
-
|
|
235
|
-
### Notes ← if "Manuel not" selected
|
|
236
|
-
{user message}
|
|
237
|
-
|
|
238
|
-
### Store compliance ← auto-appended if cached compliance report exists
|
|
239
|
-
{summary line - see below}
|
|
240
|
-
|
|
241
|
-
Ref: {jiraId}
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
**Store compliance auto-augmentation:**
|
|
245
|
-
|
|
246
|
-
After content sections are generated, check for cached compliance reports from recent `multi-agent-test "store-ready"` runs:
|
|
247
|
-
|
|
248
|
-
```bash
|
|
249
|
-
find /tmp -maxdepth 1 \( -name 'archiveguard-*.json' -o -name 'play-compliance-*.json' \) \
|
|
250
|
-
-newermt "-6 hours" -print 2>/dev/null | head -1
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
If cached report exists AND any selected channel is PR / Jira / Confluence, append:
|
|
254
|
-
|
|
255
|
-
| Blocker count | Output |
|
|
256
|
-
|---|---|
|
|
257
|
-
| `errors > 0` | `### Store compliance` + `⚠️ {N} blocker(s), {M} warning(s)` + per-blocker `- \`{ruleID}\` - {ref}: {message}` (cap 5 rows, rest `+N more`) |
|
|
258
|
-
| `errors == 0, warnings > 0` | `### Store compliance` + `✅ No blockers. {M} warning(s) - see multi-agent-test "store-ready" for detail.` |
|
|
259
|
-
| `errors == 0, warnings == 0` | Skip - don't pollute PR body |
|
|
260
|
-
|
|
261
|
-
`ruleID` + policy ref stay verbatim (apple-archive-compliance / google-play-compliance catalog identifiers - no translation).
|
|
262
|
-
|
|
263
|
-
If no cached report: skip silently. Augmentation, not a gate.
|
|
264
|
-
|
|
265
|
-
Target length: < 80 lines (fits one screen). Auto-diff capped at 5 lines per section.
|
|
266
|
-
|
|
267
|
-
## Flags
|
|
268
|
-
|
|
269
|
-
| Flag | Effect |
|
|
270
|
-
|------|--------|
|
|
271
|
-
| `--channels pr,jira,confluence,wiki` | Non-interactive channel selection. |
|
|
272
|
-
| `--content normal,test,auto-diff,note,test-run` | Non-interactive content selection. |
|
|
273
|
-
| `--flow-run <runId>[,<runId>...]` | Runs reported by the Test Koşumu (Xray) block; wins over `state.evidence.flowRuns[]` and discovery. |
|
|
274
|
-
| `--message "..."` | Manual mode - user text as source. Forces `content=note`. |
|
|
275
|
-
| `--message-file path` | Manual mode, long message from file. |
|
|
276
|
-
| `--append` | PR description: append instead of replace. |
|
|
277
|
-
| `--dry-run` | Generate + print, no POST. |
|
|
278
|
-
| `--lang=tr\|en\|both` | Output language override (default: `en`; `promptLanguage` is locked to `en`). |
|
|
279
|
-
| `--ready` | If PR draft, promote to READY after dispatch. |
|
|
48
|
+
After the content sections, a cached `archiveguard-*.json` or `play-compliance-*.json` report from the last 6 hours appends a `### Store compliance` block when a PR / Jira / Confluence channel is selected; none found: skip silently. Augmentation, not a gate. Table and wording: `channels/generator.md`.
|
|
280
49
|
|
|
281
50
|
## Required rules
|
|
282
51
|
|
|
283
|
-
- Bitbucket reviewer preservation
|
|
284
|
-
- Default is **replace**
|
|
285
|
-
- Real newlines + no HTML entities in
|
|
286
|
-
- Humanizer per
|
|
287
|
-
-
|
|
288
|
-
-
|
|
289
|
-
-
|
|
290
|
-
- Approval before post - interactive runs never write to an external channel without the step 6 preview + approval. Autopilot and `--dry-run` are the only bypasses.
|
|
291
|
-
|
|
292
|
-
## Error handling
|
|
293
|
-
|
|
294
|
-
| Condition | Behavior |
|
|
295
|
-
|-----------|----------|
|
|
296
|
-
| No target resolvable | Error, exit 1 |
|
|
297
|
-
| PR not found + Jira selected | Proceed Jira-only, log reason |
|
|
298
|
-
| PR merged/closed | Warn, confirm continue |
|
|
299
|
-
| Author bot / dependabot | Skip entire run |
|
|
300
|
-
| Diff > 2 MB | Ask: skip / top-20-files / cancel |
|
|
301
|
-
| No pipeline log + Normal analiz selected | Greyed at menu; error if `--content` forces it |
|
|
302
|
-
| Bitbucket version mismatch | Refetch once, retry; fail on second |
|
|
303
|
-
| Jira token missing/expired | Token Save Flow inline; skip on user-skip |
|
|
304
|
-
| Wiki preconditions not met | Case B menu per `refs/wiki-capture.md` |
|
|
305
|
-
|
|
306
|
-
## Phase 5 delegation contract
|
|
307
|
-
|
|
308
|
-
Phase 5 builds a state bundle and invokes this skill internally. Responsibilities:
|
|
309
|
-
|
|
310
|
-
| Who | What |
|
|
311
|
-
|---|---|
|
|
312
|
-
| Phase 5 | Progress tracker (3 sub-steps), agent-log finalization, knowledge+memory capture, telemetry emission |
|
|
313
|
-
| `multi-agent-channels` | All external delivery: PR description update, Jira comment, Confluence page, Wiki pages |
|
|
314
|
-
|
|
315
|
-
**State bundle** passed from Phase 5:
|
|
316
|
-
```json
|
|
317
|
-
{
|
|
318
|
-
"jiraId": "PROJ-12345",
|
|
319
|
-
"prUrl": "https://.../pull/42",
|
|
320
|
-
"remoteType": "github" | "bitbucket",
|
|
321
|
-
"taskType": "component" | "bugfix" | "feature" | "refactor",
|
|
322
|
-
"figmaConfig": { /* or null */ },
|
|
323
|
-
"agentState": { /* agent-state.json */ },
|
|
324
|
-
"pipelineLogPath": "$HOME/.claude/logs/multi-agent/...",
|
|
325
|
-
"invokedFrom": "phase-5"
|
|
326
|
-
}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
**Autopilot pause contract:** Phase 5 ALWAYS pauses at the channels menu - 30-min timeout → session ends cleanly → resumable via `/multi-agent:resume`. Full contract in `refs/phases/modes.md` + `refs/phases/phase-5-report.md`.
|
|
330
|
-
|
|
331
|
-
**Unattended (`MULTI_AGENT_UNATTENDED=1`): channels posts nothing.** A run nobody watches does not call it: Phase 5 skips Step 1 and records `step1.status = "deferred-to-runner"`, and a direct invocation stops before the menu with that status. After the run exits the autopilot runner verifies `pr-request.json`, pushes, opens the draft PR, and only then, when `~/.claude/autopilot/config.json` sets `reportChannels: true`, runs channels itself with the `channels.mode` / `channels.targets` selection from that file. Without the opt-in nothing beyond the draft PR is published. The guard enforces it: every publisher script and every `gh` / `curl` write is blocked under the variable. Contract: `$HOME/.claude/multi-agent-refs/features/unattended-security.md`.
|
|
332
|
-
|
|
333
|
-
## Cross-CLI parity
|
|
334
|
-
|
|
335
|
-
Prompts MUST be byte-identical between Claude and Copilot. `smoke-cross-cli-behavior.sh` asserts spacing, brackets, numbering, log-line format.
|
|
336
|
-
|
|
337
|
-
Progress emission on Copilot (no native TaskCreate UI):
|
|
338
|
-
|
|
339
|
-
```bash
|
|
340
|
-
bash ~/.copilot/scripts/phase-tracker.sh sub 5 1 "Channels dispatch" in_progress
|
|
341
|
-
# ... adapter runs ...
|
|
342
|
-
bash ~/.copilot/scripts/phase-tracker.sh sub 5 1 "Channels dispatch" completed
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
Same shape as Phase 5 sub-step tracking.
|
|
52
|
+
- Bitbucket reviewer preservation: every PR PUT carries current `reviewers`, `fromRef`, `toRef`, `draft`.
|
|
53
|
+
- Default is **replace** for the PR description; `--append` opt-in.
|
|
54
|
+
- Real newlines + no HTML entities in every body.
|
|
55
|
+
- Humanizer per channel; no `<!-- channels:start -->` markers; every body item cites a file / symbol / line.
|
|
56
|
+
- Adapter failures are non-blocking.
|
|
57
|
+
- Approval before post: autopilot and `--dry-run` are the only bypasses.
|
|
58
|
+
- Target length under 80 lines; auto-diff capped at 5 lines per section.
|
|
346
59
|
|
|
347
|
-
##
|
|
60
|
+
## Autopilot and unattended
|
|
348
61
|
|
|
349
|
-
|
|
350
|
-
multi-agent-channels
|
|
351
|
-
→ resolves from cwd+branch → PROJ-12345 + PR #3433
|
|
352
|
-
→ menu: PR ✓ Jira ✓ / Normal analiz ✓ Test senaryoları ✓
|
|
353
|
-
→ PR description replaced (v3→4, 23 reviewers preserved)
|
|
354
|
-
→ Jira comment posted (id 2484780)
|
|
62
|
+
Phase 5 always pauses at the channels menu: a 30-min timeout ends the session cleanly, resumable via `/multi-agent:resume` (`refs/phases/modes.md`).
|
|
355
63
|
|
|
356
|
-
|
|
357
|
-
→ non-interactive: only Confluence, content from notes.md
|
|
358
|
-
→ asks: parent page URL (or recent [1] / [2])
|
|
359
|
-
→ page created → https://<host>/pages/12345
|
|
64
|
+
**Unattended (`MULTI_AGENT_UNATTENDED=1`): channels posts nothing.** Phase 5 records `step1.status = "deferred-to-runner"`, and a direct invocation stops before the menu with that status. The autopilot runner publishes only through its own opt-in, and the guard blocks every publisher script and `gh` / `curl` write under the variable. Contract: `$HOME/.claude/multi-agent-refs/features/unattended-security.md`.
|
|
360
65
|
|
|
361
|
-
|
|
362
|
-
→ resolves → PROJ-67890
|
|
363
|
-
→ prints Jira + PR body preview to stdout, no POST
|
|
66
|
+
## Progress on Copilot
|
|
364
67
|
|
|
365
|
-
|
|
366
|
-
→ auto-diff from cwd+branch PR + user note combined
|
|
367
|
-
→ posts to default channels (PR + Jira)
|
|
368
|
-
```
|
|
68
|
+
No native TaskCreate UI: `bash ~/.copilot/scripts/phase-tracker.sh sub 5 1 "Channels dispatch" in_progress`, then `completed` after the adapters run.
|