patchwork-os 0.2.0-alpha.35 → 0.2.0-alpha.36

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 (207) hide show
  1. package/README.md +70 -15
  2. package/dist/activityLog.d.ts +49 -0
  3. package/dist/activityLog.js +78 -0
  4. package/dist/activityLog.js.map +1 -1
  5. package/dist/approvalHttp.d.ts +25 -0
  6. package/dist/approvalHttp.js +74 -18
  7. package/dist/approvalHttp.js.map +1 -1
  8. package/dist/approvalInsights.d.ts +49 -0
  9. package/dist/approvalInsights.js +97 -0
  10. package/dist/approvalInsights.js.map +1 -0
  11. package/dist/approvalQueue.d.ts +11 -0
  12. package/dist/approvalQueue.js +80 -1
  13. package/dist/approvalQueue.js.map +1 -1
  14. package/dist/approvalSignals.d.ts +124 -0
  15. package/dist/approvalSignals.js +512 -0
  16. package/dist/approvalSignals.js.map +1 -0
  17. package/dist/automation.d.ts +37 -0
  18. package/dist/automation.js +105 -61
  19. package/dist/automation.js.map +1 -1
  20. package/dist/automationSuggestions.d.ts +79 -0
  21. package/dist/automationSuggestions.js +150 -0
  22. package/dist/automationSuggestions.js.map +1 -0
  23. package/dist/bridge.js +46 -0
  24. package/dist/bridge.js.map +1 -1
  25. package/dist/ccPermissions.d.ts +15 -0
  26. package/dist/ccPermissions.js +15 -0
  27. package/dist/ccPermissions.js.map +1 -1
  28. package/dist/claudeDriver.js +74 -16
  29. package/dist/claudeDriver.js.map +1 -1
  30. package/dist/commands/patchworkInit.d.ts +8 -0
  31. package/dist/commands/patchworkInit.js +41 -5
  32. package/dist/commands/patchworkInit.js.map +1 -1
  33. package/dist/commands/recipe.d.ts +20 -0
  34. package/dist/commands/recipe.js +194 -5
  35. package/dist/commands/recipe.js.map +1 -1
  36. package/dist/commands/recipeInstall.js +93 -4
  37. package/dist/commands/recipeInstall.js.map +1 -1
  38. package/dist/commands/tracesExport.d.ts +83 -0
  39. package/dist/commands/tracesExport.js +269 -0
  40. package/dist/commands/tracesExport.js.map +1 -0
  41. package/dist/commands/tracesImport.d.ts +56 -0
  42. package/dist/commands/tracesImport.js +161 -0
  43. package/dist/commands/tracesImport.js.map +1 -0
  44. package/dist/config.d.ts +8 -0
  45. package/dist/config.js +9 -1
  46. package/dist/config.js.map +1 -1
  47. package/dist/connectorRoutes.d.ts +43 -0
  48. package/dist/connectorRoutes.js +1023 -0
  49. package/dist/connectorRoutes.js.map +1 -0
  50. package/dist/connectors/asana.js +6 -7
  51. package/dist/connectors/asana.js.map +1 -1
  52. package/dist/connectors/baseConnector.d.ts +20 -0
  53. package/dist/connectors/baseConnector.js +45 -4
  54. package/dist/connectors/baseConnector.js.map +1 -1
  55. package/dist/connectors/discord.js +6 -7
  56. package/dist/connectors/discord.js.map +1 -1
  57. package/dist/connectors/gmail.js +39 -10
  58. package/dist/connectors/gmail.js.map +1 -1
  59. package/dist/connectors/googleCalendar.js +36 -10
  60. package/dist/connectors/googleCalendar.js.map +1 -1
  61. package/dist/connectors/googleDrive.js +22 -6
  62. package/dist/connectors/googleDrive.js.map +1 -1
  63. package/dist/connectors/linear.js +2 -2
  64. package/dist/connectors/linear.js.map +1 -1
  65. package/dist/connectors/mcpOAuth.js +26 -2
  66. package/dist/connectors/mcpOAuth.js.map +1 -1
  67. package/dist/connectors/oauthStateStore.d.ts +31 -0
  68. package/dist/connectors/oauthStateStore.js +52 -0
  69. package/dist/connectors/oauthStateStore.js.map +1 -0
  70. package/dist/connectors/slack.d.ts +15 -0
  71. package/dist/connectors/slack.js +54 -4
  72. package/dist/connectors/slack.js.map +1 -1
  73. package/dist/connectors/tokenStorage.js +27 -2
  74. package/dist/connectors/tokenStorage.js.map +1 -1
  75. package/dist/connectors/zendesk.js +19 -1
  76. package/dist/connectors/zendesk.js.map +1 -1
  77. package/dist/cors.d.ts +10 -0
  78. package/dist/cors.js +29 -0
  79. package/dist/cors.js.map +1 -0
  80. package/dist/decisionReplay.d.ts +72 -0
  81. package/dist/decisionReplay.js +92 -0
  82. package/dist/decisionReplay.js.map +1 -0
  83. package/dist/decisionTraceLog.d.ts +6 -0
  84. package/dist/decisionTraceLog.js +54 -2
  85. package/dist/decisionTraceLog.js.map +1 -1
  86. package/dist/fp/automationInterpreter.js +25 -21
  87. package/dist/fp/automationInterpreter.js.map +1 -1
  88. package/dist/fp/automationState.js +4 -1
  89. package/dist/fp/automationState.js.map +1 -1
  90. package/dist/fp/policyParser.js +4 -1
  91. package/dist/fp/policyParser.js.map +1 -1
  92. package/dist/inboxRoutes.d.ts +22 -0
  93. package/dist/inboxRoutes.js +114 -0
  94. package/dist/inboxRoutes.js.map +1 -0
  95. package/dist/index.js +479 -17
  96. package/dist/index.js.map +1 -1
  97. package/dist/mcpRoutes.d.ts +37 -0
  98. package/dist/mcpRoutes.js +76 -0
  99. package/dist/mcpRoutes.js.map +1 -0
  100. package/dist/oauth.d.ts +3 -0
  101. package/dist/oauth.js +151 -26
  102. package/dist/oauth.js.map +1 -1
  103. package/dist/oauthRoutes.d.ts +32 -0
  104. package/dist/oauthRoutes.js +124 -0
  105. package/dist/oauthRoutes.js.map +1 -0
  106. package/dist/orchestrator/orchestratorBridge.js +2 -2
  107. package/dist/orchestrator/orchestratorBridge.js.map +1 -1
  108. package/dist/patchworkConfig.d.ts +7 -0
  109. package/dist/patchworkConfig.js.map +1 -1
  110. package/dist/pluginLoader.d.ts +12 -0
  111. package/dist/pluginLoader.js +43 -4
  112. package/dist/pluginLoader.js.map +1 -1
  113. package/dist/pluginWatcher.js +8 -3
  114. package/dist/pluginWatcher.js.map +1 -1
  115. package/dist/preToolUseHook.d.ts +12 -0
  116. package/dist/preToolUseHook.js +23 -0
  117. package/dist/preToolUseHook.js.map +1 -1
  118. package/dist/recipeOrchestration.d.ts +1 -0
  119. package/dist/recipeOrchestration.js +173 -13
  120. package/dist/recipeOrchestration.js.map +1 -1
  121. package/dist/recipeRoutes.d.ts +154 -0
  122. package/dist/recipeRoutes.js +1098 -0
  123. package/dist/recipeRoutes.js.map +1 -0
  124. package/dist/recipes/chainedRunner.d.ts +15 -0
  125. package/dist/recipes/chainedRunner.js +73 -8
  126. package/dist/recipes/chainedRunner.js.map +1 -1
  127. package/dist/recipes/compiler.js +3 -3
  128. package/dist/recipes/compiler.js.map +1 -1
  129. package/dist/recipes/installer.js +3 -3
  130. package/dist/recipes/installer.js.map +1 -1
  131. package/dist/recipes/migrationWarnings.d.ts +12 -0
  132. package/dist/recipes/migrationWarnings.js +44 -0
  133. package/dist/recipes/migrationWarnings.js.map +1 -0
  134. package/dist/recipes/resolveRecipePath.d.ts +69 -0
  135. package/dist/recipes/resolveRecipePath.js +202 -0
  136. package/dist/recipes/resolveRecipePath.js.map +1 -0
  137. package/dist/recipes/tools/file.d.ts +6 -0
  138. package/dist/recipes/tools/file.js +12 -8
  139. package/dist/recipes/tools/file.js.map +1 -1
  140. package/dist/recipes/tools/index.d.ts +2 -0
  141. package/dist/recipes/tools/index.js +2 -0
  142. package/dist/recipes/tools/index.js.map +1 -1
  143. package/dist/recipes/tools/jira.d.ts +14 -0
  144. package/dist/recipes/tools/jira.js +369 -0
  145. package/dist/recipes/tools/jira.js.map +1 -0
  146. package/dist/recipes/tools/linear.js +6 -3
  147. package/dist/recipes/tools/linear.js.map +1 -1
  148. package/dist/recipes/tools/sentry.d.ts +12 -0
  149. package/dist/recipes/tools/sentry.js +73 -0
  150. package/dist/recipes/tools/sentry.js.map +1 -0
  151. package/dist/recipes/tools/slack.js +7 -3
  152. package/dist/recipes/tools/slack.js.map +1 -1
  153. package/dist/recipes/validation.js +83 -14
  154. package/dist/recipes/validation.js.map +1 -1
  155. package/dist/recipes/yamlRunner.d.ts +7 -0
  156. package/dist/recipes/yamlRunner.js +107 -13
  157. package/dist/recipes/yamlRunner.js.map +1 -1
  158. package/dist/recipesHttp.d.ts +44 -1
  159. package/dist/recipesHttp.js +168 -15
  160. package/dist/recipesHttp.js.map +1 -1
  161. package/dist/runLog.d.ts +14 -0
  162. package/dist/runLog.js +88 -4
  163. package/dist/runLog.js.map +1 -1
  164. package/dist/schemas/dry-run-plan.v1.json +139 -0
  165. package/dist/schemas/recipe.v1.json +684 -0
  166. package/dist/server.d.ts +71 -10
  167. package/dist/server.js +363 -1703
  168. package/dist/server.js.map +1 -1
  169. package/dist/ssrfGuard.d.ts +54 -0
  170. package/dist/ssrfGuard.js +122 -0
  171. package/dist/ssrfGuard.js.map +1 -0
  172. package/dist/streamableHttp.d.ts +8 -0
  173. package/dist/streamableHttp.js +112 -21
  174. package/dist/streamableHttp.js.map +1 -1
  175. package/dist/tools/getDocumentSymbols.d.ts +24 -0
  176. package/dist/tools/getDocumentSymbols.js +74 -8
  177. package/dist/tools/getDocumentSymbols.js.map +1 -1
  178. package/dist/tools/getSecurityAdvisories.js +10 -1
  179. package/dist/tools/getSecurityAdvisories.js.map +1 -1
  180. package/dist/tools/getSessionUsage.d.ts +3 -0
  181. package/dist/tools/getSessionUsage.js +3 -0
  182. package/dist/tools/getSessionUsage.js.map +1 -1
  183. package/dist/tools/index.d.ts +8 -0
  184. package/dist/tools/index.js +32 -2
  185. package/dist/tools/index.js.map +1 -1
  186. package/dist/tools/transaction.d.ts +19 -0
  187. package/dist/tools/transaction.js +29 -0
  188. package/dist/tools/transaction.js.map +1 -1
  189. package/dist/traceEncryption.d.ts +46 -0
  190. package/dist/traceEncryption.js +124 -0
  191. package/dist/traceEncryption.js.map +1 -0
  192. package/dist/transport.d.ts +39 -0
  193. package/dist/transport.js +88 -8
  194. package/dist/transport.js.map +1 -1
  195. package/package.json +4 -2
  196. package/templates/policies/README.md +72 -0
  197. package/templates/policies/conservative.json +14 -0
  198. package/templates/policies/developer.json +14 -0
  199. package/templates/policies/headless-ci.json +24 -0
  200. package/templates/policies/personal-assistant.json +15 -0
  201. package/templates/policies/regulated-industry.json +18 -0
  202. package/templates/recipes/webhook/README.md +70 -0
  203. package/templates/recipes/webhook/capture-thought.yaml +26 -0
  204. package/templates/recipes/webhook/customer-escalation.yaml +49 -0
  205. package/templates/recipes/webhook/incident-intake.yaml +46 -0
  206. package/templates/recipes/webhook/meeting-prep.yaml +48 -0
  207. package/templates/recipes/webhook/morning-brief.yaml +57 -0
@@ -64,20 +64,15 @@ export function validateRecipeDefinition(recipe) {
64
64
  });
65
65
  }
66
66
  else {
67
- const triggerType = r.trigger && typeof r.trigger === "object"
68
- ? r.trigger.type
69
- : undefined;
70
- const allowNestedRecipeSteps = triggerType === "chained";
71
67
  for (let i = 0; i < r.steps.length; i++) {
72
68
  const step = r.steps[i];
73
69
  const hasTool = typeof step.tool === "string";
74
70
  const hasAgent = !!step.agent;
75
- const hasNestedRecipe = allowNestedRecipeSteps &&
76
- (typeof step.recipe === "string" || typeof step.chain === "string");
71
+ const hasNestedRecipe = typeof step.recipe === "string" || typeof step.chain === "string";
77
72
  if (!hasTool && !hasAgent && !hasNestedRecipe) {
78
73
  issues.push({
79
74
  level: "error",
80
- message: `Step ${i + 1}: Must have 'tool' or 'agent' field${allowNestedRecipeSteps ? " (or 'recipe'/'chain' for chained recipes)" : ""}`,
75
+ message: `Step ${i + 1}: Must have 'tool', 'agent', 'recipe', or 'chain' field`,
81
76
  });
82
77
  }
83
78
  if (step.agent && typeof step.agent === "object") {
@@ -90,7 +85,7 @@ export function validateRecipeDefinition(recipe) {
90
85
  }
91
86
  }
92
87
  }
93
- validateTemplateReferences(r, issues);
88
+ validateTemplateReferences(r, issues, collectParallelEachKeys(recipe));
94
89
  }
95
90
  }
96
91
  if (isEnabled(FLAG_SCHEMA_LINT)) {
@@ -169,6 +164,19 @@ function flattenValidationStep(step) {
169
164
  }
170
165
  return parallelSteps;
171
166
  }
167
+ // parallel: { each: ..., as: ..., steps: [...] } — map-reduce syntax
168
+ if (record.parallel &&
169
+ typeof record.parallel === "object" &&
170
+ !Array.isArray(record.parallel)) {
171
+ const mapReduce = record.parallel;
172
+ if (Array.isArray(mapReduce.steps)) {
173
+ const parallelSteps = [];
174
+ for (const nestedStep of mapReduce.steps) {
175
+ parallelSteps.push(...flattenValidationStep(nestedStep));
176
+ }
177
+ return parallelSteps;
178
+ }
179
+ }
172
180
  if (Array.isArray(record.branch)) {
173
181
  const branchSteps = [];
174
182
  for (const branchStep of record.branch) {
@@ -223,8 +231,21 @@ function registerRecipeContextKeys(recipe, availableKeys) {
223
231
  availableKeys.add("message");
224
232
  availableKeys.add("branch");
225
233
  }
226
- if (trigger?.type === "on_file_save") {
234
+ // Webhook triggers: the seed context the bridge passes to the runner
235
+ // (recipeOrchestration.ts:290-296) sets these four keys. `payload` is the
236
+ // raw JSON body (or stringified non-JSON), accessible via dotted paths
237
+ // (e.g. `{{payload.text}}`) — the renderer JSON-parses string
238
+ // intermediates on the fly (yamlRunner.ts:870-878).
239
+ if (trigger?.type === "webhook") {
240
+ availableKeys.add("payload");
241
+ availableKeys.add("webhook_payload");
242
+ availableKeys.add("hook_path");
243
+ availableKeys.add("webhook_path");
244
+ }
245
+ if (trigger?.type === "on_file_save" || trigger?.type === "file_watch") {
227
246
  availableKeys.add("file");
247
+ availableKeys.add("file_ext");
248
+ availableKeys.add("file_basename");
228
249
  }
229
250
  if (trigger?.type === "on_test_run") {
230
251
  availableKeys.add("runner");
@@ -275,16 +296,53 @@ function toSchemaLintIssue(error) {
275
296
  message: `Schema validation: ${path} ${error.message ?? "is invalid"}`,
276
297
  };
277
298
  }
278
- function validateTemplateReferences(recipe, issues) {
299
+ function collectParallelEachKeys(recipe) {
300
+ const keys = new Set();
301
+ if (!recipe || typeof recipe !== "object" || Array.isArray(recipe))
302
+ return keys;
303
+ const steps = recipe.steps;
304
+ if (!Array.isArray(steps))
305
+ return keys;
306
+ for (const step of steps) {
307
+ if (!step || typeof step !== "object" || Array.isArray(step))
308
+ continue;
309
+ const s = step;
310
+ if (s.parallel &&
311
+ typeof s.parallel === "object" &&
312
+ !Array.isArray(s.parallel)) {
313
+ const par = s.parallel;
314
+ if (typeof par.as === "string")
315
+ keys.add(par.as);
316
+ if (typeof s.id === "string") {
317
+ keys.add(s.id);
318
+ keys.add(`${s.id}.results`);
319
+ }
320
+ }
321
+ // Step-level each: "{{items}}" as: item — loop variable
322
+ if (typeof s.as === "string")
323
+ keys.add(s.as);
324
+ }
325
+ return keys;
326
+ }
327
+ function validateTemplateReferences(recipe, issues, extraParallelKeys) {
279
328
  const builtinKeys = new Set([
280
329
  "date",
281
330
  "time",
331
+ "YYYY",
282
332
  "YYYY-MM",
283
333
  "YYYY-MM-DD",
284
334
  "ISO_NOW",
335
+ "HH", // time component in datetime format strings
336
+ "MM", // time component in datetime format strings
337
+ "SS", // time component in datetime format strings
338
+ "this", // Handlebars loop current-item reference
285
339
  ]);
286
340
  const availableKeys = new Set(builtinKeys);
287
341
  registerRecipeContextKeys(recipe, availableKeys);
342
+ if (extraParallelKeys) {
343
+ for (const k of extraParallelKeys)
344
+ availableKeys.add(k);
345
+ }
288
346
  const triggerType = recipe.trigger && typeof recipe.trigger === "object"
289
347
  ? recipe.trigger.type
290
348
  : undefined;
@@ -397,17 +455,28 @@ function extractTemplateExpressions(template) {
397
455
  const expressions = [];
398
456
  for (const match of matches) {
399
457
  const expression = match[1]?.trim();
400
- if (expression) {
401
- expressions.push(expression);
402
- }
458
+ if (!expression)
459
+ continue;
460
+ // Skip Handlebars block helpers: {{#if}}, {{/each}}, {{else}}, etc.
461
+ if (expression.startsWith("#") ||
462
+ expression.startsWith("/") ||
463
+ expression === "else")
464
+ continue;
465
+ // Skip function-call expressions like file_read(PATH) — runtime-evaluated.
466
+ if (expression.includes("("))
467
+ continue;
468
+ expressions.push(expression);
403
469
  }
404
470
  return expressions;
405
471
  }
406
472
  function extractTemplateDottedPaths(expression) {
473
+ // Strip Jinja-style filters (e.g. "| slug") — identifiers after | are filter
474
+ // names, not variable references, so should not be resolved against context.
475
+ const stripped = expression.replace(/\|[^|]*/g, "");
407
476
  const reserved = new Set(["true", "false", "null"]);
408
477
  const paths = [];
409
478
  const seen = new Set();
410
- for (const match of expression.matchAll(/\$?[A-Za-z_][A-Za-z0-9_-]*(?:\.[A-Za-z0-9_-]+)*/g)) {
479
+ for (const match of stripped.matchAll(/\$?[A-Za-z_][A-Za-z0-9_-]*(?:\.[A-Za-z0-9_-]+)*/g)) {
411
480
  const fullPath = match[0];
412
481
  if (!fullPath || seen.has(fullPath)) {
413
482
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/recipes/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/recipes/validation.ts"],"names":[],"mappings":"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"}
@@ -151,6 +151,13 @@ export type StepResult = {
151
151
  tool?: string;
152
152
  status: "ok" | "skipped" | "error";
153
153
  error?: string;
154
+ /**
155
+ * Structured error code propagated from a thrown step error. Currently
156
+ * populated for `recipe_path_jail_escape` (G-security A-PR1) so tests
157
+ * and the dashboard can branch on err.code rather than message text
158
+ * (R2 M-4). Other codes may follow.
159
+ */
160
+ errorCode?: string;
154
161
  durationMs: number;
155
162
  };
156
163
  export type StepDeps = Required<Omit<RunnerDeps, "now" | "logDir" | "recordFixturesDir" | "runLog">> & {
@@ -24,15 +24,33 @@ import { spawnSync } from "node:child_process";
24
24
  import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, } from "node:fs";
25
25
  import os from "node:os";
26
26
  import path from "node:path";
27
+ import { fileURLToPath } from "node:url";
27
28
  import { parse as parseYaml } from "yaml";
28
29
  import { captureFixture } from "../connectors/fixtureRecorder.js";
29
30
  import { findYamlRecipePath } from "../recipesHttp.js";
30
31
  import { executeAgent as _executeAgent, } from "./agentExecutor.js";
31
32
  import { detectSilentFail } from "./detectSilentFail.js";
32
33
  import { defaultDeprecationWarn, normalizeRecipeForRuntime, } from "./legacyRecipeCompat.js";
34
+ import { resolveRecipePath } from "./resolveRecipePath.js";
33
35
  // Import tool registry and trigger tool self-registration
34
36
  import { applyToolOutputContext, executeTool, getTool, hasTool, registerPluginTools, } from "./toolRegistry.js";
35
37
  import "./tools/index.js";
38
+ /**
39
+ * Bundled-templates directory used as a third allowed root for nested-recipe
40
+ * lookups (`recipe:` references with explicit paths). Resolved once at module
41
+ * load — `__dirname` equivalent points at `dist/recipes/` in the npm tarball
42
+ * (or `src/recipes/` in dev) so the relative `../../templates/recipes` lifts
43
+ * out of the source tree to the package root regardless of build layout.
44
+ *
45
+ * See dogfood A-PR2 / R2 M-5 — the third jail root is captured here, not at
46
+ * call time, so a runtime CWD change cannot relocate it.
47
+ */
48
+ const BUNDLED_TEMPLATES_DIR = (() => {
49
+ const here = path.dirname(fileURLToPath(import.meta.url));
50
+ // dist/recipes/yamlRunner.js → ../../templates/recipes
51
+ // src/recipes/yamlRunner.ts → ../../templates/recipes
52
+ return path.resolve(here, "..", "..", "templates", "recipes");
53
+ })();
36
54
  export function evaluateExpect(result, expect) {
37
55
  const failures = [];
38
56
  if (expect.stepsRun !== undefined && result.stepsRun !== expect.stepsRun) {
@@ -314,19 +332,21 @@ export async function runYamlRecipe(recipe, deps = {}, seedContext = {}) {
314
332
  continue;
315
333
  }
316
334
  const stepStart = Date.now();
317
- const stepId = step.into ?? step.tool ?? `step_${stepsRun}`;
335
+ const stepId = step.into ?? `step_${stepsRun}`;
318
336
  // Resolve retry policy: step-level overrides recipe-level.
319
337
  const retryCount = step.retry ?? recipe.on_error?.retry ?? 0;
320
338
  const retryDelayMs = step.retryDelay ?? recipe.on_error?.retryDelay ?? 1000;
321
339
  let result = null;
322
340
  let stepError;
323
341
  let thrownError;
342
+ let thrownErrorCode;
324
343
  for (let attempt = 0; attempt <= retryCount; attempt++) {
325
344
  if (attempt > 0) {
326
345
  await new Promise((r) => setTimeout(r, retryDelayMs));
327
346
  }
328
347
  stepError = undefined;
329
348
  thrownError = undefined;
349
+ thrownErrorCode = undefined;
330
350
  try {
331
351
  result = await executeStep(step, ctx, stepDeps);
332
352
  // Detect tool-level errors reported as JSON {ok: false, error: ...}
@@ -358,6 +378,12 @@ export async function runYamlRecipe(recipe, deps = {}, seedContext = {}) {
358
378
  }
359
379
  catch (err) {
360
380
  thrownError = err instanceof Error ? err.message : String(err);
381
+ // Preserve structured error codes (e.g. recipe_path_jail_escape)
382
+ // so callers and tests can branch on `err.code` per R2 M-4
383
+ // without scraping the message string.
384
+ const code = err?.code;
385
+ if (typeof code === "string")
386
+ thrownErrorCode = code;
361
387
  result = null;
362
388
  }
363
389
  if (!stepError && !thrownError)
@@ -374,6 +400,7 @@ export async function runYamlRecipe(recipe, deps = {}, seedContext = {}) {
374
400
  tool: step.tool,
375
401
  status: "error",
376
402
  error: thrownError,
403
+ ...(thrownErrorCode ? { errorCode: thrownErrorCode } : {}),
377
404
  durationMs: Date.now() - stepStart,
378
405
  });
379
406
  if (!failOpen) {
@@ -419,7 +446,15 @@ export async function runYamlRecipe(recipe, deps = {}, seedContext = {}) {
419
446
  }
420
447
  }
421
448
  if (step.tool === "file.write" || step.tool === "file.append") {
422
- outputs.push(render(step.path, ctx));
449
+ // R2 C-1 / F-02: re-validate the rendered path against the jail so a
450
+ // template substitution that survived earlier checks (e.g. via a
451
+ // chained sub-recipe deps override) cannot smuggle an out-of-jail
452
+ // path into the run log / dashboard outputs list.
453
+ const renderedPath = render(step.path, ctx);
454
+ outputs.push(resolveRecipePath(renderedPath, {
455
+ workspace: stepDeps.workdir,
456
+ write: true,
457
+ }));
423
458
  }
424
459
  }
425
460
  }
@@ -605,11 +640,6 @@ function deepRender(value, ctx) {
605
640
  }
606
641
  return value;
607
642
  }
608
- function expandHome(p) {
609
- if (p.startsWith("~/"))
610
- return path.join(os.homedir(), p.slice(2));
611
- return p;
612
- }
613
643
  function parseSinceToGitArg(since) {
614
644
  const m = /^(\d+)(h|d)$/i.exec(since.trim());
615
645
  if (!m)
@@ -715,22 +745,29 @@ export function defaultGitStaleBranches(days, workdir) {
715
745
  /** Resolve all RunnerDeps to concrete StepDeps with production defaults filled in. */
716
746
  function resolveStepDeps(deps) {
717
747
  const workdir = deps.workdir ?? process.cwd();
748
+ // Defense-in-depth: even if a file.* tool somehow forgets to call
749
+ // resolveRecipePath in its execute(), the default StepDeps file ops will
750
+ // jail the path before touching the filesystem (G-security F-01 / R2 C-1
751
+ // chained-runner third-substitution-site coverage).
718
752
  return {
719
- readFile: deps.readFile ?? ((p) => readFileSync(expandHome(p), "utf-8")),
753
+ readFile: deps.readFile ??
754
+ ((p) => readFileSync(resolveRecipePath(p, { workspace: workdir }), "utf-8")),
720
755
  writeFile: deps.writeFile ??
721
756
  ((p, content) => {
722
- const abs = expandHome(p);
757
+ const abs = resolveRecipePath(p, { workspace: workdir, write: true });
723
758
  mkdirSync(path.dirname(abs), { recursive: true });
724
759
  writeFileSync(abs, content);
725
760
  }),
726
761
  appendFile: deps.appendFile ??
727
762
  ((p, content) => {
728
- const abs = expandHome(p);
763
+ const abs = resolveRecipePath(p, { workspace: workdir, write: true });
729
764
  mkdirSync(path.dirname(abs), { recursive: true });
730
765
  appendFileSync(abs, content);
731
766
  }),
732
767
  mkdir: deps.mkdir ??
733
- ((p) => mkdirSync(expandHome(p), { recursive: true })),
768
+ ((p) => mkdirSync(resolveRecipePath(p, { workspace: workdir, write: true }), {
769
+ recursive: true,
770
+ })),
734
771
  workdir,
735
772
  gitLogSince: deps.gitLogSince ?? defaultGitLogSince,
736
773
  gitStaleBranches: deps.gitStaleBranches ?? defaultGitStaleBranches,
@@ -943,6 +980,26 @@ export function buildChainedDeps(runnerDeps, claudeCodeFnOverride) {
943
980
  }
944
981
  }
945
982
  const executeTool = async (tool, params) => {
983
+ // R2 C-1 third-substitution-site coverage: the chained runner has its
984
+ // own template-resolution path (`chainedRunner.ts:194-205`). By the
985
+ // time we reach this dispatch point the params have been rendered
986
+ // *and* JSON-parsed, so a `path` field that survived the chained
987
+ // substitution may have just been promoted from inside-jail to
988
+ // outside-jail. Re-jail any `path` field on file.* tools here so that
989
+ // chained sub-recipes can't bypass the per-tool jail in `tools/file.ts`
990
+ // by injecting `..` segments via outer-recipe vars.
991
+ if ((tool === "file.read" ||
992
+ tool === "file.write" ||
993
+ tool === "file.append") &&
994
+ typeof params.path === "string") {
995
+ params = {
996
+ ...params,
997
+ path: resolveRecipePath(params.path, {
998
+ workspace: stepDeps.workdir,
999
+ write: tool !== "file.read",
1000
+ }),
1001
+ };
1002
+ }
946
1003
  // Construct a YamlStep-compatible object so we can reuse executeStep.
947
1004
  const step = { tool, ...params };
948
1005
  // executeStep uses a RunContext for {{}} rendering — by the time executeTool
@@ -952,8 +1009,36 @@ export function buildChainedDeps(runnerDeps, claudeCodeFnOverride) {
952
1009
  return result ?? "";
953
1010
  };
954
1011
  const executeAgent = async (prompt, model, driver) => _executeAgent({ prompt, model, driver }, buildAgentExecutorDeps(stepDeps, runnerDeps, claudeCodeFnOverride));
1012
+ // ---------------------------------------------------------------------
1013
+ // BEGIN A-PR2 EDIT BLOCK — `loadNestedRecipe` jail (dogfood F-04).
1014
+ //
1015
+ // Path-shaped recipe references (`recipe: ./inner.yaml`, `recipe: /abs.yaml`)
1016
+ // are restricted to three allowed roots:
1017
+ // 1. parent recipe's directory (`path.dirname(parentSourcePath)`)
1018
+ // 2. user recipes dir (`~/.patchwork/recipes/`)
1019
+ // 3. bundled templates dir (`BUNDLED_TEMPLATES_DIR`, captured at boot)
1020
+ //
1021
+ // Resolved candidates that escape all three (e.g. `/etc/passwd.yaml`) are
1022
+ // rejected with `null` — same shape as a not-found lookup so the chained
1023
+ // runner reports its existing "nested_recipe_not_found" error rather than
1024
+ // surfacing a security-implementation detail to the recipe author.
1025
+ //
1026
+ // Coordination note (A-PR1 may also touch this file): the helper
1027
+ // `pathIsWithin` below is local to this module — A-PR1 is changing
1028
+ // unrelated `vars` validation paths and should not collide here. If a merge
1029
+ // conflict surfaces, keep BOTH the jail AND the A-PR1 vars validation.
1030
+ // ---------------------------------------------------------------------
1031
+ const pathIsWithin = (candidate, base) => {
1032
+ const resolvedCandidate = path.resolve(candidate);
1033
+ const resolvedBase = path.resolve(base);
1034
+ if (resolvedCandidate === resolvedBase)
1035
+ return true;
1036
+ return resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);
1037
+ };
955
1038
  const loadNestedRecipe = async (name, parentSourcePath) => {
956
1039
  const lookupName = normalizeNestedRecipeLookupName(name);
1040
+ const { homedir: nestedHomedir } = await import("node:os");
1041
+ const userRecipesDir = path.join(nestedHomedir(), ".patchwork", "recipes");
957
1042
  if (parentSourcePath) {
958
1043
  const parentDir = path.dirname(parentSourcePath);
959
1044
  const pathLike = path.isAbsolute(name) ||
@@ -968,15 +1053,24 @@ export function buildChainedDeps(runnerDeps, claudeCodeFnOverride) {
968
1053
  const candidates = /\.ya?ml$/i.test(resolvedBase)
969
1054
  ? [resolvedBase]
970
1055
  : [`${resolvedBase}.yaml`, `${resolvedBase}.yml`, resolvedBase];
1056
+ // Jail: every candidate must live inside one of the three allowed
1057
+ // roots (parent dir, user recipes, bundled templates). Reject silently
1058
+ // — null mirrors the existing not-found path so error messages stay
1059
+ // generic and don't leak the jail boundaries.
1060
+ const allowedRoots = [parentDir, userRecipesDir, BUNDLED_TEMPLATES_DIR];
971
1061
  for (const candidate of candidates) {
1062
+ const inJail = allowedRoots.some((root) => pathIsWithin(candidate, root));
1063
+ if (!inJail)
1064
+ continue;
972
1065
  const loaded = tryLoadRecipeFile(candidate);
973
1066
  if (loaded)
974
1067
  return loaded;
975
1068
  }
976
1069
  }
977
1070
  }
978
- const { homedir } = await import("node:os");
979
- const recipesDir = path.join(homedir(), ".patchwork", "recipes");
1071
+ // END A-PR2 EDIT BLOCK
1072
+ // Reuses `userRecipesDir` already resolved above for the jail check.
1073
+ const recipesDir = userRecipesDir;
980
1074
  // Check for manifest-based package directory first.
981
1075
  // Supports both plain names ("morning-brief") and scoped names ("@acme/morning-brief").
982
1076
  const pkgDirCandidates = [