opencode-plugin-flow 4.3.7 → 4.3.9
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 +43 -0
- package/README.md +14 -6
- package/dist/adapters/opencode/tools.d.ts +97 -0
- package/dist/cli.js +332 -15
- package/dist/cli.js.map +2 -2
- package/dist/index.js +614 -60
- package/dist/index.js.map +5 -5
- package/dist/runtime/api.d.ts +77 -0
- package/dist/runtime/schema.d.ts +729 -1
- package/dist/runtime/transitions.d.ts +51 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
One short entry per release, written for users deciding whether to upgrade.
|
|
4
4
|
|
|
5
|
+
## [4.3.9] - 2026-07-08
|
|
6
|
+
|
|
7
|
+
Candidate accounting coherence lore makes the 4.3.8 orchestration accounting
|
|
8
|
+
rules self-consistent, so valid manager records stop bouncing off the schema:
|
|
9
|
+
|
|
10
|
+
- `decision: "parallel"` on implementation-decision records is now rejected
|
|
11
|
+
with one clear message (it stays valid for discovery, audit, and review
|
|
12
|
+
passes); previously every `candidateDecision` pairing produced contradictory
|
|
13
|
+
errors.
|
|
14
|
+
- Candidate-shaped decisions now require candidate execution evidence on every
|
|
15
|
+
pass kind, so a decision label alone can no longer validate while being
|
|
16
|
+
excluded from `candidatePassCount`.
|
|
17
|
+
- Candidate and verifier worker counts are checked per subtype instead of
|
|
18
|
+
summed, so one worker may fill both roles on a single pass row.
|
|
19
|
+
- Orchestration pass dedup now remembers every recorded pass id in
|
|
20
|
+
`recordedPassIds`, so resubmitted completions no longer double-count
|
|
21
|
+
telemetry after the recent-pass window rolls over.
|
|
22
|
+
- The candidate accounting rules are documented once, in
|
|
23
|
+
`skills/flow/references/parallel-orchestration.md`; the run skill, handoff
|
|
24
|
+
format, and wiki point there instead of restating them, and the two doc
|
|
25
|
+
instructions that contradicted the schema (omitted `decision` on decision
|
|
26
|
+
records, `workerCount=0` with positive `candidateWorkerCount`) are fixed.
|
|
27
|
+
|
|
28
|
+
## [4.3.8] - 2026-07-08
|
|
29
|
+
|
|
30
|
+
Parallel orchestration accounting lore makes broad worker use visible without
|
|
31
|
+
turning Flow state into a transcript store:
|
|
32
|
+
|
|
33
|
+
- `flow_feature_complete` can now record compact `orchestrationPasses` for
|
|
34
|
+
serial, skipped, exact-path candidate, isolated-worktree, tournament,
|
|
35
|
+
validation, review, and verifier passes.
|
|
36
|
+
- `flow_status` reports aggregate pass telemetry under
|
|
37
|
+
`session.budget.orchestration`, including worker counts, candidate/verifier
|
|
38
|
+
usage, skipped candidate decisions, and recent pass records.
|
|
39
|
+
- Completion now records orchestration telemetry on success, validation-gate
|
|
40
|
+
failures, failed reviews, and `needs_input`, while deduping retry payloads and
|
|
41
|
+
retaining only the latest compact pass records.
|
|
42
|
+
- Flow planning and running guidance now requires explicit implementation pass
|
|
43
|
+
decisions for broad work and keeps full handoffs, logs, and manager scratch
|
|
44
|
+
artifacts outside `.flow/**`.
|
|
45
|
+
- README runtime wording now matches the 4.3.6 behavior: completed feature
|
|
46
|
+
counts are telemetry only, not a three-feature stop.
|
|
47
|
+
|
|
5
48
|
## [4.3.7] - 2026-07-08
|
|
6
49
|
|
|
7
50
|
Package-smoke patience lore keeps the 4.3.6 release path portable across slower
|
package/README.md
CHANGED
|
@@ -17,8 +17,8 @@ Full project documentation is available in the
|
|
|
17
17
|
## Quick start
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
opencode plugin opencode-plugin-flow@4.3.
|
|
21
|
-
npx -y opencode-plugin-flow@4.3.
|
|
20
|
+
opencode plugin opencode-plugin-flow@4.3.9 --global --force
|
|
21
|
+
npx -y opencode-plugin-flow@4.3.9 sync
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
Restart OpenCode, then give Flow a goal:
|
|
@@ -112,9 +112,10 @@ The runtime owns only safety; judgment lives in the skills:
|
|
|
112
112
|
that is shallower than the approved feature requires.
|
|
113
113
|
- Failed reviews are bounded: a failed review pauses by default, and autonomous
|
|
114
114
|
repair is limited to one repair plus one retry before the feature blocks.
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
- Completed feature counts are telemetry only; Flow does not stop an approved
|
|
116
|
+
plan just because several features have completed. Review retry boundaries
|
|
117
|
+
still return a compact resume packet and require explicit `phaseBoundaryAck`
|
|
118
|
+
before starting the next feature.
|
|
118
119
|
- A session can close as `completed` only after final completion has passed.
|
|
119
120
|
- Crash recovery is built in: stale session locks expire automatically and
|
|
120
121
|
unreadable session files are quarantined with recovery guidance, never
|
|
@@ -133,6 +134,13 @@ complete features, or close sessions. Flow reserves those agent ids and the
|
|
|
133
134
|
public command ids while the plugin is enabled, and warns if they collide with
|
|
134
135
|
your own config.
|
|
135
136
|
|
|
137
|
+
For broad implementation, the manager records whether work stayed serial,
|
|
138
|
+
used exact-path candidate workers, used isolated worktrees, ran a tournament, or
|
|
139
|
+
skipped eligible candidates. Feature completion can carry compact
|
|
140
|
+
`orchestrationPasses` with candidate eligibility, decision, and structured
|
|
141
|
+
factors; `flow_status` reports the aggregate under
|
|
142
|
+
`session.budget.orchestration`.
|
|
143
|
+
|
|
136
144
|
## Install details, doctor, repair, uninstall
|
|
137
145
|
|
|
138
146
|
See [docs/troubleshooting.md](docs/troubleshooting.md) for skill sync
|
|
@@ -143,7 +151,7 @@ To update a pinned Flow version, rerun the install command with the new
|
|
|
143
151
|
version. To inspect skill health:
|
|
144
152
|
|
|
145
153
|
```bash
|
|
146
|
-
npx -y opencode-plugin-flow@4.3.
|
|
154
|
+
npx -y opencode-plugin-flow@4.3.9 doctor
|
|
147
155
|
```
|
|
148
156
|
|
|
149
157
|
## Experimental: compaction context
|
|
@@ -155,6 +155,83 @@ export declare function createTools(ctx: unknown): {
|
|
|
155
155
|
summary: import("zod").ZodString;
|
|
156
156
|
resolutionHint: import("zod").ZodOptional<import("zod").ZodString>;
|
|
157
157
|
}, import("zod/v4/core").$strict>]>>;
|
|
158
|
+
orchestrationPasses: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
159
|
+
id: import("zod").ZodString;
|
|
160
|
+
kind: import("zod").ZodEnum<{
|
|
161
|
+
discovery: "discovery";
|
|
162
|
+
audit: "audit";
|
|
163
|
+
review: "review";
|
|
164
|
+
validation: "validation";
|
|
165
|
+
verification: "verification";
|
|
166
|
+
candidate: "candidate";
|
|
167
|
+
"implementation-decision": "implementation-decision";
|
|
168
|
+
}>;
|
|
169
|
+
decision: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
170
|
+
serial: "serial";
|
|
171
|
+
parallel: "parallel";
|
|
172
|
+
"candidate-exact-path": "candidate-exact-path";
|
|
173
|
+
"candidate-worktree": "candidate-worktree";
|
|
174
|
+
tournament: "tournament";
|
|
175
|
+
skipped: "skipped";
|
|
176
|
+
}>>;
|
|
177
|
+
decisionReason: import("zod").ZodOptional<import("zod").ZodString>;
|
|
178
|
+
candidateEligibility: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
179
|
+
eligible: "eligible";
|
|
180
|
+
not_eligible: "not_eligible";
|
|
181
|
+
unknown: "unknown";
|
|
182
|
+
}>>;
|
|
183
|
+
candidateDecision: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
184
|
+
skipped: "skipped";
|
|
185
|
+
used: "used";
|
|
186
|
+
serial_required: "serial_required";
|
|
187
|
+
}>>;
|
|
188
|
+
decisionFactors: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodEnum<{
|
|
189
|
+
shared_state: "shared_state";
|
|
190
|
+
overlapping_files: "overlapping_files";
|
|
191
|
+
small_slice: "small_slice";
|
|
192
|
+
needs_manager_judgment: "needs_manager_judgment";
|
|
193
|
+
independent_surface: "independent_surface";
|
|
194
|
+
validation_available: "validation_available";
|
|
195
|
+
}>>>;
|
|
196
|
+
modes: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodEnum<{
|
|
197
|
+
audit: "audit";
|
|
198
|
+
review: "review";
|
|
199
|
+
validation: "validation";
|
|
200
|
+
evidence: "evidence";
|
|
201
|
+
verifier: "verifier";
|
|
202
|
+
"candidate-implementation": "candidate-implementation";
|
|
203
|
+
}>>>;
|
|
204
|
+
workerCount: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
205
|
+
candidateWorkerCount: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
206
|
+
verifierWorkerCount: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
207
|
+
sliceIds: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
208
|
+
dependsOn: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
209
|
+
writeScope: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
210
|
+
none: "none";
|
|
211
|
+
"manager-serial": "manager-serial";
|
|
212
|
+
"exact-path": "exact-path";
|
|
213
|
+
"isolated-worktree": "isolated-worktree";
|
|
214
|
+
mixed: "mixed";
|
|
215
|
+
}>>;
|
|
216
|
+
handoffRefs: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
217
|
+
verificationStatus: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
218
|
+
pending: "pending";
|
|
219
|
+
passed: "passed";
|
|
220
|
+
failed: "failed";
|
|
221
|
+
mixed: "mixed";
|
|
222
|
+
"not-needed": "not-needed";
|
|
223
|
+
downgraded: "downgraded";
|
|
224
|
+
}>>;
|
|
225
|
+
outcome: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
226
|
+
accepted: "accepted";
|
|
227
|
+
modified: "modified";
|
|
228
|
+
rejected: "rejected";
|
|
229
|
+
partial: "partial";
|
|
230
|
+
"not-covered": "not-covered";
|
|
231
|
+
superseded: "superseded";
|
|
232
|
+
}>>;
|
|
233
|
+
synthesisRef: import("zod").ZodOptional<import("zod").ZodString>;
|
|
234
|
+
}, import("zod/v4/core").$strict>>>;
|
|
158
235
|
};
|
|
159
236
|
execute(args: {
|
|
160
237
|
status: "ok" | "needs_input";
|
|
@@ -196,6 +273,26 @@ export declare function createTools(ctx: unknown): {
|
|
|
196
273
|
summary: string;
|
|
197
274
|
resolutionHint?: string | undefined;
|
|
198
275
|
} | undefined;
|
|
276
|
+
orchestrationPasses?: {
|
|
277
|
+
id: string;
|
|
278
|
+
kind: "discovery" | "audit" | "review" | "validation" | "verification" | "candidate" | "implementation-decision";
|
|
279
|
+
candidateEligibility: "eligible" | "not_eligible" | "unknown";
|
|
280
|
+
decisionFactors: ("shared_state" | "overlapping_files" | "small_slice" | "needs_manager_judgment" | "independent_surface" | "validation_available")[];
|
|
281
|
+
modes: ("audit" | "review" | "validation" | "evidence" | "verifier" | "candidate-implementation")[];
|
|
282
|
+
workerCount: number;
|
|
283
|
+
candidateWorkerCount: number;
|
|
284
|
+
verifierWorkerCount: number;
|
|
285
|
+
sliceIds: string[];
|
|
286
|
+
dependsOn: string[];
|
|
287
|
+
writeScope: "none" | "manager-serial" | "exact-path" | "isolated-worktree" | "mixed";
|
|
288
|
+
handoffRefs: string[];
|
|
289
|
+
verificationStatus: "pending" | "passed" | "failed" | "mixed" | "not-needed" | "downgraded";
|
|
290
|
+
outcome: "accepted" | "modified" | "rejected" | "partial" | "not-covered" | "superseded";
|
|
291
|
+
decision?: "serial" | "parallel" | "candidate-exact-path" | "candidate-worktree" | "tournament" | "skipped" | undefined;
|
|
292
|
+
decisionReason?: string | undefined;
|
|
293
|
+
candidateDecision?: "skipped" | "used" | "serial_required" | undefined;
|
|
294
|
+
synthesisRef?: string | undefined;
|
|
295
|
+
}[] | undefined;
|
|
199
296
|
}, context: ToolContext): Promise<import("@opencode-ai/plugin").ToolResult>;
|
|
200
297
|
};
|
|
201
298
|
flow_feature_reset: {
|