@osovv/vv-opencode 1.4.5 → 1.6.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.
Files changed (143) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +47 -16
  3. package/dist/commands/patch-provider.d.ts +5 -5
  4. package/dist/commands/patch-provider.js +10 -6
  5. package/dist/commands/patch-provider.js.map +1 -1
  6. package/dist/lib/agent-tool-catalog.d.ts +144 -0
  7. package/dist/lib/agent-tool-catalog.js +2551 -0
  8. package/dist/lib/agent-tool-catalog.js.map +1 -0
  9. package/dist/lib/agent-tool-contract.d.ts +200 -0
  10. package/dist/lib/agent-tool-contract.js +407 -0
  11. package/dist/lib/agent-tool-contract.js.map +1 -0
  12. package/dist/lib/opencode/agent-registrations.d.ts +33 -0
  13. package/dist/lib/opencode/agent-registrations.js +469 -0
  14. package/dist/lib/opencode/agent-registrations.js.map +1 -0
  15. package/dist/lib/opencode/inspection.d.ts +84 -0
  16. package/dist/lib/opencode/inspection.js +367 -0
  17. package/dist/lib/opencode/inspection.js.map +1 -0
  18. package/dist/lib/opencode/model-overrides.d.ts +19 -0
  19. package/dist/lib/opencode/model-overrides.js +221 -0
  20. package/dist/lib/opencode/model-overrides.js.map +1 -0
  21. package/dist/lib/opencode/paths.d.ts +21 -0
  22. package/dist/lib/opencode/paths.js +62 -0
  23. package/dist/lib/opencode/paths.js.map +1 -0
  24. package/dist/lib/opencode/plugin-registration.d.ts +17 -0
  25. package/dist/lib/opencode/plugin-registration.js +210 -0
  26. package/dist/lib/opencode/plugin-registration.js.map +1 -0
  27. package/dist/lib/opencode/shared-utils.d.ts +30 -0
  28. package/dist/lib/opencode/shared-utils.js +183 -0
  29. package/dist/lib/opencode/shared-utils.js.map +1 -0
  30. package/dist/lib/opencode/vvoc-config-io.d.ts +9 -0
  31. package/dist/lib/opencode/vvoc-config-io.js +58 -0
  32. package/dist/lib/opencode/vvoc-config-io.js.map +1 -0
  33. package/dist/lib/opencode.d.ts +15 -174
  34. package/dist/lib/opencode.js +19 -1387
  35. package/dist/lib/opencode.js.map +1 -1
  36. package/dist/lib/spec-lint/cross-file-rules.d.ts +2 -0
  37. package/dist/lib/spec-lint/cross-file-rules.js +33 -0
  38. package/dist/lib/spec-lint/cross-file-rules.js.map +1 -0
  39. package/dist/lib/spec-lint/delegated-extraction.d.ts +8 -0
  40. package/dist/lib/spec-lint/delegated-extraction.js +112 -0
  41. package/dist/lib/spec-lint/delegated-extraction.js.map +1 -0
  42. package/dist/lib/spec-lint/lint.d.ts +7 -0
  43. package/dist/lib/spec-lint/lint.js +92 -0
  44. package/dist/lib/spec-lint/lint.js.map +1 -0
  45. package/dist/lib/spec-lint/parser.d.ts +101 -0
  46. package/dist/lib/spec-lint/parser.js +482 -0
  47. package/dist/lib/spec-lint/parser.js.map +1 -0
  48. package/dist/lib/spec-lint/plan-rules.d.ts +38 -0
  49. package/dist/lib/spec-lint/plan-rules.js +745 -0
  50. package/dist/lib/spec-lint/plan-rules.js.map +1 -0
  51. package/dist/lib/spec-lint/spec-rules.d.ts +8 -0
  52. package/dist/lib/spec-lint/spec-rules.js +188 -0
  53. package/dist/lib/spec-lint/spec-rules.js.map +1 -0
  54. package/dist/lib/spec-lint.d.ts +4 -63
  55. package/dist/lib/spec-lint.js +13 -1505
  56. package/dist/lib/spec-lint.js.map +1 -1
  57. package/dist/lib/vvoc-preset-registry.d.ts +7 -7
  58. package/dist/lib/vvoc-preset-registry.js +8 -8
  59. package/dist/lib/vvoc-preset-registry.js.map +1 -1
  60. package/dist/lib/workflow-contract.d.ts +12 -0
  61. package/dist/lib/workflow-contract.js +71 -18
  62. package/dist/lib/workflow-contract.js.map +1 -1
  63. package/dist/plugins/hashline-edit/index.js +102 -97
  64. package/dist/plugins/hashline-edit/index.js.map +1 -1
  65. package/dist/plugins/hashline-edit/normalize-edits.d.ts +2 -8
  66. package/dist/plugins/hashline-edit/normalize-edits.js +32 -17
  67. package/dist/plugins/hashline-edit/normalize-edits.js.map +1 -1
  68. package/dist/plugins/hashline-edit/schemas.d.ts +246 -0
  69. package/dist/plugins/hashline-edit/schemas.js +659 -0
  70. package/dist/plugins/hashline-edit/schemas.js.map +1 -0
  71. package/dist/plugins/hashline-edit/str-replace-editor.d.ts +6 -17
  72. package/dist/plugins/hashline-edit/str-replace-editor.js +19 -21
  73. package/dist/plugins/hashline-edit/str-replace-editor.js.map +1 -1
  74. package/dist/plugins/hashline-edit/tool-description.d.ts +1 -0
  75. package/dist/plugins/hashline-edit/tool-description.js +20 -4
  76. package/dist/plugins/hashline-edit/tool-description.js.map +1 -1
  77. package/dist/plugins/web-tools/fetch-service.d.ts +8 -5
  78. package/dist/plugins/web-tools/fetch-service.js +30 -45
  79. package/dist/plugins/web-tools/fetch-service.js.map +1 -1
  80. package/dist/plugins/web-tools/index.js +23 -5
  81. package/dist/plugins/web-tools/index.js.map +1 -1
  82. package/dist/plugins/web-tools/schemas.d.ts +469 -0
  83. package/dist/plugins/web-tools/schemas.js +523 -0
  84. package/dist/plugins/web-tools/schemas.js.map +1 -0
  85. package/dist/plugins/web-tools/search-service.d.ts +6 -3
  86. package/dist/plugins/web-tools/search-service.js +24 -29
  87. package/dist/plugins/web-tools/search-service.js.map +1 -1
  88. package/dist/plugins/workflow/authority.d.ts +6 -0
  89. package/dist/plugins/workflow/authority.js +45 -10
  90. package/dist/plugins/workflow/authority.js.map +1 -1
  91. package/dist/plugins/workflow/authorization.d.ts +30 -0
  92. package/dist/plugins/workflow/authorization.js +147 -0
  93. package/dist/plugins/workflow/authorization.js.map +1 -0
  94. package/dist/plugins/workflow/checkpoints.d.ts +41 -2
  95. package/dist/plugins/workflow/checkpoints.js +176 -47
  96. package/dist/plugins/workflow/checkpoints.js.map +1 -1
  97. package/dist/plugins/workflow/delegated.d.ts +15 -1
  98. package/dist/plugins/workflow/delegated.js +65 -35
  99. package/dist/plugins/workflow/delegated.js.map +1 -1
  100. package/dist/plugins/workflow/execution.d.ts +15 -30
  101. package/dist/plugins/workflow/execution.js +133 -33
  102. package/dist/plugins/workflow/execution.js.map +1 -1
  103. package/dist/plugins/workflow/index.js +197 -435
  104. package/dist/plugins/workflow/index.js.map +1 -1
  105. package/dist/plugins/workflow/input-validation.d.ts +48 -0
  106. package/dist/plugins/workflow/input-validation.js +536 -0
  107. package/dist/plugins/workflow/input-validation.js.map +1 -0
  108. package/dist/plugins/workflow/inspection.d.ts +60 -0
  109. package/dist/plugins/workflow/inspection.js +316 -0
  110. package/dist/plugins/workflow/inspection.js.map +1 -0
  111. package/dist/plugins/workflow/protocol.d.ts +2 -0
  112. package/dist/plugins/workflow/protocol.js +26 -4
  113. package/dist/plugins/workflow/protocol.js.map +1 -1
  114. package/dist/plugins/workflow/recovery.d.ts +18 -0
  115. package/dist/plugins/workflow/recovery.js +217 -0
  116. package/dist/plugins/workflow/recovery.js.map +1 -0
  117. package/dist/plugins/workflow/repair.d.ts +1 -1
  118. package/dist/plugins/workflow/repair.js +9 -10
  119. package/dist/plugins/workflow/repair.js.map +1 -1
  120. package/dist/plugins/workflow/results.d.ts +2566 -0
  121. package/dist/plugins/workflow/results.js +1111 -0
  122. package/dist/plugins/workflow/results.js.map +1 -0
  123. package/dist/plugins/workflow/schemas.d.ts +398 -0
  124. package/dist/plugins/workflow/schemas.js +399 -0
  125. package/dist/plugins/workflow/schemas.js.map +1 -0
  126. package/dist/plugins/workflow/state.d.ts +3 -2
  127. package/dist/plugins/workflow/state.js +15 -8
  128. package/dist/plugins/workflow/state.js.map +1 -1
  129. package/dist/plugins/workflow/system-instruction.md +17 -1
  130. package/dist/plugins/workflow/tooling.d.ts +11 -82
  131. package/dist/plugins/workflow/tooling.js +478 -461
  132. package/dist/plugins/workflow/tooling.js.map +1 -1
  133. package/dist/plugins/workflow/transactions.d.ts +13 -0
  134. package/dist/plugins/workflow/transactions.js +13 -3
  135. package/dist/plugins/workflow/transactions.js.map +1 -1
  136. package/package.json +6 -3
  137. package/schemas/vvoc/v3.json +1 -1
  138. package/templates/agents/vv-code-reviewer.md +13 -4
  139. package/templates/agents/vv-implementer.md +16 -9
  140. package/templates/agents/vv-spec-reviewer.md +13 -4
  141. package/templates/skills/vv-execute/SKILL.md +3 -3
  142. package/templates/skills/vv-execute/references/tool-contracts.md +1750 -0
  143. package/templates/skills/vv-review/SKILL.md +1 -1
@@ -0,0 +1,316 @@
1
+ // FILE: src/plugins/workflow/inspection.ts
2
+ // VERSION: 1.1.0
3
+ // START_MODULE_CONTRACT
4
+ // PURPOSE: Own read-only same-session workflow inspection: bounded work-item/plan-run/execution serialization, one composed guidance helper, and getWorkflowInspection, extending work_item_list additively with authoritative native and generic executions plus the loaded package/contract identity while preserving items, planRuns, includeClosed, and bounded recovery excerpts.
5
+ // SCOPE: Pure read-only projection only. No store mutation, no ensureNativeExecutions call, no recovery, no authority-message lookup, no private store dumps or raw authorization text. Reads current session records first and derives guidance from the same pure domain gates the real mutations consume.
6
+ // DEPENDS: [src/plugins/workflow/state.ts, src/plugins/workflow/delegated.ts, src/plugins/workflow/execution.ts, src/plugins/workflow/checkpoints.ts, src/plugins/workflow/authority.ts, src/plugins/workflow/results.ts (types), src/lib/agent-tool-contract.ts]
7
+ // LINKS: [M-WORKFLOW-TOOLING, M-WORKFLOW-DELEGATED, M-WORKFLOW-EXECUTION, M-WORKFLOW-CHECKPOINTS, M-WORKFLOW-AUTHORITY, M-AGENT-TOOL-CONTRACT, V-M-WORKFLOW-TOOLING]
8
+ // ROLE: RUNTIME
9
+ // MAP_MODE: EXPORTS
10
+ // END_MODULE_CONTRACT
11
+ //
12
+ // START_MODULE_MAP
13
+ // DelegatedGuidanceView - Gate-derived delegated next action, eligibility, blockers, and prerequisites.
14
+ // WorkflowInspectionResult - Additive same-session work_item_list payload.
15
+ // InspectionContext - Store data plus session id used to derive read-only inspection guidance.
16
+ // getWorkflowContractIdentity - Bounded loaded contract identity from the accepted cross-plugin contract module.
17
+ // deriveDelegatedGuidance - One composed guidance helper shared by list/open/failure/recovery responses.
18
+ // serializeWorkItem - Read-only serialization of one work item with delegated budget/guidance.
19
+ // getWorkflowInspection - Additive same-session work_item_list payload with items, planRuns, executions, and contract identity.
20
+ // END_MODULE_MAP
21
+ //
22
+ // START_CHANGE_SUMMARY
23
+ // LAST_CHANGE: [C-AGENT-TOOL-CONTRACTS T-004 - Read-only inspection owner. Correction cycle: all public nextAction surfaces share deriveDelegatedGuidance; native executions project authoritative current plan-run lifecycle/checkpoint generation/bound acceptance without ensureNativeExecutions; prerequisites are source/action-specific and truthful; concrete schema-derived DTOs replace opaque view records. Prior: new inspection owner.]
24
+ // END_CHANGE_SUMMARY
25
+ import { AGENT_TOOL_CONTRACT_REVISION, PACKAGE_NAME, PACKAGE_VERSION, resolveToolContractReferencePath, } from "../../lib/agent-tool-contract.js";
26
+ import { getReviewRound, listWorkItems, } from "./state.js";
27
+ import { currentDelegatedAcceptance, delegatedOrdinaryLaunchGate, summarizeDelegatedProgress, } from "./delegated.js";
28
+ import { getExecutionView, isTaskLaunchableInStore, latestAttemptView, } from "./execution.js";
29
+ import { checkpointBarrierUnsatisfied, findOverlappingInFlightReview, getDelegatedRunView, getNativeExecutionView, } from "./checkpoints.js";
30
+ import { advanceUnitsAvailable, effectiveAuthorityStages } from "./authority.js";
31
+ // START_BLOCK_CONTRACT_IDENTITY
32
+ /**
33
+ * Loaded package/revision identity from the accepted cross-plugin contract
34
+ * module only. Never reads a global install, user config, or remote metadata.
35
+ */
36
+ export function getWorkflowContractIdentity() {
37
+ return {
38
+ packageName: PACKAGE_NAME,
39
+ packageVersion: PACKAGE_VERSION,
40
+ toolContractRevision: AGENT_TOOL_CONTRACT_REVISION,
41
+ referencePath: resolveToolContractReferencePath(),
42
+ };
43
+ }
44
+ // END_BLOCK_CONTRACT_IDENTITY
45
+ // START_BLOCK_LAUNCH_BLOCKERS
46
+ function findBoundExecutionTask(data, sessionId, workItemId) {
47
+ for (const execution of data.executions.values()) {
48
+ if (execution.sessionId !== sessionId)
49
+ continue;
50
+ for (const binding of execution.tasks.values()) {
51
+ if (binding.workItemId === workItemId) {
52
+ return { runId: execution.runId, taskId: binding.taskId };
53
+ }
54
+ }
55
+ }
56
+ return undefined;
57
+ }
58
+ /**
59
+ * Execution-level blockers for an ordinary implementer launch, derived from the
60
+ * same checks the plugin launch hook and registry mutations consume: task
61
+ * dependency/barrier/sealed/superseded/live/budget gates plus authoritative
62
+ * native wave barriers and overlapping in-flight checkpoint reviews.
63
+ */
64
+ function executionLaunchBlockers(record, context) {
65
+ if (!record.delegated)
66
+ return [];
67
+ const blockers = [];
68
+ const bound = findBoundExecutionTask(context.data, context.sessionId, record.workItemId);
69
+ if (bound) {
70
+ const launchable = isTaskLaunchableInStore(context.data, {
71
+ sessionId: context.sessionId,
72
+ runId: bound.runId,
73
+ taskId: bound.taskId,
74
+ });
75
+ if (!launchable.ok)
76
+ blockers.push(`${launchable.reason}:${bound.taskId}`);
77
+ }
78
+ const planRunId = record.delegated.planRunId;
79
+ if (!planRunId)
80
+ return blockers;
81
+ const run = context.data.planRuns.get(planRunId);
82
+ if (!run || run.sessionId !== context.sessionId)
83
+ return blockers;
84
+ if (run.status === "sealed") {
85
+ blockers.push(`EXECUTION_SEALED:${planRunId}`);
86
+ return blockers;
87
+ }
88
+ const binding = [...run.tasks.values()].find((task) => task.workItemId === record.workItemId);
89
+ const taskDefinition = binding
90
+ ? run.definition.tasks.find((task) => task.taskId === binding.taskId)
91
+ : undefined;
92
+ if (taskDefinition) {
93
+ const barrier = checkpointBarrierUnsatisfied(context.data, planRunId, taskDefinition.wave);
94
+ if (barrier.ok) {
95
+ for (const checkpointId of barrier.blockers) {
96
+ blockers.push(`BARRIER_UNSATISFIED:${checkpointId}`);
97
+ }
98
+ }
99
+ }
100
+ const overlapping = findOverlappingInFlightReview(context.data, planRunId, record.delegated.writeScope);
101
+ if (overlapping)
102
+ blockers.push(`OVERLAPPING_REVIEW:${overlapping}`);
103
+ return blockers;
104
+ }
105
+ /**
106
+ * Build gate-derived guidance. Ordinary launches are downgraded to
107
+ * `launch_blocked` whenever the real item-level or execution-level gate would
108
+ * reject, so a caller can never see `launch_implementer` beside a blocker. This
109
+ * is the single composed helper shared by inspection and every mutation/failure
110
+ * response that reports a next action.
111
+ */
112
+ export function deriveDelegatedGuidance(options) {
113
+ const { record, progress, latest, context } = options;
114
+ let nextAction = progress.nextAction;
115
+ const blockers = [];
116
+ const prerequisites = [];
117
+ const requiresConcernsDisposition = record.state === "awaiting_acceptance" && latest?.resultStatus === "DONE_WITH_CONCERNS";
118
+ if (nextAction === "launch_implementer") {
119
+ const gate = delegatedOrdinaryLaunchGate(record);
120
+ if (!gate.ok) {
121
+ blockers.push(`${gate.reason}:${record.workItemId}`);
122
+ }
123
+ blockers.push(...executionLaunchBlockers(record, context));
124
+ if (blockers.length > 0)
125
+ nextAction = "launch_blocked";
126
+ }
127
+ switch (nextAction) {
128
+ case "launch_implementer":
129
+ prerequisites.push("the snapshot-level dependency/barrier/overlap gate currently accepts; actual launch still needs live host permission and context, which inspection does not assert");
130
+ break;
131
+ case "launch_blocked":
132
+ prerequisites.push("clear the blocking dependency, checkpoint barrier, overlapping review, or sealed/superseded execution");
133
+ break;
134
+ case "await_result":
135
+ prerequisites.push("the in-flight attempt result for the current call");
136
+ break;
137
+ case "decide":
138
+ prerequisites.push(`a controller accept/request_changes decision for attempt ${latest?.attempt ?? "(unknown)"}`);
139
+ if (requiresConcernsDisposition) {
140
+ prerequisites.push("an explicit concernsDisposition because the attempt completed DONE_WITH_CONCERNS");
141
+ }
142
+ break;
143
+ case "recover":
144
+ prerequisites.push("a bounded recovery diagnosis, changed condition, and verification");
145
+ break;
146
+ case "recover_with_user_authorization":
147
+ prerequisites.push("a recorded eligible advance authority for this target, or a fresh root-user message; inspection does not verify future message provenance");
148
+ break;
149
+ case "close":
150
+ prerequisites.push("a ready_to_close item carrying a current acceptance");
151
+ break;
152
+ case "closed":
153
+ break;
154
+ }
155
+ return {
156
+ nextAction,
157
+ launchEligible: nextAction === "launch_implementer" && blockers.length === 0,
158
+ blockers,
159
+ prerequisites,
160
+ requiresConcernsDisposition,
161
+ };
162
+ }
163
+ // END_BLOCK_GUIDANCE
164
+ // START_BLOCK_WORK_ITEM_SERIALIZATION
165
+ function serializeProgress(record, nextAction) {
166
+ const progress = summarizeDelegatedProgress(record);
167
+ return {
168
+ attemptBudget: progress.attemptBudget,
169
+ remainingAttempts: progress.remainingAttempts,
170
+ recoveryCount: progress.recoveryGrants,
171
+ autonomousGrantConsumed: progress.autonomousGrantConsumed,
172
+ reportRejectionCount: progress.reportRejectedAttempts,
173
+ nextAction,
174
+ };
175
+ }
176
+ /**
177
+ * Read-only serialization of one work item. Delegated budget/guidance derives
178
+ * from shared pure gates; no private ledger body or authorization message text
179
+ * is exposed. Store context is required for delegated items so snapshot-level
180
+ * global gates are honored; non-delegated items are context-independent.
181
+ */
182
+ export function serializeWorkItem(record, context) {
183
+ const delegatedView = record.delegated;
184
+ let nextAction = "launch_implementer";
185
+ let guidance;
186
+ if (delegatedView && context) {
187
+ const progress = summarizeDelegatedProgress(record);
188
+ guidance = deriveDelegatedGuidance({
189
+ record,
190
+ progress,
191
+ latest: latestAttemptView(record),
192
+ context,
193
+ });
194
+ nextAction = guidance.nextAction;
195
+ }
196
+ else if (delegatedView) {
197
+ nextAction = summarizeDelegatedProgress(record).nextAction;
198
+ }
199
+ return {
200
+ workItemId: record.workItemId,
201
+ header: `VVOC_WORK_ITEM_ID: ${record.workItemId}`,
202
+ key: record.key,
203
+ title: record.title,
204
+ mode: record.mode,
205
+ requiredReviewers: [...record.requiredReviewers],
206
+ state: record.state,
207
+ specReviewCount: record.specReviewCount,
208
+ codeReviewCount: record.codeReviewCount,
209
+ reviewRound: getReviewRound(record),
210
+ ...(record.currentRound ? { currentRound: record.currentRound } : {}),
211
+ ...(record.resultExcerpt ? { resultExcerpt: record.resultExcerpt } : {}),
212
+ completedReviewRoundCount: record.completedReviewRoundCount,
213
+ createdAt: record.createdAt,
214
+ updatedAt: record.updatedAt,
215
+ ...(record.closedAt ? { closedAt: record.closedAt } : {}),
216
+ ...(delegatedView
217
+ ? {
218
+ delegated: {
219
+ writeScope: [...delegatedView.writeScope],
220
+ ...(delegatedView.planRunId
221
+ ? { planRunId: delegatedView.planRunId, planTaskId: delegatedView.planTaskId }
222
+ : {}),
223
+ attempts: delegatedView.attempts.length,
224
+ inFlightAttempt: delegatedView.attempts.some((attempt) => attempt.status === "in_flight"),
225
+ decisions: delegatedView.decisions.length,
226
+ accepted: currentDelegatedAcceptance(record) !== undefined,
227
+ acceptedAttempt: currentDelegatedAcceptance(record)?.attempt,
228
+ reworkCount: delegatedView.reworkHistory.length,
229
+ ...serializeProgress(record, nextAction),
230
+ ...(latestAttemptView(record) ? { latestAttempt: latestAttemptView(record) } : {}),
231
+ ...(guidance ? { guidance } : {}),
232
+ },
233
+ }
234
+ : {}),
235
+ };
236
+ }
237
+ // END_BLOCK_WORK_ITEM_SERIALIZATION
238
+ // START_BLOCK_AUTHORITY_PRECONDITIONS
239
+ /**
240
+ * Bounded authority prerequisites for one execution. Exposes finite remaining
241
+ * units, surviving stages, and reserved stops. It never claims that a recorded
242
+ * ledger entry is live host authorization.
243
+ */
244
+ function authorityPrerequisites(execution) {
245
+ return execution.authority.map((authority) => ({
246
+ authorityId: authority.authorityId,
247
+ availableUnits: advanceUnitsAvailable(authority, execution.reserveDebits),
248
+ revoked: authority.revocations.some((revocation) => revocation.kind === "revoke"),
249
+ stages: effectiveAuthorityStages(authority),
250
+ reservedStops: [...authority.scope.reservedStops],
251
+ prerequisites: [
252
+ "acting on this authority requires live host permission and context; a recorded ledger entry is not current authorization",
253
+ ],
254
+ }));
255
+ }
256
+ // END_BLOCK_AUTHORITY_PRECONDITIONS
257
+ // START_BLOCK_EXECUTION_VIEWS
258
+ /**
259
+ * Unified same-session execution views. Native plan runs are projected
260
+ * authoritatively from the current plan-run lifecycle/checkpoints and current
261
+ * bound acceptance (never from the one-time registry snapshot and never by
262
+ * calling `ensureNativeExecutions`). Registry-native authority is merged when
263
+ * present; generic executions follow. Run ids are unique across both sources.
264
+ */
265
+ function buildExecutionViews(data, sessionId) {
266
+ const views = [];
267
+ const seen = new Set();
268
+ for (const run of data.planRuns.values()) {
269
+ if (run.sessionId !== sessionId)
270
+ continue;
271
+ const nativeView = getNativeExecutionView(data, run);
272
+ const registry = data.executions.get(run.runId);
273
+ const authority = registry && registry.source.kind === "native-package"
274
+ ? authorityPrerequisites(registry)
275
+ : undefined;
276
+ views.push(authority && authority.length > 0 ? { ...nativeView, authority } : nativeView);
277
+ seen.add(run.runId);
278
+ }
279
+ for (const execution of data.executions.values()) {
280
+ if (execution.sessionId !== sessionId || seen.has(execution.runId))
281
+ continue;
282
+ const view = getExecutionView(execution, data);
283
+ const authority = authorityPrerequisites(execution);
284
+ views.push(authority.length > 0 ? { ...view, authority } : view);
285
+ }
286
+ return views;
287
+ }
288
+ // END_BLOCK_EXECUTION_VIEWS
289
+ // START_CONTRACT: getWorkflowInspection
290
+ // PURPOSE: Build the additive same-session work_item_list payload without mutating workflow state.
291
+ // INPUTS: { store: WorkItemStore - backing store, sessionId: string - session scope, options?: { includeClosed?: boolean } - list behavior }
292
+ // OUTPUTS: { WorkflowInspectionResult - items, optional planRuns/executions, and loaded contract identity }
293
+ // SIDE_EFFECTS: [none]
294
+ // LINKS: [M-WORKFLOW-TOOLING, M-WORKFLOW-EXECUTION, M-AGENT-TOOL-CONTRACT]
295
+ // END_CONTRACT: getWorkflowInspection
296
+ export function getWorkflowInspection(store, sessionId, options = {}) {
297
+ const includeClosed = options.includeClosed === true;
298
+ const data = store.getStoreData();
299
+ const context = { data, sessionId };
300
+ const records = listWorkItems(store, sessionId, { includeClosed });
301
+ const planRuns = [...data.planRuns.values()]
302
+ .filter((run) => run.sessionId === sessionId)
303
+ .map((run) => getDelegatedRunView(data, run.runId))
304
+ .filter((view) => view !== undefined);
305
+ const executions = buildExecutionViews(data, sessionId);
306
+ return {
307
+ tool: "work_item_list",
308
+ sessionId,
309
+ includeClosed,
310
+ items: records.map((record) => serializeWorkItem(record, context)),
311
+ ...(planRuns.length > 0 ? { planRuns } : {}),
312
+ ...(executions.length > 0 ? { executions } : {}),
313
+ contract: getWorkflowContractIdentity(),
314
+ };
315
+ }
316
+ //# sourceMappingURL=inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.js","sourceRoot":"","sources":["../../../src/plugins/workflow/inspection.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export declare const ALLOWED_STATUSES: {
6
6
  readonly "vv-code-reviewer": readonly ["PASS", "FAIL", "NEEDS_CONTEXT"];
7
7
  };
8
8
  export type VVocStatus = "DONE" | "DONE_WITH_CONCERNS" | "NEEDS_CONTEXT" | "BLOCKED" | "PASS" | "FAIL";
9
+ export declare function describeStatusVocabulary(agent: TrackedAgentName): string;
10
+ export declare function resultBlockRequiresRoute(agent: TrackedAgentName): boolean;
9
11
  export type ParsedResultBlock = {
10
12
  agent: TrackedAgentName;
11
13
  workItemId: string;
@@ -1,8 +1,8 @@
1
1
  // FILE: src/plugins/workflow/protocol.ts
2
- // VERSION: 0.1.2
2
+ // VERSION: 0.1.3
3
3
  // START_MODULE_CONTRACT
4
4
  // PURPOSE: Define the tracked subagent result protocol, strict top-block parsing rules, body extraction, and work-item header extraction.
5
- // SCOPE: Tracked agent/status constants, status validation per agent, strict result-block parsing with body separation, protocol error reporting, and VVOC_WORK_ITEM_ID header parsing.
5
+ // SCOPE: Tracked agent/status constants, status validation per agent, strict result-block parsing with body separation, shared instruction descriptions derived from the same status/route contract the parser enforces, protocol error reporting, and VVOC_WORK_ITEM_ID header parsing.
6
6
  // DEPENDS: [none]
7
7
  // LINKS: [M-WORKFLOW-PROTOCOL]
8
8
  // ROLE: RUNTIME
@@ -18,13 +18,15 @@
18
18
  // ProtocolResult - Deterministic success/failure wrapper for parsing and validation operations.
19
19
  // TRACKED_SUBAGENT_NAMES - Ordered tracked subagent names.
20
20
  // ALLOWED_STATUSES - Allowed VVOC_STATUS values per tracked subagent.
21
+ // describeStatusVocabulary - Canonical pipe-joined VVOC_STATUS vocabulary for one tracked agent.
22
+ // resultBlockRequiresRoute - Whether a tracked agent result block must include VVOC_ROUTE.
21
23
  // parseResultBlock - Parses strict top-block protocol fields and separated body from tracked subagent output.
22
24
  // validateStatusForAgent - Validates VVOC_STATUS against tracked agent allowances.
23
25
  // parseWorkItemHeader - Extracts and validates the top-line VVOC_WORK_ITEM_ID prompt header.
24
26
  // END_MODULE_MAP
25
27
  //
26
28
  // START_CHANGE_SUMMARY
27
- // LAST_CHANGE: [v0.1.3 - Preserved separated result body text and added missing blank-line diagnostics for body text inside the strict top block.]
29
+ // LAST_CHANGE: [C-AGENT-TOOL-CONTRACTS T-007 - Extracted resultBlockRequiresRoute and added describeStatusVocabulary so instruction text is generated from the same status/route contract the parser enforces; parsing behavior is unchanged. Prior: separated result body text and missing blank-line diagnostics.]
28
30
  // END_CHANGE_SUMMARY
29
31
  export const TRACKED_SUBAGENT_NAMES = [
30
32
  "vv-implementer",
@@ -36,6 +38,26 @@ export const ALLOWED_STATUSES = {
36
38
  "vv-spec-reviewer": ["PASS", "FAIL", "NEEDS_CONTEXT"],
37
39
  "vv-code-reviewer": ["PASS", "FAIL", "NEEDS_CONTEXT"],
38
40
  };
41
+ // START_CONTRACT: describeStatusVocabulary
42
+ // PURPOSE: Render the canonical allowed VVOC_STATUS vocabulary for one tracked subagent so instruction text is generated from the same source the parser enforces.
43
+ // INPUTS: { agent: TrackedAgentName - tracked subagent name }
44
+ // OUTPUTS: { string - pipe-joined allowed statuses in declaration order }
45
+ // SIDE_EFFECTS: [none]
46
+ // LINKS: [M-WORKFLOW-PROTOCOL]
47
+ // END_CONTRACT: describeStatusVocabulary
48
+ export function describeStatusVocabulary(agent) {
49
+ return ALLOWED_STATUSES[agent].join(" | ");
50
+ }
51
+ // START_CONTRACT: resultBlockRequiresRoute
52
+ // PURPOSE: State whether a tracked subagent result block must include VVOC_ROUTE, matching the parseResultBlock requirement.
53
+ // INPUTS: { agent: TrackedAgentName - tracked subagent name }
54
+ // OUTPUTS: { boolean - true only for the implementer role }
55
+ // SIDE_EFFECTS: [none]
56
+ // LINKS: [M-WORKFLOW-PROTOCOL]
57
+ // END_CONTRACT: resultBlockRequiresRoute
58
+ export function resultBlockRequiresRoute(agent) {
59
+ return agent === "vv-implementer";
60
+ }
39
61
  const WORK_ITEM_HEADER_RE = /^VVOC_WORK_ITEM_ID:\s*(wi-\d+)\s*$/;
40
62
  function createProtocolError(code, message) {
41
63
  return {
@@ -180,7 +202,7 @@ export function parseResultBlock(options) {
180
202
  return statusValidation;
181
203
  }
182
204
  const route = readTopBlockField(topBlockLines, "VVOC_ROUTE");
183
- if (options.agent === "vv-implementer" && !route) {
205
+ if (resultBlockRequiresRoute(options.agent) && !route) {
184
206
  return createProtocolError("MISSING_ROUTE", "MISSING_ROUTE: vv-implementer output must include VVOC_ROUTE");
185
207
  }
186
208
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/plugins/workflow/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/plugins/workflow/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Plugin } from "@opencode-ai/plugin";
2
+ import { type WorkItemStore } from "./state.js";
3
+ import { type WorkflowToolResultToolId } from "./results.js";
4
+ /** Plugin client shape used for failure logging. */
5
+ type PluginClient = Parameters<Plugin>[0]["client"];
6
+ export type RecoverySupportContext = {
7
+ client: PluginClient;
8
+ stores: Map<string, WorkItemStore>;
9
+ invalidHydrationSessions: Set<string>;
10
+ };
11
+ export type RecoverySupport = {
12
+ commitGenericToolResult: (sessionId: string, toolId: WorkflowToolResultToolId, run: (view: WorkItemStore) => Promise<Record<string, unknown>> | Record<string, unknown>) => Promise<Record<string, unknown>>;
13
+ executeCommittedRecovery: <T>(sessionId: string, runRecovery: (liveStore: WorkItemStore) => Promise<T>, captureRestore: () => () => void, wasApplied: (result: T) => boolean) => Promise<T>;
14
+ captureRecordRestore: (sessionId: string, workItemId: string) => () => void;
15
+ captureCheckpointRestore: (sessionId: string, runId: string, checkpointId: string) => () => void;
16
+ };
17
+ export declare function createRecoverySupport(context: RecoverySupportContext): RecoverySupport;
18
+ export {};