patchwork-os 0.2.0-beta.5.canary.94 → 0.2.0-beta.6

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 (139) hide show
  1. package/dist/ajv2020.d.ts +25 -0
  2. package/dist/ajv2020.js +33 -0
  3. package/dist/ajv2020.js.map +1 -0
  4. package/dist/approvalQueue.d.ts +17 -0
  5. package/dist/approvalQueue.js.map +1 -1
  6. package/dist/bridge.js +16 -0
  7. package/dist/bridge.js.map +1 -1
  8. package/dist/commands/recipeInstall.js +5 -1
  9. package/dist/commands/recipeInstall.js.map +1 -1
  10. package/dist/commands/tools.d.ts +20 -1
  11. package/dist/commands/tools.js +112 -3
  12. package/dist/commands/tools.js.map +1 -1
  13. package/dist/haltPushDispatch.d.ts +33 -0
  14. package/dist/haltPushDispatch.js +103 -0
  15. package/dist/haltPushDispatch.js.map +1 -0
  16. package/dist/inboxRoutes.d.ts +22 -0
  17. package/dist/inboxRoutes.js +61 -1
  18. package/dist/inboxRoutes.js.map +1 -1
  19. package/dist/index.js +8 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/oauthRoutes.d.ts +1 -1
  22. package/dist/oauthRoutes.js +2 -2
  23. package/dist/recipeRoutes.js +133 -65
  24. package/dist/recipeRoutes.js.map +1 -1
  25. package/dist/recipes/githubInstallSource.d.ts +66 -0
  26. package/dist/recipes/githubInstallSource.js +85 -4
  27. package/dist/recipes/githubInstallSource.js.map +1 -1
  28. package/dist/recipes/haltCategory.d.ts +4 -0
  29. package/dist/recipes/haltCategory.js +6 -0
  30. package/dist/recipes/haltCategory.js.map +1 -1
  31. package/dist/recipes/names.d.ts +20 -0
  32. package/dist/recipes/names.js +25 -0
  33. package/dist/recipes/names.js.map +1 -1
  34. package/dist/recipes/parser.js +7 -2
  35. package/dist/recipes/parser.js.map +1 -1
  36. package/dist/recipes/stepObservation.js +9 -0
  37. package/dist/recipes/stepObservation.js.map +1 -1
  38. package/dist/recipes/tools/fanOut.d.ts +20 -0
  39. package/dist/recipes/tools/fanOut.js +199 -0
  40. package/dist/recipes/tools/fanOut.js.map +1 -0
  41. package/dist/recipes/tools/index.d.ts +1 -0
  42. package/dist/recipes/tools/index.js +1 -0
  43. package/dist/recipes/tools/index.js.map +1 -1
  44. package/dist/recipes/tools/slack.js +1 -1
  45. package/dist/recipes/validation.js +2 -2
  46. package/dist/recipes/validation.js.map +1 -1
  47. package/dist/recipes/workspaceRoot.d.ts +37 -0
  48. package/dist/recipes/workspaceRoot.js +73 -0
  49. package/dist/recipes/workspaceRoot.js.map +1 -0
  50. package/dist/recipes/yamlRunner.d.ts +72 -0
  51. package/dist/recipes/yamlRunner.js +621 -295
  52. package/dist/recipes/yamlRunner.js.map +1 -1
  53. package/dist/runLog.d.ts +22 -0
  54. package/dist/runLog.js +12 -1
  55. package/dist/runLog.js.map +1 -1
  56. package/dist/server.d.ts +14 -0
  57. package/dist/server.js +36 -3
  58. package/dist/server.js.map +1 -1
  59. package/dist/tools/batchLsp.d.ts +3 -0
  60. package/dist/tools/cancelClaudeTask.d.ts +1 -0
  61. package/dist/tools/clipboard.d.ts +2 -0
  62. package/dist/tools/closeTabs.d.ts +1 -0
  63. package/dist/tools/codeLens.d.ts +1 -0
  64. package/dist/tools/createIssueFromAIComment.d.ts +1 -0
  65. package/dist/tools/ctxSaveTrace.d.ts +1 -0
  66. package/dist/tools/debug.d.ts +4 -0
  67. package/dist/tools/decorations.d.ts +2 -0
  68. package/dist/tools/documentLinks.d.ts +1 -0
  69. package/dist/tools/editText.d.ts +1 -0
  70. package/dist/tools/enrichCommit.d.ts +1 -0
  71. package/dist/tools/explainDiagnostic.d.ts +1 -0
  72. package/dist/tools/explainSymbol.d.ts +1 -0
  73. package/dist/tools/fileOperations.d.ts +3 -0
  74. package/dist/tools/fileWatcher.d.ts +2 -0
  75. package/dist/tools/findFiles.d.ts +1 -0
  76. package/dist/tools/fixAllLintErrors.d.ts +1 -0
  77. package/dist/tools/foldingRanges.d.ts +1 -0
  78. package/dist/tools/formatDocument.d.ts +1 -0
  79. package/dist/tools/generateTests.d.ts +1 -0
  80. package/dist/tools/getAIComments.d.ts +1 -0
  81. package/dist/tools/getBufferContent.d.ts +1 -0
  82. package/dist/tools/getChangeImpact.d.ts +1 -0
  83. package/dist/tools/getClaudeTaskStatus.d.ts +1 -0
  84. package/dist/tools/getCodeCoverage.d.ts +1 -0
  85. package/dist/tools/getCommitsForIssue.d.ts +1 -0
  86. package/dist/tools/getDebugState.d.ts +1 -0
  87. package/dist/tools/getDocumentSymbols.d.ts +1 -0
  88. package/dist/tools/getGitHotspots.d.ts +1 -0
  89. package/dist/tools/getImportedSignatures.d.ts +1 -0
  90. package/dist/tools/getPRTemplate.d.ts +1 -0
  91. package/dist/tools/getSymbolHistory.d.ts +1 -0
  92. package/dist/tools/getTypeSignature.d.ts +1 -0
  93. package/dist/tools/getWorkspaceSettings.d.ts +1 -0
  94. package/dist/tools/gitWrite.d.ts +11 -0
  95. package/dist/tools/github/actions.d.ts +2 -0
  96. package/dist/tools/github/composite.d.ts +3 -0
  97. package/dist/tools/github/issues.d.ts +4 -0
  98. package/dist/tools/github/pr.d.ts +7 -0
  99. package/dist/tools/handoffNote.d.ts +1 -0
  100. package/dist/tools/hoverAtCursor.d.ts +1 -0
  101. package/dist/tools/httpClient.d.ts +2 -0
  102. package/dist/tools/inlayHints.d.ts +1 -0
  103. package/dist/tools/launchQuickTask.d.ts +1 -0
  104. package/dist/tools/listClaudeTasks.d.ts +1 -0
  105. package/dist/tools/listTerminals.d.ts +1 -0
  106. package/dist/tools/lsp.d.ts +15 -0
  107. package/dist/tools/navigateToSymbolByName.d.ts +1 -0
  108. package/dist/tools/openDiff.d.ts +1 -0
  109. package/dist/tools/openFile.d.ts +1 -0
  110. package/dist/tools/organizeImports.d.ts +1 -0
  111. package/dist/tools/planPersistence.d.ts +3 -0
  112. package/dist/tools/previewEdit.d.ts +1 -0
  113. package/dist/tools/refactorAnalyze.d.ts +1 -0
  114. package/dist/tools/refactorPreview.d.ts +1 -0
  115. package/dist/tools/replaceBlock.d.ts +1 -0
  116. package/dist/tools/resumeClaudeTask.d.ts +1 -0
  117. package/dist/tools/runClaudeTask.d.ts +1 -0
  118. package/dist/tools/screenshot.d.ts +1 -0
  119. package/dist/tools/searchAndReplace.d.ts +1 -0
  120. package/dist/tools/searchWorkspace.d.ts +1 -0
  121. package/dist/tools/selectionRanges.d.ts +1 -0
  122. package/dist/tools/semanticTokens.d.ts +1 -0
  123. package/dist/tools/signatureHelp.d.ts +1 -0
  124. package/dist/tools/terminal.d.ts +6 -0
  125. package/dist/tools/testTraceToSource.d.ts +1 -0
  126. package/dist/tools/transaction.d.ts +4 -0
  127. package/dist/tools/typeHierarchy.d.ts +1 -0
  128. package/dist/tools/utils.d.ts +18 -0
  129. package/dist/tools/utils.js +28 -6
  130. package/dist/tools/utils.js.map +1 -1
  131. package/dist/tools/vscodeCommands.d.ts +2 -0
  132. package/dist/tools/vscodeTasks.d.ts +2 -0
  133. package/dist/tools/workspaceSettings.d.ts +1 -0
  134. package/dist/transport.js +2 -2
  135. package/dist/transport.js.map +1 -1
  136. package/dist/wireHaltPushDispatch.d.ts +38 -0
  137. package/dist/wireHaltPushDispatch.js +71 -0
  138. package/dist/wireHaltPushDispatch.js.map +1 -0
  139. package/package.json +1 -1
@@ -22,7 +22,7 @@
22
22
  * don't see a behaviour change.
23
23
  */
24
24
  const DEFAULT_ALLOWLIST = ["patchworkos/recipes"];
25
- const SEGMENT_RE = /^[a-z0-9_.-]{1,100}$/;
25
+ export const SEGMENT_RE = /^[a-z0-9_.-]{1,100}$/;
26
26
  /**
27
27
  * Read the runtime allowlist. Combines the always-on default with
28
28
  * whatever the operator has set in PATCHWORK_RECIPE_REPO_ALLOWLIST.
@@ -111,15 +111,96 @@ export function parseGithubInstallSource(source, allowlist = loadAllowlist()) {
111
111
  },
112
112
  };
113
113
  }
114
+ /**
115
+ * The repo-relative path of the file for a parsed install source.
116
+ * `recipes/<name>/<name>.yaml` or `bundles/<name>/patchwork-bundle.json`.
117
+ */
118
+ function repoRelativePath(parsed) {
119
+ if (parsed.kind === "recipe") {
120
+ return `recipes/${parsed.name}/${parsed.name}.yaml`;
121
+ }
122
+ return `bundles/${parsed.name}/patchwork-bundle.json`;
123
+ }
114
124
  /**
115
125
  * Build the raw.githubusercontent URL for a parsed install source.
116
126
  * Always pulls `main` branch HEAD — version pinning is on the
117
127
  * deferred audit backlog.
118
128
  */
119
129
  export function buildGithubRawUrl(parsed) {
120
- if (parsed.kind === "recipe") {
121
- return `https://raw.githubusercontent.com/${parsed.owner}/${parsed.repo}/main/recipes/${parsed.name}/${parsed.name}.yaml`;
130
+ return `https://raw.githubusercontent.com/${parsed.owner}/${parsed.repo}/main/${repoRelativePath(parsed)}`;
131
+ }
132
+ /**
133
+ * Build the `api.github.com` Contents-API URL for a parsed install
134
+ * source. Used as a FALLBACK when `raw.githubusercontent.com` is
135
+ * unreachable — many corporate / proxied networks block the raw host
136
+ * even when `api.github.com` is allowed. Combined with the
137
+ * `Accept: application/vnd.github.raw` request header (see
138
+ * `fetchGithubInstallFile`), this endpoint returns the raw file bytes
139
+ * directly — no base64 decode needed. Public repos work unauthenticated.
140
+ */
141
+ export function buildGithubApiUrl(parsed) {
142
+ return `https://api.github.com/repos/${parsed.owner}/${parsed.repo}/contents/${repoRelativePath(parsed)}?ref=main`;
143
+ }
144
+ export async function fetchGithubInstallFile(parsed, init = {}) {
145
+ const rawUrl = buildGithubRawUrl(parsed);
146
+ let rawResponse = null;
147
+ let rawNetworkError = null;
148
+ try {
149
+ rawResponse = await fetch(rawUrl, {
150
+ signal: init.signal,
151
+ redirect: "follow",
152
+ });
153
+ }
154
+ catch (err) {
155
+ rawNetworkError = err;
122
156
  }
123
- return `https://raw.githubusercontent.com/${parsed.owner}/${parsed.repo}/main/bundles/${parsed.name}/patchwork-bundle.json`;
157
+ // Fast path: raw host returned a usable response.
158
+ if (rawResponse?.ok) {
159
+ return { ok: true, response: rawResponse };
160
+ }
161
+ // Raw host either threw OR returned non-ok → try the API fallback.
162
+ const apiUrl = buildGithubApiUrl(parsed);
163
+ let apiResponse = null;
164
+ let apiNetworkError = null;
165
+ try {
166
+ apiResponse = await fetch(apiUrl, {
167
+ signal: init.signal,
168
+ redirect: "follow",
169
+ headers: { Accept: "application/vnd.github.raw" },
170
+ });
171
+ }
172
+ catch (err) {
173
+ apiNetworkError = err;
174
+ }
175
+ if (apiResponse?.ok) {
176
+ return { ok: true, response: apiResponse };
177
+ }
178
+ // Neither host yielded an ok body. Decide which failure to surface.
179
+ //
180
+ // A non-404 HTTP failure (5xx / 403 rate-limit) is the most
181
+ // actionable signal — prefer it over a 404 from the other host, so a
182
+ // transient upstream problem isn't misreported as "recipe missing".
183
+ // The API response is the more authoritative of the two here (raw is
184
+ // a CDN; the API gives proper status codes), so check it first.
185
+ if (apiResponse && apiResponse.status !== 404) {
186
+ return { ok: false, kind: "upstream_error", response: apiResponse };
187
+ }
188
+ if (rawResponse && rawResponse.status !== 404) {
189
+ return { ok: false, kind: "upstream_error", response: rawResponse };
190
+ }
191
+ // Whatever is left is a genuine 404 from one or both hosts → keep
192
+ // the not-found distinction so the caller surfaces a 404, not a 502.
193
+ if (apiResponse && apiResponse.status === 404) {
194
+ return { ok: false, kind: "not_found", response: apiResponse };
195
+ }
196
+ if (rawResponse && rawResponse.status === 404) {
197
+ return { ok: false, kind: "not_found", response: rawResponse };
198
+ }
199
+ // Both hosts threw network errors.
200
+ return {
201
+ ok: false,
202
+ kind: "network_error",
203
+ error: apiNetworkError ?? rawNetworkError,
204
+ };
124
205
  }
125
206
  //# sourceMappingURL=githubInstallSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"githubInstallSource.js","sourceRoot":"","sources":["../../src/recipes/githubInstallSource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"githubInstallSource.js","sourceRoot":"","sources":["../../src/recipes/githubInstallSource.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,10 @@ export type HaltCategory = "agent_silent_fail" | "agent_narration_only" | "agent
16
16
  | "kill_switch"
17
17
  /** Recipe's `tokensMax` budget breached (PR2b). */
18
18
  | "budget_exceeded"
19
+ /** Per-step `expect` assertion failed (slice 2). */
20
+ | "expect_failed"
21
+ /** Per-step wall-clock `timeout_ms` exceeded (sandbox-alternative slice). */
22
+ | "step_timeout"
19
23
  /** Whole-recipe failure (e.g. circular dependencies) — has no step row. */
20
24
  | "run_level" | "unknown";
21
25
  export declare function categoriseHaltReason(reason: string | undefined): HaltCategory;
@@ -27,6 +27,12 @@ export function categoriseHaltReason(reason) {
27
27
  return "kill_switch";
28
28
  if (/budget[_ ]?exceeded|exceeded its token budget/i.test(reason))
29
29
  return "budget_exceeded";
30
+ if (/^expect_failed/i.test(reason))
31
+ return "expect_failed";
32
+ // Must precede the `^Tool ... threw` matcher: timeouts surface wrapped
33
+ // inside the tool-threw envelope (`Tool "x" in step "y" threw: step_timeout: ...`).
34
+ if (/step_timeout/i.test(reason))
35
+ return "step_timeout";
30
36
  if (/^Agent step .* threw/i.test(reason))
31
37
  return "agent_threw";
32
38
  if (/^Tool .* threw/i.test(reason))
@@ -1 +1 @@
1
- {"version":3,"file":"haltCategory.js","sourceRoot":"","sources":["../../src/recipes/haltCategory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"haltCategory.js","sourceRoot":"","sources":["../../src/recipes/haltCategory.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,26 @@
21
21
  * regex (which disagreed with the schema by also allowing `_`).
22
22
  */
23
23
  export declare const RECIPE_NAME_RE: RegExp;
24
+ /**
25
+ * Strip a registry scope from a recipe name.
26
+ *
27
+ * Marketplace registry recipes carry a *scoped* name in their
28
+ * `recipe.json` (`@patchworkos/sprint-review-prep`) but the bridge
29
+ * stores recipes on disk under the bare, unscoped kebab slug. The
30
+ * recipe YAML `name:` should be the bare slug, but registry data
31
+ * historically shipped the scoped form there too — which fails the
32
+ * `RECIPE_NAME_RE` kebab check at install time.
33
+ *
34
+ * This normalizes either shape to the last `/`-delimited segment:
35
+ * - `@patchworkos/sprint-review-prep` → `sprint-review-prep`
36
+ * - `patchworkos/sprint-review-prep` → `sprint-review-prep`
37
+ * - `sprint-review-prep` → `sprint-review-prep` (unchanged)
38
+ *
39
+ * Only the `@scope/` prefix is forgiven — the resulting slug is still
40
+ * validated by `RECIPE_NAME_RE` downstream, so a genuinely-invalid
41
+ * name (`@bad/UPPER`, `../escape`, empty) still fails.
42
+ */
43
+ export declare function stripRecipeScope(name: string): string;
24
44
  /**
25
45
  * Canonical variable-name regex (for `trigger.vars[].name` and
26
46
  * `trigger.inputs[].name`). Mirrors the runtime template-reference
@@ -21,6 +21,31 @@
21
21
  * regex (which disagreed with the schema by also allowing `_`).
22
22
  */
23
23
  export const RECIPE_NAME_RE = /^[a-z0-9][a-z0-9-]{0,63}$/;
24
+ /**
25
+ * Strip a registry scope from a recipe name.
26
+ *
27
+ * Marketplace registry recipes carry a *scoped* name in their
28
+ * `recipe.json` (`@patchworkos/sprint-review-prep`) but the bridge
29
+ * stores recipes on disk under the bare, unscoped kebab slug. The
30
+ * recipe YAML `name:` should be the bare slug, but registry data
31
+ * historically shipped the scoped form there too — which fails the
32
+ * `RECIPE_NAME_RE` kebab check at install time.
33
+ *
34
+ * This normalizes either shape to the last `/`-delimited segment:
35
+ * - `@patchworkos/sprint-review-prep` → `sprint-review-prep`
36
+ * - `patchworkos/sprint-review-prep` → `sprint-review-prep`
37
+ * - `sprint-review-prep` → `sprint-review-prep` (unchanged)
38
+ *
39
+ * Only the `@scope/` prefix is forgiven — the resulting slug is still
40
+ * validated by `RECIPE_NAME_RE` downstream, so a genuinely-invalid
41
+ * name (`@bad/UPPER`, `../escape`, empty) still fails.
42
+ */
43
+ export function stripRecipeScope(name) {
44
+ if (typeof name !== "string" || !name.includes("/"))
45
+ return name;
46
+ const segments = name.split("/");
47
+ return segments[segments.length - 1] ?? name;
48
+ }
24
49
  /**
25
50
  * Canonical variable-name regex (for `trigger.vars[].name` and
26
51
  * `trigger.inputs[].name`). Mirrors the runtime template-reference
@@ -1 +1 @@
1
- {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/recipes/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IAC7D,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;IACT,iBAAiB;IACjB,WAAW;IACX,cAAc;IACd,MAAM;IACN,UAAU;IACV,eAAe;IACf,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,UAAU;IACV,OAAO;CACR,CAAC,CAAC"}
1
+ {"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/recipes/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAE1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IAC7D,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,SAAS;IACT,iBAAiB;IACjB,WAAW;IACX,cAAc;IACd,MAAM;IACN,UAAU;IACV,eAAe;IACf,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,UAAU;IACV,OAAO;CACR,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { RECIPE_NAME_RE } from "./names.js";
1
+ import { RECIPE_NAME_RE, stripRecipeScope } from "./names.js";
2
2
  /**
3
3
  * parseRecipe — validates a raw object and returns a typed Recipe.
4
4
  *
@@ -18,7 +18,12 @@ export function parseRecipe(raw) {
18
18
  throw new RecipeParseError("recipe must be an object");
19
19
  }
20
20
  const r = raw;
21
- const name = requireString(r, "name");
21
+ // Marketplace registry recipes may carry a scoped name
22
+ // (`@patchworkos/sprint-review-prep`). Normalize to the bare kebab
23
+ // slug BEFORE the RECIPE_NAME_RE check, so the scoped form installs
24
+ // and is stored on disk under the unscoped slug — a re-load of the
25
+ // persisted recipe (already bare) then passes unchanged.
26
+ const name = stripRecipeScope(requireString(r, "name"));
22
27
  // Enforce the canonical recipe-name shape at the parse boundary. Without
23
28
  // this, `installRecipeFromFile` would `path.join(recipesDir, ${name}.json)`
24
29
  // with attacker-controlled `name` (registry recipe / bundle install path)
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/recipes/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/recipes/parser.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,15 @@ const SILENT_FAIL_PATTERNS = [
40
40
  regex: /^\s*\(([^()]*?)(unavailable|not available|not configured|no data|error|failed)\)/i,
41
41
  reason: "tool returned a parens-wrapped placeholder",
42
42
  },
43
+ // Typed reason: recipe step ran with no workspace root resolved. Emitted
44
+ // by `defaultClaudeCodeFn` when `resolveWorkspaceRoot()` returns null —
45
+ // first fix in the halt-taxonomy refinement (P7 of the 2026-05-20
46
+ // research run). MUST match before the generic agent-step pattern below
47
+ // so the typed reason isn't swallowed by the catch-all.
48
+ {
49
+ regex: /^\s*\[agent step failed:\s*recipe_no_workspace\b/i,
50
+ reason: "recipe_no_workspace",
51
+ },
43
52
  // Agent-step short-circuit: agentExecutor's own error/skip strings.
44
53
  // Used by `executeAgent` when an API key is missing or the LLM
45
54
  // returns nothing. Not surfaced as JSON, so the runner never saw it.
@@ -1 +1 @@
1
- {"version":3,"file":"stepObservation.js","sourceRoot":"","sources":["../../src/recipes/stepObservation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stepObservation.js","sourceRoot":"","sources":["../../src/recipes/stepObservation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * fan_out — dispatch a sub-tool step once per item in a collection.
3
+ *
4
+ * Agentic-workflow slice 1 (revised per cold-eyes review): lands as a tool
5
+ * step rather than a first-class runner construct. Stays out of the step
6
+ * loop so it composes automatically with existing budget admission, retry,
7
+ * fallback, and silent-fail detection at the parent-step level.
8
+ *
9
+ * v1 scope:
10
+ * - tool-typed `do` only (no agent fan-out — defer to v2, needs per-iter
11
+ * budget + judge + silent-fail handling)
12
+ * - serial execution (concurrency knob accepted but clamped to 1 in v1)
13
+ * - no per-iter `expect` (parent step can have an outer `expect` on the
14
+ * aggregate; per-iter assertion lands in v2)
15
+ *
16
+ * Output shape: JSON array `[{index, ok, output?, error?}, ...]` in
17
+ * iteration order. `output` is the raw tool output string; `error` is
18
+ * present only when `ok === false`.
19
+ */
20
+ export {};
@@ -0,0 +1,199 @@
1
+ /**
2
+ * fan_out — dispatch a sub-tool step once per item in a collection.
3
+ *
4
+ * Agentic-workflow slice 1 (revised per cold-eyes review): lands as a tool
5
+ * step rather than a first-class runner construct. Stays out of the step
6
+ * loop so it composes automatically with existing budget admission, retry,
7
+ * fallback, and silent-fail detection at the parent-step level.
8
+ *
9
+ * v1 scope:
10
+ * - tool-typed `do` only (no agent fan-out — defer to v2, needs per-iter
11
+ * budget + judge + silent-fail handling)
12
+ * - serial execution (concurrency knob accepted but clamped to 1 in v1)
13
+ * - no per-iter `expect` (parent step can have an outer `expect` on the
14
+ * aggregate; per-iter assertion lands in v2)
15
+ *
16
+ * Output shape: JSON array `[{index, ok, output?, error?}, ...]` in
17
+ * iteration order. `output` is the raw tool output string; `error` is
18
+ * present only when `ok === false`.
19
+ */
20
+ import { executeTool, hasTool, registerTool } from "../toolRegistry.js";
21
+ /** Coerce `items` param into an array. Accepts an array directly, or a JSON-array string. */
22
+ function coerceItems(raw) {
23
+ if (Array.isArray(raw))
24
+ return raw;
25
+ if (typeof raw === "string") {
26
+ const trimmed = raw.trim();
27
+ if (!trimmed)
28
+ return [];
29
+ try {
30
+ const parsed = JSON.parse(trimmed);
31
+ if (Array.isArray(parsed))
32
+ return parsed;
33
+ return {
34
+ error: `items: parsed JSON is not an array (got ${typeof parsed})`,
35
+ };
36
+ }
37
+ catch (err) {
38
+ return {
39
+ error: `items: not a JSON array (${err instanceof Error ? err.message : String(err)})`,
40
+ };
41
+ }
42
+ }
43
+ return {
44
+ error: `items: expected array or JSON-array string, got ${typeof raw}`,
45
+ };
46
+ }
47
+ registerTool({
48
+ id: "fan_out",
49
+ namespace: "fan_out",
50
+ description: "Dispatch a sub-tool step (`do:`) once per item in `items`. Aggregates per-iter outputs into a JSON array under `into`. v1: tool sub-steps only (no agent fan-out), serial execution.",
51
+ paramsSchema: {
52
+ type: "object",
53
+ properties: {
54
+ items: {
55
+ description: "Array of items to iterate over, or a JSON-array string (e.g. `{{steps.fetch.rows}}`).",
56
+ },
57
+ as: {
58
+ type: "string",
59
+ description: "Loop variable name. Default `item`. Also exposes `<as>_index` and `<as>_total`.",
60
+ default: "item",
61
+ },
62
+ do: {
63
+ type: "object",
64
+ description: "Inner tool sub-step. Must include `tool:` and its params. `{{<as>.*}}` placeholders are rendered per iteration.",
65
+ },
66
+ concurrency: {
67
+ type: "number",
68
+ description: "Parallel iterations. v1: clamped to 1 (serial).",
69
+ default: 1,
70
+ },
71
+ max_iterations: {
72
+ type: "number",
73
+ description: "Safety cap. Halts with `max_iterations exceeded` if array longer.",
74
+ default: 100,
75
+ },
76
+ on_iter_error: {
77
+ type: "string",
78
+ enum: ["continue", "halt"],
79
+ description: "What to do when a single iteration's sub-tool fails. `continue` (default) records the error in the aggregate and proceeds; `halt` stops fan_out and the step is marked error.",
80
+ default: "continue",
81
+ },
82
+ },
83
+ required: ["items", "do"],
84
+ },
85
+ outputSchema: {
86
+ type: "array",
87
+ items: {
88
+ type: "object",
89
+ properties: {
90
+ index: { type: "number" },
91
+ ok: { type: "boolean" },
92
+ output: { type: "string" },
93
+ error: { type: "string" },
94
+ },
95
+ required: ["index", "ok"],
96
+ },
97
+ },
98
+ riskDefault: "low",
99
+ isWrite: false,
100
+ execute: async ({ params, ctx, deps }) => {
101
+ const itemsResult = coerceItems(params.items);
102
+ if (!Array.isArray(itemsResult)) {
103
+ throw new Error(itemsResult.error);
104
+ }
105
+ const items = itemsResult;
106
+ const maxIter = typeof params.max_iterations === "number" && params.max_iterations > 0
107
+ ? Math.min(Math.floor(params.max_iterations), 1000)
108
+ : 100;
109
+ if (items.length > maxIter) {
110
+ throw new Error(`fan_out: max_iterations exceeded (${items.length} > ${maxIter})`);
111
+ }
112
+ const onIterError = params.on_iter_error === "halt" ? "halt" : "continue";
113
+ const loopVar = typeof params.as === "string" && params.as.length > 0
114
+ ? params.as
115
+ : "item";
116
+ const doStep = params.do;
117
+ if (!doStep || typeof doStep !== "object") {
118
+ throw new Error("fan_out: `do` must be an object with a `tool` field");
119
+ }
120
+ const doObj = doStep;
121
+ const innerToolId = doObj.tool;
122
+ if (typeof innerToolId !== "string" || innerToolId.length === 0) {
123
+ throw new Error("fan_out: `do.tool` is required and must be a string");
124
+ }
125
+ if (typeof doObj.agent !== "undefined") {
126
+ throw new Error("fan_out: agent sub-steps are not supported in v1 — use a tool sub-step");
127
+ }
128
+ if (!hasTool(innerToolId)) {
129
+ throw new Error(`fan_out: unknown inner tool "${innerToolId}"`);
130
+ }
131
+ if (innerToolId === "fan_out") {
132
+ throw new Error("fan_out: nested fan_out is not supported in v1");
133
+ }
134
+ const aggregate = [];
135
+ for (let i = 0; i < items.length; i++) {
136
+ const item = items[i];
137
+ // Build per-iter ctx clone. Bind the loop variable as the raw item
138
+ // (objects get JSON-stringified by `render`'s value coercion at use
139
+ // sites; dot-notation `{{row.id}}` works because render JSON-parses
140
+ // string intermediates).
141
+ const iterCtx = { ...ctx };
142
+ iterCtx[loopVar] = typeof item === "string" ? item : JSON.stringify(item);
143
+ iterCtx[`${loopVar}_index`] = String(i);
144
+ iterCtx[`${loopVar}_total`] = String(items.length);
145
+ // Deep-render the raw `do` sub-step against iterCtx, then dispatch
146
+ // via executeTool. We import render lazily to avoid a circular
147
+ // import with yamlRunner.
148
+ const { render } = await import("../yamlRunner.js");
149
+ const innerParams = {};
150
+ for (const [k, v] of Object.entries(doObj)) {
151
+ if (k === "tool")
152
+ continue;
153
+ innerParams[k] = deepRenderForIter(v, iterCtx, render);
154
+ }
155
+ try {
156
+ const output = await executeTool(innerToolId, {
157
+ params: innerParams,
158
+ step: doObj,
159
+ ctx: iterCtx,
160
+ deps,
161
+ });
162
+ aggregate.push({
163
+ index: i,
164
+ ok: true,
165
+ ...(output != null && { output }),
166
+ });
167
+ }
168
+ catch (err) {
169
+ const msg = err instanceof Error ? err.message : String(err);
170
+ aggregate.push({ index: i, ok: false, error: msg });
171
+ if (onIterError === "halt") {
172
+ throw new Error(`fan_out: iter ${i} failed (on_iter_error=halt): ${msg}`);
173
+ }
174
+ }
175
+ }
176
+ return JSON.stringify(aggregate);
177
+ },
178
+ });
179
+ /**
180
+ * Per-iter deep render. Mirrors `deepRender` in yamlRunner but takes the
181
+ * render fn as a parameter to keep the import dynamic (avoids the circular
182
+ * import between yamlRunner ↔ tool registry).
183
+ */
184
+ function deepRenderForIter(value, ctx, render) {
185
+ if (typeof value === "string")
186
+ return render(value, ctx);
187
+ if (Array.isArray(value)) {
188
+ return value.map((v) => deepRenderForIter(v, ctx, render));
189
+ }
190
+ if (value !== null && typeof value === "object") {
191
+ const out = {};
192
+ for (const [k, v] of Object.entries(value)) {
193
+ out[k] = deepRenderForIter(v, ctx, render);
194
+ }
195
+ return out;
196
+ }
197
+ return value;
198
+ }
199
+ //# sourceMappingURL=fanOut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanOut.js","sourceRoot":"","sources":["../../../src/recipes/tools/fanOut.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import "./file.js";
7
7
  import "./git.js";
8
8
  import "./diagnostics.js";
9
9
  import "./http.js";
10
+ import "./fanOut.js";
10
11
  import "./asana.js";
11
12
  import "./gmail.js";
12
13
  import "./googleDrive.js";
@@ -8,6 +8,7 @@ import "./file.js";
8
8
  import "./git.js";
9
9
  import "./diagnostics.js";
10
10
  import "./http.js";
11
+ import "./fanOut.js";
11
12
  // Connector-based tools
12
13
  import "./asana.js";
13
14
  import "./gmail.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/recipes/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,aAAa;AACb,OAAO,WAAW,CAAC;AACnB,OAAO,UAAU,CAAC;AAClB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,WAAW,CAAC;AAEnB,wBAAwB;AACxB,OAAO,YAAY,CAAC;AACpB,OAAO,YAAY,CAAC;AACpB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,aAAa,CAAC;AACrB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,WAAW,CAAC;AACnB,OAAO,gBAAgB,CAAC;AACxB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,mBAAmB,CAAC;AAQ3B,qCAAqC;AACrC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,YAAY,GACb,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/recipes/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,aAAa;AACb,OAAO,WAAW,CAAC;AACnB,OAAO,UAAU,CAAC;AAClB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,WAAW,CAAC;AACnB,OAAO,aAAa,CAAC;AAErB,wBAAwB;AACxB,OAAO,YAAY,CAAC;AACpB,OAAO,YAAY,CAAC;AACpB,OAAO,kBAAkB,CAAC;AAC1B,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,eAAe,CAAC;AACvB,OAAO,YAAY,CAAC;AACpB,OAAO,aAAa,CAAC;AACrB,OAAO,iBAAiB,CAAC;AACzB,OAAO,cAAc,CAAC;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AACtB,OAAO,WAAW,CAAC;AACnB,OAAO,gBAAgB,CAAC;AACxB,OAAO,aAAa,CAAC;AACrB,OAAO,aAAa,CAAC;AACrB,OAAO,mBAAmB,CAAC;AAQ3B,qCAAqC;AACrC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,YAAY,GACb,MAAM,oBAAoB,CAAC"}
@@ -76,7 +76,7 @@ const slackPostMessage = {
76
76
  },
77
77
  };
78
78
  registerTool(slackPostMessage);
79
- // camelCase alias — older recipes (registry/, examples/) reference
79
+ // camelCase alias — older recipes (e.g. under examples/) reference
80
80
  // `slack.postMessage`. Aliased to the snake_case canonical impl.
81
81
  registerTool({ ...slackPostMessage, id: "slack.postMessage" });
82
82
  //# sourceMappingURL=slack.js.map
@@ -1,5 +1,5 @@
1
- import { Ajv } from "ajv";
2
1
  import cron from "node-cron";
2
+ import { createAjv2020 } from "../ajv2020.js";
3
3
  import { FLAG_SCHEMA_LINT, isEnabled } from "../featureFlags.js";
4
4
  import { defaultDeprecationWarn, normalizeRecipeForRuntime, } from "./migrations/index.js";
5
5
  import { RECIPE_NAME_RE, RECIPE_VAR_NAME_RE, RESERVED_VAR_NAMES, } from "./names.js";
@@ -278,7 +278,7 @@ function flattenValidationStep(step) {
278
278
  function validateRecipeSchema(recipe) {
279
279
  try {
280
280
  const schemas = generateSchemaSet();
281
- const ajv = new Ajv({ strict: false, allErrors: true });
281
+ const ajv = createAjv2020({ strict: false, allErrors: true });
282
282
  for (const schema of Object.values(schemas.namespaces)) {
283
283
  ajv.addSchema(schema);
284
284
  }