@executioncontrolprotocol/core 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 (607) hide show
  1. package/README.md +42 -0
  2. package/dist/bindings/extension.d.ts +19 -0
  3. package/dist/bindings/extension.d.ts.map +1 -0
  4. package/dist/bindings/extension.js +32 -0
  5. package/dist/bindings/extension.js.map +1 -0
  6. package/dist/bindings/harness.d.ts +24 -0
  7. package/dist/bindings/harness.d.ts.map +1 -0
  8. package/dist/bindings/harness.js +44 -0
  9. package/dist/bindings/harness.js.map +1 -0
  10. package/dist/bindings/policy.d.ts +19 -0
  11. package/dist/bindings/policy.d.ts.map +1 -0
  12. package/dist/bindings/policy.js +32 -0
  13. package/dist/bindings/policy.js.map +1 -0
  14. package/dist/bindings/runtime.d.ts +19 -0
  15. package/dist/bindings/runtime.d.ts.map +1 -0
  16. package/dist/bindings/runtime.js +32 -0
  17. package/dist/bindings/runtime.js.map +1 -0
  18. package/dist/bindings/step.d.ts +34 -0
  19. package/dist/bindings/step.d.ts.map +1 -0
  20. package/dist/bindings/step.js +59 -0
  21. package/dist/bindings/step.js.map +1 -0
  22. package/dist/browser-runtime-entry.d.ts +52 -0
  23. package/dist/browser-runtime-entry.d.ts.map +1 -0
  24. package/dist/browser-runtime-entry.js +45 -0
  25. package/dist/browser-runtime-entry.js.map +1 -0
  26. package/dist/browser.d.ts +20 -0
  27. package/dist/browser.d.ts.map +1 -0
  28. package/dist/browser.js +20 -0
  29. package/dist/browser.js.map +1 -0
  30. package/dist/compile/compile-harness-artifact.d.ts +30 -0
  31. package/dist/compile/compile-harness-artifact.d.ts.map +1 -0
  32. package/dist/compile/compile-harness-artifact.js +43 -0
  33. package/dist/compile/compile-harness-artifact.js.map +1 -0
  34. package/dist/compile/entry.d.ts +3 -0
  35. package/dist/compile/entry.d.ts.map +1 -0
  36. package/dist/compile/entry.js +3 -0
  37. package/dist/compile/entry.js.map +1 -0
  38. package/dist/compile/evaluate-browser.d.ts +5 -0
  39. package/dist/compile/evaluate-browser.d.ts.map +1 -0
  40. package/dist/compile/evaluate-browser.js +15 -0
  41. package/dist/compile/evaluate-browser.js.map +1 -0
  42. package/dist/compile/evaluate-harness-artifact.d.ts +3 -0
  43. package/dist/compile/evaluate-harness-artifact.d.ts.map +1 -0
  44. package/dist/compile/evaluate-harness-artifact.js +17 -0
  45. package/dist/compile/evaluate-harness-artifact.js.map +1 -0
  46. package/dist/compile/evaluate.d.ts +5 -0
  47. package/dist/compile/evaluate.d.ts.map +1 -0
  48. package/dist/compile/evaluate.js +20 -0
  49. package/dist/compile/evaluate.js.map +1 -0
  50. package/dist/compile/extract-harness-artifact.d.ts +9 -0
  51. package/dist/compile/extract-harness-artifact.d.ts.map +1 -0
  52. package/dist/compile/extract-harness-artifact.js +33 -0
  53. package/dist/compile/extract-harness-artifact.js.map +1 -0
  54. package/dist/compile/extract-workflow-module.d.ts +4 -0
  55. package/dist/compile/extract-workflow-module.d.ts.map +1 -0
  56. package/dist/compile/extract-workflow-module.js +20 -0
  57. package/dist/compile/extract-workflow-module.js.map +1 -0
  58. package/dist/compile/index.browser.d.ts +18 -0
  59. package/dist/compile/index.browser.d.ts.map +1 -0
  60. package/dist/compile/index.browser.js +50 -0
  61. package/dist/compile/index.browser.js.map +1 -0
  62. package/dist/compile/index.d.ts +17 -0
  63. package/dist/compile/index.d.ts.map +1 -0
  64. package/dist/compile/index.js +49 -0
  65. package/dist/compile/index.js.map +1 -0
  66. package/dist/compile/prepare-browser-source.d.ts +3 -0
  67. package/dist/compile/prepare-browser-source.d.ts.map +1 -0
  68. package/dist/compile/prepare-browser-source.js +21 -0
  69. package/dist/compile/prepare-browser-source.js.map +1 -0
  70. package/dist/compile/transpile-browser.d.ts +21 -0
  71. package/dist/compile/transpile-browser.d.ts.map +1 -0
  72. package/dist/compile/transpile-browser.js +93 -0
  73. package/dist/compile/transpile-browser.js.map +1 -0
  74. package/dist/compile/transpile.d.ts +10 -0
  75. package/dist/compile/transpile.d.ts.map +1 -0
  76. package/dist/compile/transpile.js +85 -0
  77. package/dist/compile/transpile.js.map +1 -0
  78. package/dist/compile/types.d.ts +24 -0
  79. package/dist/compile/types.d.ts.map +1 -0
  80. package/dist/compile/types.js +2 -0
  81. package/dist/compile/types.js.map +1 -0
  82. package/dist/config-schema/index.d.ts +4 -0
  83. package/dist/config-schema/index.d.ts.map +1 -0
  84. package/dist/config-schema/index.js +2 -0
  85. package/dist/config-schema/index.js.map +1 -0
  86. package/dist/definitions/capability.d.ts +26 -0
  87. package/dist/definitions/capability.d.ts.map +1 -0
  88. package/dist/definitions/capability.js +49 -0
  89. package/dist/definitions/capability.js.map +1 -0
  90. package/dist/definitions/extension.d.ts +30 -0
  91. package/dist/definitions/extension.d.ts.map +1 -0
  92. package/dist/definitions/extension.js +64 -0
  93. package/dist/definitions/extension.js.map +1 -0
  94. package/dist/definitions/hook.d.ts +11 -0
  95. package/dist/definitions/hook.d.ts.map +1 -0
  96. package/dist/definitions/hook.js +13 -0
  97. package/dist/definitions/hook.js.map +1 -0
  98. package/dist/definitions/index.d.ts +7 -0
  99. package/dist/definitions/index.d.ts.map +1 -0
  100. package/dist/definitions/index.js +6 -0
  101. package/dist/definitions/index.js.map +1 -0
  102. package/dist/definitions/policy.d.ts +23 -0
  103. package/dist/definitions/policy.d.ts.map +1 -0
  104. package/dist/definitions/policy.js +50 -0
  105. package/dist/definitions/policy.js.map +1 -0
  106. package/dist/definitions/runtime.d.ts +22 -0
  107. package/dist/definitions/runtime.d.ts.map +1 -0
  108. package/dist/definitions/runtime.js +48 -0
  109. package/dist/definitions/runtime.js.map +1 -0
  110. package/dist/definitions/types.d.ts +50 -0
  111. package/dist/definitions/types.d.ts.map +1 -0
  112. package/dist/definitions/types.js +2 -0
  113. package/dist/definitions/types.js.map +1 -0
  114. package/dist/encoding/contracts.d.ts +17 -0
  115. package/dist/encoding/contracts.d.ts.map +1 -0
  116. package/dist/encoding/contracts.js +41 -0
  117. package/dist/encoding/contracts.js.map +1 -0
  118. package/dist/encoding/decode-builder.d.ts +17 -0
  119. package/dist/encoding/decode-builder.d.ts.map +1 -0
  120. package/dist/encoding/decode-builder.js +98 -0
  121. package/dist/encoding/decode-builder.js.map +1 -0
  122. package/dist/encoding/encode-builder.d.ts +19 -0
  123. package/dist/encoding/encode-builder.d.ts.map +1 -0
  124. package/dist/encoding/encode-builder.js +76 -0
  125. package/dist/encoding/encode-builder.js.map +1 -0
  126. package/dist/encoding/errors.d.ts +25 -0
  127. package/dist/encoding/errors.d.ts.map +1 -0
  128. package/dist/encoding/errors.js +20 -0
  129. package/dist/encoding/errors.js.map +1 -0
  130. package/dist/encoding/index.d.ts +10 -0
  131. package/dist/encoding/index.d.ts.map +1 -0
  132. package/dist/encoding/index.js +10 -0
  133. package/dist/encoding/index.js.map +1 -0
  134. package/dist/encoding/invoke-utility.d.ts +14 -0
  135. package/dist/encoding/invoke-utility.d.ts.map +1 -0
  136. package/dist/encoding/invoke-utility.js +50 -0
  137. package/dist/encoding/invoke-utility.js.map +1 -0
  138. package/dist/encoding/json-codec.d.ts +38 -0
  139. package/dist/encoding/json-codec.d.ts.map +1 -0
  140. package/dist/encoding/json-codec.js +108 -0
  141. package/dist/encoding/json-codec.js.map +1 -0
  142. package/dist/encoding/normalize-workflow.d.ts +7 -0
  143. package/dist/encoding/normalize-workflow.d.ts.map +1 -0
  144. package/dist/encoding/normalize-workflow.js +109 -0
  145. package/dist/encoding/normalize-workflow.js.map +1 -0
  146. package/dist/encoding/resolve.d.ts +13 -0
  147. package/dist/encoding/resolve.d.ts.map +1 -0
  148. package/dist/encoding/resolve.js +48 -0
  149. package/dist/encoding/resolve.js.map +1 -0
  150. package/dist/encoding/schemas.d.ts +398 -0
  151. package/dist/encoding/schemas.d.ts.map +1 -0
  152. package/dist/encoding/schemas.js +74 -0
  153. package/dist/encoding/schemas.js.map +1 -0
  154. package/dist/encoding/strip-harness-typescript-output.d.ts +7 -0
  155. package/dist/encoding/strip-harness-typescript-output.d.ts.map +1 -0
  156. package/dist/encoding/strip-harness-typescript-output.js +40 -0
  157. package/dist/encoding/strip-harness-typescript-output.js.map +1 -0
  158. package/dist/encoding/strip-markdown-fences.d.ts +6 -0
  159. package/dist/encoding/strip-markdown-fences.d.ts.map +1 -0
  160. package/dist/encoding/strip-markdown-fences.js +23 -0
  161. package/dist/encoding/strip-markdown-fences.js.map +1 -0
  162. package/dist/encoding/utility-context.d.ts +29 -0
  163. package/dist/encoding/utility-context.d.ts.map +1 -0
  164. package/dist/encoding/utility-context.js +33 -0
  165. package/dist/encoding/utility-context.js.map +1 -0
  166. package/dist/environment/bindings.d.ts +69 -0
  167. package/dist/environment/bindings.d.ts.map +1 -0
  168. package/dist/environment/bindings.js +39 -0
  169. package/dist/environment/bindings.js.map +1 -0
  170. package/dist/environment/config-resolver.d.ts +33 -0
  171. package/dist/environment/config-resolver.d.ts.map +1 -0
  172. package/dist/environment/config-resolver.js +100 -0
  173. package/dist/environment/config-resolver.js.map +1 -0
  174. package/dist/environment/describe.d.ts +6 -0
  175. package/dist/environment/describe.d.ts.map +1 -0
  176. package/dist/environment/describe.js +132 -0
  177. package/dist/environment/describe.js.map +1 -0
  178. package/dist/environment/ecp.d.ts +58 -0
  179. package/dist/environment/ecp.d.ts.map +1 -0
  180. package/dist/environment/ecp.js +49 -0
  181. package/dist/environment/ecp.js.map +1 -0
  182. package/dist/environment/encoding-host.d.ts +17 -0
  183. package/dist/environment/encoding-host.d.ts.map +1 -0
  184. package/dist/environment/encoding-host.js +2 -0
  185. package/dist/environment/encoding-host.js.map +1 -0
  186. package/dist/environment/environment.d.ts +94 -0
  187. package/dist/environment/environment.d.ts.map +1 -0
  188. package/dist/environment/environment.js +370 -0
  189. package/dist/environment/environment.js.map +1 -0
  190. package/dist/environment/search.d.ts +4 -0
  191. package/dist/environment/search.d.ts.map +1 -0
  192. package/dist/environment/search.js +80 -0
  193. package/dist/environment/search.js.map +1 -0
  194. package/dist/feedback/collect.d.ts +32 -0
  195. package/dist/feedback/collect.d.ts.map +1 -0
  196. package/dist/feedback/collect.js +97 -0
  197. package/dist/feedback/collect.js.map +1 -0
  198. package/dist/feedback/index.d.ts +2 -0
  199. package/dist/feedback/index.d.ts.map +1 -0
  200. package/dist/feedback/index.js +2 -0
  201. package/dist/feedback/index.js.map +1 -0
  202. package/dist/fluent/encode-fluent.d.ts +10 -0
  203. package/dist/fluent/encode-fluent.d.ts.map +1 -0
  204. package/dist/fluent/encode-fluent.js +58 -0
  205. package/dist/fluent/encode-fluent.js.map +1 -0
  206. package/dist/fluent/index.d.ts +3 -0
  207. package/dist/fluent/index.d.ts.map +1 -0
  208. package/dist/fluent/index.js +3 -0
  209. package/dist/fluent/index.js.map +1 -0
  210. package/dist/fluent/render-expr.d.ts +7 -0
  211. package/dist/fluent/render-expr.d.ts.map +1 -0
  212. package/dist/fluent/render-expr.js +14 -0
  213. package/dist/fluent/render-expr.js.map +1 -0
  214. package/dist/fluent/render-node.d.ts +6 -0
  215. package/dist/fluent/render-node.d.ts.map +1 -0
  216. package/dist/fluent/render-node.js +92 -0
  217. package/dist/fluent/render-node.js.map +1 -0
  218. package/dist/fluent/render-value.d.ts +22 -0
  219. package/dist/fluent/render-value.d.ts.map +1 -0
  220. package/dist/fluent/render-value.js +47 -0
  221. package/dist/fluent/render-value.js.map +1 -0
  222. package/dist/fluent/render-workflow.d.ts +16 -0
  223. package/dist/fluent/render-workflow.d.ts.map +1 -0
  224. package/dist/fluent/render-workflow.js +41 -0
  225. package/dist/fluent/render-workflow.js.map +1 -0
  226. package/dist/formats/format-fluent.d.ts +3 -0
  227. package/dist/formats/format-fluent.d.ts.map +1 -0
  228. package/dist/formats/format-fluent.js +17 -0
  229. package/dist/formats/format-fluent.js.map +1 -0
  230. package/dist/formats/format-json.d.ts +3 -0
  231. package/dist/formats/format-json.d.ts.map +1 -0
  232. package/dist/formats/format-json.js +73 -0
  233. package/dist/formats/format-json.js.map +1 -0
  234. package/dist/formats/register-core-formats.d.ts +7 -0
  235. package/dist/formats/register-core-formats.d.ts.map +1 -0
  236. package/dist/formats/register-core-formats.js +20 -0
  237. package/dist/formats/register-core-formats.js.map +1 -0
  238. package/dist/harness/authoring/classified-intent.d.ts +46 -0
  239. package/dist/harness/authoring/classified-intent.d.ts.map +1 -0
  240. package/dist/harness/authoring/classified-intent.js +229 -0
  241. package/dist/harness/authoring/classified-intent.js.map +1 -0
  242. package/dist/harness/authoring/context-policy.d.ts +45 -0
  243. package/dist/harness/authoring/context-policy.d.ts.map +1 -0
  244. package/dist/harness/authoring/context-policy.js +132 -0
  245. package/dist/harness/authoring/context-policy.js.map +1 -0
  246. package/dist/harness/authoring/encode-prompt-text.d.ts +7 -0
  247. package/dist/harness/authoring/encode-prompt-text.d.ts.map +1 -0
  248. package/dist/harness/authoring/encode-prompt-text.js +13 -0
  249. package/dist/harness/authoring/encode-prompt-text.js.map +1 -0
  250. package/dist/harness/authoring/environment-question.d.ts +6 -0
  251. package/dist/harness/authoring/environment-question.d.ts.map +1 -0
  252. package/dist/harness/authoring/environment-question.js +11 -0
  253. package/dist/harness/authoring/environment-question.js.map +1 -0
  254. package/dist/harness/authoring/index.d.ts +18 -0
  255. package/dist/harness/authoring/index.d.ts.map +1 -0
  256. package/dist/harness/authoring/index.js +17 -0
  257. package/dist/harness/authoring/index.js.map +1 -0
  258. package/dist/harness/authoring/normalize-create-eql-output.d.ts +27 -0
  259. package/dist/harness/authoring/normalize-create-eql-output.d.ts.map +1 -0
  260. package/dist/harness/authoring/normalize-create-eql-output.js +284 -0
  261. package/dist/harness/authoring/normalize-create-eql-output.js.map +1 -0
  262. package/dist/harness/authoring/normalize-intent-eql-output.d.ts +7 -0
  263. package/dist/harness/authoring/normalize-intent-eql-output.d.ts.map +1 -0
  264. package/dist/harness/authoring/normalize-intent-eql-output.js +59 -0
  265. package/dist/harness/authoring/normalize-intent-eql-output.js.map +1 -0
  266. package/dist/harness/authoring/normalize-patch-eql-output.d.ts +28 -0
  267. package/dist/harness/authoring/normalize-patch-eql-output.d.ts.map +1 -0
  268. package/dist/harness/authoring/normalize-patch-eql-output.js +200 -0
  269. package/dist/harness/authoring/normalize-patch-eql-output.js.map +1 -0
  270. package/dist/harness/authoring/normalize-workflow-output.d.ts +6 -0
  271. package/dist/harness/authoring/normalize-workflow-output.d.ts.map +1 -0
  272. package/dist/harness/authoring/normalize-workflow-output.js +51 -0
  273. package/dist/harness/authoring/normalize-workflow-output.js.map +1 -0
  274. package/dist/harness/authoring/presentation.d.ts +51 -0
  275. package/dist/harness/authoring/presentation.d.ts.map +1 -0
  276. package/dist/harness/authoring/presentation.js +131 -0
  277. package/dist/harness/authoring/presentation.js.map +1 -0
  278. package/dist/harness/authoring/recover-structured-patch.d.ts +21 -0
  279. package/dist/harness/authoring/recover-structured-patch.d.ts.map +1 -0
  280. package/dist/harness/authoring/recover-structured-patch.js +197 -0
  281. package/dist/harness/authoring/recover-structured-patch.js.map +1 -0
  282. package/dist/harness/authoring/repair-workflow-json.d.ts +16 -0
  283. package/dist/harness/authoring/repair-workflow-json.d.ts.map +1 -0
  284. package/dist/harness/authoring/repair-workflow-json.js +183 -0
  285. package/dist/harness/authoring/repair-workflow-json.js.map +1 -0
  286. package/dist/harness/authoring/safe-reply.d.ts +44 -0
  287. package/dist/harness/authoring/safe-reply.d.ts.map +1 -0
  288. package/dist/harness/authoring/safe-reply.js +187 -0
  289. package/dist/harness/authoring/safe-reply.js.map +1 -0
  290. package/dist/harness/authoring/summarize-capability-schema.d.ts +20 -0
  291. package/dist/harness/authoring/summarize-capability-schema.d.ts.map +1 -0
  292. package/dist/harness/authoring/summarize-capability-schema.js +137 -0
  293. package/dist/harness/authoring/summarize-capability-schema.js.map +1 -0
  294. package/dist/harness/authoring/summarize-environment.d.ts +43 -0
  295. package/dist/harness/authoring/summarize-environment.d.ts.map +1 -0
  296. package/dist/harness/authoring/summarize-environment.js +164 -0
  297. package/dist/harness/authoring/summarize-environment.js.map +1 -0
  298. package/dist/harness/authoring/summarize-run-context.d.ts +28 -0
  299. package/dist/harness/authoring/summarize-run-context.d.ts.map +1 -0
  300. package/dist/harness/authoring/summarize-run-context.js +40 -0
  301. package/dist/harness/authoring/summarize-run-context.js.map +1 -0
  302. package/dist/harness/authoring/summarize-workflow.d.ts +35 -0
  303. package/dist/harness/authoring/summarize-workflow.d.ts.map +1 -0
  304. package/dist/harness/authoring/summarize-workflow.js +109 -0
  305. package/dist/harness/authoring/summarize-workflow.js.map +1 -0
  306. package/dist/harness/call-model.d.ts +15 -0
  307. package/dist/harness/call-model.d.ts.map +1 -0
  308. package/dist/harness/call-model.js +59 -0
  309. package/dist/harness/call-model.js.map +1 -0
  310. package/dist/harness/context.d.ts +28 -0
  311. package/dist/harness/context.d.ts.map +1 -0
  312. package/dist/harness/context.js +19 -0
  313. package/dist/harness/context.js.map +1 -0
  314. package/dist/harness/define-harness.d.ts +37 -0
  315. package/dist/harness/define-harness.d.ts.map +1 -0
  316. package/dist/harness/define-harness.js +88 -0
  317. package/dist/harness/define-harness.js.map +1 -0
  318. package/dist/harness/definitions/test-minimal-harness.d.ts +13 -0
  319. package/dist/harness/definitions/test-minimal-harness.d.ts.map +1 -0
  320. package/dist/harness/definitions/test-minimal-harness.js +45 -0
  321. package/dist/harness/definitions/test-minimal-harness.js.map +1 -0
  322. package/dist/harness/execute-harness.d.ts +9 -0
  323. package/dist/harness/execute-harness.d.ts.map +1 -0
  324. package/dist/harness/execute-harness.js +138 -0
  325. package/dist/harness/execute-harness.js.map +1 -0
  326. package/dist/harness/format-resolve.d.ts +26 -0
  327. package/dist/harness/format-resolve.d.ts.map +1 -0
  328. package/dist/harness/format-resolve.js +50 -0
  329. package/dist/harness/format-resolve.js.map +1 -0
  330. package/dist/harness/harness-catalog.d.ts +41 -0
  331. package/dist/harness/harness-catalog.d.ts.map +1 -0
  332. package/dist/harness/harness-catalog.js +66 -0
  333. package/dist/harness/harness-catalog.js.map +1 -0
  334. package/dist/harness/index.d.ts +11 -0
  335. package/dist/harness/index.d.ts.map +1 -0
  336. package/dist/harness/index.js +9 -0
  337. package/dist/harness/index.js.map +1 -0
  338. package/dist/harness/prompts/build-repair-hint.d.ts +7 -0
  339. package/dist/harness/prompts/build-repair-hint.d.ts.map +1 -0
  340. package/dist/harness/prompts/build-repair-hint.js +24 -0
  341. package/dist/harness/prompts/build-repair-hint.js.map +1 -0
  342. package/dist/harness/prompts/build-system-prompt.d.ts +7 -0
  343. package/dist/harness/prompts/build-system-prompt.d.ts.map +1 -0
  344. package/dist/harness/prompts/build-system-prompt.js +97 -0
  345. package/dist/harness/prompts/build-system-prompt.js.map +1 -0
  346. package/dist/harness/prompts/eql-primer.d.ts +13 -0
  347. package/dist/harness/prompts/eql-primer.d.ts.map +1 -0
  348. package/dist/harness/prompts/eql-primer.js +171 -0
  349. package/dist/harness/prompts/eql-primer.js.map +1 -0
  350. package/dist/harness/prompts/fixtures-root.d.ts +5 -0
  351. package/dist/harness/prompts/fixtures-root.d.ts.map +1 -0
  352. package/dist/harness/prompts/fixtures-root.js +7 -0
  353. package/dist/harness/prompts/fixtures-root.js.map +1 -0
  354. package/dist/harness/prompts/harness-prompt-fixture-schema.d.ts +95 -0
  355. package/dist/harness/prompts/harness-prompt-fixture-schema.d.ts.map +1 -0
  356. package/dist/harness/prompts/harness-prompt-fixture-schema.js +28 -0
  357. package/dist/harness/prompts/harness-prompt-fixture-schema.js.map +1 -0
  358. package/dist/harness/prompts/identity-primer.d.ts +6 -0
  359. package/dist/harness/prompts/identity-primer.d.ts.map +1 -0
  360. package/dist/harness/prompts/identity-primer.js +9 -0
  361. package/dist/harness/prompts/identity-primer.js.map +1 -0
  362. package/dist/harness/prompts/index.d.ts +7 -0
  363. package/dist/harness/prompts/index.d.ts.map +1 -0
  364. package/dist/harness/prompts/index.js +7 -0
  365. package/dist/harness/prompts/index.js.map +1 -0
  366. package/dist/harness/prompts/load-schema-example.browser.d.ts +11 -0
  367. package/dist/harness/prompts/load-schema-example.browser.d.ts.map +1 -0
  368. package/dist/harness/prompts/load-schema-example.browser.js +70 -0
  369. package/dist/harness/prompts/load-schema-example.browser.js.map +1 -0
  370. package/dist/harness/prompts/load-schema-example.d.ts +11 -0
  371. package/dist/harness/prompts/load-schema-example.d.ts.map +1 -0
  372. package/dist/harness/prompts/load-schema-example.js +22 -0
  373. package/dist/harness/prompts/load-schema-example.js.map +1 -0
  374. package/dist/harness/prompts/load-schema-example.node.d.ts +7 -0
  375. package/dist/harness/prompts/load-schema-example.node.d.ts.map +1 -0
  376. package/dist/harness/prompts/load-schema-example.node.js +38 -0
  377. package/dist/harness/prompts/load-schema-example.node.js.map +1 -0
  378. package/dist/harness/prompts/schema-example-files.d.ts +7 -0
  379. package/dist/harness/prompts/schema-example-files.d.ts.map +1 -0
  380. package/dist/harness/prompts/schema-example-files.js +12 -0
  381. package/dist/harness/prompts/schema-example-files.js.map +1 -0
  382. package/dist/harness/prompts/typescript-primer.d.ts +11 -0
  383. package/dist/harness/prompts/typescript-primer.d.ts.map +1 -0
  384. package/dist/harness/prompts/typescript-primer.js +55 -0
  385. package/dist/harness/prompts/typescript-primer.js.map +1 -0
  386. package/dist/harness/repair-loop-timing.d.ts +17 -0
  387. package/dist/harness/repair-loop-timing.d.ts.map +1 -0
  388. package/dist/harness/repair-loop-timing.js +89 -0
  389. package/dist/harness/repair-loop-timing.js.map +1 -0
  390. package/dist/harness/resolve-harness-binding.d.ts +10 -0
  391. package/dist/harness/resolve-harness-binding.d.ts.map +1 -0
  392. package/dist/harness/resolve-harness-binding.js +14 -0
  393. package/dist/harness/resolve-harness-binding.js.map +1 -0
  394. package/dist/harness/run-model-repair-loop.d.ts +45 -0
  395. package/dist/harness/run-model-repair-loop.d.ts.map +1 -0
  396. package/dist/harness/run-model-repair-loop.js +57 -0
  397. package/dist/harness/run-model-repair-loop.js.map +1 -0
  398. package/dist/harness/types.d.ts +34 -0
  399. package/dist/harness/types.d.ts.map +1 -0
  400. package/dist/harness/types.js +2 -0
  401. package/dist/harness/types.js.map +1 -0
  402. package/dist/helpers/browser.d.ts +12 -0
  403. package/dist/helpers/browser.d.ts.map +1 -0
  404. package/dist/helpers/browser.js +12 -0
  405. package/dist/helpers/browser.js.map +1 -0
  406. package/dist/helpers/env.d.ts +12 -0
  407. package/dist/helpers/env.d.ts.map +1 -0
  408. package/dist/helpers/env.js +12 -0
  409. package/dist/helpers/env.js.map +1 -0
  410. package/dist/helpers/expr.d.ts +12 -0
  411. package/dist/helpers/expr.d.ts.map +1 -0
  412. package/dist/helpers/expr.js +15 -0
  413. package/dist/helpers/expr.js.map +1 -0
  414. package/dist/helpers/ref.d.ts +12 -0
  415. package/dist/helpers/ref.d.ts.map +1 -0
  416. package/dist/helpers/ref.js +13 -0
  417. package/dist/helpers/ref.js.map +1 -0
  418. package/dist/helpers/secrets.d.ts +12 -0
  419. package/dist/helpers/secrets.d.ts.map +1 -0
  420. package/dist/helpers/secrets.js +12 -0
  421. package/dist/helpers/secrets.js.map +1 -0
  422. package/dist/helpers/state.d.ts +12 -0
  423. package/dist/helpers/state.d.ts.map +1 -0
  424. package/dist/helpers/state.js +15 -0
  425. package/dist/helpers/state.js.map +1 -0
  426. package/dist/image/image-ref.d.ts +28 -0
  427. package/dist/image/image-ref.d.ts.map +1 -0
  428. package/dist/image/image-ref.js +75 -0
  429. package/dist/image/image-ref.js.map +1 -0
  430. package/dist/index.d.ts +50 -0
  431. package/dist/index.d.ts.map +1 -0
  432. package/dist/index.js +44 -0
  433. package/dist/index.js.map +1 -0
  434. package/dist/invoke/execute-invoke.d.ts +9 -0
  435. package/dist/invoke/execute-invoke.d.ts.map +1 -0
  436. package/dist/invoke/execute-invoke.js +137 -0
  437. package/dist/invoke/execute-invoke.js.map +1 -0
  438. package/dist/invoke/index.d.ts +3 -0
  439. package/dist/invoke/index.d.ts.map +1 -0
  440. package/dist/invoke/index.js +3 -0
  441. package/dist/invoke/index.js.map +1 -0
  442. package/dist/invoke/invoke-builder.d.ts +17 -0
  443. package/dist/invoke/invoke-builder.d.ts.map +1 -0
  444. package/dist/invoke/invoke-builder.js +24 -0
  445. package/dist/invoke/invoke-builder.js.map +1 -0
  446. package/dist/loaders/files.d.ts +13 -0
  447. package/dist/loaders/files.d.ts.map +1 -0
  448. package/dist/loaders/files.js +64 -0
  449. package/dist/loaders/files.js.map +1 -0
  450. package/dist/loaders/index.d.ts +2 -0
  451. package/dist/loaders/index.d.ts.map +1 -0
  452. package/dist/loaders/index.js +2 -0
  453. package/dist/loaders/index.js.map +1 -0
  454. package/dist/node.d.ts +8 -0
  455. package/dist/node.d.ts.map +1 -0
  456. package/dist/node.js +8 -0
  457. package/dist/node.js.map +1 -0
  458. package/dist/patch/apply-patch.d.ts +8 -0
  459. package/dist/patch/apply-patch.d.ts.map +1 -0
  460. package/dist/patch/apply-patch.js +286 -0
  461. package/dist/patch/apply-patch.js.map +1 -0
  462. package/dist/patch/index.d.ts +7 -0
  463. package/dist/patch/index.d.ts.map +1 -0
  464. package/dist/patch/index.js +7 -0
  465. package/dist/patch/index.js.map +1 -0
  466. package/dist/patch/normalize-input.d.ts +15 -0
  467. package/dist/patch/normalize-input.d.ts.map +1 -0
  468. package/dist/patch/normalize-input.js +68 -0
  469. package/dist/patch/normalize-input.js.map +1 -0
  470. package/dist/patch/patch-builder.d.ts +14 -0
  471. package/dist/patch/patch-builder.d.ts.map +1 -0
  472. package/dist/patch/patch-builder.js +22 -0
  473. package/dist/patch/patch-builder.js.map +1 -0
  474. package/dist/patch/patch-document.d.ts +61 -0
  475. package/dist/patch/patch-document.d.ts.map +1 -0
  476. package/dist/patch/patch-document.js +16 -0
  477. package/dist/patch/patch-document.js.map +1 -0
  478. package/dist/patch/resolve-path.d.ts +21 -0
  479. package/dist/patch/resolve-path.d.ts.map +1 -0
  480. package/dist/patch/resolve-path.js +45 -0
  481. package/dist/patch/resolve-path.js.map +1 -0
  482. package/dist/patch/step-index.d.ts +14 -0
  483. package/dist/patch/step-index.d.ts.map +1 -0
  484. package/dist/patch/step-index.js +44 -0
  485. package/dist/patch/step-index.js.map +1 -0
  486. package/dist/registry/ensure-bound-extensions.d.ts +9 -0
  487. package/dist/registry/ensure-bound-extensions.d.ts.map +1 -0
  488. package/dist/registry/ensure-bound-extensions.js +31 -0
  489. package/dist/registry/ensure-bound-extensions.js.map +1 -0
  490. package/dist/registry/errors.d.ts +13 -0
  491. package/dist/registry/errors.d.ts.map +1 -0
  492. package/dist/registry/errors.js +19 -0
  493. package/dist/registry/errors.js.map +1 -0
  494. package/dist/registry/extension-catalog.d.ts +31 -0
  495. package/dist/registry/extension-catalog.d.ts.map +1 -0
  496. package/dist/registry/extension-catalog.js +50 -0
  497. package/dist/registry/extension-catalog.js.map +1 -0
  498. package/dist/registry/namespace.d.ts +11 -0
  499. package/dist/registry/namespace.d.ts.map +1 -0
  500. package/dist/registry/namespace.js +19 -0
  501. package/dist/registry/namespace.js.map +1 -0
  502. package/dist/registry/registry.d.ts +45 -0
  503. package/dist/registry/registry.d.ts.map +1 -0
  504. package/dist/registry/registry.js +95 -0
  505. package/dist/registry/registry.js.map +1 -0
  506. package/dist/runtime/commit.d.ts +11 -0
  507. package/dist/runtime/commit.d.ts.map +1 -0
  508. package/dist/runtime/commit.js +44 -0
  509. package/dist/runtime/commit.js.map +1 -0
  510. package/dist/runtime/context.d.ts +91 -0
  511. package/dist/runtime/context.d.ts.map +1 -0
  512. package/dist/runtime/context.js +32 -0
  513. package/dist/runtime/context.js.map +1 -0
  514. package/dist/runtime/executor.d.ts +17 -0
  515. package/dist/runtime/executor.d.ts.map +1 -0
  516. package/dist/runtime/executor.js +2 -0
  517. package/dist/runtime/executor.js.map +1 -0
  518. package/dist/runtime/in-memory-executor.d.ts +10 -0
  519. package/dist/runtime/in-memory-executor.d.ts.map +1 -0
  520. package/dist/runtime/in-memory-executor.js +328 -0
  521. package/dist/runtime/in-memory-executor.js.map +1 -0
  522. package/dist/runtime/lifecycle.d.ts +6 -0
  523. package/dist/runtime/lifecycle.d.ts.map +1 -0
  524. package/dist/runtime/lifecycle.js +10 -0
  525. package/dist/runtime/lifecycle.js.map +1 -0
  526. package/dist/runtime/mutation-records.d.ts +4 -0
  527. package/dist/runtime/mutation-records.d.ts.map +1 -0
  528. package/dist/runtime/mutation-records.js +28 -0
  529. package/dist/runtime/mutation-records.js.map +1 -0
  530. package/dist/runtime/policy-engine.d.ts +13 -0
  531. package/dist/runtime/policy-engine.d.ts.map +1 -0
  532. package/dist/runtime/policy-engine.js +46 -0
  533. package/dist/runtime/policy-engine.js.map +1 -0
  534. package/dist/runtime/resolve-input.d.ts +4 -0
  535. package/dist/runtime/resolve-input.d.ts.map +1 -0
  536. package/dist/runtime/resolve-input.js +46 -0
  537. package/dist/runtime/resolve-input.js.map +1 -0
  538. package/dist/runtime/store.d.ts +38 -0
  539. package/dist/runtime/store.d.ts.map +1 -0
  540. package/dist/runtime/store.js +97 -0
  541. package/dist/runtime/store.js.map +1 -0
  542. package/dist/testing/index.d.ts +7 -0
  543. package/dist/testing/index.d.ts.map +1 -0
  544. package/dist/testing/index.js +7 -0
  545. package/dist/testing/index.js.map +1 -0
  546. package/dist/testing/test-extension.d.ts +5 -0
  547. package/dist/testing/test-extension.d.ts.map +1 -0
  548. package/dist/testing/test-extension.js +52 -0
  549. package/dist/testing/test-extension.js.map +1 -0
  550. package/dist/testing/test-lifecycle-extension.d.ts +12 -0
  551. package/dist/testing/test-lifecycle-extension.d.ts.map +1 -0
  552. package/dist/testing/test-lifecycle-extension.js +65 -0
  553. package/dist/testing/test-lifecycle-extension.js.map +1 -0
  554. package/dist/testing/test-model-generate.d.ts +15 -0
  555. package/dist/testing/test-model-generate.d.ts.map +1 -0
  556. package/dist/testing/test-model-generate.js +71 -0
  557. package/dist/testing/test-model-generate.js.map +1 -0
  558. package/dist/util/path.d.ts +16 -0
  559. package/dist/util/path.d.ts.map +1 -0
  560. package/dist/util/path.js +116 -0
  561. package/dist/util/path.js.map +1 -0
  562. package/dist/util/slug.d.ts +3 -0
  563. package/dist/util/slug.d.ts.map +1 -0
  564. package/dist/util/slug.js +9 -0
  565. package/dist/util/slug.js.map +1 -0
  566. package/dist/validate/environment.d.ts +5 -0
  567. package/dist/validate/environment.d.ts.map +1 -0
  568. package/dist/validate/environment.js +30 -0
  569. package/dist/validate/environment.js.map +1 -0
  570. package/dist/validate/harness.d.ts +11 -0
  571. package/dist/validate/harness.d.ts.map +1 -0
  572. package/dist/validate/harness.js +72 -0
  573. package/dist/validate/harness.js.map +1 -0
  574. package/dist/validate/workflow-schema.d.ts +350 -0
  575. package/dist/validate/workflow-schema.d.ts.map +1 -0
  576. package/dist/validate/workflow-schema.js +152 -0
  577. package/dist/validate/workflow-schema.js.map +1 -0
  578. package/dist/validate/workflow.d.ts +7 -0
  579. package/dist/validate/workflow.d.ts.map +1 -0
  580. package/dist/validate/workflow.js +139 -0
  581. package/dist/validate/workflow.js.map +1 -0
  582. package/dist/validate/zod-mapper.d.ts +5 -0
  583. package/dist/validate/zod-mapper.d.ts.map +1 -0
  584. package/dist/validate/zod-mapper.js +10 -0
  585. package/dist/validate/zod-mapper.js.map +1 -0
  586. package/dist/workflow/assign-unique-step-ids.d.ts +7 -0
  587. package/dist/workflow/assign-unique-step-ids.d.ts.map +1 -0
  588. package/dist/workflow/assign-unique-step-ids.js +58 -0
  589. package/dist/workflow/assign-unique-step-ids.js.map +1 -0
  590. package/dist/workflow/builder.d.ts +35 -0
  591. package/dist/workflow/builder.d.ts.map +1 -0
  592. package/dist/workflow/builder.js +63 -0
  593. package/dist/workflow/builder.js.map +1 -0
  594. package/dist/workflow/flow.d.ts +36 -0
  595. package/dist/workflow/flow.d.ts.map +1 -0
  596. package/dist/workflow/flow.js +51 -0
  597. package/dist/workflow/flow.js.map +1 -0
  598. package/fixtures/schema-examples/harness-reply.output.eql +3 -0
  599. package/fixtures/schema-examples/harness-reply.output.json +11 -0
  600. package/fixtures/schema-examples/intent.output.eql +1 -0
  601. package/fixtures/schema-examples/intent.output.json +4 -0
  602. package/fixtures/schema-examples/patch.output.eql +4 -0
  603. package/fixtures/schema-examples/patch.output.json +12 -0
  604. package/fixtures/schema-examples/patch.repair-neutral.eql +4 -0
  605. package/fixtures/schema-examples/workflow.output.eql +5 -0
  606. package/fixtures/schema-examples/workflow.output.json +18 -0
  607. package/package.json +115 -0
@@ -0,0 +1,197 @@
1
+ import { isGarbledPatchEqlOutput } from "./normalize-patch-eql-output.js";
2
+ function escapeRegExp(value) {
3
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
+ }
5
+ function parseCapabilityIdsFromRequest(request) {
6
+ return [
7
+ ...new Set([...request.matchAll(/@executioncontrolprotocol\/[\w.-]+/g)].map((match) => match[0])),
8
+ ];
9
+ }
10
+ function capabilityStepId(capabilityId) {
11
+ return capabilityId.split(".").pop() ?? "step";
12
+ }
13
+ function inferRemoveStepId(request, stepIds) {
14
+ const match = request.match(/remove\s+(?:the\s+)?(\w+)(?:\s+step|\s+from|\s+if)?/i);
15
+ const stepId = match?.[1];
16
+ if (stepId && stepIds.includes(stepId)) {
17
+ return stepId;
18
+ }
19
+ return undefined;
20
+ }
21
+ function inferWorkflowLabel(request) {
22
+ const match = request.match(/(?:change|set|rename)\s+workflow\s+label\s+to\s+(.+?)\.?\s*$/i);
23
+ return match?.[1]?.trim();
24
+ }
25
+ function inferStepInputValue(request, stepIds) {
26
+ const match = request.match(/set\s+(\w+)\s+input\s+value\s+to\s+(.+?)\.?\s*$/i);
27
+ const stepId = match?.[1];
28
+ const value = match?.[2]?.trim();
29
+ if (!stepId || !value || !stepIds.includes(stepId)) {
30
+ return undefined;
31
+ }
32
+ return { stepId, value };
33
+ }
34
+ function hasValidPatchHeader(raw, workflowId) {
35
+ return new RegExp(`^PATCH WORKFLOW\\s+${escapeRegExp(workflowId)}\\b`, "im").test(raw.trim());
36
+ }
37
+ function inferMoveStep(request, stepIds) {
38
+ const match = request.match(/\bmove\s+(?:the\s+)?(\w+)\s+(?:step\s+)?(?:to\s+run\s+)?(after|before)\s+(\w+)/i);
39
+ if (!match) {
40
+ return undefined;
41
+ }
42
+ const stepId = match[1];
43
+ const relation = match[2].toUpperCase();
44
+ const anchorId = match[3];
45
+ if (!stepIds.includes(stepId) || !stepIds.includes(anchorId)) {
46
+ return undefined;
47
+ }
48
+ return { stepId, relation, anchorId };
49
+ }
50
+ function recoverMoveStepPatch(request, raw, workflowId, stepIds) {
51
+ const move = inferMoveStep(request, stepIds);
52
+ if (!move) {
53
+ return undefined;
54
+ }
55
+ const minimal = `PATCH WORKFLOW ${workflowId}\nMOVE STEP ${move.stepId} ${move.relation} ${move.anchorId}`;
56
+ const valid = new RegExp(`^PATCH WORKFLOW\\s+${escapeRegExp(workflowId)}\\s*\\nMOVE STEP\\s+${escapeRegExp(move.stepId)}\\s+${move.relation}\\s+${escapeRegExp(move.anchorId)}\\s*$`, "im");
57
+ if (valid.test(raw.trim())) {
58
+ return undefined;
59
+ }
60
+ if (isGarbledPatchEqlOutput(raw) ||
61
+ /ADD STEP/i.test(raw) ||
62
+ /UPDATE WORKFLOW/i.test(raw) ||
63
+ /UPDATE STEP/i.test(raw) ||
64
+ !/MOVE STEP/i.test(raw) ||
65
+ !hasValidPatchHeader(raw, workflowId)) {
66
+ return minimal;
67
+ }
68
+ return undefined;
69
+ }
70
+ function recoverDeleteStepPatch(request, raw, workflowId, stepIds) {
71
+ const removeId = inferRemoveStepId(request, stepIds);
72
+ if (!removeId || /\b(?:add|insert)\b/i.test(request)) {
73
+ return undefined;
74
+ }
75
+ const minimal = `PATCH WORKFLOW ${workflowId}\nDELETE STEP ${removeId}`;
76
+ const valid = new RegExp(`^PATCH WORKFLOW\\s+${escapeRegExp(workflowId)}\\s*\\nDELETE STEP\\s+${escapeRegExp(removeId)}\\s*$`, "im");
77
+ if (valid.test(raw.trim())) {
78
+ return undefined;
79
+ }
80
+ const hasDeleteOp = /DELETE STEP/i.test(raw);
81
+ if (isGarbledPatchEqlOutput(raw) ||
82
+ /UPDATE WORKFLOW/i.test(raw) ||
83
+ !hasValidPatchHeader(raw, workflowId) ||
84
+ hasDeleteOp) {
85
+ return minimal;
86
+ }
87
+ return undefined;
88
+ }
89
+ function recoverAddStepPatch(request, raw, workflowId, capabilityIds) {
90
+ if (!/\b(?:add|insert)\b/i.test(request) || capabilityIds.length === 0) {
91
+ return undefined;
92
+ }
93
+ const cap = capabilityIds[0];
94
+ const stepId = capabilityStepId(cap);
95
+ const afterMatch = request.match(/\bafter\s+(\w+)\b/i);
96
+ const beforeMatch = request.match(/\bbefore\s+(\w+)\b/i);
97
+ let addLine = `ADD STEP ${stepId} USES ${cap}`;
98
+ if (afterMatch?.[1]) {
99
+ addLine += ` AFTER ${afterMatch[1]}`;
100
+ }
101
+ else if (beforeMatch?.[1]) {
102
+ addLine += ` BEFORE ${beforeMatch[1]}`;
103
+ }
104
+ const minimal = `PATCH WORKFLOW ${workflowId}\n${addLine}`;
105
+ const valid = new RegExp(`^PATCH WORKFLOW\\s+${escapeRegExp(workflowId)}\\s*\\nADD STEP\\s+${escapeRegExp(stepId)}\\s+USES\\s+${escapeRegExp(cap)}`, "im");
106
+ if (valid.test(raw.trim())) {
107
+ return undefined;
108
+ }
109
+ if (isGarbledPatchEqlOutput(raw) || /UPDATE WORKFLOW/i.test(raw) || !/^ADD STEP/im.test(raw)) {
110
+ return minimal;
111
+ }
112
+ return undefined;
113
+ }
114
+ function recoverWorkflowLabelPatch(request, raw, workflowId, requestedLabel) {
115
+ const label = requestedLabel ?? inferWorkflowLabel(request);
116
+ if (!label || /\b(?:add|insert|remove|delete)\b/i.test(request)) {
117
+ return undefined;
118
+ }
119
+ const minimal = `PATCH WORKFLOW ${workflowId}\nUPDATE WORKFLOW\n LABEL "${label}"`;
120
+ const valid = new RegExp(`^PATCH WORKFLOW\\s+${escapeRegExp(workflowId)}\\s*\\nUPDATE WORKFLOW\\s*\\n\\s*LABEL\\s+"${escapeRegExp(label)}"\\s*$`, "im");
121
+ if (valid.test(raw.trim())) {
122
+ return undefined;
123
+ }
124
+ if (isGarbledPatchEqlOutput(raw) || /UPDATE STEP/i.test(raw)) {
125
+ return minimal;
126
+ }
127
+ return undefined;
128
+ }
129
+ function recoverStepInputPatch(request, raw, workflowId, stepIds) {
130
+ const input = inferStepInputValue(request, stepIds);
131
+ if (!input) {
132
+ return undefined;
133
+ }
134
+ const escapedValue = input.value.replace(/"/g, '\\"');
135
+ const minimal = `PATCH WORKFLOW ${workflowId}\nUPDATE STEP ${input.stepId}\n WITH value = "${escapedValue}"`;
136
+ const valid = new RegExp(`^PATCH WORKFLOW\\s+${escapeRegExp(workflowId)}\\s*\\nUPDATE STEP\\s+${escapeRegExp(input.stepId)}\\s*\\n\\s*WITH\\s+value\\s*=\\s*"${escapeRegExp(input.value)}"\\s*$`, "im");
137
+ if (valid.test(raw.trim())) {
138
+ return undefined;
139
+ }
140
+ if (isGarbledPatchEqlOutput(raw) || !/WITH\s+value\s*=/i.test(raw)) {
141
+ return minimal;
142
+ }
143
+ return undefined;
144
+ }
145
+ function recoverCombinedDeleteAddPatch(request, raw, workflowId, stepIds, capabilityIds) {
146
+ const removeId = inferRemoveStepId(request, stepIds);
147
+ const hasAdd = /\b(?:add|insert)\b/i.test(request);
148
+ if (!removeId || !hasAdd || capabilityIds.length === 0) {
149
+ return undefined;
150
+ }
151
+ const cap = capabilityIds.find((id) => id.endsWith(".translate")) ??
152
+ capabilityIds.find((id) => !stepIds.some((stepId) => id.endsWith(`.${stepId}`))) ??
153
+ capabilityIds[0];
154
+ const stepId = capabilityStepId(cap);
155
+ const afterMatch = request.match(/\bafter\s+(\w+)\b/i);
156
+ const anchor = afterMatch?.[1];
157
+ const lines = [`PATCH WORKFLOW ${workflowId}`, `DELETE STEP ${removeId}`];
158
+ let addLine = `ADD STEP ${stepId} USES ${cap}`;
159
+ if (anchor) {
160
+ addLine += ` AFTER ${anchor}`;
161
+ }
162
+ lines.push(addLine);
163
+ if (cap.endsWith(".translate") && anchor) {
164
+ lines.push(` WITH text = REF ${anchor}.output`);
165
+ }
166
+ else if (cap.endsWith(".summarize") && anchor) {
167
+ lines.push(` WITH payload = REF ${anchor}.output`);
168
+ }
169
+ else if (cap.endsWith(".validate")) {
170
+ lines.push(` WITH payload = {"ok": true}`);
171
+ }
172
+ lines.push(` AS ${stepId}`);
173
+ const minimal = lines.join("\n");
174
+ const hasDelete = new RegExp(`DELETE STEP\\s+${escapeRegExp(removeId)}\\b`, "i").test(raw);
175
+ const hasAddOp = new RegExp(`ADD STEP\\s+${escapeRegExp(stepId)}\\s+USES\\s+${escapeRegExp(cap)}`, "i").test(raw);
176
+ if (hasDelete && hasAddOp && !isGarbledPatchEqlOutput(raw)) {
177
+ return undefined;
178
+ }
179
+ return minimal;
180
+ }
181
+ /**
182
+ * Rebuild patch EQL for unambiguous ADD, DELETE, workflow-label, step-label, and input-value requests.
183
+ * @category Harness
184
+ */
185
+ export function recoverStructuredPatchFromRequest(raw, context) {
186
+ if (!context.workflowId) {
187
+ return undefined;
188
+ }
189
+ const capabilityIds = context.capabilityIds ?? parseCapabilityIdsFromRequest(context.request);
190
+ return (recoverCombinedDeleteAddPatch(context.request, raw, context.workflowId, context.stepIds, capabilityIds) ??
191
+ recoverMoveStepPatch(context.request, raw, context.workflowId, context.stepIds) ??
192
+ recoverDeleteStepPatch(context.request, raw, context.workflowId, context.stepIds) ??
193
+ recoverAddStepPatch(context.request, raw, context.workflowId, capabilityIds) ??
194
+ recoverWorkflowLabelPatch(context.request, raw, context.workflowId, context.requestedLabel) ??
195
+ recoverStepInputPatch(context.request, raw, context.workflowId, context.stepIds));
196
+ }
197
+ //# sourceMappingURL=recover-structured-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recover-structured-patch.js","sourceRoot":"","sources":["../../../src/harness/authoring/recover-structured-patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Repair common 1B workflow JSON mistakes before decode.
3
+ * @category Harness
4
+ */
5
+ export declare function repairWorkflowJsonSyntax(raw: string): string;
6
+ /**
7
+ * Repair common 1B patch JSON mistakes before decode.
8
+ * @category Harness
9
+ */
10
+ export declare function repairPatchJsonSyntax(raw: string): string;
11
+ /**
12
+ * Hoist steps nested under workflow into top-level steps array.
13
+ * @category Harness
14
+ */
15
+ export declare function hoistWorkflowStepsInRawJson(raw: string): string;
16
+ //# sourceMappingURL=repair-workflow-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-workflow-json.d.ts","sourceRoot":"","sources":["../../../src/harness/authoring/repair-workflow-json.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmC5D;AAsFD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAyBzD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA8C/D"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Repair common 1B workflow JSON mistakes before decode.
3
+ * @category Harness
4
+ */
5
+ export function repairWorkflowJsonSyntax(raw) {
6
+ let next = raw.trim();
7
+ next = next.replace(/(\})\s*\]+\s*$/, "$1");
8
+ try {
9
+ JSON.parse(next);
10
+ }
11
+ catch {
12
+ const withClose = next + "}";
13
+ try {
14
+ JSON.parse(withClose);
15
+ next = withClose;
16
+ }
17
+ catch {
18
+ // fall through
19
+ }
20
+ }
21
+ next = hoistWorkflowStepsInRawJson(next);
22
+ try {
23
+ JSON.parse(next);
24
+ }
25
+ catch {
26
+ const fixed = fixFloatingAsInSteps(next);
27
+ if (fixed !== next)
28
+ next = fixed;
29
+ }
30
+ next = next.replace(/"id":"([^"]+)"([\s\S]*?"input":\{[^}]*\})\},\s*\{"type":"step"/g, '"id":"$1"$2,"as":"$1"},\{"type":"step"');
31
+ next = next.replace(/\]\s*\)\s*\}\s*\)\s*$/g, "]}");
32
+ next = next.replace(/"steps":\s*\[[^\]]*],\s*"steps":/g, '"steps":');
33
+ next = next.replace(/\}"\s*,/g, "},");
34
+ return next;
35
+ }
36
+ function fixFloatingAsInSteps(raw) {
37
+ return fixFloatingAsInArray(raw, '"steps":[');
38
+ }
39
+ function fixFloatingAsInArray(raw, marker) {
40
+ const stepsIdx = raw.indexOf(marker);
41
+ if (stepsIdx < 0)
42
+ return raw;
43
+ const arrayOpen = stepsIdx + marker.length - 1;
44
+ let i = arrayOpen + 1;
45
+ let result = raw.slice(0, i);
46
+ let depth = 0;
47
+ let inString = false;
48
+ let escape = false;
49
+ while (i < raw.length) {
50
+ const ch = raw[i];
51
+ if (escape) {
52
+ escape = false;
53
+ result += ch;
54
+ i++;
55
+ continue;
56
+ }
57
+ if (inString) {
58
+ if (ch === "\\") {
59
+ escape = true;
60
+ result += ch;
61
+ i++;
62
+ continue;
63
+ }
64
+ if (ch === '"')
65
+ inString = false;
66
+ result += ch;
67
+ i++;
68
+ continue;
69
+ }
70
+ if (ch === '"') {
71
+ inString = true;
72
+ result += ch;
73
+ i++;
74
+ continue;
75
+ }
76
+ if (ch === "{") {
77
+ depth++;
78
+ result += ch;
79
+ i++;
80
+ continue;
81
+ }
82
+ if (ch === "}") {
83
+ depth--;
84
+ if (depth < 0) {
85
+ result += raw.slice(i);
86
+ return result;
87
+ }
88
+ result += ch;
89
+ i++;
90
+ continue;
91
+ }
92
+ if (ch === "]" && depth === 0) {
93
+ result += raw.slice(i);
94
+ return result;
95
+ }
96
+ if (ch === "," && depth === 0) {
97
+ const rest = raw.slice(i + 1);
98
+ const trimmed = rest.trimStart();
99
+ const leadingWs = rest.length - trimmed.length;
100
+ const floatMatch = trimmed.match(/^"as"\s*:\s*"([^"]*)"\s*\}/);
101
+ if (floatMatch) {
102
+ result = result.slice(0, -1);
103
+ result += `,"as":"${floatMatch[1]}"}`;
104
+ i += 1 + leadingWs + floatMatch[0].length;
105
+ continue;
106
+ }
107
+ }
108
+ result += ch;
109
+ i++;
110
+ }
111
+ return result;
112
+ }
113
+ /**
114
+ * Repair common 1B patch JSON mistakes before decode.
115
+ * @category Harness
116
+ */
117
+ export function repairPatchJsonSyntax(raw) {
118
+ let next = raw.trim();
119
+ try {
120
+ JSON.parse(next);
121
+ }
122
+ catch {
123
+ const fixed = fixFloatingAsInArray(next, '"value":[');
124
+ if (fixed !== next)
125
+ next = fixed;
126
+ }
127
+ try {
128
+ JSON.parse(next);
129
+ }
130
+ catch {
131
+ const stripped = next.replace(/\)\s*\}/g, "}");
132
+ try {
133
+ JSON.parse(stripped);
134
+ next = stripped;
135
+ }
136
+ catch {
137
+ // fall through
138
+ }
139
+ }
140
+ next = next.replace(/\}"\s*,/g, "},");
141
+ return next;
142
+ }
143
+ /**
144
+ * Hoist steps nested under workflow into top-level steps array.
145
+ * @category Harness
146
+ */
147
+ export function hoistWorkflowStepsInRawJson(raw) {
148
+ const trimmed = raw.trim();
149
+ if (!trimmed.includes('"workflow"') || !trimmed.includes('"steps"')) {
150
+ return raw;
151
+ }
152
+ try {
153
+ const parsed = JSON.parse(trimmed);
154
+ const workflow = parsed.workflow;
155
+ if (workflow !== null &&
156
+ typeof workflow === "object" &&
157
+ !Array.isArray(workflow) &&
158
+ Array.isArray(workflow.steps) &&
159
+ parsed.steps === undefined) {
160
+ const wf = workflow;
161
+ const { steps, ...rest } = wf;
162
+ return JSON.stringify({ ...parsed, workflow: rest, steps });
163
+ }
164
+ }
165
+ catch {
166
+ // fall through to regex hoist
167
+ }
168
+ const match = trimmed.match(/"workflow"\s*:\s*\{("id"\s*:\s*"[^"]*"(?:\s*,\s*"label"\s*:\s*"[^"]*")?)\s*,\s*"steps"\s*:\s*(\[[\s\S]*\])\s*\}\s*,\s*"steps"\s*:/);
169
+ if (match) {
170
+ return trimmed;
171
+ }
172
+ const nested = trimmed.match(/"workflow"\s*:\s*\{("id"\s*:\s*"[^"]*"(?:\s*,\s*"label"\s*:\s*"[^"]*")?)\s*,\s*"steps"\s*:\s*(\[[\s\S]*?\])\s*\}/);
173
+ if (nested) {
174
+ const wfMeta = `{${nested[1]}}`;
175
+ const stepsArray = nested[2];
176
+ const withoutNested = trimmed.replace(nested[0], `"workflow":${wfMeta}`);
177
+ if (!withoutNested.includes('"steps":')) {
178
+ return withoutNested.replace(`"workflow":${wfMeta}`, `"workflow":${wfMeta},"steps":${stepsArray}`);
179
+ }
180
+ }
181
+ return raw;
182
+ }
183
+ //# sourceMappingURL=repair-workflow-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-workflow-json.js","sourceRoot":"","sources":["../../../src/harness/authoring/repair-workflow-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type HarnessReply, type HarnessRunContext, type EcpIntent } from "@executioncontrolprotocol/types";
2
+ import type { CompactEnvironmentSummary } from "./summarize-environment.js";
3
+ /** Shared redirect phrase for safe-reply and out-of-scope assistant answers. @category Harness */
4
+ export declare const HARNESS_ASSISTANT_SCOPE_REDIRECT_PHRASE = "workflows, ECP, or available capabilities";
5
+ /** Default safe reply when assistant decode/repair fails. @category Harness */
6
+ export declare const HARNESS_ASSISTANT_SAFE_REPLY_MESSAGE = "I could not answer that cleanly \u2014 try rephrasing or ask about workflows, ECP, or available capabilities.";
7
+ /** Model-facing default for off-topic, unknowable, or gibberish user messages. @category Harness */
8
+ export declare const HARNESS_ASSISTANT_OUT_OF_SCOPE_ANSWER = "I cannot help with that \u2014 ask about workflows, ECP, or available capabilities.";
9
+ /**
10
+ * True when the assistant answer redirects the user toward ECP harness scope.
11
+ * @category Harness
12
+ */
13
+ export declare function answerRedirectsToHarnessScope(answer: string): boolean;
14
+ /**
15
+ * Minimal valid harness reply for graceful assistant fallback.
16
+ * @category Harness
17
+ */
18
+ export declare function buildAssistantSafeReply(message?: string): HarnessReply;
19
+ /**
20
+ * Deterministic assistant reply from run context when the user question is unambiguous.
21
+ * @category Harness
22
+ */
23
+ export declare function tryBuildRunContextReply(message: string, runContext?: HarnessRunContext): HarnessReply | undefined;
24
+ /**
25
+ * Deterministic FAQ reply for common ECP how-it-works questions (avoids patch-like EQL in answers).
26
+ * @category Harness
27
+ */
28
+ export declare function tryBuildFaqReply(message: string, classifiedIntent?: EcpIntent): HarnessReply | undefined;
29
+ /**
30
+ * Deterministic off-topic decline for common non-ECP requests.
31
+ * @category Harness
32
+ */
33
+ export declare function tryBuildOffTopicReply(message: string): HarnessReply | undefined;
34
+ /**
35
+ * Deterministic environment inventory reply for extension and capability questions.
36
+ * @category Harness
37
+ */
38
+ export declare function tryBuildEnvironmentReply(message: string, summary?: CompactEnvironmentSummary): HarnessReply | undefined;
39
+ /**
40
+ * Deterministic refusal when the user asks to register or install extensions.
41
+ * @category Harness
42
+ */
43
+ export declare function tryBuildRegisterRefusalReply(message: string): HarnessReply | undefined;
44
+ //# sourceMappingURL=safe-reply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-reply.d.ts","sourceRoot":"","sources":["../../../src/harness/authoring/safe-reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAErI,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAG3E,kGAAkG;AAClG,eAAO,MAAM,uCAAuC,8CACP,CAAA;AAE7C,+EAA+E;AAC/E,eAAO,MAAM,oCAAoC,kHAC4D,CAAA;AAE7G,oGAAoG;AACpG,eAAO,MAAM,qCAAqC,wFACiC,CAAA;AAInF;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGrE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,CAKtE;AAcD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,iBAAiB,GAC7B,YAAY,GAAG,SAAS,CA2D1B;AAeD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,SAAS,GAC3B,YAAY,GAAG,SAAS,CAqB1B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAK/E;AA6BD;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,yBAAyB,GAClC,YAAY,GAAG,SAAS,CAkB1B;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAOtF"}
@@ -0,0 +1,187 @@
1
+ import { ECP_HARNESS_REPLY_SCHEMA } from "@executioncontrolprotocol/types";
2
+ import { isEnvironmentQuestion } from "./environment-question.js";
3
+ import { summarizeHarnessRunContext } from "./summarize-run-context.js";
4
+ /** Shared redirect phrase for safe-reply and out-of-scope assistant answers. @category Harness */
5
+ export const HARNESS_ASSISTANT_SCOPE_REDIRECT_PHRASE = "workflows, ECP, or available capabilities";
6
+ /** Default safe reply when assistant decode/repair fails. @category Harness */
7
+ export const HARNESS_ASSISTANT_SAFE_REPLY_MESSAGE = `I could not answer that cleanly — try rephrasing or ask about ${HARNESS_ASSISTANT_SCOPE_REDIRECT_PHRASE}.`;
8
+ /** Model-facing default for off-topic, unknowable, or gibberish user messages. @category Harness */
9
+ export const HARNESS_ASSISTANT_OUT_OF_SCOPE_ANSWER = `I cannot help with that — ask about ${HARNESS_ASSISTANT_SCOPE_REDIRECT_PHRASE}.`;
10
+ const HARNESS_SCOPE_REDIRECT_TOKENS = ["ecp", "workflow", "capabilit", "scope", "rephras"];
11
+ /**
12
+ * True when the assistant answer redirects the user toward ECP harness scope.
13
+ * @category Harness
14
+ */
15
+ export function answerRedirectsToHarnessScope(answer) {
16
+ const lower = answer.toLowerCase();
17
+ return HARNESS_SCOPE_REDIRECT_TOKENS.some((token) => lower.includes(token));
18
+ }
19
+ /**
20
+ * Minimal valid harness reply for graceful assistant fallback.
21
+ * @category Harness
22
+ */
23
+ export function buildAssistantSafeReply(message) {
24
+ return {
25
+ schema: ECP_HARNESS_REPLY_SCHEMA,
26
+ answer: message ?? HARNESS_ASSISTANT_SAFE_REPLY_MESSAGE,
27
+ };
28
+ }
29
+ function readStepError(runContext, stepId) {
30
+ const record = runContext.run.history?.[stepId];
31
+ if (!record?.output || typeof record.output !== "object") {
32
+ return undefined;
33
+ }
34
+ const output = record.output;
35
+ if (typeof output.error === "string" && output.error.length > 0) {
36
+ return output.error;
37
+ }
38
+ return undefined;
39
+ }
40
+ /**
41
+ * Deterministic assistant reply from run context when the user question is unambiguous.
42
+ * @category Harness
43
+ */
44
+ export function tryBuildRunContextReply(message, runContext) {
45
+ if (!runContext) {
46
+ return undefined;
47
+ }
48
+ const summary = summarizeHarnessRunContext(runContext);
49
+ const msg = message.trim();
50
+ if (/what (?:is the )?run status/i.test(msg) || /\b(?:still\s+)?running\b/i.test(msg)) {
51
+ return buildAssistantSafeReply(`The current run status is: ${summary.status}.`);
52
+ }
53
+ const failStepMatch = msg.match(/why did step (\w+) fail/i);
54
+ if (failStepMatch || /what error occurred/i.test(msg)) {
55
+ const stepId = failStepMatch?.[1] ?? summary.failedSteps[0]?.stepId;
56
+ if (!stepId) {
57
+ return undefined;
58
+ }
59
+ const error = readStepError(runContext, stepId);
60
+ if (!error) {
61
+ return undefined;
62
+ }
63
+ return buildAssistantSafeReply(`Step ${stepId} failed with error: ${error}`);
64
+ }
65
+ const fixEchoMatch = /\bhow can i fix\b.*\becho\b/i.test(msg) || /\bfix\b.*\becho\b.*\berror\b/i.test(msg);
66
+ if (fixEchoMatch) {
67
+ const stepId = summary.failedSteps[0]?.stepId ?? "echo";
68
+ const error = readStepError(runContext, stepId);
69
+ if (!error) {
70
+ return undefined;
71
+ }
72
+ return {
73
+ schema: ECP_HARNESS_REPLY_SCHEMA,
74
+ answer: `Step ${stepId} failed with error: ${error}. Update the ${stepId} step input with a non-empty value to fix it.`,
75
+ citations: [{ kind: "step", id: stepId }],
76
+ };
77
+ }
78
+ if (/\b(?:explain|describe)\b.*\b(?:failure|error)\b/i.test(msg) ||
79
+ /\b(?:failure|error)\b.*\bpolitely\b/i.test(msg)) {
80
+ const stepId = summary.failedSteps[0]?.stepId;
81
+ if (!stepId) {
82
+ return undefined;
83
+ }
84
+ const error = readStepError(runContext, stepId);
85
+ if (!error) {
86
+ return undefined;
87
+ }
88
+ return {
89
+ schema: ECP_HARNESS_REPLY_SCHEMA,
90
+ answer: `The ${stepId} step failed with an error: ${error}. Updating the step input with a valid value should resolve it.`,
91
+ citations: [{ kind: "step", id: stepId }],
92
+ };
93
+ }
94
+ return undefined;
95
+ }
96
+ const FAQ_PATCHING_ANSWER = "ECP workflow patching applies targeted changes to an existing workflow using a patch document—you describe what to update (such as a step label or input) and the runtime validates and applies it without replacing the whole workflow.";
97
+ const FAQ_ECP_DEFINITION_ANSWER = "ECP (Execution Control Protocol) is the runtime spec for agentic systems: portable workflows run inside governed environments that bind tools, models, policies, and runtimes.";
98
+ const OFF_TOPIC_MESSAGE_PATTERNS = [
99
+ /\bweather\b/i,
100
+ /\bjoke\b/i,
101
+ /\bcover letter\b/i,
102
+ /\bresume\b/i,
103
+ ];
104
+ /**
105
+ * Deterministic FAQ reply for common ECP how-it-works questions (avoids patch-like EQL in answers).
106
+ * @category Harness
107
+ */
108
+ export function tryBuildFaqReply(message, classifiedIntent) {
109
+ const msg = message.trim();
110
+ const topic = classifiedIntent?.topic?.toLowerCase() ?? "";
111
+ const isFaqPatch = classifiedIntent?.intent === "faq" &&
112
+ (topic.includes("patch") ||
113
+ /how does .*patch/i.test(msg) ||
114
+ /how (?:do|does) (?:i |you )?patch/i.test(msg));
115
+ if (isFaqPatch) {
116
+ return buildAssistantSafeReply(FAQ_PATCHING_ANSWER);
117
+ }
118
+ if (/^what is ecp\??$/i.test(msg) ||
119
+ (classifiedIntent?.intent === "faq" && topic.includes("ecp"))) {
120
+ return buildAssistantSafeReply(FAQ_ECP_DEFINITION_ANSWER);
121
+ }
122
+ return undefined;
123
+ }
124
+ /**
125
+ * Deterministic off-topic decline for common non-ECP requests.
126
+ * @category Harness
127
+ */
128
+ export function tryBuildOffTopicReply(message) {
129
+ if (!OFF_TOPIC_MESSAGE_PATTERNS.some((pattern) => pattern.test(message))) {
130
+ return undefined;
131
+ }
132
+ return buildAssistantSafeReply(HARNESS_ASSISTANT_OUT_OF_SCOPE_ANSWER);
133
+ }
134
+ function formatExtensionList(summary) {
135
+ const ids = summary.extensions.map((ext) => ext.id);
136
+ if (ids.length <= 1) {
137
+ return ids[0] ?? "none";
138
+ }
139
+ const last = ids[ids.length - 1];
140
+ return `${ids.slice(0, -1).join(", ")}, and ${last}`;
141
+ }
142
+ function formatStepCapabilityList(summary) {
143
+ const ids = summary.capabilities
144
+ .filter((cap) => cap.id.startsWith("@executioncontrolprotocol/test.") &&
145
+ cap.id !== "@executioncontrolprotocol/test.generate")
146
+ .map((cap) => cap.id);
147
+ if (ids.length === 0) {
148
+ return "@executioncontrolprotocol/test.echo";
149
+ }
150
+ if (ids.length <= 1) {
151
+ return ids[0];
152
+ }
153
+ const last = ids[ids.length - 1];
154
+ return `${ids.slice(0, -1).join(", ")}, and ${last}`;
155
+ }
156
+ /**
157
+ * Deterministic environment inventory reply for extension and capability questions.
158
+ * @category Harness
159
+ */
160
+ export function tryBuildEnvironmentReply(message, summary) {
161
+ if (!summary || !isEnvironmentQuestion(message)) {
162
+ return undefined;
163
+ }
164
+ if (/\b(?:register|install)\b/i.test(message)) {
165
+ return undefined;
166
+ }
167
+ if (!/\b(extensions?|capabilities|plugins?)\b/i.test(message)) {
168
+ return undefined;
169
+ }
170
+ if (/^what can you do\??$/i.test(message.trim())) {
171
+ return undefined;
172
+ }
173
+ const extensions = formatExtensionList(summary);
174
+ const capabilities = formatStepCapabilityList(summary);
175
+ return buildAssistantSafeReply(`ECP extensions loaded in this environment include ${extensions}. Step capabilities include ${capabilities}.`);
176
+ }
177
+ /**
178
+ * Deterministic refusal when the user asks to register or install extensions.
179
+ * @category Harness
180
+ */
181
+ export function tryBuildRegisterRefusalReply(message) {
182
+ if (!/\b(?:register|install)\b/i.test(message) || !/\b(?:extensions?|plugins?)\b/i.test(message)) {
183
+ return undefined;
184
+ }
185
+ return buildAssistantSafeReply("I cannot register or install extensions in this environment — I can only use capabilities that are already loaded. Ask about workflows, ECP, or available capabilities.");
186
+ }
187
+ //# sourceMappingURL=safe-reply.js.map