opencode-plugin-flow 4.3.9 → 4.4.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 +27 -0
- package/README.md +24 -17
- package/dist/adapters/opencode/tools.d.ts +10 -10
- package/dist/cli.js +599 -652
- package/dist/cli.js.map +3 -3
- package/dist/config-shared.d.ts +2 -2
- package/dist/index.js +1327 -757
- package/dist/index.js.map +9 -7
- package/dist/prompt-baseline-fixtures.d.ts +19 -0
- package/dist/prompt-model-evaluation.d.ts +99 -0
- package/dist/prompt-quality.d.ts +73 -0
- package/dist/prompt-surfaces.d.ts +28 -0
- package/dist/runtime/api.d.ts +7 -7
- package/dist/runtime/schema.d.ts +63 -63
- package/dist/runtime/transitions.d.ts +6 -6
- package/dist/runtime/workspace.d.ts +1 -0
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
One short entry per release, written for users deciding whether to upgrade.
|
|
4
4
|
|
|
5
|
+
## [4.4.0] - 2026-07-17
|
|
6
|
+
|
|
7
|
+
Prompt economy lore makes Flow's instructions smaller, more role-specific, and
|
|
8
|
+
easier to verify without weakening runtime, validation, or review gates:
|
|
9
|
+
|
|
10
|
+
- Public commands and hidden workers now compile role- and phase-specific
|
|
11
|
+
prompts from canonical skill fragments instead of concatenating whole skills
|
|
12
|
+
or maintaining parallel prompt copies in TypeScript.
|
|
13
|
+
- Parallel guidance uses progressive disclosure: a short routing index loads
|
|
14
|
+
decision rules first, manifest and execution rules only after fan-out is
|
|
15
|
+
selected, and synthesis rules only when handoffs return. Serial-decision
|
|
16
|
+
context is about 76% smaller while the complete advanced contract remains
|
|
17
|
+
available.
|
|
18
|
+
- Each hidden worker receives one role contract and one matching handoff schema;
|
|
19
|
+
empty, malformed, partial, and blocked handoffs remain explicit coverage gaps,
|
|
20
|
+
and candidate implementation stays subordinate to the root `flow-run`
|
|
21
|
+
manager.
|
|
22
|
+
- Runtime-unavailable guards, planned review depth, cleanup/UI/audit evidence,
|
|
23
|
+
bounded review repair, and root-manager state ownership are covered across
|
|
24
|
+
the compiled surfaces.
|
|
25
|
+
- Skills no longer estimate context pressure or request host compaction, and
|
|
26
|
+
the experimental compaction hook and environment switch have been removed;
|
|
27
|
+
durable runtime phase boundaries remain the continuation mechanism.
|
|
28
|
+
- New deterministic prompt-quality tooling covers 18 scenarios and 52 static
|
|
29
|
+
criteria, with an opt-in structured model evaluator for GPT-5.4, GPT-5.6 Sol,
|
|
30
|
+
and other configured OpenCode models.
|
|
31
|
+
|
|
5
32
|
## [4.3.9] - 2026-07-08
|
|
6
33
|
|
|
7
34
|
Candidate accounting coherence lore makes the 4.3.8 orchestration accounting
|
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.
|
|
21
|
-
npx -y opencode-plugin-flow@4.
|
|
20
|
+
opencode plugin opencode-plugin-flow@4.4.0 --global --force
|
|
21
|
+
npx -y opencode-plugin-flow@4.4.0 sync
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
Restart OpenCode, then give Flow a goal:
|
|
@@ -71,9 +71,11 @@ completed.
|
|
|
71
71
|
| `/flow-review` | Run a read-only review. |
|
|
72
72
|
| `/flow-status` | Show the active session and next action. |
|
|
73
73
|
|
|
74
|
-
Commands are
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
Commands are compiled entrypoints: manager commands carry only their applicable
|
|
75
|
+
core instructions, while `/flow-review` runs against the reserved reviewer's
|
|
76
|
+
role-specific agent contract. They keep working even when OpenCode's native
|
|
77
|
+
skill discovery lags behind a fresh install (see
|
|
78
|
+
[docs/troubleshooting.md](docs/troubleshooting.md)).
|
|
77
79
|
|
|
78
80
|
`flow-test`, `flow-deslop`, `flow-ui-quality`, and `flow-commit` are managed
|
|
79
81
|
helper skills, not public commands.
|
|
@@ -114,8 +116,10 @@ The runtime owns only safety; judgment lives in the skills:
|
|
|
114
116
|
repair is limited to one repair plus one retry before the feature blocks.
|
|
115
117
|
- Completed feature counts are telemetry only; Flow does not stop an approved
|
|
116
118
|
plan just because several features have completed. Review retry boundaries
|
|
117
|
-
still return a
|
|
119
|
+
still return a bounded resume packet and require explicit `phaseBoundaryAck`
|
|
118
120
|
before starting the next feature.
|
|
121
|
+
- Skills do not estimate context pressure or request host compaction. Only a
|
|
122
|
+
runtime-issued phase boundary stops the current loop for a fresh invocation.
|
|
119
123
|
- A session can close as `completed` only after final completion has passed.
|
|
120
124
|
- Crash recovery is built in: stale session locks expire automatically and
|
|
121
125
|
unreadable session files are quarantined with recovery guidance, never
|
|
@@ -126,7 +130,7 @@ The runtime owns only safety; judgment lives in the skills:
|
|
|
126
130
|
|
|
127
131
|
## Hidden workers
|
|
128
132
|
|
|
129
|
-
For broad work, Flow's manager can fan out
|
|
133
|
+
For broad work, Flow's manager can fan out isolated hidden workers
|
|
130
134
|
(`flow-evidence-worker`, `flow-validation-worker`, `flow-audit-worker`,
|
|
131
135
|
`flow-candidate-worker`, `flow-verifier-worker`, and the `flow-reviewer`) with
|
|
132
136
|
locked-down permissions. Workers gather evidence; they never approve plans,
|
|
@@ -134,9 +138,20 @@ complete features, or close sessions. Flow reserves those agent ids and the
|
|
|
134
138
|
public command ids while the plugin is enabled, and warns if they collide with
|
|
135
139
|
your own config.
|
|
136
140
|
|
|
141
|
+
Each hidden worker receives only its applicable handoff schema. The manager
|
|
142
|
+
contract treats empty or malformed handoffs as coverage gaps instead of
|
|
143
|
+
success. The offline handoff validator detects missing headings, empty sections,
|
|
144
|
+
unresolved placeholders, and invalid statuses; current OpenCode worker output
|
|
145
|
+
remains plain text, so runtime acceptance still depends on the manager applying
|
|
146
|
+
that contract. Inspect rendered surfaces and static contracts with
|
|
147
|
+
`bun run prompt:quality`; run opt-in model decisions with
|
|
148
|
+
`bun run prompt:model-eval -- --model <provider/model> --timeout-ms 300000`;
|
|
149
|
+
see
|
|
150
|
+
[docs/prompt-quality.md](docs/prompt-quality.md).
|
|
151
|
+
|
|
137
152
|
For broad implementation, the manager records whether work stayed serial,
|
|
138
153
|
used exact-path candidate workers, used isolated worktrees, ran a tournament, or
|
|
139
|
-
skipped eligible candidates. Feature completion can carry
|
|
154
|
+
skipped eligible candidates. Feature completion can carry bounded
|
|
140
155
|
`orchestrationPasses` with candidate eligibility, decision, and structured
|
|
141
156
|
factors; `flow_status` reports the aggregate under
|
|
142
157
|
`session.budget.orchestration`.
|
|
@@ -151,17 +166,9 @@ To update a pinned Flow version, rerun the install command with the new
|
|
|
151
166
|
version. To inspect skill health:
|
|
152
167
|
|
|
153
168
|
```bash
|
|
154
|
-
npx -y opencode-plugin-flow@4.
|
|
169
|
+
npx -y opencode-plugin-flow@4.4.0 doctor
|
|
155
170
|
```
|
|
156
171
|
|
|
157
|
-
## Experimental: compaction context
|
|
158
|
-
|
|
159
|
-
Flow's ambient context uses stable OpenCode configuration by default. If you
|
|
160
|
-
want the active session summary injected into OpenCode's session compaction as
|
|
161
|
-
well, opt in with the environment variable `FLOW_EXPERIMENTAL_COMPACTION=1`.
|
|
162
|
-
This uses OpenCode's experimental compaction hook and may change with OpenCode
|
|
163
|
-
versions; the default remains hook-free.
|
|
164
|
-
|
|
165
172
|
## Development
|
|
166
173
|
|
|
167
174
|
```bash
|
|
@@ -158,17 +158,17 @@ export declare function createTools(ctx: unknown): {
|
|
|
158
158
|
orchestrationPasses: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
|
|
159
159
|
id: import("zod").ZodString;
|
|
160
160
|
kind: import("zod").ZodEnum<{
|
|
161
|
-
|
|
161
|
+
validation: "validation";
|
|
162
162
|
audit: "audit";
|
|
163
|
+
candidate: "candidate";
|
|
164
|
+
discovery: "discovery";
|
|
163
165
|
review: "review";
|
|
164
|
-
validation: "validation";
|
|
165
166
|
verification: "verification";
|
|
166
|
-
candidate: "candidate";
|
|
167
167
|
"implementation-decision": "implementation-decision";
|
|
168
168
|
}>;
|
|
169
169
|
decision: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
170
|
-
serial: "serial";
|
|
171
170
|
parallel: "parallel";
|
|
171
|
+
serial: "serial";
|
|
172
172
|
"candidate-exact-path": "candidate-exact-path";
|
|
173
173
|
"candidate-worktree": "candidate-worktree";
|
|
174
174
|
tournament: "tournament";
|
|
@@ -194,11 +194,11 @@ export declare function createTools(ctx: unknown): {
|
|
|
194
194
|
validation_available: "validation_available";
|
|
195
195
|
}>>>;
|
|
196
196
|
modes: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodEnum<{
|
|
197
|
-
audit: "audit";
|
|
198
|
-
review: "review";
|
|
199
|
-
validation: "validation";
|
|
200
197
|
evidence: "evidence";
|
|
198
|
+
validation: "validation";
|
|
199
|
+
audit: "audit";
|
|
201
200
|
verifier: "verifier";
|
|
201
|
+
review: "review";
|
|
202
202
|
"candidate-implementation": "candidate-implementation";
|
|
203
203
|
}>>>;
|
|
204
204
|
workerCount: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
@@ -275,10 +275,10 @@ export declare function createTools(ctx: unknown): {
|
|
|
275
275
|
} | undefined;
|
|
276
276
|
orchestrationPasses?: {
|
|
277
277
|
id: string;
|
|
278
|
-
kind: "
|
|
278
|
+
kind: "validation" | "audit" | "candidate" | "discovery" | "review" | "verification" | "implementation-decision";
|
|
279
279
|
candidateEligibility: "eligible" | "not_eligible" | "unknown";
|
|
280
280
|
decisionFactors: ("shared_state" | "overlapping_files" | "small_slice" | "needs_manager_judgment" | "independent_surface" | "validation_available")[];
|
|
281
|
-
modes: ("
|
|
281
|
+
modes: ("evidence" | "validation" | "audit" | "verifier" | "review" | "candidate-implementation")[];
|
|
282
282
|
workerCount: number;
|
|
283
283
|
candidateWorkerCount: number;
|
|
284
284
|
verifierWorkerCount: number;
|
|
@@ -288,7 +288,7 @@ export declare function createTools(ctx: unknown): {
|
|
|
288
288
|
handoffRefs: string[];
|
|
289
289
|
verificationStatus: "pending" | "passed" | "failed" | "mixed" | "not-needed" | "downgraded";
|
|
290
290
|
outcome: "accepted" | "modified" | "rejected" | "partial" | "not-covered" | "superseded";
|
|
291
|
-
decision?: "
|
|
291
|
+
decision?: "parallel" | "serial" | "candidate-exact-path" | "candidate-worktree" | "tournament" | "skipped" | undefined;
|
|
292
292
|
decisionReason?: string | undefined;
|
|
293
293
|
candidateDecision?: "skipped" | "used" | "serial_required" | undefined;
|
|
294
294
|
synthesisRef?: string | undefined;
|