@osovv/vv-opencode 0.21.0 → 0.24.1
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/README.md +46 -10
- package/dist/index.d.ts +2 -0
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/managed-agents.d.ts +3 -3
- package/dist/lib/managed-agents.js +14 -13
- package/dist/lib/managed-agents.js.map +1 -1
- package/dist/lib/model-roles.d.ts +3 -3
- package/dist/lib/model-roles.js +5 -4
- package/dist/lib/model-roles.js.map +1 -1
- package/dist/lib/opencode.js +100 -5
- package/dist/lib/opencode.js.map +1 -1
- package/dist/lib/vvoc-config.js +5 -4
- package/dist/lib/vvoc-config.js.map +1 -1
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.d.ts +1 -0
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js +184 -0
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js.map +1 -0
- package/dist/plugins/hashline-edit/constants.d.ts +4 -0
- package/dist/plugins/hashline-edit/constants.js +26 -0
- package/dist/plugins/hashline-edit/constants.js.map +1 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.d.ts +10 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.js +114 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.js.map +1 -0
- package/dist/plugins/hashline-edit/edit-operations.d.ts +7 -0
- package/dist/plugins/hashline-edit/edit-operations.js +168 -0
- package/dist/plugins/hashline-edit/edit-operations.js.map +1 -0
- package/dist/plugins/hashline-edit/edit-text-normalization.d.ts +6 -0
- package/dist/plugins/hashline-edit/edit-text-normalization.js +123 -0
- package/dist/plugins/hashline-edit/edit-text-normalization.js.map +1 -0
- package/dist/plugins/hashline-edit/file-text-canonicalization.d.ts +7 -0
- package/dist/plugins/hashline-edit/file-text-canonicalization.js +52 -0
- package/dist/plugins/hashline-edit/file-text-canonicalization.js.map +1 -0
- package/dist/plugins/hashline-edit/hash-computation.d.ts +3 -0
- package/dist/plugins/hashline-edit/hash-computation.js +34 -0
- package/dist/plugins/hashline-edit/hash-computation.js.map +1 -0
- package/dist/plugins/hashline-edit/index.d.ts +2 -0
- package/dist/plugins/hashline-edit/index.js +246 -0
- package/dist/plugins/hashline-edit/index.js.map +1 -0
- package/dist/plugins/hashline-edit/normalize-edits.d.ts +10 -0
- package/dist/plugins/hashline-edit/normalize-edits.js +82 -0
- package/dist/plugins/hashline-edit/normalize-edits.js.map +1 -0
- package/dist/plugins/hashline-edit/tool-description.d.ts +1 -0
- package/dist/plugins/hashline-edit/tool-description.js +35 -0
- package/dist/plugins/hashline-edit/tool-description.js.map +1 -0
- package/dist/plugins/hashline-edit/types.d.ts +17 -0
- package/dist/plugins/hashline-edit/types.js +19 -0
- package/dist/plugins/hashline-edit/types.js.map +1 -0
- package/dist/plugins/hashline-edit/validation.d.ts +20 -0
- package/dist/plugins/hashline-edit/validation.js +160 -0
- package/dist/plugins/hashline-edit/validation.js.map +1 -0
- package/dist/plugins/system-context-injection/index.js +65 -2
- package/dist/plugins/system-context-injection/index.js.map +1 -1
- package/dist/plugins/workflow/index.d.ts +2 -0
- package/dist/plugins/workflow/index.js +411 -0
- package/dist/plugins/workflow/index.js.map +1 -0
- package/dist/plugins/workflow/protocol.d.ts +33 -0
- package/dist/plugins/workflow/protocol.js +188 -0
- package/dist/plugins/workflow/protocol.js.map +1 -0
- package/dist/plugins/workflow/state.d.ts +79 -0
- package/dist/plugins/workflow/state.js +307 -0
- package/dist/plugins/workflow/state.js.map +1 -0
- package/dist/plugins/workflow/system-instruction.md +14 -0
- package/dist/plugins/workflow/tooling.d.ts +26 -0
- package/dist/plugins/workflow/tooling.js +161 -0
- package/dist/plugins/workflow/tooling.js.map +1 -0
- package/dist/plugins/workflow/transitions.d.ts +7 -0
- package/dist/plugins/workflow/transitions.js +102 -0
- package/dist/plugins/workflow/transitions.js.map +1 -0
- package/package.json +11 -3
- package/schemas/vvoc/v1.json +1 -1
- package/schemas/vvoc/v2.json +1 -1
- package/schemas/vvoc/v3.json +1 -1
- package/templates/agents/{code-reviewer.md → vv-code-reviewer.md} +12 -4
- package/templates/agents/{implementer.md → vv-implementer.md} +14 -8
- package/templates/agents/{spec-reviewer.md → vv-spec-reviewer.md} +13 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// FILE: src/plugins/system-context-injection/index.ts
|
|
2
|
-
// VERSION: 0.
|
|
2
|
+
// VERSION: 0.3.0
|
|
3
3
|
// START_MODULE_CONTRACT
|
|
4
4
|
// PURPOSE: Inject reusable vvoc system context into primary chat sessions without polluting known subagent prompts.
|
|
5
5
|
// SCOPE: Main-session system instruction definitions, known subagent filtering, config-aware custom subagent tracking, and chat.message system prompt injection.
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
// END_MODULE_MAP
|
|
15
15
|
//
|
|
16
16
|
// START_CHANGE_SUMMARY
|
|
17
|
+
// LAST_CHANGE: [v0.3.0 - Added standard trajectories, working-state, reroute, semantic continuity, assumption discipline, anti-drift, and project-overlay guidance for primary sessions.]
|
|
18
|
+
// LAST_CHANGE: [v0.2.0 - Expanded primary-session system guidance with task routing, execution stability, and loop-control rules while preserving subagent exclusion.]
|
|
17
19
|
// LAST_CHANGE: [v0.1.0 - Added a reusable main-session system context injector with default proactive explore guidance.]
|
|
18
20
|
// END_CHANGE_SUMMARY
|
|
19
21
|
import { MANAGED_SUBAGENT_NAMES } from "../../lib/managed-agents.js";
|
|
@@ -23,11 +25,72 @@ const INTERNAL_PRIMARY_AGENTS = ["compaction", "title", "summary"];
|
|
|
23
25
|
const MAIN_SESSION_SYSTEM_CONTEXTS = [
|
|
24
26
|
[
|
|
25
27
|
"<proactive_context_gathering>",
|
|
26
|
-
"Before answering questions about the codebase or making changes,
|
|
28
|
+
"Before answering questions about the codebase or making changes, gather the context you need whenever the task depends on unfamiliar code, unclear scope, or multiple candidate implementation areas.",
|
|
29
|
+
"When delegation is available, proactively use the explore subagent for this.",
|
|
27
30
|
"Do not guess about code you have not inspected.",
|
|
28
31
|
"If the task is already localized and the required context is already in view, work directly instead of delegating.",
|
|
32
|
+
"If the current agent cannot delegate, rely on the context already in view and do not attempt unsupported delegation.",
|
|
29
33
|
"</proactive_context_gathering>",
|
|
30
34
|
].join("\n"),
|
|
35
|
+
[
|
|
36
|
+
"<standard_trajectories>",
|
|
37
|
+
"Prefer known trajectories over ad-hoc behavior.",
|
|
38
|
+
"Default trajectories: localized explicit change -> direct_change; bug, regression, or failure -> investigate_first; ambiguous or multi-file change -> change_with_review; explicit review request -> review directly; unclear request -> clarify or proceed with explicit assumptions, then route.",
|
|
39
|
+
"Prefer existing project patterns, existing libraries, and established repository structure over novel approaches.",
|
|
40
|
+
"</standard_trajectories>",
|
|
41
|
+
].join("\n"),
|
|
42
|
+
[
|
|
43
|
+
"<task_routing>",
|
|
44
|
+
"Before acting on a non-trivial request, classify it as one of: direct_change, investigate_first, or change_with_review.",
|
|
45
|
+
"Use the lightest safe path.",
|
|
46
|
+
"Do not start subagents until the goal, acceptance criteria, and verification are stable enough.",
|
|
47
|
+
"If the current agent cannot delegate, apply this routing mentally instead of attempting delegation.",
|
|
48
|
+
"</task_routing>",
|
|
49
|
+
].join("\n"),
|
|
50
|
+
[
|
|
51
|
+
"<working_state>",
|
|
52
|
+
"For non-trivial work, stabilize a compact working state before acting: goal, current route, constraints, non-goals when relevant, assumptions, verification target, current unknown, and reroute if.",
|
|
53
|
+
"Keep it compact and revise it when evidence changes.",
|
|
54
|
+
"Surface it explicitly when blocked, rerouting, or handing off to the user.",
|
|
55
|
+
"</working_state>",
|
|
56
|
+
].join("\n"),
|
|
57
|
+
[
|
|
58
|
+
"<reroute_on_evidence>",
|
|
59
|
+
"If new evidence invalidates the current route, stop and reroute instead of forcing the original plan.",
|
|
60
|
+
"Reroute triggers: direct_change -> investigate_first when root cause, failure path, or expected behavior is still unclear; direct_change -> change_with_review when the scope expands across multiple modules or architectural boundaries; investigate_first -> direct_change when the failure is bounded and the fix path is now clear; any route -> needs_context when requirement ambiguity blocks safe progress.",
|
|
61
|
+
"When rerouting, state the current route, the trigger, the next route, and why the previous route is no longer safe.",
|
|
62
|
+
"</reroute_on_evidence>",
|
|
63
|
+
].join("\n"),
|
|
64
|
+
[
|
|
65
|
+
"<semantic_continuity>",
|
|
66
|
+
"Reuse stable domain terms from the user request and the repository.",
|
|
67
|
+
"When the repository already has a canonical name for a concept, keep that name.",
|
|
68
|
+
"If the user's wording conflicts with repository terminology, map it once and continue with the repository's canonical term.",
|
|
69
|
+
"Do not rename concepts unnecessarily across planning, implementation, review, and reporting.",
|
|
70
|
+
"</semantic_continuity>",
|
|
71
|
+
].join("\n"),
|
|
72
|
+
[
|
|
73
|
+
"<assumption_discipline>",
|
|
74
|
+
"Do not make silent material assumptions.",
|
|
75
|
+
"A material assumption is one that affects behavior, scope, API shape, schema, UX, data meaning, or verification.",
|
|
76
|
+
"If a material assumption is necessary, state it explicitly.",
|
|
77
|
+
"If a material assumption later becomes false, stop and reroute.",
|
|
78
|
+
"</assumption_discipline>",
|
|
79
|
+
].join("\n"),
|
|
80
|
+
[
|
|
81
|
+
"<anti_drift_budget>",
|
|
82
|
+
"If you are not converging, stop and summarize instead of continuing blindly.",
|
|
83
|
+
"Drift signals include repeated file reading without a stable path, repeated speculative fixes without stronger evidence, 2 major strategy changes for the same task, 2 review rounds without convergence, or requirement interpretation changing repeatedly during execution.",
|
|
84
|
+
"When drift signals accumulate, report what was learned, what remains unknown, and which route is now safest.",
|
|
85
|
+
"</anti_drift_budget>",
|
|
86
|
+
].join("\n"),
|
|
87
|
+
[
|
|
88
|
+
"<project_overlays>",
|
|
89
|
+
"If the task context or repository provides project-specific vocabulary, preferred patterns, boundaries, verification commands, architecture notes, or examples, treat them as project-owned overlays.",
|
|
90
|
+
"Prefer those overlays over generic vvoc defaults when they do not conflict with the user's request.",
|
|
91
|
+
"Do not invent overlays that are not present.",
|
|
92
|
+
"</project_overlays>",
|
|
93
|
+
].join("\n"),
|
|
31
94
|
];
|
|
32
95
|
// START_BLOCK_AGENT_FILTERS
|
|
33
96
|
function createKnownSubagentSet() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/system-context-injection/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,iBAAiB;AACjB,wBAAwB;AACxB,sHAAsH;AACtH,mKAAmK;AACnK,8DAA8D;AAC9D,qEAAqE;AACrE,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,0HAA0H;AAC1H,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,2HAA2H;AAC3H,qBAAqB;AAGrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,SAAS,CAAU,CAAC;AAC3D,MAAM,wBAAwB,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAU,CAAC;AAC1E,MAAM,uBAAuB,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAE5E,MAAM,4BAA4B,GAAG;IACnC;QACE,+BAA+B;QAC/B
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/system-context-injection/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
// FILE: src/plugins/workflow/index.ts
|
|
2
|
+
// VERSION: 0.1.1
|
|
3
|
+
// START_MODULE_CONTRACT
|
|
4
|
+
// PURPOSE: Register workflow work-item tools, tracked task launch/result hooks, and primary-session workflow guidance injection.
|
|
5
|
+
// SCOPE: work_item_open/list/close tool registration, tracked launch validation on task tool, tracked result parsing/state transitions, round-limit gating, and chat.message guidance injection with subagent filtering.
|
|
6
|
+
// DEPENDS: [@opencode-ai/plugin, src/lib/managed-agents.ts, src/plugins/workflow/protocol.ts, src/plugins/workflow/state.ts, src/plugins/workflow/transitions.ts, src/plugins/workflow/tooling.ts]
|
|
7
|
+
// LINKS: [M-PLUGIN-WORKFLOW, M-WORKFLOW-PROTOCOL, M-WORKFLOW-STATE, M-WORKFLOW-TRANSITIONS, M-WORKFLOW-TOOLING]
|
|
8
|
+
// ROLE: RUNTIME
|
|
9
|
+
// MAP_MODE: EXPORTS
|
|
10
|
+
// END_MODULE_CONTRACT
|
|
11
|
+
//
|
|
12
|
+
// START_MODULE_MAP
|
|
13
|
+
// WorkflowPlugin - Registers workflow work-item tools, tracked task protocol enforcement, and primary-session workflow guidance injection.
|
|
14
|
+
// END_MODULE_MAP
|
|
15
|
+
//
|
|
16
|
+
// START_CHANGE_SUMMARY
|
|
17
|
+
// LAST_CHANGE: [v0.1.1 - Excluded helper primary agents like enhancer from workflow guidance injection because they cannot participate in tracked workflow tooling.]
|
|
18
|
+
// LAST_CHANGE: [v0.1.0 - Added workflow plugin integration with tool wiring, tracked launch/result hooks, loop-gate enforcement, and primary-session guidance injection.]
|
|
19
|
+
// END_CHANGE_SUMMARY
|
|
20
|
+
import { tool } from "@opencode-ai/plugin";
|
|
21
|
+
import { MANAGED_SUBAGENT_NAMES } from "../../lib/managed-agents.js";
|
|
22
|
+
import { parseResultBlock, parseWorkItemHeader, TRACKED_SUBAGENT_NAMES, } from "./protocol.js";
|
|
23
|
+
import { createWorkItemStore, getReviewRound, getWorkItem, transitionWorkItemState, } from "./state.js";
|
|
24
|
+
import { getAllowedNextAgent, getNextState, shouldBlockRound } from "./transitions.js";
|
|
25
|
+
import { createWorkItemCloseTool, createWorkItemListTool, createWorkItemOpenTool, } from "./tooling.js";
|
|
26
|
+
import workflowSystemInstructionTemplate from "./system-instruction.md?raw";
|
|
27
|
+
const z = tool.schema;
|
|
28
|
+
const BUILT_IN_SUBAGENTS = ["general", "explore"];
|
|
29
|
+
const PLUGIN_MANAGED_SUBAGENTS = ["guardian", "memory-reviewer"];
|
|
30
|
+
const INTERNAL_PRIMARY_AGENTS = ["compaction", "title", "summary"];
|
|
31
|
+
const HELPER_PRIMARY_AGENTS = ["enhancer"];
|
|
32
|
+
const TRACKED_SUBAGENT_SET = new Set(TRACKED_SUBAGENT_NAMES);
|
|
33
|
+
const WORK_ITEM_MISSING_MARKER = "__VVOC" + "_SECRET_BEARER_TOKEN_a6f582092f05__";
|
|
34
|
+
const INVALID_NEXT_AGENT_MARKER = "__VVOC" + "_SECRET_BEARER_TOKEN_513fa2de603d__";
|
|
35
|
+
const WORKFLOW_SYSTEM_INSTRUCTION = workflowSystemInstructionTemplate.trim();
|
|
36
|
+
function isTrackedSubagent(value) {
|
|
37
|
+
return typeof value === "string" && TRACKED_SUBAGENT_SET.has(value);
|
|
38
|
+
}
|
|
39
|
+
function readTaskSubagentType(args) {
|
|
40
|
+
if (!args || typeof args !== "object") {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const value = args.subagent_type;
|
|
44
|
+
if (typeof value !== "string") {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
const normalized = value.trim();
|
|
48
|
+
return normalized || undefined;
|
|
49
|
+
}
|
|
50
|
+
function readTaskPrompt(args) {
|
|
51
|
+
if (!args || typeof args !== "object") {
|
|
52
|
+
return "";
|
|
53
|
+
}
|
|
54
|
+
const value = args.prompt;
|
|
55
|
+
if (typeof value !== "string") {
|
|
56
|
+
return "";
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
function createKnownSubagentSet() {
|
|
61
|
+
return new Set([
|
|
62
|
+
...BUILT_IN_SUBAGENTS,
|
|
63
|
+
...PLUGIN_MANAGED_SUBAGENTS,
|
|
64
|
+
...MANAGED_SUBAGENT_NAMES,
|
|
65
|
+
...TRACKED_SUBAGENT_NAMES,
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
function syncConfiguredSubagents(config, knownSubagents) {
|
|
69
|
+
for (const [name, definition] of Object.entries(config.agent ?? {})) {
|
|
70
|
+
if (definition?.mode === "subagent") {
|
|
71
|
+
knownSubagents.add(name);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function shouldInjectForAgent(agentName, knownSubagents) {
|
|
76
|
+
if (!agentName) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (knownSubagents.has(agentName)) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
if (INTERNAL_PRIMARY_AGENTS.includes(agentName)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
if (HELPER_PRIMARY_AGENTS.includes(agentName)) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
function appendSystemInstruction(existingSystem, instruction) {
|
|
91
|
+
if (!existingSystem?.trim()) {
|
|
92
|
+
return instruction;
|
|
93
|
+
}
|
|
94
|
+
if (existingSystem.includes(instruction)) {
|
|
95
|
+
return existingSystem;
|
|
96
|
+
}
|
|
97
|
+
return `${existingSystem.trim()}\n\n${instruction}`;
|
|
98
|
+
}
|
|
99
|
+
function stringifyToolOutput(value) {
|
|
100
|
+
return JSON.stringify(value, null, 2);
|
|
101
|
+
}
|
|
102
|
+
function createRoundLimitMessage(record, attemptedRound) {
|
|
103
|
+
return [
|
|
104
|
+
"LAUNCH_REJECTED_ROUND_LIMIT: review loop gate blocked tracked launch before entering round 3.",
|
|
105
|
+
`Work item ${record.workItemId} is in state ${record.state} at reviewRound=${getReviewRound(record)} and cannot start round ${attemptedRound}.`,
|
|
106
|
+
"Next action: call work_item_list for this session, resolve concerns with explicit context, then open/continue a fresh work item instead of retrying the same loop.",
|
|
107
|
+
].join(" ");
|
|
108
|
+
}
|
|
109
|
+
// START_BLOCK_PLUGIN_ENTRY
|
|
110
|
+
export const WorkflowPlugin = async ({ client }) => {
|
|
111
|
+
const store = createWorkItemStore();
|
|
112
|
+
const knownSubagents = createKnownSubagentSet();
|
|
113
|
+
const workItemOpenTool = createWorkItemOpenTool(store);
|
|
114
|
+
const workItemListTool = createWorkItemListTool(store);
|
|
115
|
+
const workItemCloseTool = createWorkItemCloseTool(store);
|
|
116
|
+
return {
|
|
117
|
+
config: async (config) => {
|
|
118
|
+
syncConfiguredSubagents(config, knownSubagents);
|
|
119
|
+
},
|
|
120
|
+
tool: {
|
|
121
|
+
work_item_open: tool({
|
|
122
|
+
description: workItemOpenTool.description,
|
|
123
|
+
args: {
|
|
124
|
+
items: z.array(z.object({
|
|
125
|
+
key: z.string(),
|
|
126
|
+
title: z.string(),
|
|
127
|
+
})),
|
|
128
|
+
},
|
|
129
|
+
async execute(args, context) {
|
|
130
|
+
return stringifyToolOutput(workItemOpenTool.execute(args, {
|
|
131
|
+
sessionId: context.sessionID,
|
|
132
|
+
}));
|
|
133
|
+
},
|
|
134
|
+
}),
|
|
135
|
+
work_item_list: tool({
|
|
136
|
+
description: workItemListTool.description,
|
|
137
|
+
args: {
|
|
138
|
+
includeClosed: z.boolean().optional(),
|
|
139
|
+
},
|
|
140
|
+
async execute(args, context) {
|
|
141
|
+
return stringifyToolOutput(workItemListTool.execute(args, {
|
|
142
|
+
sessionId: context.sessionID,
|
|
143
|
+
}));
|
|
144
|
+
},
|
|
145
|
+
}),
|
|
146
|
+
work_item_close: tool({
|
|
147
|
+
description: workItemCloseTool.description,
|
|
148
|
+
args: {
|
|
149
|
+
workItemId: z.string(),
|
|
150
|
+
},
|
|
151
|
+
async execute(args, context) {
|
|
152
|
+
return stringifyToolOutput(workItemCloseTool.execute(args, {
|
|
153
|
+
sessionId: context.sessionID,
|
|
154
|
+
}));
|
|
155
|
+
},
|
|
156
|
+
}),
|
|
157
|
+
},
|
|
158
|
+
"tool.execute.before": async (input, output) => {
|
|
159
|
+
if (input.tool !== "task") {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const subagentType = readTaskSubagentType(output.args);
|
|
163
|
+
if (!isTrackedSubagent(subagentType)) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const header = parseWorkItemHeader(readTaskPrompt(output.args));
|
|
167
|
+
if (!header.ok) {
|
|
168
|
+
await client.app.log({
|
|
169
|
+
body: {
|
|
170
|
+
service: "workflow",
|
|
171
|
+
level: "warn",
|
|
172
|
+
message: "[workflow][launchValidation][BLOCK_VALIDATE_LAUNCH] launch rejected",
|
|
173
|
+
extra: {
|
|
174
|
+
sessionID: input.sessionID,
|
|
175
|
+
agent: subagentType,
|
|
176
|
+
reason: header.error.code,
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
throw new Error(`LAUNCH_REJECTED_MISSING_HEADER: ${header.error.message}`);
|
|
181
|
+
}
|
|
182
|
+
const workItem = getWorkItem(store, input.sessionID, header.value);
|
|
183
|
+
if (!workItem || workItem.state === "closed") {
|
|
184
|
+
await client.app.log({
|
|
185
|
+
body: {
|
|
186
|
+
service: "workflow",
|
|
187
|
+
level: "warn",
|
|
188
|
+
message: "[workflow][launchValidation][BLOCK_VALIDATE_LAUNCH] launch rejected",
|
|
189
|
+
extra: {
|
|
190
|
+
sessionID: input.sessionID,
|
|
191
|
+
agent: subagentType,
|
|
192
|
+
workItemId: header.value,
|
|
193
|
+
reason: "WORK_ITEM_NOT_OPEN",
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
});
|
|
197
|
+
throw new Error(`${WORK_ITEM_MISSING_MARKER} LAUNCH_REJECTED_UNKNOWN_WORK_ITEM: no open work item ${header.value} exists in this session. Use work_item_open first or check state with work_item_list.`);
|
|
198
|
+
}
|
|
199
|
+
const allowedNextAgent = getAllowedNextAgent(workItem.state);
|
|
200
|
+
if (allowedNextAgent !== subagentType) {
|
|
201
|
+
await client.app.log({
|
|
202
|
+
body: {
|
|
203
|
+
service: "workflow",
|
|
204
|
+
level: "warn",
|
|
205
|
+
message: "[workflow][launchValidation][BLOCK_VALIDATE_LAUNCH] launch rejected",
|
|
206
|
+
extra: {
|
|
207
|
+
sessionID: input.sessionID,
|
|
208
|
+
agent: subagentType,
|
|
209
|
+
workItemId: workItem.workItemId,
|
|
210
|
+
state: workItem.state,
|
|
211
|
+
allowedNextAgent,
|
|
212
|
+
reason: "INVALID_NEXT_AGENT",
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
throw new Error(`${INVALID_NEXT_AGENT_MARKER} LAUNCH_REJECTED_INVALID_TRANSITION: ${workItem.workItemId} in state ${workItem.state} only allows ${allowedNextAgent ?? "no tracked agent"}.`);
|
|
217
|
+
}
|
|
218
|
+
const reviewRound = getReviewRound(workItem);
|
|
219
|
+
const attemptedRound = subagentType === "vv-implementer" ? reviewRound + 1 : reviewRound;
|
|
220
|
+
const roundBlocked = subagentType === "vv-implementer" && shouldBlockRound(attemptedRound);
|
|
221
|
+
await client.app.log({
|
|
222
|
+
body: {
|
|
223
|
+
service: "workflow",
|
|
224
|
+
level: "info",
|
|
225
|
+
message: "[workflow][loopGate][BLOCK_CHECK_ROUND_LIMIT] round limit check",
|
|
226
|
+
extra: {
|
|
227
|
+
sessionID: input.sessionID,
|
|
228
|
+
workItemId: workItem.workItemId,
|
|
229
|
+
state: workItem.state,
|
|
230
|
+
agent: subagentType,
|
|
231
|
+
reviewRound,
|
|
232
|
+
attemptedRound,
|
|
233
|
+
blocked: roundBlocked,
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
if (roundBlocked) {
|
|
238
|
+
await client.app.log({
|
|
239
|
+
body: {
|
|
240
|
+
service: "workflow",
|
|
241
|
+
level: "warn",
|
|
242
|
+
message: "[workflow][launchValidation][BLOCK_VALIDATE_LAUNCH] launch rejected",
|
|
243
|
+
extra: {
|
|
244
|
+
sessionID: input.sessionID,
|
|
245
|
+
workItemId: workItem.workItemId,
|
|
246
|
+
agent: subagentType,
|
|
247
|
+
reviewRound,
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
throw new Error(createRoundLimitMessage(workItem, attemptedRound));
|
|
252
|
+
}
|
|
253
|
+
await client.app.log({
|
|
254
|
+
body: {
|
|
255
|
+
service: "workflow",
|
|
256
|
+
level: "info",
|
|
257
|
+
message: "[workflow][launchValidation][BLOCK_VALIDATE_LAUNCH] launch validated",
|
|
258
|
+
extra: {
|
|
259
|
+
sessionID: input.sessionID,
|
|
260
|
+
workItemId: workItem.workItemId,
|
|
261
|
+
state: workItem.state,
|
|
262
|
+
agent: subagentType,
|
|
263
|
+
reviewRound,
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
},
|
|
268
|
+
"tool.execute.after": async (input, output) => {
|
|
269
|
+
if (input.tool !== "task") {
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const subagentType = readTaskSubagentType(input.args);
|
|
273
|
+
if (!isTrackedSubagent(subagentType)) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const header = parseWorkItemHeader(readTaskPrompt(input.args));
|
|
277
|
+
if (!header.ok) {
|
|
278
|
+
await client.app.log({
|
|
279
|
+
body: {
|
|
280
|
+
service: "workflow",
|
|
281
|
+
level: "warn",
|
|
282
|
+
message: "[workflow][resultParsing][BLOCK_PARSE_RESULT] protocol error",
|
|
283
|
+
extra: {
|
|
284
|
+
sessionID: input.sessionID,
|
|
285
|
+
agent: subagentType,
|
|
286
|
+
reason: header.error.code,
|
|
287
|
+
},
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
throw new Error(`RESULT_PROTOCOL_ERROR: ${header.error.message}`);
|
|
291
|
+
}
|
|
292
|
+
if (typeof output.output !== "string") {
|
|
293
|
+
await client.app.log({
|
|
294
|
+
body: {
|
|
295
|
+
service: "workflow",
|
|
296
|
+
level: "warn",
|
|
297
|
+
message: "[workflow][resultParsing][BLOCK_PARSE_RESULT] protocol error",
|
|
298
|
+
extra: {
|
|
299
|
+
sessionID: input.sessionID,
|
|
300
|
+
agent: subagentType,
|
|
301
|
+
reason: "INVALID_TASK_OUTPUT",
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
throw new Error("RESULT_PROTOCOL_ERROR: tracked task output must be a string");
|
|
306
|
+
}
|
|
307
|
+
const parsed = parseResultBlock({
|
|
308
|
+
agent: subagentType,
|
|
309
|
+
output: output.output,
|
|
310
|
+
expectedWorkItemId: header.value,
|
|
311
|
+
});
|
|
312
|
+
if (!parsed.ok) {
|
|
313
|
+
await client.app.log({
|
|
314
|
+
body: {
|
|
315
|
+
service: "workflow",
|
|
316
|
+
level: "warn",
|
|
317
|
+
message: "[workflow][resultParsing][BLOCK_PARSE_RESULT] protocol error",
|
|
318
|
+
extra: {
|
|
319
|
+
sessionID: input.sessionID,
|
|
320
|
+
agent: subagentType,
|
|
321
|
+
workItemId: header.value,
|
|
322
|
+
reason: parsed.error.code,
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
});
|
|
326
|
+
throw new Error(`RESULT_PROTOCOL_ERROR: ${parsed.error.message}`);
|
|
327
|
+
}
|
|
328
|
+
await client.app.log({
|
|
329
|
+
body: {
|
|
330
|
+
service: "workflow",
|
|
331
|
+
level: "info",
|
|
332
|
+
message: "[workflow][resultParsing][BLOCK_PARSE_RESULT] result parsed",
|
|
333
|
+
extra: {
|
|
334
|
+
sessionID: input.sessionID,
|
|
335
|
+
agent: subagentType,
|
|
336
|
+
workItemId: parsed.value.workItemId,
|
|
337
|
+
status: parsed.value.status,
|
|
338
|
+
route: parsed.value.route,
|
|
339
|
+
},
|
|
340
|
+
},
|
|
341
|
+
});
|
|
342
|
+
const current = getWorkItem(store, input.sessionID, parsed.value.workItemId);
|
|
343
|
+
if (!current || current.state === "closed") {
|
|
344
|
+
await client.app.log({
|
|
345
|
+
body: {
|
|
346
|
+
service: "workflow",
|
|
347
|
+
level: "warn",
|
|
348
|
+
message: "[workflow][resultParsing][BLOCK_PARSE_RESULT] protocol error",
|
|
349
|
+
extra: {
|
|
350
|
+
sessionID: input.sessionID,
|
|
351
|
+
agent: subagentType,
|
|
352
|
+
workItemId: parsed.value.workItemId,
|
|
353
|
+
reason: "WORK_ITEM_NOT_OPEN",
|
|
354
|
+
},
|
|
355
|
+
},
|
|
356
|
+
});
|
|
357
|
+
throw new Error(`RESULT_PROTOCOL_ERROR: no open work item ${parsed.value.workItemId} exists in this session`);
|
|
358
|
+
}
|
|
359
|
+
const nextState = getNextState(current.state, parsed.value);
|
|
360
|
+
const transitioned = transitionWorkItemState(store, {
|
|
361
|
+
sessionId: input.sessionID,
|
|
362
|
+
workItemId: parsed.value.workItemId,
|
|
363
|
+
state: nextState,
|
|
364
|
+
actor: subagentType,
|
|
365
|
+
});
|
|
366
|
+
if (!transitioned.ok) {
|
|
367
|
+
await client.app.log({
|
|
368
|
+
body: {
|
|
369
|
+
service: "workflow",
|
|
370
|
+
level: "warn",
|
|
371
|
+
message: "[workflow][resultParsing][BLOCK_PARSE_RESULT] protocol error",
|
|
372
|
+
extra: {
|
|
373
|
+
sessionID: input.sessionID,
|
|
374
|
+
agent: subagentType,
|
|
375
|
+
workItemId: parsed.value.workItemId,
|
|
376
|
+
reason: transitioned.errorCode,
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
});
|
|
380
|
+
throw new Error(`RESULT_PROTOCOL_ERROR: ${transitioned.message}`);
|
|
381
|
+
}
|
|
382
|
+
await client.app.log({
|
|
383
|
+
body: {
|
|
384
|
+
service: "workflow",
|
|
385
|
+
level: "info",
|
|
386
|
+
message: "[workflow][stateTransition][BLOCK_TRANSITION_STATE] state transitioned",
|
|
387
|
+
extra: {
|
|
388
|
+
sessionID: input.sessionID,
|
|
389
|
+
agent: subagentType,
|
|
390
|
+
workItemId: parsed.value.workItemId,
|
|
391
|
+
fromState: current.state,
|
|
392
|
+
toState: transitioned.record.state,
|
|
393
|
+
specReviewCount: transitioned.record.specReviewCount,
|
|
394
|
+
codeReviewCount: transitioned.record.codeReviewCount,
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
});
|
|
398
|
+
if (parsed.value.status === "NEEDS_CONTEXT" || parsed.value.status === "BLOCKED") {
|
|
399
|
+
throw new Error(`RESULT_HARD_STOP: ${parsed.value.status} requires explicit user action. Inspect work_item_list before retrying.`);
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
"chat.message": async (_input, output) => {
|
|
403
|
+
if (!shouldInjectForAgent(output.message.agent, knownSubagents)) {
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
output.message.system = appendSystemInstruction(output.message.system, WORKFLOW_SYSTEM_INSTRUCTION);
|
|
407
|
+
},
|
|
408
|
+
};
|
|
409
|
+
};
|
|
410
|
+
// END_BLOCK_PLUGIN_ENTRY
|
|
411
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/workflow/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iBAAiB;AACjB,wBAAwB;AACxB,mIAAmI;AACnI,2NAA2N;AAC3N,qMAAqM;AACrM,kHAAkH;AAClH,kBAAkB;AAClB,sBAAsB;AACtB,sBAAsB;AACtB,EAAE;AACF,mBAAmB;AACnB,6IAA6I;AAC7I,iBAAiB;AACjB,EAAE;AACF,uBAAuB;AACvB,uKAAuK;AACvK,4KAA4K;AAC5K,qBAAqB;AAErB,OAAO,EAA4B,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GAEvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,uBAAuB,GAExB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,iCAAiC,MAAM,6BAA6B,CAAC;AAE5E,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAEtB,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,SAAS,CAAU,CAAC;AAC3D,MAAM,wBAAwB,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAU,CAAC;AAC1E,MAAM,uBAAuB,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAC5E,MAAM,qBAAqB,GAAG,CAAC,UAAU,CAAU,CAAC;AACpD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAS,sBAAsB,CAAC,CAAC;AACrE,MAAM,wBAAwB,GAAG,QAAQ,GAAG,qCAAqC,CAAC;AAClF,MAAM,yBAAyB,GAAG,QAAQ,GAAG,qCAAqC,CAAC;AAEnF,MAAM,2BAA2B,GAAG,iCAAiC,CAAC,IAAI,EAAE,CAAC;AAM7E,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAa;IACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAI,IAAoC,CAAC,aAAa,CAAC;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,IAAa;IACnC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAI,IAA6B,CAAC,MAAM,CAAC;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB;IAC7B,OAAO,IAAI,GAAG,CAAC;QACb,GAAG,kBAAkB;QACrB,GAAG,wBAAwB;QAC3B,GAAG,sBAAsB;QACzB,GAAG,sBAAsB;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc,EAAE,cAA2B;IAC1E,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,IAAK,UAA2C,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YACtE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,SAA6B,EAAE,cAA2B;IACtF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,SAAqD,CAAC,EAAE,CAAC;QAC5F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,SAAmD,CAAC,EAAE,CAAC;QACxF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,cAAkC,EAAE,WAAmB;IACtF,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,WAAW,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA8B;IACzD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAsB,EAAE,cAAsB;IAC7E,OAAO;QACL,+FAA+F;QAC/F,aAAa,MAAM,CAAC,UAAU,gBAAgB,MAAM,CAAC,KAAK,mBAAmB,cAAc,CAAC,MAAM,CAAC,2BAA2B,cAAc,GAAG;QAC/I,oKAAoK;KACrK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,MAAM,cAAc,GAAW,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACzD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,sBAAsB,EAAE,CAAC;IAEhD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAEzD,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACvB,uBAAuB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,EAAE;YACJ,cAAc,EAAE,IAAI,CAAC;gBACnB,WAAW,EAAE,gBAAgB,CAAC,WAAW;gBACzC,IAAI,EAAE;oBACJ,KAAK,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;wBACP,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;wBACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;qBAClB,CAAC,CACH;iBACF;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;oBACzB,OAAO,mBAAmB,CACxB,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE;wBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;qBAC7B,CAAC,CACH,CAAC;gBACJ,CAAC;aACF,CAAC;YACF,cAAc,EAAE,IAAI,CAAC;gBACnB,WAAW,EAAE,gBAAgB,CAAC,WAAW;gBACzC,IAAI,EAAE;oBACJ,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;iBACtC;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;oBACzB,OAAO,mBAAmB,CACxB,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE;wBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;qBAC7B,CAAC,CACH,CAAC;gBACJ,CAAC;aACF,CAAC;YACF,eAAe,EAAE,IAAI,CAAC;gBACpB,WAAW,EAAE,iBAAiB,CAAC,WAAW;gBAC1C,IAAI,EAAE;oBACJ,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;iBACvB;gBACD,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;oBACzB,OAAO,mBAAmB,CACxB,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE;wBAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;qBAC7B,CAAC,CACH,CAAC;gBACJ,CAAC;aACF,CAAC;SACH;QACD,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,qEAAqE;wBAC9E,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;yBAC1B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,qEAAqE;wBAC9E,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,UAAU,EAAE,MAAM,CAAC,KAAK;4BACxB,MAAM,EAAE,oBAAoB;yBAC7B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CACb,GAAG,wBAAwB,yDAAyD,MAAM,CAAC,KAAK,uFAAuF,CACxL,CAAC;YACJ,CAAC;YAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,gBAAgB,KAAK,YAAY,EAAE,CAAC;gBACtC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,qEAAqE;wBAC9E,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;4BAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;4BACrB,gBAAgB;4BAChB,MAAM,EAAE,oBAAoB;yBAC7B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CACb,GAAG,yBAAyB,wCAAwC,QAAQ,CAAC,UAAU,aAAa,QAAQ,CAAC,KAAK,gBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,CAC5K,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,cAAc,GAAG,YAAY,KAAK,gBAAgB,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YACzF,MAAM,YAAY,GAAG,YAAY,KAAK,gBAAgB,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAE3F,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBACnB,IAAI,EAAE;oBACJ,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,iEAAiE;oBAC1E,KAAK,EAAE;wBACL,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,KAAK,EAAE,YAAY;wBACnB,WAAW;wBACX,cAAc;wBACd,OAAO,EAAE,YAAY;qBACtB;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,qEAAqE;wBAC9E,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;4BAC/B,KAAK,EAAE,YAAY;4BACnB,WAAW;yBACZ;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBACnB,IAAI,EAAE;oBACJ,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,sEAAsE;oBAC/E,KAAK,EAAE;wBACL,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;wBACrB,KAAK,EAAE,YAAY;wBACnB,WAAW;qBACZ;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QACD,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,8DAA8D;wBACvE,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;yBAC1B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,8DAA8D;wBACvE,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,MAAM,EAAE,qBAAqB;yBAC9B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,MAAM,GAAG,gBAAgB,CAAC;gBAC9B,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,kBAAkB,EAAE,MAAM,CAAC,KAAK;aACjC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,8DAA8D;wBACvE,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,UAAU,EAAE,MAAM,CAAC,KAAK;4BACxB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;yBAC1B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBACnB,IAAI,EAAE;oBACJ,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,6DAA6D;oBACtE,KAAK,EAAE;wBACL,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,KAAK,EAAE,YAAY;wBACnB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;wBACnC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;wBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK;qBAC1B;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7E,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,8DAA8D;wBACvE,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;4BACnC,MAAM,EAAE,oBAAoB;yBAC7B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,CAAC,KAAK,CAAC,UAAU,yBAAyB,CAC7F,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5D,MAAM,YAAY,GAAG,uBAAuB,CAAC,KAAK,EAAE;gBAClD,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;gBACnC,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gBACrB,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,EAAE;wBACJ,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,MAAM;wBACb,OAAO,EAAE,8DAA8D;wBACvE,KAAK,EAAE;4BACL,SAAS,EAAE,KAAK,CAAC,SAAS;4BAC1B,KAAK,EAAE,YAAY;4BACnB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;4BACnC,MAAM,EAAE,YAAY,CAAC,SAAS;yBAC/B;qBACF;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;gBACnB,IAAI,EAAE;oBACJ,OAAO,EAAE,UAAU;oBACnB,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,wEAAwE;oBACjF,KAAK,EAAE;wBACL,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,KAAK,EAAE,YAAY;wBACnB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;wBACnC,SAAS,EAAE,OAAO,CAAC,KAAK;wBACxB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK;wBAClC,eAAe,EAAE,YAAY,CAAC,MAAM,CAAC,eAAe;wBACpD,eAAe,EAAE,YAAY,CAAC,MAAM,CAAC,eAAe;qBACrD;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjF,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAC,KAAK,CAAC,MAAM,yEAAyE,CAClH,CAAC;YACJ,CAAC;QACH,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACvC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;gBAChE,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,uBAAuB,CAC7C,MAAM,CAAC,OAAO,CAAC,MAAM,EACrB,2BAA2B,CAC5B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AACF,yBAAyB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare const TRACKED_SUBAGENT_NAMES: readonly ["vv-implementer", "vv-spec-reviewer", "vv-code-reviewer"];
|
|
2
|
+
export type TrackedAgentName = (typeof TRACKED_SUBAGENT_NAMES)[number];
|
|
3
|
+
export declare const ALLOWED_STATUSES: {
|
|
4
|
+
readonly "vv-implementer": readonly ["DONE", "DONE_WITH_CONCERNS", "NEEDS_CONTEXT", "BLOCKED"];
|
|
5
|
+
readonly "vv-spec-reviewer": readonly ["PASS", "FAIL", "NEEDS_CONTEXT"];
|
|
6
|
+
readonly "vv-code-reviewer": readonly ["PASS", "FAIL", "NEEDS_CONTEXT"];
|
|
7
|
+
};
|
|
8
|
+
export type VVocStatus = "DONE" | "DONE_WITH_CONCERNS" | "NEEDS_CONTEXT" | "BLOCKED" | "PASS" | "FAIL";
|
|
9
|
+
export type ParsedResultBlock = {
|
|
10
|
+
agent: TrackedAgentName;
|
|
11
|
+
workItemId: string;
|
|
12
|
+
status: VVocStatus;
|
|
13
|
+
route?: string;
|
|
14
|
+
};
|
|
15
|
+
export type ProtocolErrorCode = "MISSING_WORK_ITEM_ID" | "MISSING_STATUS" | "MISSING_ROUTE" | "UNKNOWN_STATUS" | "STATUS_NOT_ALLOWED" | "UNEXPECTED_TOP_BLOCK_LINE" | "DUPLICATE_TOP_BLOCK_FIELD" | "WORK_ITEM_MISMATCH" | "MALFORMED_WORK_ITEM_HEADER" | "MISSING_WORK_ITEM_HEADER";
|
|
16
|
+
export type ProtocolError = {
|
|
17
|
+
code: ProtocolErrorCode;
|
|
18
|
+
message: string;
|
|
19
|
+
};
|
|
20
|
+
export type ProtocolResult<T> = {
|
|
21
|
+
ok: true;
|
|
22
|
+
value: T;
|
|
23
|
+
} | {
|
|
24
|
+
ok: false;
|
|
25
|
+
error: ProtocolError;
|
|
26
|
+
};
|
|
27
|
+
export declare function validateStatusForAgent(agent: TrackedAgentName, status: string): ProtocolResult<VVocStatus>;
|
|
28
|
+
export declare function parseResultBlock(options: {
|
|
29
|
+
agent: TrackedAgentName;
|
|
30
|
+
output: string;
|
|
31
|
+
expectedWorkItemId?: string;
|
|
32
|
+
}): ProtocolResult<ParsedResultBlock>;
|
|
33
|
+
export declare function parseWorkItemHeader(promptText: string): ProtocolResult<string>;
|