opencode-plugin-flow 6.7.0 → 6.9.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 +126 -0
- package/README.md +72 -22
- package/dist/index.js +929 -671
- package/dist/index.js.map +17 -16
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,132 @@ One short entry per release, written for users deciding whether to upgrade.
|
|
|
6
6
|
|
|
7
7
|
No changes yet.
|
|
8
8
|
|
|
9
|
+
## [6.9.0] - 2026-07-26
|
|
10
|
+
|
|
11
|
+
Rules the prompts used to restate are now enforced by the runtime, and Flow no
|
|
12
|
+
longer assumes an OpenCode-shaped host:
|
|
13
|
+
|
|
14
|
+
- Review findings carry two typed fields instead of prose conventions. An
|
|
15
|
+
optional `scopeBlocker` boolean surfaces as `blockedFeature.scopeBlocker` and
|
|
16
|
+
is accounted for by `nextAction`, so a scope blocker checkpoints for user
|
|
17
|
+
direction at the first failed review rather than depending on the manager
|
|
18
|
+
noticing a `[scope-blocker]` marker; the marker is gone everywhere. A
|
|
19
|
+
`findingId` is set to a prior id for a recurrence and omitted for a new issue,
|
|
20
|
+
which the runtime numbers as `<feature-id>.R<revision>-<NN>` and supplies back
|
|
21
|
+
as `priorFindings` with `nextFindingIdPrefix`. A failed result that drops a
|
|
22
|
+
live prior id is rejected instead of silently losing that history.
|
|
23
|
+
- The reviewer is asked to report every problem it finds and to use severity
|
|
24
|
+
purely for routing, replacing guidance that reserved `blocking` for issues
|
|
25
|
+
invalidating the outcome. Published guidance for current models indicates that
|
|
26
|
+
conservative review instructions suppress findings.
|
|
27
|
+
- The delivery projection carries a runtime-rendered `report`, so every surface
|
|
28
|
+
relays one formatted handoff verbatim instead of restating the same field list
|
|
29
|
+
four times.
|
|
30
|
+
- Validation on a host that reports no structured Bash exit code, or no
|
|
31
|
+
output-truncation flag, records a durable observation marked
|
|
32
|
+
`exit-code-unavailable` or `output-completeness-unknown` rather than failing the
|
|
33
|
+
capture. Such an observation never satisfies a gate, so the limitation is
|
|
34
|
+
visible instead of blocking. Worker-wave dispatch no longer instructs a single
|
|
35
|
+
assistant tool-use turn; a host that runs tasks serially is expected and
|
|
36
|
+
reported as serial.
|
|
37
|
+
- A tool call rejected by the runtime guard returns the same
|
|
38
|
+
`workflowData.failure.recovery` envelope every other Flow failure uses, which is
|
|
39
|
+
what the prompts already told the model to read. `flow_guidance` answers in
|
|
40
|
+
markdown, so its rejection is markdown rather than a JSON blob.
|
|
41
|
+
- `/flow-auto` on a host that reports no assistant message parentage now says so.
|
|
42
|
+
Continuation anchors on the assistant message owning the lease, so such a host
|
|
43
|
+
can never continue and correctly stops after each feature; previously that was
|
|
44
|
+
indistinguishable from a Flow defect. The warning now names the host limitation
|
|
45
|
+
and points at `/flow-run`.
|
|
46
|
+
|
|
47
|
+
Prompt text is now measured rather than argued about. Total shipped prompt bytes
|
|
48
|
+
drop from 42,466 to 38,495 and cross-surface near-duplicate rule statements from
|
|
49
|
+
18 pairs to 12, with every removed instruction either replaced by an enforced
|
|
50
|
+
guard or a runtime-rendered value, or verified against the model. `flow-run`, the
|
|
51
|
+
dominant surface, loses 2,422 bytes: the elaborate revision-token protocol
|
|
52
|
+
collapses to the one rule that routes (`passed: false` never arms review), the
|
|
53
|
+
manager no longer reconstructs which prior findings are still live or tracks
|
|
54
|
+
their disposition in prose now that the runtime supplies `priorFindings` with
|
|
55
|
+
each finding's current severity and wording, and the prose describing internals
|
|
56
|
+
Flow already enforces — the strict review-start schema, the derived review kind,
|
|
57
|
+
the auto-continuation gate, and several statements that Flow persists no ledger —
|
|
58
|
+
is gone. Absolute-rule markers in `flow-run` fall from 62 to 51, which both
|
|
59
|
+
vendors' guidance treats as a compliance gain rather than a loss. `tests/prompt-quality.test.ts` and
|
|
60
|
+
`tests/documentation-contract.test.ts` no longer pin ordered prose phrases; they
|
|
61
|
+
assert structure, source-derived inventories, and budgets that ratchet down, so
|
|
62
|
+
tightening prompts is cheap and growth is what fails. Model behaviour is measured
|
|
63
|
+
by the new opt-in `evals/` harness, which drives the real slash commands against
|
|
64
|
+
a real model in a throwaway OpenCode host and asserts durable session state.
|
|
65
|
+
|
|
66
|
+
The harness arrived part-way through this release, so the cuts are not all
|
|
67
|
+
evidenced equally. The last one — the manager-side prior-finding reconstruction,
|
|
68
|
+
replaced by runtime `priorFindings` — was validated directly: `happy-path`,
|
|
69
|
+
`plan-only-stops` and `goal-change-refused` each passed three of three attempts
|
|
70
|
+
at the reduced footprint. Earlier cuts predate the harness and rest on the guards
|
|
71
|
+
and rendered values that replaced them, checked against a repeat-3 baseline
|
|
72
|
+
recorded once the harness existed. A fourth scenario, `failing-gate-blocks`,
|
|
73
|
+
passes at roughly even odds; it was measured to be equally unreliable at 6.8.0,
|
|
74
|
+
so it is reported but carries no signal about these prompts either way. Its cause
|
|
75
|
+
is a pre-existing gap rather than a prompt defect: `exitCode` and `scope` on a
|
|
76
|
+
validation observation are supplied by the model and never executed by Flow, so a
|
|
77
|
+
model that misreports a red gate as green is accepted by every predicate. Treat a
|
|
78
|
+
passing gate as a claim the model made, not one Flow verified.
|
|
79
|
+
|
|
80
|
+
The Session v5 schema adds two optional finding fields and widens `exitCode` to
|
|
81
|
+
allow `null`. Earlier v6 builds read the added fields as absent, but reject a
|
|
82
|
+
document containing a `null` exit code, so finish or close active work before
|
|
83
|
+
downgrading.
|
|
84
|
+
|
|
85
|
+
Install or update:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
opencode plugin opencode-plugin-flow@6.9.0 --global --force
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## [6.8.0] - 2026-07-24
|
|
92
|
+
|
|
93
|
+
Checkpoint-safe continuation and leaner review convergence:
|
|
94
|
+
|
|
95
|
+
- `/flow-auto` now remains waiting through same-revision checkpoint replies and
|
|
96
|
+
enqueues exactly one continuation only after the same host observes an
|
|
97
|
+
accepted Flow mutation whose tool assistant resolves through cached
|
|
98
|
+
`message.updated` parentage to the authoritative user reply; missing or
|
|
99
|
+
mismatched provenance fails closed. Mechanical progress must match that
|
|
100
|
+
revision exactly, except for the single state-constrained reviewer-result
|
|
101
|
+
revision after an authenticated `flow_review_start`.
|
|
102
|
+
- Compaction carries reply authority only across an authenticated trigger
|
|
103
|
+
assistant, automatic compaction marker, summary assistant, and successor user
|
|
104
|
+
lineage while authority remains unchanged; incomplete or unrelated lineage
|
|
105
|
+
fails closed.
|
|
106
|
+
- From idle, auto-routing requires a same-host accepted non-replayed
|
|
107
|
+
`flow_plan_save` for the newly created Flow session; a baseline that already
|
|
108
|
+
has a pending reviewer retains a narrow temporal exception.
|
|
109
|
+
- `/flow-auto stop` and `/flow-auto cancel` now revoke the process-local
|
|
110
|
+
continuation lease without closing, deferring, abandoning, or otherwise
|
|
111
|
+
mutating the durable Flow session.
|
|
112
|
+
- Manager command rewrites preserve every nonblank raw request, including
|
|
113
|
+
exterior whitespace, exactly once while keeping synthetic guidance separate.
|
|
114
|
+
- Initial auto/run prompts, dynamically loaded run guidance, compaction context,
|
|
115
|
+
and synthetic continuations share one concise manager kernel for reserved
|
|
116
|
+
roles, the exact `failedReviewCount === 1` retry gate, and current-source plus
|
|
117
|
+
relevant baseline evidence.
|
|
118
|
+
- Guidance represents race-heavy risk checks as one transition matrix and
|
|
119
|
+
preserves stable finding IDs, relevant baseline facts, and prior dispositions.
|
|
120
|
+
Ordinary reviewer summaries keep IDs mapped to the active feature or supplied
|
|
121
|
+
explicitly in its packet; final review covers every approved requirement or
|
|
122
|
+
feature ID. Both keep each still-live prior finding through failed reviews; a
|
|
123
|
+
proven repair remains pending until a later passing review, so closure and
|
|
124
|
+
archive replay need no prerequisite detail read or unbounded historical
|
|
125
|
+
ledger. The Session v5 schema is unchanged.
|
|
126
|
+
Provider/model execution remains unverified unless the opt-in manual canary
|
|
127
|
+
is run.
|
|
128
|
+
|
|
129
|
+
Install or update:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
opencode plugin opencode-plugin-flow@6.8.0 --global --force
|
|
133
|
+
```
|
|
134
|
+
|
|
9
135
|
## [6.7.0] - 2026-07-23
|
|
10
136
|
|
|
11
137
|
Bounded auto-continuation lore keeps user-authorized goals moving while making
|
package/README.md
CHANGED
|
@@ -21,11 +21,11 @@ into the active goal.
|
|
|
21
21
|
Install the exact npm release through OpenCode:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
opencode plugin opencode-plugin-flow@6.
|
|
24
|
+
opencode plugin opencode-plugin-flow@6.9.0 --global --force
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
Omit `--global` for project scope. Exact version pins do not update
|
|
28
|
-
automatically. To update, replace `6.
|
|
28
|
+
automatically. To update, replace `6.9.0` with the new release and rerun the
|
|
29
29
|
command.
|
|
30
30
|
|
|
31
31
|
Before upgrading from Flow v5 or earlier, finish or explicitly close any active
|
|
@@ -43,7 +43,7 @@ The equivalent manual project configuration is:
|
|
|
43
43
|
```json
|
|
44
44
|
{
|
|
45
45
|
"$schema": "https://opencode.ai/config.json",
|
|
46
|
-
"plugin": ["opencode-plugin-flow@6.
|
|
46
|
+
"plugin": ["opencode-plugin-flow@6.9.0"]
|
|
47
47
|
}
|
|
48
48
|
```
|
|
49
49
|
|
|
@@ -67,7 +67,14 @@ runnable feature at a time, validates the actual workspace, obtains an
|
|
|
67
67
|
independent review, and repeats until it can close the session. While
|
|
68
68
|
implementation remains authorized, `ready` and `completed` are internal loop
|
|
69
69
|
states: `/flow-auto` does not hand back “ready for the next feature” or wait for
|
|
70
|
-
another command between passing features.
|
|
70
|
+
another command between passing features. From idle, auto-routing first requires
|
|
71
|
+
a same-host accepted non-replayed `flow_plan_save` for the created Flow session;
|
|
72
|
+
an active baseline that already has a pending reviewer retains a narrow temporal
|
|
73
|
+
exception for that completion.
|
|
74
|
+
|
|
75
|
+
Send `/flow-auto stop` or `/flow-auto cancel` in the same OpenCode session to
|
|
76
|
+
revoke only the process-local continuation lease. This does not close, defer,
|
|
77
|
+
abandon, or otherwise mutate the durable Flow session.
|
|
71
78
|
|
|
72
79
|
Before every manager-owned Flow mutation, including direct `/flow-plan` and
|
|
73
80
|
`/flow-run` use, the manager compares the current request with the active goal.
|
|
@@ -79,8 +86,9 @@ continue, defer, or abandon the active work. If that work is completed but not
|
|
|
79
86
|
closed, Flow closes it as completed before starting the new request.
|
|
80
87
|
|
|
81
88
|
Existing implementation authority carries across approval and feature outcomes.
|
|
82
|
-
|
|
83
|
-
|
|
89
|
+
Flow automatically resets and atomically starts one fresh full retry only when
|
|
90
|
+
the projected `nextAction` is `flow_feature_reset`, which the runtime derives
|
|
91
|
+
from `failedReviewCount` and `blockedFeature.scopeBlocker`. A
|
|
84
92
|
feature whose latest relevant reviewed outcome remains failed is never selected
|
|
85
93
|
implicitly. `/flow-auto` may continue untouched, dependency-independent
|
|
86
94
|
features, but when only retry-required candidates remain it projects
|
|
@@ -92,22 +100,43 @@ the superseded failed feature remains, status is ready with
|
|
|
92
100
|
`await-user-direction`; explicit retry then uses `flow_run_start` with that
|
|
93
101
|
feature's exact `featureId`, because there is no blocked run left to reset. The
|
|
94
102
|
active session remains authoritative while it waits. Ordinary blocking findings
|
|
95
|
-
are in-scope by default; a reviewer
|
|
96
|
-
repair would materially exceed the approved plan.
|
|
103
|
+
are in-scope by default; a reviewer sets `scopeBlocker: true` on a finding only
|
|
104
|
+
when the required repair would materially exceed the approved plan. Each finding
|
|
105
|
+
also carries a runtime-issued `findingId`, and a failed result must carry every
|
|
106
|
+
still-live prior ID forward, which `flow_feature_complete` enforces. After a user checkpoint, the
|
|
107
|
+
process-local continuation resumes only after that same OpenCode session observes
|
|
108
|
+
an accepted non-replayed Flow mutation whose tool assistant ID resolves, through
|
|
109
|
+
the cached `message.updated` `parentID`, to the authoritative user reply. A
|
|
110
|
+
missing or mismatched origin fails closed. Another host cannot establish that
|
|
111
|
+
authority. The mechanical projection must match the credited revision exactly;
|
|
112
|
+
the sole successor allowance is one revision after an authenticated
|
|
113
|
+
`flow_review_start`, where the state machine admits the reserved reviewer result.
|
|
114
|
+
Compaction transfers the reply authority only across an authenticated trigger
|
|
115
|
+
assistant, automatic compaction marker, summary assistant, and successor user
|
|
116
|
+
lineage while the authority is unchanged; an incomplete or unrelated lineage
|
|
117
|
+
fails closed.
|
|
97
118
|
|
|
98
119
|
Before coding each feature, Flow inventories required evidence and its
|
|
99
120
|
environment, then applies an adversarial risk checklist covering failure
|
|
100
121
|
ordering, repeated and interrupted operations, adjacent state transitions,
|
|
101
122
|
overlapping invariants, and relevant file-mode or platform risks. While required
|
|
102
123
|
behavior or environment evidence is knowingly skipped, manager policy forbids
|
|
103
|
-
requesting review; the reviewer treats
|
|
104
|
-
|
|
105
|
-
remains the default when external evidence or authority
|
|
106
|
-
checkpoint, atomic reset-and-start can discard that
|
|
124
|
+
requesting review; the reviewer treats proof required to approve the outcome as
|
|
125
|
+
blocking if it is missing from the packet. Flow persists no skipped-evidence
|
|
126
|
+
ledger. Asking the user remains the default when external evidence or authority
|
|
127
|
+
is missing. At a blocked checkpoint, atomic reset-and-start can discard that
|
|
128
|
+
attempt and continue the
|
|
107
129
|
exact authorized retry or dependency-independent feature. At a ready retry
|
|
108
130
|
checkpoint, explicit feature start resumes the already superseded failure.
|
|
109
131
|
Neither route adds a hold or second blocker ledger.
|
|
110
132
|
|
|
133
|
+
Flow guidance represents the checklist for concurrency and state-machine work
|
|
134
|
+
as one compact transition matrix shared by workers and the reviewer. Review
|
|
135
|
+
packets reuse a refreshed run baseline, carry only feature-relevant file facts
|
|
136
|
+
until final review, and preserve source IDs, current-source evidence, risk
|
|
137
|
+
coverage, and prior finding dispositions in existing text fields—no new audit
|
|
138
|
+
schema.
|
|
139
|
+
|
|
111
140
|
For plan-only or advanced use, plan first:
|
|
112
141
|
|
|
113
142
|
```text
|
|
@@ -147,8 +176,10 @@ inactive, errored, and unprojected waits are excluded.
|
|
|
147
176
|
not reopened or vetoed later at close.
|
|
148
177
|
6. The reviewer inspects adjacent and repeated state transitions, overlapping
|
|
149
178
|
feature invariants, the changed artifacts, and the packet's base-diff and
|
|
150
|
-
file-mode inventory.
|
|
151
|
-
|
|
179
|
+
file-mode inventory. Stable finding IDs survive retries; reviewer guidance
|
|
180
|
+
requires checking prior dispositions and completing the supplied risk
|
|
181
|
+
checklist, represented as a bounded matrix when applicable. Missing proof is
|
|
182
|
+
a precise blocker only when it is required to approve the outcome.
|
|
152
183
|
7. A passing feature advances the plan. A failed feature is not selected again
|
|
153
184
|
by default. From blocked status, reset atomically starts the exact authorized
|
|
154
185
|
retry or independent feature through optional `nextFeatureId`. From ready
|
|
@@ -156,7 +187,18 @@ inactive, errored, and unprojected waits are excluded.
|
|
|
156
187
|
`flow_run_start(featureId)` begins its retry. The final passing feature allows
|
|
157
188
|
explicit closure. Every accepted close returns a concise delivery summary
|
|
158
189
|
with each feature's attempt count, latest outcome, and terminal findings,
|
|
159
|
-
derived from Flow's recorded state.
|
|
190
|
+
derived from Flow's recorded state. Ordinary reviewer summaries carry IDs
|
|
191
|
+
mapped to the active feature or explicitly supplied in its packet; final
|
|
192
|
+
review carries every approved requirement or feature ID. Both carry each
|
|
193
|
+
still-live prior finding with its severity and disposition into the latest
|
|
194
|
+
`outcomeSummary`. Terminal
|
|
195
|
+
`fixed` requires a later passing review and current evidence. If a failed
|
|
196
|
+
retry proves one repair but finds another blocker, it carries that ID and a
|
|
197
|
+
concise evidence reference forward as terminal fixed pending pass; it cannot
|
|
198
|
+
drop the ID or call it fixed. Unproven fixes stay unverified, `recurring`
|
|
199
|
+
confirms recurrence, and `residual` requires a confirmed nonblocker. Only a
|
|
200
|
+
passing review may remove fixed history from the live carry-forward set.
|
|
201
|
+
Terminal findings retain unresolved blockers and the handoff stays bounded.
|
|
160
202
|
|
|
161
203
|
State lives in `.flow/session.json`, so `/flow-status` can recover the next
|
|
162
204
|
action after a restart or context change.
|
|
@@ -194,8 +236,8 @@ plan-only, advanced, internal, or recovery controls.
|
|
|
194
236
|
|
|
195
237
|
Start with `/flow-status`; its next action is durable default workflow
|
|
196
238
|
direction, not permission to exceed the user's authority. For a first failed
|
|
197
|
-
review, read detail once before reset
|
|
198
|
-
|
|
239
|
+
review, read detail once before reset to see the findings the retry must fix.
|
|
240
|
+
Pass the exact retry or dependency-independent choice as
|
|
199
241
|
`nextFeatureId` so reset and run start are atomic; do not reset and then rely on
|
|
200
242
|
default selection. If status is ready with `await-user-direction`, read detail
|
|
201
243
|
once and pass the explicitly authorized retry's exact `featureId` to
|
|
@@ -206,11 +248,19 @@ mutation is attempted. Do not hand-edit
|
|
|
206
248
|
fingerprinting, or archive publication fails, follow the focused steps in
|
|
207
249
|
[troubleshooting](docs/troubleshooting.md).
|
|
208
250
|
|
|
209
|
-
For an interrupted accepted close,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
251
|
+
For an interrupted accepted close, compact `/flow-status` supplies
|
|
252
|
+
`archiveRetry.request`. Replay that request exactly once before any additional
|
|
253
|
+
or detail recovery read. Flow confirms the existing bytes without rewriting
|
|
254
|
+
Session v5, re-confirms archive cleanup, and returns the existing concise
|
|
255
|
+
`workflowData.delivery`. Relay its `report` lines verbatim, and reconstruct only
|
|
256
|
+
the plan-bounded, terminal disposition
|
|
257
|
+
map from its latest `outcomeSummary` and terminal findings. If delivery is absent,
|
|
258
|
+
report the exact recovery and claim no map. On a close revision conflict,
|
|
259
|
+
refresh compact status and retry only after confirming the same session and goal
|
|
260
|
+
and that status still permits the selected
|
|
261
|
+
closure kind; never close a replacement. A real archive collision removes the
|
|
262
|
+
automatic retry instruction and requires manual inspection; preserve both
|
|
263
|
+
documents and do not overwrite, delete, or loop the request.
|
|
214
264
|
|
|
215
265
|
## Development
|
|
216
266
|
|