@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.
Files changed (87) hide show
  1. package/README.md +42 -0
  2. package/dist/_internal/request-capability-hints.d.ts +49 -0
  3. package/dist/_internal/request-capability-hints.d.ts.map +1 -0
  4. package/dist/_internal/request-capability-hints.js +488 -0
  5. package/dist/_internal/request-capability-hints.js.map +1 -0
  6. package/dist/browser-nano-harness.d.ts +71 -0
  7. package/dist/browser-nano-harness.d.ts.map +1 -0
  8. package/dist/browser-nano-harness.js +90 -0
  9. package/dist/browser-nano-harness.js.map +1 -0
  10. package/dist/harness-ids.d.ts +6 -0
  11. package/dist/harness-ids.d.ts.map +1 -0
  12. package/dist/harness-ids.js +6 -0
  13. package/dist/harness-ids.js.map +1 -0
  14. package/dist/harness-nano-config.d.ts +53 -0
  15. package/dist/harness-nano-config.d.ts.map +1 -0
  16. package/dist/harness-nano-config.js +94 -0
  17. package/dist/harness-nano-config.js.map +1 -0
  18. package/dist/index.d.ts +13 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +12 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/intent-classification.d.ts +10 -0
  23. package/dist/intent-classification.d.ts.map +1 -0
  24. package/dist/intent-classification.js +177 -0
  25. package/dist/intent-classification.js.map +1 -0
  26. package/dist/multi-shot-chat.d.ts +20 -0
  27. package/dist/multi-shot-chat.d.ts.map +1 -0
  28. package/dist/multi-shot-chat.js +136 -0
  29. package/dist/multi-shot-chat.js.map +1 -0
  30. package/dist/prompts/build-nano-prompt.d.ts +11 -0
  31. package/dist/prompts/build-nano-prompt.d.ts.map +1 -0
  32. package/dist/prompts/build-nano-prompt.js +17 -0
  33. package/dist/prompts/build-nano-prompt.js.map +1 -0
  34. package/dist/prompts/fixtures-root.d.ts +5 -0
  35. package/dist/prompts/fixtures-root.d.ts.map +1 -0
  36. package/dist/prompts/fixtures-root.js +7 -0
  37. package/dist/prompts/fixtures-root.js.map +1 -0
  38. package/dist/prompts/index.d.ts +4 -0
  39. package/dist/prompts/index.d.ts.map +1 -0
  40. package/dist/prompts/index.js +4 -0
  41. package/dist/prompts/index.js.map +1 -0
  42. package/dist/prompts/load-harness-prompt.browser.d.ts +4 -0
  43. package/dist/prompts/load-harness-prompt.browser.d.ts.map +1 -0
  44. package/dist/prompts/load-harness-prompt.browser.js +32 -0
  45. package/dist/prompts/load-harness-prompt.browser.js.map +1 -0
  46. package/dist/prompts/load-harness-prompt.d.ts +2 -0
  47. package/dist/prompts/load-harness-prompt.d.ts.map +1 -0
  48. package/dist/prompts/load-harness-prompt.js +2 -0
  49. package/dist/prompts/load-harness-prompt.js.map +1 -0
  50. package/dist/prompts/load-harness-prompt.node.d.ts +4 -0
  51. package/dist/prompts/load-harness-prompt.node.d.ts.map +1 -0
  52. package/dist/prompts/load-harness-prompt.node.js +20 -0
  53. package/dist/prompts/load-harness-prompt.node.js.map +1 -0
  54. package/dist/prompts/nano-prompt-fixture-ids.d.ts +10 -0
  55. package/dist/prompts/nano-prompt-fixture-ids.d.ts.map +1 -0
  56. package/dist/prompts/nano-prompt-fixture-ids.js +8 -0
  57. package/dist/prompts/nano-prompt-fixture-ids.js.map +1 -0
  58. package/dist/register.d.ts +5 -0
  59. package/dist/register.d.ts.map +1 -0
  60. package/dist/register.js +14 -0
  61. package/dist/register.js.map +1 -0
  62. package/dist/workflow-assistant.d.ts +19 -0
  63. package/dist/workflow-assistant.d.ts.map +1 -0
  64. package/dist/workflow-assistant.js +275 -0
  65. package/dist/workflow-assistant.js.map +1 -0
  66. package/dist/workflow-authoring.d.ts +13 -0
  67. package/dist/workflow-authoring.d.ts.map +1 -0
  68. package/dist/workflow-authoring.js +426 -0
  69. package/dist/workflow-authoring.js.map +1 -0
  70. package/fixtures/eval-cases/assistant.cases.json +658 -0
  71. package/fixtures/eval-cases/chat.cases.json +320 -0
  72. package/fixtures/eval-cases/flow.cases.json +505 -0
  73. package/fixtures/eval-cases/intent.cases.json +587 -0
  74. package/fixtures/eval-cases/workflow-create.cases.json +493 -0
  75. package/fixtures/eval-cases/workflow-patch.cases.json +379 -0
  76. package/fixtures/harness-prompts/intent-classification.prompt.json +72 -0
  77. package/fixtures/harness-prompts/workflow-assistant.prompt.json +86 -0
  78. package/fixtures/harness-prompts/workflow-authoring-create.prompt.json +50 -0
  79. package/fixtures/harness-prompts/workflow-authoring-patch.prompt.json +54 -0
  80. package/fixtures/runs/completed-with-refs.json +18 -0
  81. package/fixtures/runs/failed-echo-step.json +29 -0
  82. package/fixtures/runs/running-pending.json +14 -0
  83. package/fixtures/workflows/echo-validate-reorder.json +26 -0
  84. package/fixtures/workflows/echo-workflow.json +20 -0
  85. package/fixtures/workflows/multi-cap-workflow.json +34 -0
  86. package/fixtures/workflows/two-step-chain.json +26 -0
  87. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # @executioncontrolprotocol/harnesses-browser-nano
2
+
3
+ **Browser Nano** harness — catalog id **`@executioncontrolprotocol/harness-browser-nano`**. Tuned for on-device and small (~1B) models: short EQL replies, compact context, repair loop, identity primer.
4
+
5
+ Used by the browser demo and harness-owned eval matrices (Ollama gemma3:1b, Chrome Nano). **Same harness binding** (`HARNESS_NANO_BINDING`); the browser demo defaults to Chrome AI and may override the model provider at invoke.
6
+
7
+ ## Fixtures and evals
8
+
9
+ | Asset | Location |
10
+ | ----- | -------- |
11
+ | Prompt fixtures | `fixtures/harness-prompts/*.prompt.json` |
12
+ | Eval cases | `fixtures/eval-cases/*.cases.json` (81 cases incl. chat + flow) |
13
+ | Support fixtures | `fixtures/workflows/`, `fixtures/runs/` |
14
+ | Matrix tests | `test/eval/` (Ollama), `test/eval/browser/` (Chrome Nano) |
15
+
16
+ Run matrix: `npm run eval:matrix -w @executioncontrolprotocol/harnesses-browser-nano`
17
+
18
+ For stronger cloud models, add a separate harness package (e.g. `@executioncontrolprotocol/harnesses-browser-nano-standard`) with its own prompts and output shaping.
19
+
20
+ ## Invoke
21
+
22
+ ```ts
23
+ import { BROWSER_NANO_HARNESS_CAPABILITY, HARNESS_TASKS } from "@executioncontrolprotocol/harnesses-browser-nano"
24
+
25
+ await ecp.invoke(BROWSER_NANO_HARNESS_CAPABILITY).with({
26
+ task: HARNESS_TASKS.CHAT,
27
+ message: "Create an echo workflow",
28
+ })
29
+ ```
30
+
31
+ Tasks (all model outputs are **EQL** via `@executioncontrolprotocol/format-eql`):
32
+
33
+ | Task | Role |
34
+ | ---- | ---- |
35
+ | **`chat`** | **Default** multi-shot orchestrator: unfiltered intent, then contextualized authoring or assistant |
36
+ | `workflow-authoring` | Create or patch `@executioncontrolprotocol.workflow` via EQL |
37
+ | `intent-classification` | Route user messages (`faq`, `general`, `workflow-create`, `workflow-patch`) |
38
+ | `workflow-assistant` | Unified assistant: ECP FAQ, identity, environment/capability help, run-aware Q&A (`@executioncontrolprotocol.harness.reply`) |
39
+
40
+ **1B model policy:** normalize garbled EQL, deterministic assistant/patch recovery, then repair loop (`HARNESS_NANO_REPAIR`). Eval matrix and browser demo share this binding.
41
+
42
+ Reusable harness authoring helpers live in **`@executioncontrolprotocol/core`**. This package adds product routing and workflow-specific capability hints.
@@ -0,0 +1,49 @@
1
+ import type { HarnessOperationFeedback, WorkflowManifest } from "@executioncontrolprotocol/types";
2
+ import type { CompactEnvironmentSummary } from "@executioncontrolprotocol/core";
3
+ /** Infer an existing step id the patch request targets by name. @internal */
4
+ export declare function inferPatchTargetStepId(request: string, stepIds: readonly string[]): string | undefined;
5
+ /**
6
+ * Match capability ids mentioned in a natural-language request (eval harness internal).
7
+ * @internal
8
+ */
9
+ export declare function inferRequiredCapabilityIds(request: string, capabilityIds: readonly string[]): string[];
10
+ /**
11
+ * Infer expected step count from natural-language create requests (hint text only).
12
+ * @internal
13
+ */
14
+ export declare function inferRequiredStepCount(request: string): number | undefined;
15
+ /**
16
+ * User-prompt lines nudging the model toward required capabilities.
17
+ * @internal
18
+ */
19
+ export declare function buildRequestCapabilityHintLines(request: string, summary: CompactEnvironmentSummary, options?: {
20
+ mode?: "create" | "patch";
21
+ }): string[];
22
+ /** Infer label text from a patch request when explicitly stated. @internal */
23
+ export declare function inferRequestedLabel(request: string): string | undefined;
24
+ /**
25
+ * Patch user-prompt context (workflow id and existing steps only — no operation-specific hints).
26
+ * @internal
27
+ */
28
+ export declare function buildPatchOperationHintLines(request: string, manifest: WorkflowManifest, capabilityIds?: readonly string[]): string[];
29
+ /**
30
+ * Harness repair feedback when create output omits requested capabilities.
31
+ * @internal
32
+ */
33
+ export declare function collectCreateCapabilityFeedback(request: string, summary: CompactEnvironmentSummary, workflow: WorkflowManifest): HarnessOperationFeedback[] | undefined;
34
+ /**
35
+ * Harness repair feedback when create output has too many steps for a single-step request.
36
+ * @internal
37
+ */
38
+ export declare function collectCreateStepCountFeedback(request: string, workflow: WorkflowManifest, requiredCapabilityIds?: readonly string[]): HarnessOperationFeedback[] | undefined;
39
+ /**
40
+ * Harness repair feedback when create output reuses a step id.
41
+ * @internal
42
+ */
43
+ export declare function collectCreateDuplicateStepIdFeedback(workflow: WorkflowManifest): HarnessOperationFeedback[] | undefined;
44
+ /**
45
+ * Harness repair feedback for common patch goals (label, remove step, add capability).
46
+ * @internal
47
+ */
48
+ export declare function collectPatchGoalFeedback(request: string, patched: WorkflowManifest, summary: CompactEnvironmentSummary, baseline?: WorkflowManifest): HarnessOperationFeedback[] | undefined;
49
+ //# sourceMappingURL=request-capability-hints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-capability-hints.d.ts","sourceRoot":"","sources":["../../src/_internal/request-capability-hints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACjG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAU/E,6EAA6E;AAC7E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,GAAG,SAAS,CAiBpB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,EAAE,CA6DV;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA2B1E;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,yBAAyB,EAClC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,GACtC,MAAM,EAAE,CAoDV;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUvE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,GAChC,MAAM,EAAE,CAmFV;AAYD;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,yBAAyB,EAClC,QAAQ,EAAE,gBAAgB,GACzB,wBAAwB,EAAE,GAAG,SAAS,CAuCxC;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,EAC1B,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,GACxC,wBAAwB,EAAE,GAAG,SAAS,CAwBxC;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,gBAAgB,GACzB,wBAAwB,EAAE,GAAG,SAAS,CA0CxC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,yBAAyB,EAClC,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,wBAAwB,EAAE,GAAG,SAAS,CA2NxC"}
@@ -0,0 +1,488 @@
1
+ import { collectModelOutputFeedback } from "@executioncontrolprotocol/core";
2
+ function stepHasInputRef(step) {
3
+ if (!("input" in step) || step.input === undefined)
4
+ return false;
5
+ const input = step.input;
6
+ return Object.values(input).some((v) => v !== null && typeof v === "object" && "$ref" in v);
7
+ }
8
+ /** Infer an existing step id the patch request targets by name. @internal */
9
+ export function inferPatchTargetStepId(request, stepIds) {
10
+ const patterns = [
11
+ /failed?\s+on\s+(\w+)/i,
12
+ /change\s+(?:the\s+)?(\w+)\s+step\s+label/i,
13
+ /rename\s+(\w+)\s+(?:step\s+)?label/i,
14
+ /rename\s+(?:the\s+)?(\w+)\s+label/i,
15
+ /(?:set|change)\s+(\w+)\s+input/i,
16
+ /ensure\s+(\w+)\s+input/i,
17
+ /update\s+(\w+)\s+step/i,
18
+ /move\s+(?:the\s+)?(\w+)\s+step/i,
19
+ ];
20
+ for (const pattern of patterns) {
21
+ const match = request.match(pattern);
22
+ const stepId = match?.[1];
23
+ if (stepId && stepIds.includes(stepId))
24
+ return stepId;
25
+ }
26
+ return undefined;
27
+ }
28
+ /**
29
+ * Match capability ids mentioned in a natural-language request (eval harness internal).
30
+ * @internal
31
+ */
32
+ export function inferRequiredCapabilityIds(request, capabilityIds) {
33
+ const lower = request.toLowerCase();
34
+ const matched = new Set();
35
+ for (const id of capabilityIds) {
36
+ if (request.includes(id))
37
+ matched.add(id);
38
+ }
39
+ const bySuffix = (suffix) => capabilityIds.find((id) => id.endsWith(suffix));
40
+ if (/\becho\b/.test(lower)) {
41
+ const isAnchorOnly = /\bafter\s+echo\b/i.test(request) ||
42
+ /\bbefore\s+echo\b/i.test(request) ||
43
+ /\bto\s+echo\b/i.test(request);
44
+ const echo = bySuffix("echo");
45
+ if (echo && !isAnchorOnly)
46
+ matched.add(echo);
47
+ }
48
+ if (/\bsummarize\b/.test(lower)) {
49
+ const isRemovalTarget = /\bremove\b[^.]*\bsummarize\b/i.test(request);
50
+ const isConfigureExisting = /\bensure\s+summarize\b/i.test(request) ||
51
+ /\bchange\s+summarize\b/i.test(request) ||
52
+ /\bsummarize\s+step\s+label\b/i.test(request) ||
53
+ /\bsummarize\s+input\b/i.test(request);
54
+ const isAnchorOnly = /\bafter\s+summarize\b/i.test(request) || /\bbefore\s+summarize\b/i.test(request);
55
+ const cap = bySuffix("summarize");
56
+ if (cap && !isRemovalTarget && !isAnchorOnly && !isConfigureExisting)
57
+ matched.add(cap);
58
+ }
59
+ if (/\bnotify\b/.test(lower)) {
60
+ const isRemovalTarget = /\bremove\b[^.]*\bnotify\b/i.test(request);
61
+ const isConfigureExisting = /\bupdate\s+notify\b/i.test(request) || /\bnotify\s+step\b/i.test(request);
62
+ const cap = bySuffix("notify");
63
+ if (cap && !isRemovalTarget && !isConfigureExisting)
64
+ matched.add(cap);
65
+ }
66
+ if (/\btranslate\b/i.test(request) && /\btranslate\b.*\bstep\b|\badd\b.*\btranslate\b|@executioncontrolprotocol\/demo\.translate/i.test(request)) {
67
+ const cap = bySuffix("translate");
68
+ if (cap)
69
+ matched.add(cap);
70
+ }
71
+ const validateCapIds = capabilityIds.filter((id) => id.endsWith(".validate"));
72
+ const hasExplicitValidateCap = validateCapIds.some((id) => request.includes(id));
73
+ const validateThenWithoutCap = /\bvalidate\s+then\b/i.test(request) && !hasExplicitValidateCap;
74
+ if (hasExplicitValidateCap ||
75
+ (/\bvalidate\b/.test(lower) &&
76
+ !validateThenWithoutCap &&
77
+ (/\bfirst\s+.*\bvalidate\b/.test(lower) || /\bvalidate\s+step\b/i.test(request)))) {
78
+ const cap = bySuffix("validate");
79
+ if (cap)
80
+ matched.add(cap);
81
+ }
82
+ if (/\bchrome\s*ai\b/i.test(request)) {
83
+ const cap = capabilityIds.find((id) => id.includes("chrome-ai") && id.endsWith(".generate"));
84
+ if (cap)
85
+ matched.add(cap);
86
+ }
87
+ return [...matched];
88
+ }
89
+ /**
90
+ * Infer expected step count from natural-language create requests (hint text only).
91
+ * @internal
92
+ */
93
+ export function inferRequiredStepCount(request) {
94
+ const nStepMatch = request.match(/\b(\d+)-step\b/i);
95
+ if (nStepMatch) {
96
+ return Number.parseInt(nStepMatch[1], 10);
97
+ }
98
+ if (/\btwo-step\b/i.test(request)) {
99
+ return 2;
100
+ }
101
+ if (/\bthree-step\b/i.test(request) || /\b3-step\b/i.test(request)) {
102
+ return 3;
103
+ }
104
+ if (/\bfirst\b.+?\bthen\b/i.test(request)) {
105
+ return 2;
106
+ }
107
+ if (/\bgenerate\b.+?\bthen\b.+?\bsummar/i.test(request)) {
108
+ return 2;
109
+ }
110
+ if (/\bin a second step\b/i.test(request) || /\bsecond step\b/i.test(request)) {
111
+ return 2;
112
+ }
113
+ if (/\bgenerate\b.+?\bthen\b/i.test(request)) {
114
+ return 2;
115
+ }
116
+ if (/\btwo\s+steps?\b/i.test(request)) {
117
+ return 2;
118
+ }
119
+ return undefined;
120
+ }
121
+ /**
122
+ * User-prompt lines nudging the model toward required capabilities.
123
+ * @internal
124
+ */
125
+ export function buildRequestCapabilityHintLines(request, summary, options) {
126
+ const ids = summary.capabilities.map((c) => c.id);
127
+ const required = inferRequiredCapabilityIds(request, ids);
128
+ const stepCount = inferRequiredStepCount(request);
129
+ const lines = [];
130
+ const mode = options?.mode ?? "create";
131
+ if (mode === "create" && (/\bone step\b/i.test(request) || /\bexactly one\b/i.test(request) || /\bminimal\b/i.test(request))) {
132
+ lines.push("Required: exactly ONE STEP line in EQL output. Do not copy multi-step examples from the system prompt.", 'Pick a workflow id that matches this request (e.g. "minimal-echo"), not a multi-step example id.', "");
133
+ }
134
+ const stepIdMatch = request.match(/\bstep id\s+(\w+)/i);
135
+ if (stepIdMatch && mode === "create") {
136
+ lines.push(`Step id must be "${stepIdMatch[1]}" (short name, not a capability id). Format: STEP ${stepIdMatch[1]} USES @executioncontrolprotocol/...`, "");
137
+ }
138
+ if (required.length === 0 && stepCount === undefined)
139
+ return lines;
140
+ if (mode === "patch") {
141
+ return lines;
142
+ }
143
+ const sameCapReuse = /\bsame capability\b/i.test(request) ||
144
+ /\bwith the same\b/i.test(request) ||
145
+ (/\bchrome\s*ai\b/i.test(request) && stepCount !== undefined && stepCount > 1) ||
146
+ (stepCount !== undefined && stepCount > required.length);
147
+ if (stepCount !== undefined && stepCount > 1 && sameCapReuse) {
148
+ lines.push(`Required: ${stepCount} STEP lines with distinct step ids (e.g. poem, summarize).`, ...required.map((id, index) => `${index + 1}. STEP ... USES ${id}`), "Reusing the same USES capability twice still requires unique step ids — do not repeat the capability suffix.", "");
149
+ return lines;
150
+ }
151
+ lines.push(`Required: ${required.length} step(s) in order (one STEP line per capability):`, ...required.map((id, index) => `${index + 1}. STEP ... USES ${id}`), "Use only these capability ids; do not substitute summarize/notify/translate unless listed.", "");
152
+ return lines;
153
+ }
154
+ /** Infer label text from a patch request when explicitly stated. @internal */
155
+ export function inferRequestedLabel(request) {
156
+ const patterns = [
157
+ /(?:change|set|rename).*(?:label to)\s+(.+?)\.?\s*$/i,
158
+ /(?:label to)\s+(.+?)\.?\s*$/i,
159
+ ];
160
+ for (const pattern of patterns) {
161
+ const match = request.match(pattern);
162
+ if (match?.[1])
163
+ return match[1].trim();
164
+ }
165
+ return undefined;
166
+ }
167
+ /**
168
+ * Patch user-prompt context (workflow id and existing steps only — no operation-specific hints).
169
+ * @internal
170
+ */
171
+ export function buildPatchOperationHintLines(request, manifest, capabilityIds) {
172
+ const stepIds = manifest.steps
173
+ ?.filter((s) => "uses" in s && typeof s.uses === "string")
174
+ .map((s) => s.id) ?? [];
175
+ const workflowId = manifest.workflow?.id ?? "unknown";
176
+ const lower = request.toLowerCase();
177
+ const isWorkflowLabel = /\bworkflow\s+label\b/i.test(lower) ||
178
+ /change\s+workflow\s+label/i.test(lower) ||
179
+ /rename\s+workflow/i.test(lower);
180
+ const removeMatch = lower.match(/remove\s+(?:the\s+)?(\w+)(?:\s+step|\s+if|\s+from)/i);
181
+ const hasAddIntent = /add|include|append|insert/i.test(lower);
182
+ const moveMatch = request.match(/\bmove\s+(?:the\s+)?(\w+)\s+(?:step\s+)?(?:to\s+run\s+)?(after|before)\s+(\w+)/i);
183
+ const targetStepId = inferPatchTargetStepId(request, stepIds);
184
+ const addAfterMatch = request.match(/\badd\s+\w+\s+after\s+(\w+)\b/i);
185
+ const lines = [
186
+ `PATCH WORKFLOW must use id "${workflowId}".`,
187
+ `Existing step ids: ${stepIds.join(", ") || "none"}.`,
188
+ "Operation selection:",
189
+ "- remove/delete in the request → DELETE STEP for that step id only.",
190
+ "- change workflow label → UPDATE WORKFLOW with LABEL (not UPDATE STEP).",
191
+ "- change a step label or input on a listed step id → UPDATE STEP for that id only.",
192
+ "- add/insert a capability not yet in the workflow → ADD STEP with a new step id.",
193
+ "- move/reorder an existing step → MOVE STEP with AFTER or BEFORE anchor.",
194
+ "- multiple changes requested → include every required DELETE / UPDATE / ADD / MOVE line.",
195
+ ];
196
+ if (moveMatch) {
197
+ const stepId = moveMatch[1];
198
+ const relation = moveMatch[2].toUpperCase();
199
+ const anchorId = moveMatch[3];
200
+ if (stepIds.includes(stepId) && stepIds.includes(anchorId)) {
201
+ lines.push(`Current step order: ${stepIds.join(", ")}.`, `This request requires MOVE STEP ${stepId} ${relation} ${anchorId}.`, `${anchorId} already exists — do not ADD STEP ${anchorId}.`, `Do not UPDATE STEP or ADD STEP for ${anchorId}.`);
202
+ }
203
+ }
204
+ else if (/\bremove\b|\bdelete\b/i.test(lower) && hasAddIntent) {
205
+ const removeId = removeMatch?.[1];
206
+ const anchor = addAfterMatch?.[1];
207
+ lines.push("This request requires both DELETE STEP and ADD STEP operations.");
208
+ if (removeId) {
209
+ const required = capabilityIds !== undefined
210
+ ? inferRequiredCapabilityIds(request, capabilityIds)
211
+ : [];
212
+ const addCap = required[0];
213
+ if (addCap) {
214
+ const addStepId = addCap.split(".").pop() ?? "step";
215
+ lines.push(`Required: DELETE STEP ${removeId}; then ADD STEP ${addStepId} USES ${addCap}${anchor ? ` AFTER ${anchor}` : ""}.`, `Do not UPDATE STEP ${removeId} or other existing steps — delete and add instead.`);
216
+ }
217
+ else {
218
+ lines.push(`Required: DELETE STEP ${removeId}; then ADD STEP with a new step id and the requested capability USES value${anchor ? ` AFTER ${anchor}` : ""}.`, `Do not UPDATE STEP ${removeId} or other existing steps — delete and add instead.`);
219
+ }
220
+ }
221
+ }
222
+ else if (/\bremove\b|\bdelete\b/i.test(lower)) {
223
+ lines.push("This request requires DELETE STEP only.");
224
+ }
225
+ else if (isWorkflowLabel) {
226
+ lines.push("This request requires UPDATE WORKFLOW with LABEL (workflow metadata, not a step).");
227
+ }
228
+ else if (/\blabel\b|\binput\b|\bvalue\b|\brename\b/i.test(lower) &&
229
+ !hasAddIntent &&
230
+ !moveMatch) {
231
+ if (targetStepId) {
232
+ const isLabelChange = /\blabel\b|\brename\b/i.test(lower);
233
+ lines.push(`Target step: ${targetStepId} — output UPDATE STEP ${targetStepId}${isLabelChange ? " with LABEL only" : ""}. Do not UPDATE other step ids.`);
234
+ }
235
+ else {
236
+ lines.push("This request requires UPDATE STEP on an existing step id.");
237
+ }
238
+ }
239
+ return lines;
240
+ }
241
+ function stepUsesList(workflow) {
242
+ const uses = [];
243
+ for (const node of workflow.steps ?? []) {
244
+ if ("uses" in node && typeof node.uses === "string") {
245
+ uses.push(node.uses);
246
+ }
247
+ }
248
+ return uses;
249
+ }
250
+ /**
251
+ * Harness repair feedback when create output omits requested capabilities.
252
+ * @internal
253
+ */
254
+ export function collectCreateCapabilityFeedback(request, summary, workflow) {
255
+ const required = inferRequiredCapabilityIds(request, summary.capabilities.map((c) => c.id));
256
+ if (required.length === 0)
257
+ return undefined;
258
+ const uses = stepUsesList(workflow);
259
+ const missing = required.filter((id) => !uses.includes(id));
260
+ const feedback = [];
261
+ if (missing.length > 0) {
262
+ const allStepsList = required.map((id, i) => `${i + 1}. STEP ... USES ${id}`).join(", ");
263
+ feedback.push(collectModelOutputFeedback(`Workflow has ${uses.length} STEP(s) but needs ${required.length}. ` +
264
+ `Include ALL required steps in EQL: ${allStepsList}. ` +
265
+ `Missing USES: ${missing.join(", ")}.`));
266
+ }
267
+ const extra = uses.filter((id) => !required.includes(id));
268
+ if (required.length > 0 && extra.length > 0) {
269
+ feedback.push(collectModelOutputFeedback(`Output exactly ${required.length} STEP line(s) for capabilities named in the request: ${required.join(", ")}. ` +
270
+ `Remove extra steps (not requested: ${extra.join(", ")}).`));
271
+ }
272
+ else if (required.length > 0 && uses.length > required.length) {
273
+ const expectedSteps = inferRequiredStepCount(request) ?? required.length;
274
+ const allUsesAreRequired = uses.every((id) => required.includes(id));
275
+ if (!(allUsesAreRequired && uses.length === expectedSteps)) {
276
+ feedback.push(collectModelOutputFeedback(`Output exactly ${required.length} STEP line(s) for: ${required.join(", ")}. Remove extra STEP lines.`));
277
+ }
278
+ }
279
+ return feedback.length > 0 ? feedback : undefined;
280
+ }
281
+ /**
282
+ * Harness repair feedback when create output has too many steps for a single-step request.
283
+ * @internal
284
+ */
285
+ export function collectCreateStepCountFeedback(request, workflow, requiredCapabilityIds) {
286
+ const explicitSingle = /\bone step\b/i.test(request) ||
287
+ /\bexactly one\b/i.test(request) ||
288
+ /\bminimal\b/i.test(request);
289
+ const requiredCount = explicitSingle
290
+ ? 1
291
+ : inferRequiredStepCount(request) ?? requiredCapabilityIds?.length;
292
+ const count = workflow.steps?.length ?? 0;
293
+ if (requiredCount === undefined || count <= requiredCount) {
294
+ return undefined;
295
+ }
296
+ if (requiredCount === 1) {
297
+ return [
298
+ collectModelOutputFeedback(`Request requires exactly one capability step but output has ${count} STEP lines. Output only one STEP ... USES line.`),
299
+ ];
300
+ }
301
+ return [
302
+ collectModelOutputFeedback(`Request requires ${requiredCount} STEP lines but output has ${count}. Output exactly ${requiredCount} STEP ... USES lines.`),
303
+ ];
304
+ }
305
+ /**
306
+ * Harness repair feedback when create output reuses a step id.
307
+ * @internal
308
+ */
309
+ export function collectCreateDuplicateStepIdFeedback(workflow) {
310
+ const stepIds = [];
311
+ for (const node of workflow.steps ?? []) {
312
+ if (!node.type || node.type === "step") {
313
+ stepIds.push(node.id);
314
+ }
315
+ }
316
+ const seen = new Set();
317
+ const duplicates = [];
318
+ for (const id of stepIds) {
319
+ if (seen.has(id)) {
320
+ if (!duplicates.includes(id)) {
321
+ duplicates.push(id);
322
+ }
323
+ }
324
+ else {
325
+ seen.add(id);
326
+ }
327
+ }
328
+ if (duplicates.length === 0) {
329
+ return undefined;
330
+ }
331
+ const dupId = duplicates[0];
332
+ const usesForDup = new Set();
333
+ for (const node of workflow.steps ?? []) {
334
+ if ((!node.type || node.type === "step") &&
335
+ node.id === dupId &&
336
+ "uses" in node &&
337
+ typeof node.uses === "string") {
338
+ usesForDup.add(node.uses);
339
+ }
340
+ }
341
+ const capHint = usesForDup.size === 1
342
+ ? ` When reusing ${[...usesForDup][0]} twice, use distinct ids like poem and summarize.`
343
+ : "";
344
+ return [
345
+ collectModelOutputFeedback(`Duplicate step id "${dupId}". Each STEP needs a unique short id.${capHint} Do not repeat the capability suffix.`),
346
+ ];
347
+ }
348
+ /**
349
+ * Harness repair feedback for common patch goals (label, remove step, add capability).
350
+ * @internal
351
+ */
352
+ export function collectPatchGoalFeedback(request, patched, summary, baseline) {
353
+ const lower = request.toLowerCase();
354
+ const feedback = [];
355
+ const baselineStepIds = baseline?.steps
356
+ ?.filter((s) => "uses" in s && typeof s.uses === "string")
357
+ .map((s) => s.id) ?? [];
358
+ const removeMatch = lower.match(/remove\s+(?:the\s+)?(\w+)(?:\s+step|\s+if|\s+from)/i);
359
+ const hasAddIntent = /add|include|append|insert/i.test(lower);
360
+ const moveMatch = request.match(/\bmove\s+(?:the\s+)?(\w+)\s+(?:step\s+)?(?:to\s+run\s+)?(after|before)\s+(\w+)/i);
361
+ if (removeMatch) {
362
+ const stepId = removeMatch[1];
363
+ const still = patched.steps?.find((s) => s.id === stepId);
364
+ if (still) {
365
+ const addPart = hasAddIntent && removeMatch
366
+ ? " Output DELETE before any ADD when the request removes and adds steps."
367
+ : "";
368
+ feedback.push(collectModelOutputFeedback(`Request removes step "${stepId}" but it is still present. Use DELETE STEP ${stepId}. Do not use UPDATE STEP.${addPart}`));
369
+ }
370
+ }
371
+ if (/change\s+(?:the\s+)?(\w+)\s+step\s+label/i.test(request) &&
372
+ !hasAddIntent &&
373
+ baselineStepIds.length > 0) {
374
+ const stepId = request.match(/change\s+(?:the\s+)?(\w+)\s+step\s+label/i)?.[1];
375
+ if (stepId && baselineStepIds.includes(stepId)) {
376
+ const count = patched.steps?.filter((s) => s.id === stepId).length ?? 0;
377
+ if (count > 1 || (patched.steps?.length ?? 0) > baselineStepIds.length) {
378
+ feedback.push(collectModelOutputFeedback(`Step "${stepId}" already exists. Use UPDATE STEP ${stepId} with LABEL, not ADD STEP ${stepId}.`));
379
+ }
380
+ }
381
+ }
382
+ if (moveMatch && baseline) {
383
+ const stepId = moveMatch[1];
384
+ const relation = moveMatch[2].toLowerCase();
385
+ const anchorId = moveMatch[3];
386
+ const stepOrder = patched.steps
387
+ ?.filter((s) => "uses" in s && typeof s.uses === "string")
388
+ .map((s) => s.id) ?? [];
389
+ const stepIdx = stepOrder.indexOf(stepId);
390
+ const anchorIdx = stepOrder.indexOf(anchorId);
391
+ if (stepIdx < 0 && baselineStepIds.includes(stepId)) {
392
+ feedback.push(collectModelOutputFeedback(`Use MOVE STEP ${stepId} ${relation.toUpperCase()} ${anchorId}. Do not DELETE STEP ${stepId}.`));
393
+ }
394
+ else if (stepIdx >= 0 && anchorIdx >= 0) {
395
+ const correct = relation === "after" ? stepIdx === anchorIdx + 1 : stepIdx === anchorIdx - 1;
396
+ if (!correct) {
397
+ feedback.push(collectModelOutputFeedback(`Use MOVE STEP ${stepId} ${relation.toUpperCase()} ${anchorId}. Do not UPDATE STEP or ADD STEP.`));
398
+ }
399
+ }
400
+ }
401
+ const required = inferRequiredCapabilityIds(request, summary.capabilities.map((c) => c.id));
402
+ const uses = stepUsesList(patched);
403
+ const missing = required.filter((id) => !uses.includes(id));
404
+ if (missing.length > 0 && hasAddIntent) {
405
+ const baselineIds = baselineStepIds.join(", ");
406
+ const afterMatch = request.match(/\bafter\s+(\w+)\b/i);
407
+ const beforeMatch = request.match(/\bbefore\s+(\w+)\b/i);
408
+ const anchor = afterMatch?.[1] ?? beforeMatch?.[1];
409
+ const anchorClause = afterMatch
410
+ ? ` AFTER ${anchor}`
411
+ : beforeMatch
412
+ ? ` BEFORE ${anchor}`
413
+ : "";
414
+ const deletePart = removeMatch && hasAddIntent
415
+ ? ` Also DELETE STEP ${removeMatch[1]} if the request removes it.`
416
+ : "";
417
+ feedback.push(collectModelOutputFeedback(`Use ADD STEP with USES ${missing.join(" or ")}${anchorClause}. ` +
418
+ `Keep existing step(s): ${baselineIds || "none"}.${deletePart}`));
419
+ }
420
+ if (removeMatch && hasAddIntent && !missing.length) {
421
+ const stepId = removeMatch[1];
422
+ const still = patched.steps?.find((s) => s.id === stepId);
423
+ if (still) {
424
+ const baselineUses = baseline ? stepUsesList(baseline) : [];
425
+ const addCap = required.find((id) => !baselineUses.includes(id));
426
+ feedback.push(collectModelOutputFeedback(addCap
427
+ ? `Combined request: output DELETE STEP ${stepId} and ADD STEP … USES ${addCap}. Do not copy hint prose as EQL.`
428
+ : `Combined request: output DELETE STEP ${stepId} in the same patch.`));
429
+ }
430
+ }
431
+ if (!removeMatch && hasAddIntent) {
432
+ for (const stepId of baselineStepIds) {
433
+ const nameInRequest = new RegExp(`\\b${stepId}\\b`, "i").test(request);
434
+ const capSuffix = stepId;
435
+ const mentionsCap = summary.capabilities.some((c) => c.id.endsWith(`.${capSuffix}`) && request.includes(c.id));
436
+ if ((nameInRequest || mentionsCap) &&
437
+ (patched.steps?.filter((s) => s.id === stepId).length ?? 0) >
438
+ (baseline?.steps?.filter((s) => s.id === stepId).length ?? 0)) {
439
+ feedback.push(collectModelOutputFeedback(`Step id "${stepId}" already exists. Use UPDATE STEP, not ADD STEP ${stepId}.`));
440
+ }
441
+ }
442
+ }
443
+ const explicitStepLabel = request.match(/change\s+(?:the\s+)?(\w+)\s+step\s+label\s+to\s+(.+?)\.?\s*$/i) ??
444
+ request.match(/rename\s+(\w+)\s+label\s+to\s+(.+?)\.?\s*$/i);
445
+ const workflowLabelMatch = request.match(/(?:change|set|rename)\s+workflow\s+label\s+to\s+(.+?)\.?\s*$/i);
446
+ if (workflowLabelMatch &&
447
+ /label|rename/.test(lower) &&
448
+ !/add|include|append|insert/i.test(lower)) {
449
+ const wanted = workflowLabelMatch[1].trim();
450
+ if (patched.workflow?.label !== wanted) {
451
+ feedback.push(collectModelOutputFeedback(`Use UPDATE WORKFLOW with LABEL "${wanted}". Do not UPDATE STEP for workflow label changes.`));
452
+ }
453
+ }
454
+ const genericStepLabel = request.match(/(?:change|set)\s+(?:the\s+)?\w+\s+step\s+label\s+to\s+(.+?)\.?\s*$/i);
455
+ if ((explicitStepLabel ?? genericStepLabel) &&
456
+ /label|rename/.test(lower) &&
457
+ !/add|include|append|insert/i.test(lower)) {
458
+ const targetStepId = explicitStepLabel?.[1]?.trim();
459
+ const wanted = (explicitStepLabel?.[2] ?? genericStepLabel?.[1] ?? "").trim();
460
+ if (targetStepId !== undefined) {
461
+ const target = patched.steps?.find((s) => s.id === targetStepId);
462
+ if (target && target.label !== wanted) {
463
+ feedback.push(collectModelOutputFeedback(`Use UPDATE STEP ${targetStepId} with LABEL "${wanted}". Do not patch other step ids.`));
464
+ }
465
+ }
466
+ }
467
+ if (/\$ref|\bref(erence)?s?\b.*\boutput\b/i.test(lower)) {
468
+ const targetStep = request.match(/ensure\s+(\w+)\s+input/i)?.[1] ??
469
+ request.match(/(\w+)\s+uses\s+\$ref/i)?.[1] ??
470
+ "summarize";
471
+ const sourceStep = request.match(/(?:to|from)\s+(\w+)\s+output/i)?.[1] ?? "echo";
472
+ if (baselineStepIds.includes(targetStep)) {
473
+ const target = patched.steps?.find((s) => s.id === targetStep);
474
+ const dupCount = patched.steps?.filter((s) => s.id === targetStep).length ?? 0;
475
+ if (dupCount > 1) {
476
+ feedback.push(collectModelOutputFeedback(`Step "${targetStep}" already exists. Use UPDATE STEP ${targetStep} WITH REF ${sourceStep}.output, not ADD STEP.`));
477
+ }
478
+ else if (target && !stepHasInputRef(target)) {
479
+ feedback.push(collectModelOutputFeedback(`UPDATE STEP ${targetStep} WITH input referencing REF ${sourceStep}.output. Keep all steps; do not DELETE or ADD ${targetStep}.`));
480
+ }
481
+ }
482
+ else if ((patched.steps?.length ?? 0) < (baseline?.steps?.length ?? 0)) {
483
+ feedback.push(collectModelOutputFeedback(`Keep all existing steps when adding $ref. Do not DELETE steps.`));
484
+ }
485
+ }
486
+ return feedback.length > 0 ? feedback : undefined;
487
+ }
488
+ //# sourceMappingURL=request-capability-hints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-capability-hints.js","sourceRoot":"","sources":["../../src/_internal/request-capability-hints.ts"],"names":[],"mappings":"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"}