@executioncontrolprotocol/harnesses-browser-nano 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -0
- package/dist/_internal/request-capability-hints.d.ts +49 -0
- package/dist/_internal/request-capability-hints.d.ts.map +1 -0
- package/dist/_internal/request-capability-hints.js +488 -0
- package/dist/_internal/request-capability-hints.js.map +1 -0
- package/dist/browser-nano-harness.d.ts +71 -0
- package/dist/browser-nano-harness.d.ts.map +1 -0
- package/dist/browser-nano-harness.js +90 -0
- package/dist/browser-nano-harness.js.map +1 -0
- package/dist/harness-ids.d.ts +6 -0
- package/dist/harness-ids.d.ts.map +1 -0
- package/dist/harness-ids.js +6 -0
- package/dist/harness-ids.js.map +1 -0
- package/dist/harness-nano-config.d.ts +53 -0
- package/dist/harness-nano-config.d.ts.map +1 -0
- package/dist/harness-nano-config.js +94 -0
- package/dist/harness-nano-config.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/intent-classification.d.ts +10 -0
- package/dist/intent-classification.d.ts.map +1 -0
- package/dist/intent-classification.js +177 -0
- package/dist/intent-classification.js.map +1 -0
- package/dist/multi-shot-chat.d.ts +20 -0
- package/dist/multi-shot-chat.d.ts.map +1 -0
- package/dist/multi-shot-chat.js +136 -0
- package/dist/multi-shot-chat.js.map +1 -0
- package/dist/prompts/build-nano-prompt.d.ts +11 -0
- package/dist/prompts/build-nano-prompt.d.ts.map +1 -0
- package/dist/prompts/build-nano-prompt.js +17 -0
- package/dist/prompts/build-nano-prompt.js.map +1 -0
- package/dist/prompts/fixtures-root.d.ts +5 -0
- package/dist/prompts/fixtures-root.d.ts.map +1 -0
- package/dist/prompts/fixtures-root.js +7 -0
- package/dist/prompts/fixtures-root.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +4 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/load-harness-prompt.browser.d.ts +4 -0
- package/dist/prompts/load-harness-prompt.browser.d.ts.map +1 -0
- package/dist/prompts/load-harness-prompt.browser.js +32 -0
- package/dist/prompts/load-harness-prompt.browser.js.map +1 -0
- package/dist/prompts/load-harness-prompt.d.ts +2 -0
- package/dist/prompts/load-harness-prompt.d.ts.map +1 -0
- package/dist/prompts/load-harness-prompt.js +2 -0
- package/dist/prompts/load-harness-prompt.js.map +1 -0
- package/dist/prompts/load-harness-prompt.node.d.ts +4 -0
- package/dist/prompts/load-harness-prompt.node.d.ts.map +1 -0
- package/dist/prompts/load-harness-prompt.node.js +20 -0
- package/dist/prompts/load-harness-prompt.node.js.map +1 -0
- package/dist/prompts/nano-prompt-fixture-ids.d.ts +10 -0
- package/dist/prompts/nano-prompt-fixture-ids.d.ts.map +1 -0
- package/dist/prompts/nano-prompt-fixture-ids.js +8 -0
- package/dist/prompts/nano-prompt-fixture-ids.js.map +1 -0
- package/dist/register.d.ts +5 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +14 -0
- package/dist/register.js.map +1 -0
- package/dist/workflow-assistant.d.ts +19 -0
- package/dist/workflow-assistant.d.ts.map +1 -0
- package/dist/workflow-assistant.js +275 -0
- package/dist/workflow-assistant.js.map +1 -0
- package/dist/workflow-authoring.d.ts +13 -0
- package/dist/workflow-authoring.d.ts.map +1 -0
- package/dist/workflow-authoring.js +426 -0
- package/dist/workflow-authoring.js.map +1 -0
- package/fixtures/eval-cases/assistant.cases.json +658 -0
- package/fixtures/eval-cases/chat.cases.json +320 -0
- package/fixtures/eval-cases/flow.cases.json +505 -0
- package/fixtures/eval-cases/intent.cases.json +587 -0
- package/fixtures/eval-cases/workflow-create.cases.json +493 -0
- package/fixtures/eval-cases/workflow-patch.cases.json +379 -0
- package/fixtures/harness-prompts/intent-classification.prompt.json +72 -0
- package/fixtures/harness-prompts/workflow-assistant.prompt.json +86 -0
- package/fixtures/harness-prompts/workflow-authoring-create.prompt.json +50 -0
- package/fixtures/harness-prompts/workflow-authoring-patch.prompt.json +54 -0
- package/fixtures/runs/completed-with-refs.json +18 -0
- package/fixtures/runs/failed-echo-step.json +29 -0
- package/fixtures/runs/running-pending.json +14 -0
- package/fixtures/workflows/echo-validate-reorder.json +26 -0
- package/fixtures/workflows/echo-workflow.json +20 -0
- package/fixtures/workflows/multi-cap-workflow.json +34 -0
- package/fixtures/workflows/two-step-chain.json +26 -0
- package/package.json +49 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
import { callModelGenerate, collectDecodeFeedback, collectModelOutputFeedback, collectPatchFeedback, collectValidationFeedback, defineHarness, formatSchemaExampleEql, formatSchemaExampleJson, inferResponseFormatFromFormatter, runModelRepairLoop, stripMarkdownCodeFences, buildContextBundle, formatClassifiedIntentBlock, formatWorkflowSummaryLines, normalizePatchEqlRawOutput, substitutePatchRepairTemplate, normalizeMalformedPatchStepLabel, sanitizePatchEqlRawOutput, recoverPatchFromRepairHintProse, recoverMinimalLabelPatch, recoverTroubleshootStepPatch, recoverStructuredPatchFromRequest, selectBestWorkflowEqlBlock, normalizeCreateEqlRawOutput, filterWorkflowEqlToRequiredCapabilities, synthesizeCreateEqlFromRequiredCapabilities, createEqlIncludesRequiredCapabilities, normalizeWorkflowDocumentCandidate, formatStructuredRepairForModel, formatModelRepairDialogLines, isRepairFeedbackEcho, isRepairTemplateEcho, summarizeEnvironmentDescriptor, } from "@executioncontrolprotocol/core";
|
|
2
|
+
import { ECP_CORE_FORMATTER_IDS, ECP_MODEL_GENERATE_INTERFACE, ecpIntentSchema, harnessEvaluateOutputSchema, } from "@executioncontrolprotocol/types";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { buildPatchOperationHintLines, buildRequestCapabilityHintLines, collectPatchGoalFeedback, collectCreateCapabilityFeedback, collectCreateDuplicateStepIdFeedback, collectCreateStepCountFeedback, inferPatchTargetStepId, inferRequestedLabel, inferRequiredCapabilityIds, } from "./_internal/request-capability-hints.js";
|
|
5
|
+
import { BROWSER_NANO_HARNESS_ID } from "./harness-ids.js";
|
|
6
|
+
import { buildNanoRepairHint, buildNanoSystemPrompt, NANO_PROMPT_FIXTURE_IDS, } from "./prompts/index.js";
|
|
7
|
+
function existingCapabilityUses(manifest) {
|
|
8
|
+
const uses = new Set();
|
|
9
|
+
if (!manifest)
|
|
10
|
+
return uses;
|
|
11
|
+
for (const node of manifest.steps ?? []) {
|
|
12
|
+
if ("uses" in node && typeof node.uses === "string") {
|
|
13
|
+
uses.add(node.uses);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return uses;
|
|
17
|
+
}
|
|
18
|
+
function alignPatchWorkflowId(patch, baseline) {
|
|
19
|
+
const expectedId = baseline.workflow?.id;
|
|
20
|
+
if (!expectedId)
|
|
21
|
+
return patch;
|
|
22
|
+
return {
|
|
23
|
+
...patch,
|
|
24
|
+
patches: patch.patches.map((entry) => entry.path === "workflow.id" ? { ...entry, value: expectedId } : entry),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const outputConfigSchema = z.object({
|
|
28
|
+
schema: z.string().default("@executioncontrolprotocol.workflow"),
|
|
29
|
+
format: z.string().default("@executioncontrolprotocol/format-json"),
|
|
30
|
+
validate: z.boolean().default(true),
|
|
31
|
+
});
|
|
32
|
+
const harnessConfigSchema = z.object({
|
|
33
|
+
promptFixture: z.string().optional(),
|
|
34
|
+
system: z.string().optional(),
|
|
35
|
+
context: z
|
|
36
|
+
.object({
|
|
37
|
+
promptPhase: z.enum(["unfiltered", "contextualized"]).default("contextualized"),
|
|
38
|
+
includeEnvironmentDescriptor: z.boolean().default(true),
|
|
39
|
+
/** When false, only plain-text capability lines are sent (smaller prompts for 1B models). */
|
|
40
|
+
includeEncodedDescriptor: z.boolean().default(true),
|
|
41
|
+
descriptorFormat: z.string().default("@executioncontrolprotocol/format-toon"),
|
|
42
|
+
})
|
|
43
|
+
.default({}),
|
|
44
|
+
output: outputConfigSchema.default({}),
|
|
45
|
+
repair: z
|
|
46
|
+
.object({
|
|
47
|
+
enabled: z.boolean().default(true),
|
|
48
|
+
maxAttempts: z.number().default(1),
|
|
49
|
+
includeValidationErrors: z.boolean().default(true),
|
|
50
|
+
includePriorOutput: z.boolean().default(false),
|
|
51
|
+
priorOutputMaxChars: z.number().optional(),
|
|
52
|
+
})
|
|
53
|
+
.default({}),
|
|
54
|
+
trace: z
|
|
55
|
+
.object({
|
|
56
|
+
includePrompt: z.boolean().default(true),
|
|
57
|
+
includeRawOutput: z.boolean().default(true),
|
|
58
|
+
includeValidation: z.boolean().default(true),
|
|
59
|
+
includeRepairAttempts: z.boolean().default(true),
|
|
60
|
+
})
|
|
61
|
+
.default({}),
|
|
62
|
+
});
|
|
63
|
+
const harnessInputSchema = z.object({
|
|
64
|
+
request: z.string(),
|
|
65
|
+
manifest: z.unknown().optional(),
|
|
66
|
+
model: z.string().optional(),
|
|
67
|
+
classifiedIntent: ecpIntentSchema.optional(),
|
|
68
|
+
conversationSummary: z.string().optional(),
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Eval workflow authoring harness (@executioncontrolprotocol/evals-workflow-authoring).
|
|
72
|
+
* @category Evals
|
|
73
|
+
*/
|
|
74
|
+
const evalsWorkflowAuthoringHarness = defineHarness("@executioncontrolprotocol", "evals-workflow-authoring-internal")
|
|
75
|
+
.withConfig(harnessConfigSchema)
|
|
76
|
+
.withInput(harnessInputSchema)
|
|
77
|
+
.withOutput(harnessEvaluateOutputSchema)
|
|
78
|
+
.usesProviderInterface(ECP_MODEL_GENERATE_INTERFACE)
|
|
79
|
+
.withHandler(async (input, ctx) => {
|
|
80
|
+
const config = ctx.config;
|
|
81
|
+
const isPatch = input.manifest !== undefined;
|
|
82
|
+
const outputSchema = isPatch ? "@executioncontrolprotocol.patch" : config.output.schema;
|
|
83
|
+
const format = config.output.format;
|
|
84
|
+
const descriptorFormat = config.context.descriptorFormat ?? format;
|
|
85
|
+
const outputIsJson = format === ECP_CORE_FORMATTER_IDS.JSON || format.endsWith("/format-json");
|
|
86
|
+
const outputIsEql = format === "@executioncontrolprotocol/format-eql" || format.endsWith("/format-eql");
|
|
87
|
+
const promptFixtureId = config.promptFixture ??
|
|
88
|
+
(isPatch
|
|
89
|
+
? NANO_PROMPT_FIXTURE_IDS.WORKFLOW_AUTHORING_PATCH
|
|
90
|
+
: NANO_PROMPT_FIXTURE_IDS.WORKFLOW_AUTHORING_CREATE);
|
|
91
|
+
const system = config.system ?? buildNanoSystemPrompt(promptFixtureId);
|
|
92
|
+
const promptPhase = config.context.promptPhase;
|
|
93
|
+
let environmentSummary;
|
|
94
|
+
const baselineManifest = isPatch
|
|
95
|
+
? input.manifest
|
|
96
|
+
: undefined;
|
|
97
|
+
if (config.context.includeEnvironmentDescriptor) {
|
|
98
|
+
environmentSummary = summarizeEnvironmentDescriptor(await ctx.ecp.describe());
|
|
99
|
+
}
|
|
100
|
+
const contextBundle = await buildContextBundle(ctx.ecp, {
|
|
101
|
+
phase: promptPhase,
|
|
102
|
+
message: input.request,
|
|
103
|
+
intent: input.classifiedIntent?.intent ?? (isPatch ? "workflow-patch" : "workflow-create"),
|
|
104
|
+
manifest: baselineManifest,
|
|
105
|
+
conversationSummary: input.conversationSummary,
|
|
106
|
+
includeEnvironmentDescriptor: config.context.includeEnvironmentDescriptor,
|
|
107
|
+
includeEncodedDescriptor: config.context.includeEncodedDescriptor,
|
|
108
|
+
descriptorFormat,
|
|
109
|
+
outputIsEql,
|
|
110
|
+
isPatch,
|
|
111
|
+
existingCapabilityUses: isPatch
|
|
112
|
+
? existingCapabilityUses(baselineManifest)
|
|
113
|
+
: undefined,
|
|
114
|
+
});
|
|
115
|
+
let workflowSummaryText = "";
|
|
116
|
+
if (isPatch && baselineManifest) {
|
|
117
|
+
workflowSummaryText = formatWorkflowSummaryLines(baselineManifest, {
|
|
118
|
+
eql: outputIsEql,
|
|
119
|
+
patchContext: true,
|
|
120
|
+
}).join("\n");
|
|
121
|
+
}
|
|
122
|
+
const buildPrompt = (repairDialogLines = []) => {
|
|
123
|
+
const requestHints = environmentSummary !== undefined
|
|
124
|
+
? buildRequestCapabilityHintLines(input.request, environmentSummary, {
|
|
125
|
+
mode: isPatch ? "patch" : "create",
|
|
126
|
+
})
|
|
127
|
+
: [];
|
|
128
|
+
const patchHints = isPatch && baselineManifest
|
|
129
|
+
? buildPatchOperationHintLines(input.request, baselineManifest, environmentSummary?.capabilities.map((c) => c.id))
|
|
130
|
+
: [];
|
|
131
|
+
const envBlock = contextBundle.lines.length > 0 ? [...contextBundle.lines, ""] : [];
|
|
132
|
+
const classifiedBlock = input.classifiedIntent
|
|
133
|
+
? [...formatClassifiedIntentBlock(input.classifiedIntent), ""]
|
|
134
|
+
: [];
|
|
135
|
+
const createOutputLine = outputIsEql
|
|
136
|
+
? /\bminimal\b/i.test(input.request) || /\bone step\b/i.test(input.request)
|
|
137
|
+
? "Return only compact headerless EQL for @executioncontrolprotocol.workflow with exactly ONE STEP line."
|
|
138
|
+
: "Return only compact headerless EQL for @executioncontrolprotocol.workflow."
|
|
139
|
+
: outputIsJson
|
|
140
|
+
? "Return only a compact JSON @executioncontrolprotocol.workflow document for this request."
|
|
141
|
+
: `Return only a compact @executioncontrolprotocol.workflow document encoded as ${format} for this request.`;
|
|
142
|
+
const patchOutputLine = outputIsEql
|
|
143
|
+
? "Apply the user request to the current workflow. Return EQL patch operations only. First line MUST be PATCH WORKFLOW <id from user prompt>, then UPDATE WORKFLOW / UPDATE STEP / ADD STEP / DELETE STEP / MOVE STEP as needed. Do not re-list unchanged steps."
|
|
144
|
+
: outputIsJson
|
|
145
|
+
? "Return only compact JSON for schema @executioncontrolprotocol.patch."
|
|
146
|
+
: `Return only a compact @executioncontrolprotocol.patch document encoded as ${format}.`;
|
|
147
|
+
const lines = isPatch
|
|
148
|
+
? [
|
|
149
|
+
...classifiedBlock,
|
|
150
|
+
patchOutputLine,
|
|
151
|
+
`User request: ${input.request}`,
|
|
152
|
+
...patchHints,
|
|
153
|
+
"Current workflow (EQL reference):",
|
|
154
|
+
workflowSummaryText,
|
|
155
|
+
...requestHints,
|
|
156
|
+
...envBlock,
|
|
157
|
+
]
|
|
158
|
+
: [
|
|
159
|
+
...classifiedBlock,
|
|
160
|
+
createOutputLine,
|
|
161
|
+
"Output only STEP lines for capabilities explicitly named in the user request. Do not invent steps from the environment inventory.",
|
|
162
|
+
`User request: ${input.request}`,
|
|
163
|
+
...requestHints,
|
|
164
|
+
...envBlock,
|
|
165
|
+
// Suppress single-step schema example when specific multi-step requirements
|
|
166
|
+
// are already in the prompt — it anchors the 1B model to single-step outputs.
|
|
167
|
+
...((outputIsEql || outputIsJson) && requestHints.length === 0
|
|
168
|
+
? [
|
|
169
|
+
`Example output shape:\n${outputIsEql
|
|
170
|
+
? formatSchemaExampleEql("@executioncontrolprotocol.workflow")
|
|
171
|
+
: formatSchemaExampleJson("@executioncontrolprotocol.workflow")}`,
|
|
172
|
+
]
|
|
173
|
+
: []),
|
|
174
|
+
];
|
|
175
|
+
if (repairDialogLines.length > 0) {
|
|
176
|
+
lines.push(...repairDialogLines);
|
|
177
|
+
}
|
|
178
|
+
return lines.join("\n");
|
|
179
|
+
};
|
|
180
|
+
const responseFormat = inferResponseFormatFromFormatter(format);
|
|
181
|
+
const maxAttempts = config.repair.enabled ? 1 + config.repair.maxAttempts : 1;
|
|
182
|
+
let lastPrompt = buildPrompt();
|
|
183
|
+
const loopResult = await runModelRepairLoop({
|
|
184
|
+
maxAttempts,
|
|
185
|
+
generate: async ({ attempt, priorFeedback, priorRaw }) => {
|
|
186
|
+
const repairFeedback = attempt > 0 && config.repair.includeValidationErrors
|
|
187
|
+
? formatStructuredRepairForModel(priorFeedback)
|
|
188
|
+
: undefined;
|
|
189
|
+
const repairDialogLines = attempt > 0 && repairFeedback
|
|
190
|
+
? formatModelRepairDialogLines({
|
|
191
|
+
includePriorOutput: config.repair.includePriorOutput,
|
|
192
|
+
priorOutputMaxChars: config.repair.priorOutputMaxChars,
|
|
193
|
+
priorRaw,
|
|
194
|
+
repairFeedback,
|
|
195
|
+
repairHint: buildNanoRepairHint(promptFixtureId),
|
|
196
|
+
repairLead: "Previous attempt failed. Do not repeat error text. Output only the corrected document:",
|
|
197
|
+
})
|
|
198
|
+
: [];
|
|
199
|
+
lastPrompt = buildPrompt(repairDialogLines);
|
|
200
|
+
const generated = await callModelGenerate(ctx.uses, { prompt: lastPrompt, system, model: input.model, responseFormat }, ctx.capabilityContext, format);
|
|
201
|
+
return { raw: stripMarkdownCodeFences(generated.text) };
|
|
202
|
+
},
|
|
203
|
+
evaluate: async (raw, { priorFeedback }) => {
|
|
204
|
+
const baseline = baselineManifest;
|
|
205
|
+
const stepIds = baseline?.steps
|
|
206
|
+
?.filter((s) => "uses" in s && typeof s.uses === "string")
|
|
207
|
+
.map((s) => s.id) ?? [];
|
|
208
|
+
const workflowId = baseline?.workflow?.id;
|
|
209
|
+
if (!isPatch &&
|
|
210
|
+
outputIsEql) {
|
|
211
|
+
const requiredCaps = environmentSummary !== undefined
|
|
212
|
+
? inferRequiredCapabilityIds(input.request, environmentSummary.capabilities.map((c) => c.id))
|
|
213
|
+
: [];
|
|
214
|
+
if ((raw.match(/^WORKFLOW /gm)?.length ?? 0) > 1) {
|
|
215
|
+
raw = selectBestWorkflowEqlBlock(raw, requiredCaps);
|
|
216
|
+
}
|
|
217
|
+
raw = raw
|
|
218
|
+
.replace(/@executioncontrolprotocol\/demo\.summarizes\b/g, "@executioncontrolprotocol/test.summarize");
|
|
219
|
+
raw = normalizeCreateEqlRawOutput(raw);
|
|
220
|
+
if (requiredCaps.length > 0) {
|
|
221
|
+
if (!createEqlIncludesRequiredCapabilities(raw, requiredCaps)) {
|
|
222
|
+
const synthesized = synthesizeCreateEqlFromRequiredCapabilities(input.request, requiredCaps);
|
|
223
|
+
if (synthesized) {
|
|
224
|
+
raw = synthesized;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
raw = filterWorkflowEqlToRequiredCapabilities(raw, requiredCaps);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const targetStepId = inferPatchTargetStepId(input.request, stepIds);
|
|
233
|
+
const requestedLabel = inferRequestedLabel(input.request);
|
|
234
|
+
const patchCapabilityIds = environmentSummary !== undefined
|
|
235
|
+
? inferRequiredCapabilityIds(input.request, environmentSummary.capabilities.map((c) => c.id))
|
|
236
|
+
: [];
|
|
237
|
+
let patchRaw = isPatch ? sanitizePatchEqlRawOutput(raw) : raw;
|
|
238
|
+
if (isPatch && workflowId) {
|
|
239
|
+
const recovered = recoverPatchFromRepairHintProse(patchRaw, workflowId, targetStepId, requestedLabel) ??
|
|
240
|
+
recoverMinimalLabelPatch(patchRaw, workflowId, targetStepId, requestedLabel) ??
|
|
241
|
+
recoverStructuredPatchFromRequest(patchRaw, {
|
|
242
|
+
request: input.request,
|
|
243
|
+
workflowId: workflowId,
|
|
244
|
+
stepIds,
|
|
245
|
+
capabilityIds: patchCapabilityIds,
|
|
246
|
+
targetStepId,
|
|
247
|
+
requestedLabel,
|
|
248
|
+
}) ??
|
|
249
|
+
recoverTroubleshootStepPatch(input.request, patchRaw, workflowId, targetStepId);
|
|
250
|
+
if (recovered) {
|
|
251
|
+
patchRaw = recovered;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
const patchNormalized = isPatch
|
|
255
|
+
? normalizeMalformedPatchStepLabel(normalizePatchEqlRawOutput(patchRaw, workflowId), targetStepId, requestedLabel)
|
|
256
|
+
: undefined;
|
|
257
|
+
if (isPatch && patchNormalized && isRepairTemplateEcho(patchNormalized)) {
|
|
258
|
+
return {
|
|
259
|
+
success: false,
|
|
260
|
+
feedback: [
|
|
261
|
+
collectModelOutputFeedback("Use real workflow and step ids from the current workflow. Do not output example-wf, example-step, or repair placeholders."),
|
|
262
|
+
],
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
if (isPatch && outputIsEql && /^\s*[\[{]/.test(raw.trim())) {
|
|
266
|
+
return {
|
|
267
|
+
success: false,
|
|
268
|
+
feedback: [
|
|
269
|
+
collectModelOutputFeedback("Output @executioncontrolprotocol.patch EQL only (PATCH WORKFLOW ...). Do not output JSON."),
|
|
270
|
+
],
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
const normalizedRaw = isPatch && outputIsEql
|
|
274
|
+
? substitutePatchRepairTemplate(patchNormalized, workflowId, targetStepId, requestedLabel)
|
|
275
|
+
: raw;
|
|
276
|
+
const feedback = [];
|
|
277
|
+
if (!isPatch &&
|
|
278
|
+
outputIsJson &&
|
|
279
|
+
!outputIsEql &&
|
|
280
|
+
(raw.match(/"schema"\s*:\s*"@executioncontrolprotocol\.workflow"/g)?.length ?? 0) > 1) {
|
|
281
|
+
return {
|
|
282
|
+
success: false,
|
|
283
|
+
feedback: [
|
|
284
|
+
collectModelOutputFeedback("Return exactly one @executioncontrolprotocol.workflow JSON object. Do not output multiple documents or examples."),
|
|
285
|
+
],
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
const structuredPrior = formatStructuredRepairForModel(priorFeedback);
|
|
289
|
+
if (config.repair.includeValidationErrors &&
|
|
290
|
+
isRepairFeedbackEcho(normalizedRaw, structuredPrior)) {
|
|
291
|
+
return {
|
|
292
|
+
success: false,
|
|
293
|
+
feedback: [
|
|
294
|
+
collectModelOutputFeedback("Output echoed validation errors instead of a document. Return only the workflow or patch document."),
|
|
295
|
+
],
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
const decodeOptions = outputIsEql
|
|
299
|
+
? { headers: false }
|
|
300
|
+
: { headers: false, compact: true };
|
|
301
|
+
const decoded = await ctx.ecp
|
|
302
|
+
.decode(normalizedRaw)
|
|
303
|
+
.uses(format)
|
|
304
|
+
.to(isPatch ? "@executioncontrolprotocol.patch" : "@executioncontrolprotocol.workflow")
|
|
305
|
+
.with(decodeOptions)
|
|
306
|
+
.process();
|
|
307
|
+
let document = decoded.result;
|
|
308
|
+
if (!isPatch && document !== undefined && outputIsJson && !outputIsEql) {
|
|
309
|
+
document = normalizeWorkflowDocumentCandidate(document);
|
|
310
|
+
}
|
|
311
|
+
feedback.push(collectDecodeFeedback(decoded));
|
|
312
|
+
if (!decoded.success || document === undefined) {
|
|
313
|
+
if (isPatch && outputIsEql && /^\s*[\[{]/.test(raw.trim())) {
|
|
314
|
+
feedback.push(collectModelOutputFeedback("Output @executioncontrolprotocol.patch EQL only (PATCH WORKFLOW ...). Do not output JSON."));
|
|
315
|
+
}
|
|
316
|
+
if (!isPatch && outputIsJson && !outputIsEql && document !== undefined) {
|
|
317
|
+
const validation = await ctx.ecp.validate(document);
|
|
318
|
+
feedback.push(collectValidationFeedback(validation));
|
|
319
|
+
if (validation.valid) {
|
|
320
|
+
return { success: true, artifact: document, feedback };
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return { success: false, feedback };
|
|
324
|
+
}
|
|
325
|
+
let artifact = document;
|
|
326
|
+
if (isPatch && input.manifest) {
|
|
327
|
+
if (document && typeof document === "object" && "patches" in document) {
|
|
328
|
+
document = alignPatchWorkflowId(document, input.manifest);
|
|
329
|
+
}
|
|
330
|
+
const patched = await ctx.ecp
|
|
331
|
+
.patch(input.manifest)
|
|
332
|
+
.with(artifact)
|
|
333
|
+
.process();
|
|
334
|
+
feedback.push(collectPatchFeedback(patched));
|
|
335
|
+
if (!patched.success || !patched.result) {
|
|
336
|
+
const duplicateStep = patched.diagnostics?.some((d) => /Duplicate step id/i.test(d.message ?? ""));
|
|
337
|
+
const unknownStep = patched.diagnostics?.some((d) => /Step not found:/i.test(d.message ?? ""));
|
|
338
|
+
if (duplicateStep) {
|
|
339
|
+
const moveMatch = input.request.match(/\bmove\s+(?:the\s+)?(\w+)\s+(?:step\s+)?(?:to\s+run\s+)?(after|before)\s+(\w+)/i);
|
|
340
|
+
feedback.push(collectModelOutputFeedback(moveMatch
|
|
341
|
+
? `Use MOVE STEP ${moveMatch[1]} ${moveMatch[2].toUpperCase()} ${moveMatch[3]}. Do not ADD STEP ${moveMatch[3]} — that step already exists.`
|
|
342
|
+
: "A step id in ADD STEP already exists in the workflow. Use UPDATE STEP to change it, not ADD STEP with the same id."));
|
|
343
|
+
}
|
|
344
|
+
else if (unknownStep && baseline) {
|
|
345
|
+
const allowed = baseline.steps
|
|
346
|
+
?.filter((s) => "uses" in s && typeof s.uses === "string")
|
|
347
|
+
.map((s) => s.id)
|
|
348
|
+
.join(", ") ?? "none";
|
|
349
|
+
feedback.push(collectModelOutputFeedback(`Patch references a step id not in this workflow. Existing step ids: ${allowed}. Use only those ids (or a new id for ADD STEP).`));
|
|
350
|
+
}
|
|
351
|
+
return { success: false, feedback };
|
|
352
|
+
}
|
|
353
|
+
artifact = patched.result;
|
|
354
|
+
}
|
|
355
|
+
if (config.output.validate) {
|
|
356
|
+
const validation = await ctx.ecp.validate(artifact);
|
|
357
|
+
feedback.push(collectValidationFeedback(validation));
|
|
358
|
+
if (!validation.valid) {
|
|
359
|
+
if (!isPatch &&
|
|
360
|
+
validation.errors.some((d) => /Duplicate step id/i.test(d.message ?? ""))) {
|
|
361
|
+
const dupFeedback = collectCreateDuplicateStepIdFeedback(artifact);
|
|
362
|
+
if (dupFeedback) {
|
|
363
|
+
feedback.push(...dupFeedback);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return { success: false, feedback };
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
const wfArtifact = artifact;
|
|
370
|
+
if (!isPatch && environmentSummary) {
|
|
371
|
+
const capFeedback = collectCreateCapabilityFeedback(input.request, environmentSummary, wfArtifact);
|
|
372
|
+
if (capFeedback) {
|
|
373
|
+
return { success: false, feedback: [...feedback, ...capFeedback] };
|
|
374
|
+
}
|
|
375
|
+
const requiredCaps = environmentSummary !== undefined
|
|
376
|
+
? inferRequiredCapabilityIds(input.request, environmentSummary.capabilities.map((c) => c.id))
|
|
377
|
+
: [];
|
|
378
|
+
const stepCountFeedback = collectCreateStepCountFeedback(input.request, wfArtifact, requiredCaps);
|
|
379
|
+
if (stepCountFeedback) {
|
|
380
|
+
return { success: false, feedback: [...feedback, ...stepCountFeedback] };
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (isPatch && environmentSummary) {
|
|
384
|
+
const patchFeedback = collectPatchGoalFeedback(input.request, wfArtifact, environmentSummary, baselineManifest);
|
|
385
|
+
if (patchFeedback) {
|
|
386
|
+
return { success: false, feedback: [...feedback, ...patchFeedback] };
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return { success: true, artifact, feedback };
|
|
390
|
+
},
|
|
391
|
+
});
|
|
392
|
+
const validation = await ctx.ecp.validate(loopResult.artifact);
|
|
393
|
+
const includeSystemPrompt = typeof process !== "undefined" &&
|
|
394
|
+
process.env.ECP_EVAL_DEBUG_INCLUDE_SYSTEM_PROMPT?.trim() !== "" &&
|
|
395
|
+
process.env.ECP_EVAL_DEBUG_INCLUDE_SYSTEM_PROMPT?.toLowerCase() !== "0" &&
|
|
396
|
+
process.env.ECP_EVAL_DEBUG_INCLUDE_SYSTEM_PROMPT?.toLowerCase() !== "false" &&
|
|
397
|
+
process.env.ECP_EVAL_DEBUG_INCLUDE_SYSTEM_PROMPT?.toLowerCase() !== "off";
|
|
398
|
+
const trace = {
|
|
399
|
+
harness: BROWSER_NANO_HARNESS_ID,
|
|
400
|
+
provider: ctx.uses,
|
|
401
|
+
model: input.model,
|
|
402
|
+
outputSchema,
|
|
403
|
+
outputFormat: format,
|
|
404
|
+
decodeSucceeded: true,
|
|
405
|
+
validationSucceeded: validation.valid,
|
|
406
|
+
promptPhase,
|
|
407
|
+
...(config.trace.includePrompt ? { prompt: lastPrompt } : {}),
|
|
408
|
+
...(config.trace.includeRawOutput ? { rawOutput: loopResult.raw } : {}),
|
|
409
|
+
...(config.trace.includeRepairAttempts ? { repairAttempts: loopResult.attempts } : {}),
|
|
410
|
+
...(includeSystemPrompt ? { systemPrompt: system } : {}),
|
|
411
|
+
};
|
|
412
|
+
return {
|
|
413
|
+
artifact: loopResult.artifact,
|
|
414
|
+
raw: loopResult.raw,
|
|
415
|
+
...(config.trace.includeValidation ? { validation } : {}),
|
|
416
|
+
trace,
|
|
417
|
+
};
|
|
418
|
+
})
|
|
419
|
+
.build();
|
|
420
|
+
/** Workflow authoring task handler (invoked by unified `@executioncontrolprotocol/harness-evals`). @category Evals */
|
|
421
|
+
export async function invokeWorkflowAuthoring(input, ctx) {
|
|
422
|
+
return evalsWorkflowAuthoringHarness.handler(input, ctx);
|
|
423
|
+
}
|
|
424
|
+
/** @deprecated Use {@link invokeWorkflowAuthoring} */
|
|
425
|
+
export const invokeEvalWorkflowAuthoring = invokeWorkflowAuthoring;
|
|
426
|
+
//# sourceMappingURL=workflow-authoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-authoring.js","sourceRoot":"","sources":["../src/workflow-authoring.ts"],"names":[],"mappings":"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"}
|