frontend-harness 0.1.0 → 0.2.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/AGENTS.md +17 -5
- package/CLAUDE.md +17 -5
- package/README.md +65 -11
- package/dist/cli/index.js +166 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/runtime/builtin-skills.js +10 -1
- package/dist/runtime/builtin-skills.js.map +1 -1
- package/dist/runtime/clean.js +6 -1
- package/dist/runtime/clean.js.map +1 -1
- package/dist/runtime/command-taxonomy.js +12 -1
- package/dist/runtime/command-taxonomy.js.map +1 -1
- package/dist/runtime/common/naming.d.ts +2 -0
- package/dist/runtime/common/naming.js +13 -0
- package/dist/runtime/common/naming.js.map +1 -0
- package/dist/runtime/common/parsing.d.ts +11 -0
- package/dist/runtime/common/parsing.js +30 -0
- package/dist/runtime/common/parsing.js.map +1 -0
- package/dist/runtime/common/text.d.ts +1 -0
- package/dist/runtime/common/text.js +4 -0
- package/dist/runtime/common/text.js.map +1 -0
- package/dist/runtime/context.js +3 -2
- package/dist/runtime/context.js.map +1 -1
- package/dist/runtime/graph.js +1 -1
- package/dist/runtime/graph.js.map +1 -1
- package/dist/runtime/knowledge.d.ts +136 -1
- package/dist/runtime/knowledge.js +658 -17
- package/dist/runtime/knowledge.js.map +1 -1
- package/dist/runtime/plan/component-resolver.d.ts +8 -0
- package/dist/runtime/plan/component-resolver.js +350 -0
- package/dist/runtime/plan/component-resolver.js.map +1 -0
- package/dist/runtime/plan/guidance.d.ts +3 -0
- package/dist/runtime/plan/guidance.js +143 -0
- package/dist/runtime/plan/guidance.js.map +1 -0
- package/dist/runtime/plan/proposal.d.ts +2 -0
- package/dist/runtime/plan/proposal.js +251 -0
- package/dist/runtime/plan/proposal.js.map +1 -0
- package/dist/runtime/plan/workflow.d.ts +8 -0
- package/dist/runtime/plan/workflow.js +234 -0
- package/dist/runtime/plan/workflow.js.map +1 -0
- package/dist/runtime/plan.d.ts +4 -3
- package/dist/runtime/plan.js +163 -445
- package/dist/runtime/plan.js.map +1 -1
- package/dist/runtime/policy-provenance.js +30 -17
- package/dist/runtime/policy-provenance.js.map +1 -1
- package/dist/runtime/project-discovery.js +12 -4
- package/dist/runtime/project-discovery.js.map +1 -1
- package/dist/runtime/project-paths.js +5 -2
- package/dist/runtime/project-paths.js.map +1 -1
- package/dist/runtime/protocol-init.js +7 -4
- package/dist/runtime/protocol-init.js.map +1 -1
- package/dist/runtime/repair-decision.js +15 -30
- package/dist/runtime/repair-decision.js.map +1 -1
- package/dist/runtime/repair-packet.js +8 -1
- package/dist/runtime/repair-packet.js.map +1 -1
- package/dist/runtime/scaffold/vue-template.d.ts +7 -0
- package/dist/runtime/scaffold/vue-template.js +187 -0
- package/dist/runtime/scaffold/vue-template.js.map +1 -0
- package/dist/runtime/scaffold.d.ts +21 -0
- package/dist/runtime/scaffold.js +80 -0
- package/dist/runtime/scaffold.js.map +1 -0
- package/dist/runtime/skills.js +3 -3
- package/dist/runtime/skills.js.map +1 -1
- package/dist/runtime/state.d.ts +4 -2
- package/dist/runtime/state.js +84 -20
- package/dist/runtime/state.js.map +1 -1
- package/dist/runtime/ui-restoration.d.ts +4 -0
- package/dist/runtime/ui-restoration.js +38 -0
- package/dist/runtime/ui-restoration.js.map +1 -0
- package/dist/runtime/units.js +38 -2
- package/dist/runtime/units.js.map +1 -1
- package/dist/runtime/verification-commands.js +8 -4
- package/dist/runtime/verification-commands.js.map +1 -1
- package/dist/runtime/verify.js +107 -40
- package/dist/runtime/verify.js.map +1 -1
- package/dist/schemas/types.d.ts +73 -6
- package/dist/schemas/validation.js +21 -0
- package/dist/schemas/validation.js.map +1 -1
- package/dist/storage/json.js +6 -1
- package/dist/storage/json.js.map +1 -1
- package/docs/DIRECTION.md +1 -1
- package/package.json +3 -4
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { relativeHarnessPath } from "../../storage/paths.js";
|
|
2
|
+
import { UI_RESTORATION_GUIDANCE } from "../ui-restoration.js";
|
|
3
|
+
export function buildExecutionGuidance() {
|
|
4
|
+
return [
|
|
5
|
+
{
|
|
6
|
+
order: 1,
|
|
7
|
+
action: "inspect_plan",
|
|
8
|
+
description: `Read ${relativeHarnessPath("plans", "latest.json")} and ${relativeHarnessPath("execution-units", "latest.json")} before editing.`,
|
|
9
|
+
command: null,
|
|
10
|
+
condition: null
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
order: 2,
|
|
14
|
+
action: "edit_files",
|
|
15
|
+
description: "Edit only the project files required by the planned execution units.",
|
|
16
|
+
command: null,
|
|
17
|
+
condition: null
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
order: 3,
|
|
21
|
+
action: "record_changes",
|
|
22
|
+
description: "Record each changed project file so the harness state reflects the execution boundary.",
|
|
23
|
+
command: "frontend-harness state record-change <file>",
|
|
24
|
+
condition: "after editing"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
order: 4,
|
|
28
|
+
action: "verify",
|
|
29
|
+
description: "Run the configured verification commands and inspect the JSON result.",
|
|
30
|
+
command: "frontend-harness verify --json",
|
|
31
|
+
condition: "after recording changes"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
order: 5,
|
|
35
|
+
action: "fix_failed_verification",
|
|
36
|
+
description: `If verification fails, generate and inspect ${relativeHarnessPath("repair", "latest.json")} before patching the relevant project files, recording new changes, and rerunning verification.`,
|
|
37
|
+
command: "frontend-harness repair packet --json",
|
|
38
|
+
condition: "when verification status is failed or error"
|
|
39
|
+
}
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
export function renderGuidance(task, components, units, executionGuidance, meta) {
|
|
43
|
+
return `# Agent Execution Guidance
|
|
44
|
+
|
|
45
|
+
## Task
|
|
46
|
+
|
|
47
|
+
- Intent: ${task.intent}
|
|
48
|
+
- Scope: ${task.scope}
|
|
49
|
+
|
|
50
|
+
## Frontend Workflow Policy
|
|
51
|
+
|
|
52
|
+
- Kind: ${task.frontendWorkflow?.kind ?? "unknown"}
|
|
53
|
+
- Summary: ${task.frontendWorkflow?.summary ?? "No workflow policy inferred."}
|
|
54
|
+
- Knowledge: ${(task.frontendWorkflow?.requiredKnowledgeActions ?? []).join(" ")}
|
|
55
|
+
- Verification focus: ${(task.frontendWorkflow?.verificationFocus ?? []).join(", ")}
|
|
56
|
+
${renderWorkflowQualityGates(task)}
|
|
57
|
+
|
|
58
|
+
## Decision Trace
|
|
59
|
+
|
|
60
|
+
- Workflow: ${meta.decisionTrace.workflow.source}; ${meta.decisionTrace.workflow.reason}
|
|
61
|
+
- Targets: ${meta.decisionTrace.targets.source}; ${meta.decisionTrace.targets.reason}
|
|
62
|
+
- Components: ${meta.decisionTrace.components.source}; ${meta.decisionTrace.components.reason}
|
|
63
|
+
- Warnings: ${meta.warnings.length ? meta.warnings.join(" ") : "none"}
|
|
64
|
+
|
|
65
|
+
## Agent Evidence Ambiguities
|
|
66
|
+
|
|
67
|
+
${renderAmbiguities(task)}
|
|
68
|
+
|
|
69
|
+
## Project References
|
|
70
|
+
|
|
71
|
+
${renderProjectReferences(task)}
|
|
72
|
+
|
|
73
|
+
## Loop
|
|
74
|
+
|
|
75
|
+
${executionGuidance.map(renderExecutionGuidanceStep).join("\n")}
|
|
76
|
+
|
|
77
|
+
## Components
|
|
78
|
+
|
|
79
|
+
${components.map((component) => `- ${component.name}: ${component.file} (${component.responsibility})`).join("\n")}
|
|
80
|
+
|
|
81
|
+
## Units
|
|
82
|
+
|
|
83
|
+
${units.map(renderUnitGuidance).join("\n")}
|
|
84
|
+
`;
|
|
85
|
+
}
|
|
86
|
+
function renderProjectReferences(task) {
|
|
87
|
+
const provenance = task.policyProvenance;
|
|
88
|
+
if (!provenance) {
|
|
89
|
+
return "- No project-local skills or knowledge selected.";
|
|
90
|
+
}
|
|
91
|
+
const lines = [];
|
|
92
|
+
if (provenance.skillRoutes.length) {
|
|
93
|
+
lines.push("Selected skills:");
|
|
94
|
+
for (const route of provenance.skillRoutes) {
|
|
95
|
+
lines.push(`- ${route.name}: ${route.path}; source: ${route.source}; score: ${route.score}; reasons: ${route.reasons.join(", ")}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
lines.push("Selected skills: none.");
|
|
100
|
+
}
|
|
101
|
+
if (provenance.knowledgeReferences.length) {
|
|
102
|
+
lines.push("Selected knowledge:");
|
|
103
|
+
for (const knowledgePath of provenance.knowledgeReferences) {
|
|
104
|
+
const sha256 = provenance.knowledgeSha256[knowledgePath];
|
|
105
|
+
lines.push(`- ${knowledgePath}${sha256 ? `; sha256: ${sha256}` : ""}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
lines.push("Selected knowledge: none.");
|
|
110
|
+
}
|
|
111
|
+
lines.push(`Selection reason: ${provenance.selectionReason}`);
|
|
112
|
+
return lines.join("\n");
|
|
113
|
+
}
|
|
114
|
+
function renderAmbiguities(task) {
|
|
115
|
+
const ambiguities = task.agentProposal?.planningEvidence?.ambiguities ?? [];
|
|
116
|
+
if (!ambiguities.length) {
|
|
117
|
+
return "- none";
|
|
118
|
+
}
|
|
119
|
+
return ambiguities.map((ambiguity) => {
|
|
120
|
+
return `- ${ambiguity.severity}: ${ambiguity.question}`;
|
|
121
|
+
}).join("\n");
|
|
122
|
+
}
|
|
123
|
+
function renderWorkflowQualityGates(task) {
|
|
124
|
+
if (task.frontendWorkflow?.kind !== "ui_implementation") {
|
|
125
|
+
return "";
|
|
126
|
+
}
|
|
127
|
+
return [
|
|
128
|
+
"- UI adaptation quality gates:",
|
|
129
|
+
...UI_RESTORATION_GUIDANCE.map((item) => ` - ${item}`)
|
|
130
|
+
].join("\n");
|
|
131
|
+
}
|
|
132
|
+
function renderExecutionGuidanceStep(step) {
|
|
133
|
+
const command = step.command ? ` Command: \`${step.command}\`.` : "";
|
|
134
|
+
const condition = step.condition ? ` Condition: ${step.condition}.` : "";
|
|
135
|
+
return `${step.order}. ${step.description}${command}${condition}`;
|
|
136
|
+
}
|
|
137
|
+
function renderUnitGuidance(unit) {
|
|
138
|
+
const dependencies = JSON.stringify(unit.dependsOn);
|
|
139
|
+
const parallelGroup = JSON.stringify(unit.parallelGroup);
|
|
140
|
+
const independent = unit.dependsOn.length === 0;
|
|
141
|
+
return `- ${unit.id}: ${unit.task}; file ${unit.file}; independent: ${independent}; dependsOn: ${dependencies}; parallelGroup: ${parallelGroup}; verification focus: ${unit.verification.join(", ")}`;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=guidance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../../src/runtime/plan/guidance.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL;YACE,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,cAAc;YACtB,WAAW,EAAE,QAAQ,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,mBAAmB,CAAC,iBAAiB,EAAE,aAAa,CAAC,kBAAkB;YAC/I,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;SAChB;QACD;YACE,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,YAAY;YACpB,WAAW,EAAE,sEAAsE;YACnF,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAI;SAChB;QACD;YACE,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,gBAAgB;YACxB,WAAW,EAAE,wFAAwF;YACrG,OAAO,EAAE,6CAA6C;YACtD,SAAS,EAAE,eAAe;SAC3B;QACD;YACE,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,uEAAuE;YACpF,OAAO,EAAE,gCAAgC;YACzC,SAAS,EAAE,yBAAyB;SACrC;QACD;YACE,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,yBAAyB;YACjC,WAAW,EAAE,+CAA+C,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,iGAAiG;YACzM,OAAO,EAAE,uCAAuC;YAChD,SAAS,EAAE,6CAA6C;SACzD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAuB,EACvB,UAA2B,EAC3B,KAAsB,EACtB,iBAA0C,EAC1C,IAAc;IAEd,OAAO;;;;YAIG,IAAI,CAAC,MAAM;WACZ,IAAI,CAAC,KAAK;;;;UAIX,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,SAAS;aACrC,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI,8BAA8B;eAC9D,CAAC,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBACxD,CAAC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EACjF,0BAA0B,CAAC,IAAI,CAAC;;;;cAIpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM;aAC1E,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM;gBACpE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM;cAC/E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM;;;;EAInE,iBAAiB,CAAC,IAAI,CAAC;;;;EAIvB,uBAAuB,CAAC,IAAI,CAAC;;;;EAI7B,iBAAiB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAI7D,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;EAIhH,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACzC,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAuB;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,kDAAkD,CAAC;IAC5D,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrI,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,UAAU,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,aAAa,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,KAAK,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAuB;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,WAAW,IAAI,EAAE,CAAC;IAC5E,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACnC,OAAO,KAAK,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC1D,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAuB;IACzD,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACxD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO;QACL,gCAAgC;QAChC,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;KACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,2BAA2B,CAAC,IAA2B;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAmB;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;IAEhD,OAAO,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,kBAAkB,WAAW,gBAAgB,YAAY,oBAAoB,aAAa,yBAAyB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACxM,CAAC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { isRecord, parseBoundedString, parseStringArray as parseBoundedStringArray } from "../common/parsing.js";
|
|
4
|
+
const AGENT_PROPOSAL_PARSE_OPTIONS = {
|
|
5
|
+
prefix: "agent proposal",
|
|
6
|
+
maxLength: 500
|
|
7
|
+
};
|
|
8
|
+
export function readAgentPlanningProposal(projectRoot, file) {
|
|
9
|
+
const fullPath = path.resolve(projectRoot, file);
|
|
10
|
+
let parsed;
|
|
11
|
+
try {
|
|
12
|
+
parsed = JSON.parse(fs.readFileSync(fullPath, "utf8"));
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
16
|
+
throw new Error(`agent proposal file must contain valid JSON: ${file}: ${detail}`);
|
|
17
|
+
}
|
|
18
|
+
return parseAgentPlanningProposal(parsed, file);
|
|
19
|
+
}
|
|
20
|
+
function parseAgentPlanningProposal(value, file) {
|
|
21
|
+
if (!isRecord(value) || Array.isArray(value)) {
|
|
22
|
+
throw new Error(`agent proposal file must contain a JSON object: ${file}`);
|
|
23
|
+
}
|
|
24
|
+
return parseAgentPlanningProposalEnvelope(value, file);
|
|
25
|
+
}
|
|
26
|
+
function parseAgentPlanningProposalEnvelope(value, file) {
|
|
27
|
+
const allowedKeys = new Set(["contractVersion", "proposal"]);
|
|
28
|
+
for (const key of Object.keys(value)) {
|
|
29
|
+
if (!allowedKeys.has(key)) {
|
|
30
|
+
throw new Error(`agent proposal file contains unsupported field: ${key}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (value["contractVersion"] !== 1) {
|
|
34
|
+
throw new Error("agent proposal contractVersion must be 1");
|
|
35
|
+
}
|
|
36
|
+
if (!isRecord(value["proposal"]) || Array.isArray(value["proposal"])) {
|
|
37
|
+
throw new Error(`agent proposal file proposal must be a JSON object: ${file}`);
|
|
38
|
+
}
|
|
39
|
+
const proposal = parseAgentPlanningProposalObject(value["proposal"], new Set([
|
|
40
|
+
"intentSuggestion",
|
|
41
|
+
"constraintHints",
|
|
42
|
+
"componentHints",
|
|
43
|
+
"planningEvidence"
|
|
44
|
+
]), "agent proposal file proposal");
|
|
45
|
+
return {
|
|
46
|
+
contractVersion: 1,
|
|
47
|
+
...proposal
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function parseAgentPlanningProposalObject(value, allowedKeys, label) {
|
|
51
|
+
for (const key of Object.keys(value)) {
|
|
52
|
+
if (!allowedKeys.has(key)) {
|
|
53
|
+
throw new Error(`${label} contains unsupported field: ${key}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const proposal = {};
|
|
57
|
+
if (value["intentSuggestion"] !== undefined) {
|
|
58
|
+
proposal.intentSuggestion = parseAgentProposalString(value["intentSuggestion"], "intentSuggestion");
|
|
59
|
+
}
|
|
60
|
+
if (value["constraintHints"] !== undefined) {
|
|
61
|
+
proposal.constraintHints = parseStringArray(value["constraintHints"], "constraintHints");
|
|
62
|
+
}
|
|
63
|
+
if (value["componentHints"] !== undefined) {
|
|
64
|
+
proposal.componentHints = parseComponentHints(value["componentHints"]);
|
|
65
|
+
}
|
|
66
|
+
if (value["planningEvidence"] !== undefined) {
|
|
67
|
+
proposal.planningEvidence = parsePlanningEvidence(value["planningEvidence"]);
|
|
68
|
+
}
|
|
69
|
+
return proposal;
|
|
70
|
+
}
|
|
71
|
+
function parseWorkflowSuggestion(value) {
|
|
72
|
+
const workflow = parseAgentProposalString(value, "workflow candidate kind");
|
|
73
|
+
const allowed = [
|
|
74
|
+
"ui_implementation",
|
|
75
|
+
"prd_knowledge",
|
|
76
|
+
"api_integration",
|
|
77
|
+
"frontend_test",
|
|
78
|
+
"bug_fix",
|
|
79
|
+
"frontend_review",
|
|
80
|
+
"requirement_change",
|
|
81
|
+
"documentation",
|
|
82
|
+
"maintenance"
|
|
83
|
+
];
|
|
84
|
+
if (!allowed.includes(workflow)) {
|
|
85
|
+
throw new Error(`agent proposal workflow candidate kind must be one of: ${allowed.join(", ")}`);
|
|
86
|
+
}
|
|
87
|
+
return workflow;
|
|
88
|
+
}
|
|
89
|
+
function parseStringArray(value, label) {
|
|
90
|
+
return parseBoundedStringArray(value, label, {
|
|
91
|
+
...AGENT_PROPOSAL_PARSE_OPTIONS,
|
|
92
|
+
maxItems: 10
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function parseComponentHints(value) {
|
|
96
|
+
if (!Array.isArray(value)) {
|
|
97
|
+
throw new Error("agent proposal componentHints must be an array");
|
|
98
|
+
}
|
|
99
|
+
if (value.length > 10) {
|
|
100
|
+
throw new Error("agent proposal componentHints cannot contain more than 10 items");
|
|
101
|
+
}
|
|
102
|
+
return value.map((item, index) => {
|
|
103
|
+
if (!isRecord(item) || Array.isArray(item)) {
|
|
104
|
+
throw new Error(`agent proposal componentHints[${index}] must be an object`);
|
|
105
|
+
}
|
|
106
|
+
const allowedKeys = new Set(["name", "responsibility"]);
|
|
107
|
+
for (const key of Object.keys(item)) {
|
|
108
|
+
if (!allowedKeys.has(key)) {
|
|
109
|
+
throw new Error(`agent proposal componentHints[${index}] contains unsupported field: ${key}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
...(item["name"] !== undefined ? { name: parseAgentProposalString(item["name"], `componentHints[${index}].name`) } : {}),
|
|
114
|
+
...(item["responsibility"] !== undefined
|
|
115
|
+
? { responsibility: parseAgentProposalString(item["responsibility"], `componentHints[${index}].responsibility`) }
|
|
116
|
+
: {})
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function parsePlanningEvidence(value) {
|
|
121
|
+
if (!isRecord(value) || Array.isArray(value)) {
|
|
122
|
+
throw new Error("agent proposal planningEvidence must be an object");
|
|
123
|
+
}
|
|
124
|
+
const allowedKeys = new Set(["workflowCandidates", "targetCandidates", "verificationCandidates", "ambiguities"]);
|
|
125
|
+
for (const key of Object.keys(value)) {
|
|
126
|
+
if (!allowedKeys.has(key)) {
|
|
127
|
+
throw new Error(`agent proposal planningEvidence contains unsupported field: ${key}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const evidence = {};
|
|
131
|
+
if (value["workflowCandidates"] !== undefined) {
|
|
132
|
+
evidence.workflowCandidates = parseWorkflowCandidates(value["workflowCandidates"]);
|
|
133
|
+
}
|
|
134
|
+
if (value["targetCandidates"] !== undefined) {
|
|
135
|
+
evidence.targetCandidates = parseTargetCandidates(value["targetCandidates"]);
|
|
136
|
+
}
|
|
137
|
+
if (value["verificationCandidates"] !== undefined) {
|
|
138
|
+
evidence.verificationCandidates = parseVerificationCandidates(value["verificationCandidates"]);
|
|
139
|
+
}
|
|
140
|
+
if (value["ambiguities"] !== undefined) {
|
|
141
|
+
evidence.ambiguities = parseAmbiguities(value["ambiguities"]);
|
|
142
|
+
}
|
|
143
|
+
return evidence;
|
|
144
|
+
}
|
|
145
|
+
function parseWorkflowCandidates(value) {
|
|
146
|
+
if (!Array.isArray(value)) {
|
|
147
|
+
throw new Error("agent proposal planningEvidence.workflowCandidates must be an array");
|
|
148
|
+
}
|
|
149
|
+
if (value.length > 10) {
|
|
150
|
+
throw new Error("agent proposal planningEvidence.workflowCandidates cannot contain more than 10 items");
|
|
151
|
+
}
|
|
152
|
+
return value.map((item, index) => {
|
|
153
|
+
if (!isRecord(item) || Array.isArray(item)) {
|
|
154
|
+
throw new Error(`agent proposal planningEvidence.workflowCandidates[${index}] must be an object`);
|
|
155
|
+
}
|
|
156
|
+
const allowedKeys = new Set(["kind", "confidence", "reasons"]);
|
|
157
|
+
for (const key of Object.keys(item)) {
|
|
158
|
+
if (!allowedKeys.has(key)) {
|
|
159
|
+
throw new Error(`agent proposal planningEvidence.workflowCandidates[${index}] contains unsupported field: ${key}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const kind = parseWorkflowSuggestion(item["kind"]);
|
|
163
|
+
const confidence = parseProbability(item["confidence"], `planningEvidence.workflowCandidates[${index}].confidence`);
|
|
164
|
+
const reasons = parseStringArray(item["reasons"], `planningEvidence.workflowCandidates[${index}].reasons`);
|
|
165
|
+
return { kind, confidence, reasons };
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function parseTargetCandidates(value) {
|
|
169
|
+
if (!Array.isArray(value)) {
|
|
170
|
+
throw new Error("agent proposal planningEvidence.targetCandidates must be an array");
|
|
171
|
+
}
|
|
172
|
+
if (value.length > 20) {
|
|
173
|
+
throw new Error("agent proposal planningEvidence.targetCandidates cannot contain more than 20 items");
|
|
174
|
+
}
|
|
175
|
+
return value.map((item, index) => {
|
|
176
|
+
if (!isRecord(item) || Array.isArray(item)) {
|
|
177
|
+
throw new Error(`agent proposal planningEvidence.targetCandidates[${index}] must be an object`);
|
|
178
|
+
}
|
|
179
|
+
const allowedKeys = new Set(["path", "role", "confidence"]);
|
|
180
|
+
for (const key of Object.keys(item)) {
|
|
181
|
+
if (!allowedKeys.has(key)) {
|
|
182
|
+
throw new Error(`agent proposal planningEvidence.targetCandidates[${index}] contains unsupported field: ${key}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
path: parseAgentProposalString(item["path"], `planningEvidence.targetCandidates[${index}].path`),
|
|
187
|
+
role: parseAgentProposalString(item["role"], `planningEvidence.targetCandidates[${index}].role`),
|
|
188
|
+
confidence: parseProbability(item["confidence"], `planningEvidence.targetCandidates[${index}].confidence`)
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function parseVerificationCandidates(value) {
|
|
193
|
+
if (!Array.isArray(value)) {
|
|
194
|
+
throw new Error("agent proposal planningEvidence.verificationCandidates must be an array");
|
|
195
|
+
}
|
|
196
|
+
if (value.length > 20) {
|
|
197
|
+
throw new Error("agent proposal planningEvidence.verificationCandidates cannot contain more than 20 items");
|
|
198
|
+
}
|
|
199
|
+
return value.map((item, index) => {
|
|
200
|
+
if (!isRecord(item) || Array.isArray(item)) {
|
|
201
|
+
throw new Error(`agent proposal planningEvidence.verificationCandidates[${index}] must be an object`);
|
|
202
|
+
}
|
|
203
|
+
const allowedKeys = new Set(["kind", "reason"]);
|
|
204
|
+
for (const key of Object.keys(item)) {
|
|
205
|
+
if (!allowedKeys.has(key)) {
|
|
206
|
+
throw new Error(`agent proposal planningEvidence.verificationCandidates[${index}] contains unsupported field: ${key}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
kind: parseAgentProposalString(item["kind"], `planningEvidence.verificationCandidates[${index}].kind`),
|
|
211
|
+
reason: parseAgentProposalString(item["reason"], `planningEvidence.verificationCandidates[${index}].reason`)
|
|
212
|
+
};
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function parseAmbiguities(value) {
|
|
216
|
+
if (!Array.isArray(value)) {
|
|
217
|
+
throw new Error("agent proposal planningEvidence.ambiguities must be an array");
|
|
218
|
+
}
|
|
219
|
+
if (value.length > 20) {
|
|
220
|
+
throw new Error("agent proposal planningEvidence.ambiguities cannot contain more than 20 items");
|
|
221
|
+
}
|
|
222
|
+
return value.map((item, index) => {
|
|
223
|
+
if (!isRecord(item) || Array.isArray(item)) {
|
|
224
|
+
throw new Error(`agent proposal planningEvidence.ambiguities[${index}] must be an object`);
|
|
225
|
+
}
|
|
226
|
+
const allowedKeys = new Set(["question", "severity"]);
|
|
227
|
+
for (const key of Object.keys(item)) {
|
|
228
|
+
if (!allowedKeys.has(key)) {
|
|
229
|
+
throw new Error(`agent proposal planningEvidence.ambiguities[${index}] contains unsupported field: ${key}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const severity = parseAgentProposalString(item["severity"], `planningEvidence.ambiguities[${index}].severity`);
|
|
233
|
+
if (!["low", "medium", "high"].includes(severity)) {
|
|
234
|
+
throw new Error("agent proposal planningEvidence ambiguity severity must be one of: low, medium, high");
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
question: parseAgentProposalString(item["question"], `planningEvidence.ambiguities[${index}].question`),
|
|
238
|
+
severity: severity
|
|
239
|
+
};
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function parseProbability(value, label) {
|
|
243
|
+
if (typeof value !== "number" || Number.isNaN(value) || value < 0 || value > 1) {
|
|
244
|
+
throw new Error(`agent proposal ${label} must be a number between 0 and 1`);
|
|
245
|
+
}
|
|
246
|
+
return value;
|
|
247
|
+
}
|
|
248
|
+
function parseAgentProposalString(value, label) {
|
|
249
|
+
return parseBoundedString(value, label, AGENT_PROPOSAL_PARSE_OPTIONS);
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=proposal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../../src/runtime/plan/proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentPlanningDecision, FrontendWorkflowKind, FrontendWorkflowPolicy } from "../../schemas/types.js";
|
|
2
|
+
export interface WorkflowInputSignals {
|
|
3
|
+
prd?: string;
|
|
4
|
+
ui?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function inferTaskIntent(scope: string, workflowKind: FrontendWorkflowKind): string;
|
|
7
|
+
export declare function inferFrontendWorkflow(scope: string, input: WorkflowInputSignals, proposal: AgentPlanningDecision | null): FrontendWorkflowPolicy;
|
|
8
|
+
export declare function verificationForWorkflow(kind: FrontendWorkflowKind | undefined): string[];
|