patchwork-os 0.2.0-alpha.35 → 0.2.0-alpha.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -15
- package/dist/activityLog.d.ts +49 -0
- package/dist/activityLog.js +78 -0
- package/dist/activityLog.js.map +1 -1
- package/dist/approvalHttp.d.ts +25 -0
- package/dist/approvalHttp.js +74 -18
- package/dist/approvalHttp.js.map +1 -1
- package/dist/approvalInsights.d.ts +49 -0
- package/dist/approvalInsights.js +97 -0
- package/dist/approvalInsights.js.map +1 -0
- package/dist/approvalQueue.d.ts +11 -0
- package/dist/approvalQueue.js +80 -1
- package/dist/approvalQueue.js.map +1 -1
- package/dist/approvalSignals.d.ts +124 -0
- package/dist/approvalSignals.js +512 -0
- package/dist/approvalSignals.js.map +1 -0
- package/dist/automation.d.ts +37 -0
- package/dist/automation.js +105 -61
- package/dist/automation.js.map +1 -1
- package/dist/automationSuggestions.d.ts +79 -0
- package/dist/automationSuggestions.js +150 -0
- package/dist/automationSuggestions.js.map +1 -0
- package/dist/bridge.js +46 -0
- package/dist/bridge.js.map +1 -1
- package/dist/ccPermissions.d.ts +15 -0
- package/dist/ccPermissions.js +15 -0
- package/dist/ccPermissions.js.map +1 -1
- package/dist/claudeDriver.js +74 -16
- package/dist/claudeDriver.js.map +1 -1
- package/dist/commands/patchworkInit.d.ts +8 -0
- package/dist/commands/patchworkInit.js +41 -5
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +20 -0
- package/dist/commands/recipe.js +194 -5
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.js +93 -4
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/commands/tracesExport.d.ts +83 -0
- package/dist/commands/tracesExport.js +269 -0
- package/dist/commands/tracesExport.js.map +1 -0
- package/dist/commands/tracesImport.d.ts +56 -0
- package/dist/commands/tracesImport.js +161 -0
- package/dist/commands/tracesImport.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +9 -1
- package/dist/config.js.map +1 -1
- package/dist/connectorRoutes.d.ts +43 -0
- package/dist/connectorRoutes.js +1713 -0
- package/dist/connectorRoutes.js.map +1 -0
- package/dist/connectors/asana.js +6 -7
- package/dist/connectors/asana.js.map +1 -1
- package/dist/connectors/baseConnector.d.ts +20 -0
- package/dist/connectors/baseConnector.js +45 -4
- package/dist/connectors/baseConnector.js.map +1 -1
- package/dist/connectors/discord.js +6 -7
- package/dist/connectors/discord.js.map +1 -1
- package/dist/connectors/gmail.js +39 -10
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleCalendar.js +36 -10
- package/dist/connectors/googleCalendar.js.map +1 -1
- package/dist/connectors/googleDrive.js +22 -6
- package/dist/connectors/googleDrive.js.map +1 -1
- package/dist/connectors/linear.js +2 -2
- package/dist/connectors/linear.js.map +1 -1
- package/dist/connectors/mcpOAuth.js +26 -2
- package/dist/connectors/mcpOAuth.js.map +1 -1
- package/dist/connectors/oauthStateStore.d.ts +31 -0
- package/dist/connectors/oauthStateStore.js +52 -0
- package/dist/connectors/oauthStateStore.js.map +1 -0
- package/dist/connectors/slack.d.ts +15 -0
- package/dist/connectors/slack.js +54 -4
- package/dist/connectors/slack.js.map +1 -1
- package/dist/connectors/tokenStorage.js +27 -2
- package/dist/connectors/tokenStorage.js.map +1 -1
- package/dist/connectors/zendesk.js +19 -1
- package/dist/connectors/zendesk.js.map +1 -1
- package/dist/cors.d.ts +10 -0
- package/dist/cors.js +29 -0
- package/dist/cors.js.map +1 -0
- package/dist/decisionReplay.d.ts +72 -0
- package/dist/decisionReplay.js +92 -0
- package/dist/decisionReplay.js.map +1 -0
- package/dist/decisionTraceLog.d.ts +6 -0
- package/dist/decisionTraceLog.js +54 -2
- package/dist/decisionTraceLog.js.map +1 -1
- package/dist/fp/automationInterpreter.js +25 -21
- package/dist/fp/automationInterpreter.js.map +1 -1
- package/dist/fp/automationState.js +4 -1
- package/dist/fp/automationState.js.map +1 -1
- package/dist/fp/policyParser.js +4 -1
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/inboxRoutes.d.ts +22 -0
- package/dist/inboxRoutes.js +114 -0
- package/dist/inboxRoutes.js.map +1 -0
- package/dist/index.js +479 -17
- package/dist/index.js.map +1 -1
- package/dist/mcpRoutes.d.ts +37 -0
- package/dist/mcpRoutes.js +76 -0
- package/dist/mcpRoutes.js.map +1 -0
- package/dist/oauth.d.ts +3 -0
- package/dist/oauth.js +151 -26
- package/dist/oauth.js.map +1 -1
- package/dist/oauthRoutes.d.ts +32 -0
- package/dist/oauthRoutes.js +124 -0
- package/dist/oauthRoutes.js.map +1 -0
- package/dist/orchestrator/orchestratorBridge.js +2 -2
- package/dist/orchestrator/orchestratorBridge.js.map +1 -1
- package/dist/patchworkConfig.d.ts +7 -0
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/pluginLoader.d.ts +12 -0
- package/dist/pluginLoader.js +43 -4
- package/dist/pluginLoader.js.map +1 -1
- package/dist/pluginWatcher.js +8 -3
- package/dist/pluginWatcher.js.map +1 -1
- package/dist/preToolUseHook.d.ts +12 -0
- package/dist/preToolUseHook.js +23 -0
- package/dist/preToolUseHook.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +1 -0
- package/dist/recipeOrchestration.js +173 -13
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipeRoutes.d.ts +154 -0
- package/dist/recipeRoutes.js +1107 -0
- package/dist/recipeRoutes.js.map +1 -0
- package/dist/recipes/chainedRunner.d.ts +15 -0
- package/dist/recipes/chainedRunner.js +73 -8
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/compiler.js +3 -3
- package/dist/recipes/compiler.js.map +1 -1
- package/dist/recipes/installer.js +3 -3
- package/dist/recipes/installer.js.map +1 -1
- package/dist/recipes/migrationWarnings.d.ts +12 -0
- package/dist/recipes/migrationWarnings.js +44 -0
- package/dist/recipes/migrationWarnings.js.map +1 -0
- package/dist/recipes/resolveRecipePath.d.ts +69 -0
- package/dist/recipes/resolveRecipePath.js +202 -0
- package/dist/recipes/resolveRecipePath.js.map +1 -0
- package/dist/recipes/tools/file.d.ts +6 -0
- package/dist/recipes/tools/file.js +12 -8
- package/dist/recipes/tools/file.js.map +1 -1
- package/dist/recipes/tools/index.d.ts +2 -0
- package/dist/recipes/tools/index.js +2 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/tools/jira.d.ts +14 -0
- package/dist/recipes/tools/jira.js +369 -0
- package/dist/recipes/tools/jira.js.map +1 -0
- package/dist/recipes/tools/linear.js +6 -3
- package/dist/recipes/tools/linear.js.map +1 -1
- package/dist/recipes/tools/sentry.d.ts +12 -0
- package/dist/recipes/tools/sentry.js +73 -0
- package/dist/recipes/tools/sentry.js.map +1 -0
- package/dist/recipes/tools/slack.js +7 -3
- package/dist/recipes/tools/slack.js.map +1 -1
- package/dist/recipes/validation.js +83 -14
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +7 -0
- package/dist/recipes/yamlRunner.js +107 -13
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +44 -1
- package/dist/recipesHttp.js +168 -15
- package/dist/recipesHttp.js.map +1 -1
- package/dist/runLog.d.ts +14 -0
- package/dist/runLog.js +88 -4
- package/dist/runLog.js.map +1 -1
- package/dist/schemas/dry-run-plan.v1.json +139 -0
- package/dist/schemas/recipe.v1.json +684 -0
- package/dist/server.d.ts +71 -10
- package/dist/server.js +363 -1703
- package/dist/server.js.map +1 -1
- package/dist/ssrfGuard.d.ts +54 -0
- package/dist/ssrfGuard.js +122 -0
- package/dist/ssrfGuard.js.map +1 -0
- package/dist/streamableHttp.d.ts +8 -0
- package/dist/streamableHttp.js +112 -21
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/getDocumentSymbols.d.ts +24 -0
- package/dist/tools/getDocumentSymbols.js +74 -8
- package/dist/tools/getDocumentSymbols.js.map +1 -1
- package/dist/tools/getSecurityAdvisories.js +10 -1
- package/dist/tools/getSecurityAdvisories.js.map +1 -1
- package/dist/tools/getSessionUsage.d.ts +3 -0
- package/dist/tools/getSessionUsage.js +3 -0
- package/dist/tools/getSessionUsage.js.map +1 -1
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.js +32 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/transaction.d.ts +19 -0
- package/dist/tools/transaction.js +29 -0
- package/dist/tools/transaction.js.map +1 -1
- package/dist/traceEncryption.d.ts +46 -0
- package/dist/traceEncryption.js +124 -0
- package/dist/traceEncryption.js.map +1 -0
- package/dist/transport.d.ts +39 -0
- package/dist/transport.js +88 -8
- package/dist/transport.js.map +1 -1
- package/package.json +4 -2
- package/templates/policies/README.md +72 -0
- package/templates/policies/conservative.json +14 -0
- package/templates/policies/developer.json +14 -0
- package/templates/policies/headless-ci.json +24 -0
- package/templates/policies/personal-assistant.json +15 -0
- package/templates/policies/regulated-industry.json +18 -0
- package/templates/recipes/webhook/README.md +70 -0
- package/templates/recipes/webhook/capture-thought.yaml +26 -0
- package/templates/recipes/webhook/customer-escalation.yaml +49 -0
- package/templates/recipes/webhook/incident-intake.yaml +46 -0
- package/templates/recipes/webhook/meeting-prep.yaml +48 -0
- package/templates/recipes/webhook/morning-brief.yaml +57 -0
package/dist/claudeDriver.js
CHANGED
|
@@ -43,6 +43,20 @@ export function toClaudeTaskOutcome(output, cancelReason) {
|
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
const OUTPUT_CAP = 50 * 1024; // 50KB
|
|
46
|
+
/**
|
|
47
|
+
* Truncate `text` to at most `cap` UTF-8 bytes without splitting a multi-byte
|
|
48
|
+
* codepoint mid-sequence. `String.slice(0, cap)` operates on UTF-16 code
|
|
49
|
+
* units, so a 50K cap can store ~50K code points but emit up to ~200KB of
|
|
50
|
+
* UTF-8 wire bytes for CJK / emoji content — and may produce a lone
|
|
51
|
+
* surrogate at the boundary. `Buffer.toString("utf8")` substitutes U+FFFD
|
|
52
|
+
* for incomplete trailing sequences instead.
|
|
53
|
+
*/
|
|
54
|
+
function truncateUtf8Bytes(text, cap) {
|
|
55
|
+
const buf = Buffer.from(text, "utf8");
|
|
56
|
+
if (buf.length <= cap)
|
|
57
|
+
return text;
|
|
58
|
+
return buf.subarray(0, cap).toString("utf8");
|
|
59
|
+
}
|
|
46
60
|
export class SubprocessDriver {
|
|
47
61
|
binary;
|
|
48
62
|
antBinary;
|
|
@@ -178,6 +192,30 @@ export class SubprocessDriver {
|
|
|
178
192
|
// waiting for input that never arrives. Detaching prevents /dev/tty access entirely.
|
|
179
193
|
detached: true,
|
|
180
194
|
});
|
|
195
|
+
/**
|
|
196
|
+
* Kill the entire process group, not just the direct child. Because we
|
|
197
|
+
* spawned with `detached: true`, the child runs in its own process group.
|
|
198
|
+
* `child.kill()` and Node's AbortSignal-driven kill both target only the
|
|
199
|
+
* direct child PID, leaving grandchildren (claude's own tool subprocesses)
|
|
200
|
+
* orphaned and surviving bridge shutdown. Negative PID = process group.
|
|
201
|
+
*/
|
|
202
|
+
const killProcessGroup = (signal = "SIGTERM") => {
|
|
203
|
+
if (typeof child.pid !== "number")
|
|
204
|
+
return;
|
|
205
|
+
try {
|
|
206
|
+
process.kill(-child.pid, signal);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// ESRCH = group already dead, EPERM = permission lost. Either way,
|
|
210
|
+
// no further action available.
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
// When AbortController fires (timeout, manual cancel, shutdown), Node
|
|
214
|
+
// sends SIGTERM to child PID only — escalate to the process group so
|
|
215
|
+
// grandchildren go too. Listener removed automatically when child exits.
|
|
216
|
+
const onAbort = () => killProcessGroup("SIGTERM");
|
|
217
|
+
input.signal.addEventListener("abort", onAbort, { once: true });
|
|
218
|
+
child.on("close", () => input.signal.removeEventListener("abort", onAbort));
|
|
181
219
|
// JSONL output state
|
|
182
220
|
// -------------------------------------------------------------------
|
|
183
221
|
// With --output-format stream-json, claude emits one JSON object per line.
|
|
@@ -187,9 +225,25 @@ export class SubprocessDriver {
|
|
|
187
225
|
// Accumulated text from assistant events — used as fallback for final text if
|
|
188
226
|
// the result event is missing (old binary, crash before result, etc.)
|
|
189
227
|
let accumulated = "";
|
|
190
|
-
// outputBytesSent tracks how many bytes have been forwarded to onChunk so we
|
|
228
|
+
// outputBytesSent tracks how many bytes (UTF-8) have been forwarded to onChunk so we
|
|
191
229
|
// can apply OUTPUT_CAP without truncating the accumulated text used for analysis.
|
|
230
|
+
// Counted in bytes (not UTF-16 code units) because OUTPUT_CAP is a byte budget —
|
|
231
|
+
// a string slice would let multi-byte CJK / emoji content overshoot the cap by 4×.
|
|
192
232
|
let outputBytesSent = 0;
|
|
233
|
+
/**
|
|
234
|
+
* Truncate `text` so it adds at most `remaining` UTF-8 bytes to the
|
|
235
|
+
* stream and never splits a multi-byte codepoint mid-sequence. Returns
|
|
236
|
+
* the safely-truncated slice plus its actual byte length.
|
|
237
|
+
*/
|
|
238
|
+
const truncateToBytes = (text, remaining) => {
|
|
239
|
+
const buf = Buffer.from(text, "utf8");
|
|
240
|
+
if (buf.length <= remaining)
|
|
241
|
+
return { send: text, bytes: buf.length };
|
|
242
|
+
// Buffer.toString("utf8") substitutes U+FFFD for incomplete trailing
|
|
243
|
+
// sequences, which is the correct UTF-8 truncation behavior.
|
|
244
|
+
const sliced = buf.subarray(0, remaining).toString("utf8");
|
|
245
|
+
return { send: sliced, bytes: Buffer.byteLength(sliced, "utf8") };
|
|
246
|
+
};
|
|
193
247
|
// firstAssistantAt: set on the first assistant event; used to compute startupMs.
|
|
194
248
|
let firstAssistantAt;
|
|
195
249
|
// doneFromResult: set when a result event is received so the abort path can
|
|
@@ -216,10 +270,10 @@ export class SubprocessDriver {
|
|
|
216
270
|
const text = `${line}\n`;
|
|
217
271
|
accumulated += text;
|
|
218
272
|
if (outputBytesSent < OUTPUT_CAP) {
|
|
219
|
-
const send = text
|
|
220
|
-
if (
|
|
273
|
+
const { send, bytes } = truncateToBytes(text, OUTPUT_CAP - outputBytesSent);
|
|
274
|
+
if (bytes > 0) {
|
|
221
275
|
input.onChunk?.(send);
|
|
222
|
-
outputBytesSent +=
|
|
276
|
+
outputBytesSent += bytes;
|
|
223
277
|
}
|
|
224
278
|
}
|
|
225
279
|
continue;
|
|
@@ -238,10 +292,10 @@ export class SubprocessDriver {
|
|
|
238
292
|
if (text.length > 0) {
|
|
239
293
|
accumulated += text;
|
|
240
294
|
if (outputBytesSent < OUTPUT_CAP) {
|
|
241
|
-
const send = text
|
|
242
|
-
if (
|
|
295
|
+
const { send, bytes } = truncateToBytes(text, OUTPUT_CAP - outputBytesSent);
|
|
296
|
+
if (bytes > 0) {
|
|
243
297
|
input.onChunk?.(send);
|
|
244
|
-
outputBytesSent +=
|
|
298
|
+
outputBytesSent += bytes;
|
|
245
299
|
}
|
|
246
300
|
}
|
|
247
301
|
}
|
|
@@ -260,11 +314,13 @@ export class SubprocessDriver {
|
|
|
260
314
|
let stderr = "";
|
|
261
315
|
child.stderr.setEncoding("utf-8");
|
|
262
316
|
child.stderr.on("data", (chunk) => {
|
|
263
|
-
// Apply the same cap to stderr to prevent unbounded
|
|
264
|
-
|
|
317
|
+
// Apply the same byte-budget cap to stderr to prevent unbounded
|
|
318
|
+
// memory growth on multi-byte UTF-8 output.
|
|
319
|
+
if (Buffer.byteLength(stderr, "utf8") < OUTPUT_CAP) {
|
|
265
320
|
stderr += chunk;
|
|
266
|
-
if (stderr
|
|
267
|
-
stderr = stderr
|
|
321
|
+
if (Buffer.byteLength(stderr, "utf8") > OUTPUT_CAP) {
|
|
322
|
+
stderr = truncateUtf8Bytes(stderr, OUTPUT_CAP);
|
|
323
|
+
}
|
|
268
324
|
}
|
|
269
325
|
});
|
|
270
326
|
const start = Date.now();
|
|
@@ -278,7 +334,9 @@ export class SubprocessDriver {
|
|
|
278
334
|
? setTimeout(() => {
|
|
279
335
|
if (firstAssistantAt === undefined && !doneFromResult) {
|
|
280
336
|
startupTimedOut = true;
|
|
281
|
-
|
|
337
|
+
// Kill the whole group so grandchildren don't survive — same
|
|
338
|
+
// reason as in the abort handler above.
|
|
339
|
+
killProcessGroup("SIGTERM");
|
|
282
340
|
}
|
|
283
341
|
}, input.startupTimeoutMs)
|
|
284
342
|
: null;
|
|
@@ -297,7 +355,7 @@ export class SubprocessDriver {
|
|
|
297
355
|
// rather than returning wasAborted: true with partial output.
|
|
298
356
|
if (doneFromResult) {
|
|
299
357
|
return {
|
|
300
|
-
text: resultText
|
|
358
|
+
text: truncateUtf8Bytes(resultText, OUTPUT_CAP),
|
|
301
359
|
exitCode: resultIsError ? 1 : 0,
|
|
302
360
|
durationMs: Date.now() - start,
|
|
303
361
|
stderrTail: stderrTailOf(stderr),
|
|
@@ -310,7 +368,7 @@ export class SubprocessDriver {
|
|
|
310
368
|
// Return rather than throw so the orchestrator can surface partial
|
|
311
369
|
// output, stderrTail, and wasAborted to callers (e.g. /tasks).
|
|
312
370
|
return {
|
|
313
|
-
text: accumulated
|
|
371
|
+
text: truncateUtf8Bytes(accumulated, OUTPUT_CAP),
|
|
314
372
|
exitCode: -1,
|
|
315
373
|
durationMs: Date.now() - start,
|
|
316
374
|
stderrTail: stderrTailOf(stderr),
|
|
@@ -348,7 +406,7 @@ export class SubprocessDriver {
|
|
|
348
406
|
this.log(`[SubprocessDriver] stderr: ${stderr.slice(0, 500)}`);
|
|
349
407
|
}
|
|
350
408
|
return {
|
|
351
|
-
text: finalText
|
|
409
|
+
text: truncateUtf8Bytes(finalText, OUTPUT_CAP),
|
|
352
410
|
exitCode: effectiveExitCode,
|
|
353
411
|
durationMs: Date.now() - start,
|
|
354
412
|
stderrTail: stderrTailOf(stderr),
|
|
@@ -407,7 +465,7 @@ export class ApiDriver {
|
|
|
407
465
|
.join("");
|
|
408
466
|
_input.onChunk?.(text);
|
|
409
467
|
return {
|
|
410
|
-
text: text
|
|
468
|
+
text: truncateUtf8Bytes(text, OUTPUT_CAP),
|
|
411
469
|
exitCode: 0,
|
|
412
470
|
durationMs: Date.now() - start,
|
|
413
471
|
};
|
package/dist/claudeDriver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeDriver.js","sourceRoot":"","sources":["../src/claudeDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claudeDriver.js","sourceRoot":"","sources":["../src/claudeDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAqEjC;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAwB,EACxB,YAAkE;IAElE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,UAAU,GACd,MAAM,CAAC,eAAe,IAAI,YAAY,KAAK,iBAAiB;YAC1D,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,YAAY,KAAK,SAAS;gBAC1B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC;QACf,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU;YACV,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;AAErC;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,IAAY,EAAE,GAAW;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAkBD,MAAM,OAAO,gBAAgB;IAMR;IACA;IACA;IAPV,IAAI,GAAG,YAAY,CAAC;IACZ,YAAY,CAAS;IACrB,eAAe,CAAS;IAEzC,YACmB,MAAc,EACd,SAAiB,EACjB,GAA0B;QAF1B,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAQ;QACjB,QAAG,GAAH,GAAG,CAAuB;QAE3C,wEAAwE;QACxE,8EAA8E;QAC9E,8EAA8E;QAC9E,qEAAqE;QACrE,IAAI,CAAC,YAAY,GAAG,IAAI,CACtB,MAAM,EAAE,EACR,yCAAyC,OAAO,CAAC,GAAG,OAAO,CAC5D,CAAC;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;YACpC,KAAK,EAAE,EAAE;YACT,WAAW,EAAE;gBACX,gFAAgF;gBAChF,gFAAgF;gBAChF,IAAI,EAAE;oBACJ,uBAAuB;oBACvB,oBAAoB;oBACpB,oBAAoB;oBACpB,qBAAqB;oBACrB,qBAAqB;oBACrB,6BAA6B;oBAC7B,uBAAuB;oBACvB,uBAAuB;oBACvB,iBAAiB;oBACjB,gBAAgB;oBAChB,mBAAmB;oBACnB,6BAA6B;oBAC7B,yBAAyB;oBACzB,qBAAqB;oBACrB,yBAAyB;oBACzB,gBAAgB;oBAChB,gBAAgB;oBAChB,uBAAuB;oBACvB,cAAc;oBACd,kBAAkB;oBAClB,2BAA2B;oBAC3B,cAAc;oBACd,gBAAgB;oBAChB,gBAAgB;oBAChB,sBAAsB;oBACtB,iBAAiB;oBACjB,eAAe;iBAChB;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC;YACH,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CACN,6DAA6D,IAAI,CAAC,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAClK,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAsB;QAC9B,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACpE,6EAA6E;QAC7E,+EAA+E;QAC/E,qDAAqD;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,MAAM,IAAI,GAAG;YACX,IAAI;YACJ,KAAK,CAAC,MAAM;YACZ,0EAA0E;YAC1E,8EAA8E;YAC9E,qBAAqB;YACrB,6EAA6E;YAC7E,0EAA0E;YAC1E,sCAAsC;YACtC,YAAY;YACZ,IAAI,CAAC,YAAY;YACjB,2EAA2E;YAC3E,+EAA+E;YAC/E,iBAAiB;YACjB,aAAa;YACb,WAAW;YACX,4BAA4B;YAC5B,qEAAqE;YACrE,0BAA0B;SAC3B,CAAC;QACF,IAAI,KAAK,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,YAAY;YAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,aAAa;YAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;YAClC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5D,0FAA0F;QAC1F,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC5C,yEAAyE;QACzE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,oFAAoF;QACpF,0FAA0F;QAC1F,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAClD,wFAAwF;QACxF,yFAAyF;QACzF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IACE,GAAG,KAAK,YAAY;gBACpB,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC;gBAC9B,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EACtB,CAAC;gBACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CACN,gCAAgC,eAAe,4BAA4B,KAAK,CAAC,SAAS,GAAG,CAC9F,CAAC;QAEF,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE;YACzC,GAAG,EAAE,KAAK,CAAC,SAAS;YACpB,GAAG;YACH,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,uFAAuF;YACvF,wDAAwD;YACxD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,qFAAqF;YACrF,qFAAqF;YACrF,kFAAkF;YAClF,qFAAqF;YACrF,kFAAkF;YAClF,qFAAqF;YACrF,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH;;;;;;WAMG;QACH,MAAM,gBAAgB,GAAG,CAAC,SAAyB,SAAS,EAAQ,EAAE;YACpE,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO;YAC1C,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,mEAAmE;gBACnE,+BAA+B;YACjC,CAAC;QACH,CAAC,CAAC;QAEF,sEAAsE;QACtE,qEAAqE;QACrE,yEAAyE;QACzE,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAClD,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAE5E,qBAAqB;QACrB,sEAAsE;QACtE,2EAA2E;QAC3E,8EAA8E;QAC9E,qCAAqC;QACrC,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,8EAA8E;QAC9E,sEAAsE;QACtE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,qFAAqF;QACrF,kFAAkF;QAClF,iFAAiF;QACjF,mFAAmF;QACnF,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB;;;;WAIG;QACH,MAAM,eAAe,GAAG,CACtB,IAAY,EACZ,SAAiB,EACgB,EAAE;YACnC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtC,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;YACtE,qEAAqE;YACrE,6DAA6D;YAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACpE,CAAC,CAAC;QACF,iFAAiF;QACjF,IAAI,gBAAoC,CAAC;QACzC,4EAA4E;QAC5E,6EAA6E;QAC7E,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,OAAO,IAAI,KAAK,CAAC;YACjB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,4EAA4E;YAC5E,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,SAAS,CAAC,6BAA6B;gBAE/D,IAAI,KAAsB,CAAC;gBAC3B,IAAI,CAAC;oBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC;oBACP,wEAAwE;oBACxE,2EAA2E;oBAC3E,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC;oBACzB,WAAW,IAAI,IAAI,CAAC;oBACpB,IAAI,eAAe,GAAG,UAAU,EAAE,CAAC;wBACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CACrC,IAAI,EACJ,UAAU,GAAG,eAAe,CAC7B,CAAC;wBACF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;4BACd,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;4BACtB,eAAe,IAAI,KAAK,CAAC;wBAC3B,CAAC;oBACH,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAC/B,IAAI,gBAAgB,KAAK,SAAS;wBAAE,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAClE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;oBACvC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,0EAA0E;wBAC1E,yEAAyE;wBACzE,MAAM,IAAI,GAAG,OAAO;6BACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;6BAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;6BACxB,IAAI,CAAC,EAAE,CAAC,CAAC;wBACZ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACpB,WAAW,IAAI,IAAI,CAAC;4BACpB,IAAI,eAAe,GAAG,UAAU,EAAE,CAAC;gCACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CACrC,IAAI,EACJ,UAAU,GAAG,eAAe,CAC7B,CAAC;gCACF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oCACd,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;oCACtB,eAAe,IAAI,KAAK,CAAC;gCAC3B,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACnC,cAAc,GAAG,IAAI,CAAC;oBACtB,aAAa,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;oBACxC,6EAA6E;oBAC7E,UAAU;wBACR,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;gBAClE,CAAC;gBACD,sDAAsD;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,gEAAgE;YAChE,4CAA4C;YAC5C,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC;gBAChB,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;oBACnD,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,CAAC,CAAS,EAAsB,EAAE,CACrD,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1D,MAAM,WAAW,GAAG,GAAuB,EAAE,CAC3C,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAExE,0EAA0E;QAC1E,yEAAyE;QACzE,qEAAqE;QACrE,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB;YAC1C,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,gBAAgB,KAAK,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;oBACtD,eAAe,GAAG,IAAI,CAAC;oBACvB,6DAA6D;oBAC7D,wCAAwC;oBACxC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACvD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,yEAAyE;YACzE,wEAAwE;YACxE,8DAA8D;YAC9D,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO;oBACL,IAAI,EAAE,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC;oBAC/C,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAC9B,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC;oBAChC,SAAS,EAAE,WAAW,EAAE;iBACzB,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GACX,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;gBACnD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YACvB,IAAI,OAAO,EAAE,CAAC;gBACZ,mEAAmE;gBACnE,+DAA+D;gBAC/D,OAAO;oBACL,IAAI,EAAE,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC;oBAChD,QAAQ,EAAE,CAAC,CAAC;oBACZ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;oBAC9B,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC;oBAChC,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,WAAW,EAAE;iBACzB,CAAC;YACJ,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,aAAa;YAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAE/C,6EAA6E;QAC7E,gFAAgF;QAChF,MAAM,iBAAiB,GAAG,cAAc;YACtC,CAAC,CAAC,aAAa;gBACb,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,QAAQ,CAAC;QACb,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QAE5D,+EAA+E;QAC/E,6EAA6E;QAC7E,wDAAwD;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;gBACtC,QAAQ,EAAE,CAAC,CAAC;gBACZ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC9B,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC;gBAChC,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,IAAI;gBACrB,SAAS,EAAE,SAAS,EAAE,wDAAwD;aAC/E,CAAC;QACJ,CAAC;QAED,IAAI,iBAAiB,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,OAAO;YACL,IAAI,EAAE,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC;YAC9C,QAAQ,EAAE,iBAAiB;YAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC9B,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC;YAChC,SAAS,EAAE,WAAW,EAAE;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAsB;QACrC,OAAO,mBAAmB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,SAAS;IAGS;IAFpB,IAAI,GAAG,KAAK,CAAC;IAEtB,YAA6B,GAA0B;QAA1B,QAAG,GAAH,GAAG,CAAuB;QACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAuB;QAC/B,wDAAwD;QACxD,kFAAkF;QAClF,IAAI,aAA4B,CAAC;QACjC,IAAI,CAAC;YACH,6DAA6D;YAC7D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,mBAA0B,CAAC,CAAC;YACrD,6DAA6D;YAC7D,aAAa,GAAI,GAAW,CAAC,OAAO,IAAI,GAAG,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,MAAM,WAAW,GACf,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC,0EAA0E,MAAM,CAAC,YAAY;iBAC1F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;iBAC3D,IAAI,CAAC,IAAI,CAAC,iCAAiC;YAChD,CAAC,CAAC,EAAE,CAAC;QAET,IAAI,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAEzD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC1C;YACE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,2BAA2B;YAClD,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;SACnE,EACD,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAC1B,CAAC;QAEF,kHAAkH;QAClH,MAAM,OAAO,GAAI,OAAe,CAAC,OAG/B,CAAC;QACH,MAAM,IAAI,GAAW,OAAO;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;aACxB,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAEvB,OAAO;YACL,IAAI,EAAE,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC;YACzC,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC/B,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAClB,IAAI,GAAG,QAAQ,CAAC;IAEzB,YAAY,OAAe,EAAE,IAA2B;QACtD,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,MAAuB;QACzB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,CACL,IAAI;QACF,qBAAqB;SACpB,OAAO,CAAC,4BAA4B,EAAE,oBAAoB,CAAC;QAC5D,gBAAgB;SACf,OAAO,CAAC,gCAAgC,EAAE,mBAAmB,CAAC;QAC/D,yBAAyB;SACxB,OAAO,CAAC,qCAAqC,EAAE,kBAAkB,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAC1B,IAAkE,EAClE,MAAc,EACd,SAAiB,EACjB,GAA0B;IAE1B,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,IAAI,KAAK,YAAY;QACvB,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACtD,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ;QAC3D,OAAO,IAAI,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,qBAAqB;IAKN;IACA;IACA;IACA;IAPV,IAAI,CAAS;IACd,KAAK,GAAuD,IAAI,CAAC;IAEzE,YACmB,IAAkC,EAClC,MAAc,EACd,SAAiB,EACjB,GAA0B;QAH1B,SAAI,GAAJ,IAAI,CAA8B;QAClC,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAQ;QACjB,QAAG,GAAH,GAAG,CAAuB;QAE3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,QAAQ;QAGpB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,UAAU,CACvB,IAAI,CAAC,IAAI,EACT,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAClD,IAAI,CAAC,GAAG,CACT,CAAC;QACF,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAsB;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,UAAU,EAAE,MAAM,CAAC,YAAY;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAsB;QACrC,OAAO,mBAAmB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AAYD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -5,6 +5,14 @@ interface InitResult {
|
|
|
5
5
|
recipesSkipped: number;
|
|
6
6
|
ollamaDetected: boolean;
|
|
7
7
|
configAction: "created" | "merged" | "overwritten";
|
|
8
|
+
/**
|
|
9
|
+
* State of the Claude Code PreToolUse hook after init ran.
|
|
10
|
+
* - "added": registered fresh
|
|
11
|
+
* - "already-wired": prior `patchwork-init` already left it in place
|
|
12
|
+
* - "error": registration failed (e.g. unwritable settings file) — printed
|
|
13
|
+
* as a warning but does not fail init
|
|
14
|
+
*/
|
|
15
|
+
preToolUseHook: "added" | "already-wired" | "error";
|
|
8
16
|
}
|
|
9
17
|
export declare function runPatchworkInit(argv: string[], opts?: {
|
|
10
18
|
cwd?: string;
|
|
@@ -3,6 +3,7 @@ import { homedir } from "node:os";
|
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { loadConfig, saveConfig, } from "../patchworkConfig.js";
|
|
6
|
+
import { registerPreToolUseHook } from "../preToolUseHook.js";
|
|
6
7
|
function parseArgs(argv) {
|
|
7
8
|
if (argv.includes("--help") || argv.includes("-h"))
|
|
8
9
|
return { help: true };
|
|
@@ -25,7 +26,9 @@ What it does:
|
|
|
25
26
|
1. Create ~/.patchwork/{config.json,recipes,inbox,journal}
|
|
26
27
|
2. Copy 5 local-only recipe templates to ~/.patchwork/recipes/
|
|
27
28
|
3. Detect Ollama at localhost:11434 → set provider to ollama-local
|
|
28
|
-
4.
|
|
29
|
+
4. Register the Patchwork PreToolUse hook in ~/.claude/settings.json
|
|
30
|
+
so Claude Code routes tool calls through your delegation policy
|
|
31
|
+
5. Print next steps
|
|
29
32
|
`);
|
|
30
33
|
}
|
|
31
34
|
function findTemplatesDir() {
|
|
@@ -139,10 +142,42 @@ export async function runPatchworkInit(argv, opts = {}) {
|
|
|
139
142
|
existsSync(configPath) && parsed.force ? "overwritten" : "created";
|
|
140
143
|
}
|
|
141
144
|
log(` ✓ config ${configAction}: ${configPath}\n`);
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
// Register the Patchwork PreToolUse hook in Claude Code's settings.json
|
|
146
|
+
// so CC actually routes tool calls through the bridge's approval queue.
|
|
147
|
+
// Without this, `--approval-gate` is silently inert and the entire
|
|
148
|
+
// personalSignals catalog has no input data — exactly the foot-gun
|
|
149
|
+
// PR #150 added a startup warning for. Now `patchwork-init` fixes it
|
|
150
|
+
// at the source rather than just warning about it later.
|
|
151
|
+
const ccSettingsDir = process.env.CLAUDE_CONFIG_DIR ?? join(home, ".claude");
|
|
152
|
+
mkdirSync(ccSettingsDir, { recursive: true });
|
|
153
|
+
const ccSettingsPath = join(ccSettingsDir, "settings.json");
|
|
154
|
+
const hookResult = registerPreToolUseHook(ccSettingsPath);
|
|
155
|
+
let preToolUseHook;
|
|
156
|
+
if (hookResult.action === "added") {
|
|
157
|
+
log(` ✓ Claude Code PreToolUse hook registered: ${ccSettingsPath}\n`);
|
|
158
|
+
preToolUseHook = "added";
|
|
159
|
+
}
|
|
160
|
+
else if (hookResult.action === "already-wired") {
|
|
161
|
+
log(` ✓ Claude Code PreToolUse hook already registered\n`);
|
|
162
|
+
preToolUseHook = "already-wired";
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
log(` ! Could not register Claude Code PreToolUse hook: ${hookResult.error ?? "unknown"}\n` +
|
|
166
|
+
` Delegation policy will not see traffic until you add the hook manually.\n`);
|
|
167
|
+
preToolUseHook = "error";
|
|
168
|
+
}
|
|
169
|
+
// CC reads hooks at session start, so the registration we just did
|
|
170
|
+
// (or confirmed) only takes effect for *future* sessions. Without
|
|
171
|
+
// this prompt, users follow the docs, run init, and the delegation policy
|
|
172
|
+
// still appears inert — the trap that wasted hours of investigation
|
|
173
|
+
// during dogfood verification on 2026-05-03.
|
|
174
|
+
const restartLine = preToolUseHook === "added"
|
|
175
|
+
? `\n ⚠ Restart Claude Code so the new PreToolUse hook takes effect.\n (CC reads hooks at session start — existing sessions won't see the change.)\n`
|
|
176
|
+
: "";
|
|
177
|
+
log(`${restartLine}\nNext:
|
|
178
|
+
1. patchwork-os recipe run morning-brief # AI digest: Gmail + calendar + tasks
|
|
179
|
+
2. patchwork-os # launch terminal dashboard → http://localhost:3100
|
|
180
|
+
3. patchwork-os recipe list # browse installed recipes\n`);
|
|
146
181
|
return {
|
|
147
182
|
configPath,
|
|
148
183
|
recipesDir,
|
|
@@ -150,6 +185,7 @@ export async function runPatchworkInit(argv, opts = {}) {
|
|
|
150
185
|
recipesSkipped,
|
|
151
186
|
ollamaDetected,
|
|
152
187
|
configAction,
|
|
188
|
+
preToolUseHook,
|
|
153
189
|
};
|
|
154
190
|
}
|
|
155
191
|
//# sourceMappingURL=patchworkInit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patchworkInit.js","sourceRoot":"","sources":["../../src/commands/patchworkInit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,UAAU,EAEV,UAAU,GACX,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"patchworkInit.js","sourceRoot":"","sources":["../../src/commands/patchworkInit.ts"],"names":[],"mappings":"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"}
|
|
@@ -128,6 +128,20 @@ export interface RecipeDryRunPlanStep {
|
|
|
128
128
|
isConnector?: boolean;
|
|
129
129
|
/** True if the tool id is known to the registry (false → unresolved at plan time). */
|
|
130
130
|
resolved?: boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Nested-recipe reference for `step.type === "recipe"` (chained recipes
|
|
133
|
+
* with `recipe:` or `chain:` field). Bare name (e.g. `branch-health`) or
|
|
134
|
+
* relative/absolute path. F-07 fix: this is now part of the plan-step
|
|
135
|
+
* shape so write-detection can recurse into nested recipes.
|
|
136
|
+
*/
|
|
137
|
+
recipe?: string;
|
|
138
|
+
/**
|
|
139
|
+
* F-07 fix: when this step is a nested recipe and its writes were
|
|
140
|
+
* detected via recursion, this is the count of write-tagged tool steps
|
|
141
|
+
* inside the nested recipe (transitively). 0 if the recurse depth was
|
|
142
|
+
* hit before any writes were found, undefined for non-recipe steps.
|
|
143
|
+
*/
|
|
144
|
+
nestedWriteCount?: number;
|
|
131
145
|
}
|
|
132
146
|
export interface RecipeDryRunPlan {
|
|
133
147
|
/** Stable schema version for consumers. */
|
|
@@ -213,6 +227,12 @@ export interface PreflightWatchOptions extends PreflightOptions {
|
|
|
213
227
|
* at most one rerun is queued (matches runWatch semantics).
|
|
214
228
|
*/
|
|
215
229
|
export declare function runPreflightWatch(options: PreflightWatchOptions): () => void;
|
|
230
|
+
/**
|
|
231
|
+
* Exported for the cli-warns-when-out-of-jail.test regression suite —
|
|
232
|
+
* the warn path is what we assert on, not the path-resolution behaviour.
|
|
233
|
+
* Internal callers should keep using the local symbol.
|
|
234
|
+
*/
|
|
235
|
+
export declare function resolveRecipeRefForCli(recipeRef: string): string;
|
|
216
236
|
export interface RecipeTestResult {
|
|
217
237
|
valid: boolean;
|
|
218
238
|
issues: LintIssue[];
|
package/dist/commands/recipe.js
CHANGED
|
@@ -12,6 +12,7 @@ import "../recipes/tools/index.js";
|
|
|
12
12
|
import { loadFixtureLibrary } from "../connectors/fixtureLibrary.js";
|
|
13
13
|
import { MockConnector } from "../connectors/mockConnector.js";
|
|
14
14
|
import { defaultDeprecationWarn, normalizeRecipeForRuntime, } from "../recipes/legacyRecipeCompat.js";
|
|
15
|
+
import { tryResolveRecipePath } from "../recipes/resolveRecipePath.js";
|
|
15
16
|
import { generateSchemaSet, writeSchemas } from "../recipes/schemaGenerator.js";
|
|
16
17
|
import { getTool, isConnectorNamespace, seedToolOutputPreviewContext, } from "../recipes/toolRegistry.js";
|
|
17
18
|
import { validateRecipeDefinition, } from "../recipes/validation.js";
|
|
@@ -557,12 +558,177 @@ function summarizePlanSteps(steps) {
|
|
|
557
558
|
connectors.add(step.namespace);
|
|
558
559
|
if (step.isWrite)
|
|
559
560
|
hasWrite = true;
|
|
561
|
+
// F-07 fix: nested-recipe writes detected via recursion count too.
|
|
562
|
+
if (step.nestedWriteCount && step.nestedWriteCount > 0)
|
|
563
|
+
hasWrite = true;
|
|
560
564
|
}
|
|
561
565
|
return {
|
|
562
566
|
connectorNamespaces: [...connectors].sort(),
|
|
563
567
|
hasWriteSteps: hasWrite,
|
|
564
568
|
};
|
|
565
569
|
}
|
|
570
|
+
/**
|
|
571
|
+
* F-07 fix: hard cap on nested-recipe recursion depth used by the dry-plan
|
|
572
|
+
* write detector. The chained recipe schema's `maxDepth` (default 3) is the
|
|
573
|
+
* runtime cap; the dry-plan applies `min(recipe.maxDepth ?? 3, MAX_DEPTH)`
|
|
574
|
+
* so a malicious or buggy recipe can't make the planner walk an unbounded
|
|
575
|
+
* tree. Per PLAN-MASTER-V2.md (R2-H1), 5 is the hard cap.
|
|
576
|
+
*/
|
|
577
|
+
const F07_MAX_NESTED_DEPTH = 5;
|
|
578
|
+
/**
|
|
579
|
+
* F-07 fix: resolve a nested-recipe reference (bare name or path-shape)
|
|
580
|
+
* to an absolute file path the dry-plan can load synchronously. Mirrors
|
|
581
|
+
* the resolution logic in `yamlRunner.ts`'s async `loadNestedRecipe` but
|
|
582
|
+
* keeps to the synchronous subset (no symlink walks, no async I/O) since
|
|
583
|
+
* the dry-plan is itself synchronous after the chained-runner import.
|
|
584
|
+
*
|
|
585
|
+
* Returns null if the candidate cannot be resolved within the allowed
|
|
586
|
+
* roots — the recursion treats null as "unknown writes" (omits the
|
|
587
|
+
* `nestedWriteCount` field) so a missing reference does not falsely mark
|
|
588
|
+
* the parent as `hasWriteSteps:false` when it might write.
|
|
589
|
+
*
|
|
590
|
+
* Allowed roots:
|
|
591
|
+
* - parent recipe's directory (for relative `recipe: ./inner.yaml`)
|
|
592
|
+
* - `~/.patchwork/recipes/` (for bare `recipe: branch-health`)
|
|
593
|
+
*
|
|
594
|
+
* The bundled-templates dir is intentionally NOT searched here — bundled
|
|
595
|
+
* templates are vendor-controlled, the dry-plan recursion is for user
|
|
596
|
+
* recipes that may legitimately reference user-installed sub-recipes.
|
|
597
|
+
*/
|
|
598
|
+
function resolveNestedRecipeForDryPlan(ref, parentRecipePath) {
|
|
599
|
+
if (typeof ref !== "string" || ref.length === 0)
|
|
600
|
+
return null;
|
|
601
|
+
if (ref.includes("\x00"))
|
|
602
|
+
return null;
|
|
603
|
+
// node:path / node:os / node:fs are imported at the top of this file
|
|
604
|
+
// (see resolve, dirname, join above). statSync is not currently in scope
|
|
605
|
+
// so we re-pull from the already-imported namespace via the bare module
|
|
606
|
+
// — TS resolves this through the same package that `import os from "node:os"`
|
|
607
|
+
// uses. No dynamic require: this stays synchronous and ESM-friendly.
|
|
608
|
+
const parentDir = dirname(parentRecipePath);
|
|
609
|
+
const userRecipesDir = join(os.homedir(), ".patchwork", "recipes");
|
|
610
|
+
const pathLike = /^([./]|\.\.[/\\]|[A-Za-z]:[/\\])/.test(ref) ||
|
|
611
|
+
/[\\/]/.test(ref) ||
|
|
612
|
+
/\.ya?ml$/i.test(ref);
|
|
613
|
+
const candidates = [];
|
|
614
|
+
if (pathLike) {
|
|
615
|
+
const base = /^([./]|[A-Za-z]:[/\\])/.test(ref)
|
|
616
|
+
? resolve(parentDir, ref)
|
|
617
|
+
: resolve(ref);
|
|
618
|
+
// resolve() already absolutized; if it was already absolute we re-resolve.
|
|
619
|
+
const absolute = resolve(base);
|
|
620
|
+
if (/\.ya?ml$/i.test(absolute)) {
|
|
621
|
+
candidates.push(absolute);
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
candidates.push(`${absolute}.yaml`, `${absolute}.yml`, absolute);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
candidates.push(join(userRecipesDir, `${ref}.yaml`), join(userRecipesDir, `${ref}.yml`));
|
|
629
|
+
}
|
|
630
|
+
const allowedRoots = [parentDir, userRecipesDir];
|
|
631
|
+
const isInside = (file, root) => {
|
|
632
|
+
const rf = resolve(file);
|
|
633
|
+
const rr = resolve(root);
|
|
634
|
+
return rf === rr || rf.startsWith(`${rr}/`) || rf.startsWith(`${rr}\\`);
|
|
635
|
+
};
|
|
636
|
+
for (const candidate of candidates) {
|
|
637
|
+
const inJail = allowedRoots.some((root) => isInside(candidate, root));
|
|
638
|
+
if (!inJail)
|
|
639
|
+
continue;
|
|
640
|
+
try {
|
|
641
|
+
if (existsSync(candidate)) {
|
|
642
|
+
const st = statSync(candidate);
|
|
643
|
+
if (st.isFile())
|
|
644
|
+
return candidate;
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
catch {
|
|
648
|
+
/* not found; try next */
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
return null;
|
|
652
|
+
}
|
|
653
|
+
/**
|
|
654
|
+
* F-07 fix: recursively resolve nested-recipe steps in a chained dry-plan
|
|
655
|
+
* to detect writes. Mutates `steps` in place to set `nestedWriteCount` for
|
|
656
|
+
* any `type === "recipe"` step whose nested recipe could be loaded.
|
|
657
|
+
*
|
|
658
|
+
* Visited set prevents cycles (A → B → A) from looping; cycles count as
|
|
659
|
+
* 0 writes for the cycle edge so the parent's existing writes still
|
|
660
|
+
* dominate. Depth cap is `min(recipe.maxDepth ?? 3, F07_MAX_NESTED_DEPTH)`.
|
|
661
|
+
*/
|
|
662
|
+
async function detectNestedRecipeWritesInPlan(steps, parentRecipePath, recipeMaxDepth, visited = new Set(), depth = 0) {
|
|
663
|
+
const cap = Math.min(recipeMaxDepth, F07_MAX_NESTED_DEPTH);
|
|
664
|
+
if (depth >= cap)
|
|
665
|
+
return;
|
|
666
|
+
for (const step of steps) {
|
|
667
|
+
if (step.type !== "recipe" || !step.recipe)
|
|
668
|
+
continue;
|
|
669
|
+
const nestedPath = resolveNestedRecipeForDryPlan(step.recipe, parentRecipePath);
|
|
670
|
+
if (!nestedPath)
|
|
671
|
+
continue;
|
|
672
|
+
if (visited.has(nestedPath)) {
|
|
673
|
+
// Cycle — count as 0 writes for this edge to break the loop.
|
|
674
|
+
step.nestedWriteCount = 0;
|
|
675
|
+
continue;
|
|
676
|
+
}
|
|
677
|
+
let nestedRecipe;
|
|
678
|
+
try {
|
|
679
|
+
nestedRecipe = loadYamlRecipe(nestedPath);
|
|
680
|
+
}
|
|
681
|
+
catch {
|
|
682
|
+
// Unparseable / unreadable nested recipe → treat as unknown writes
|
|
683
|
+
// (omit nestedWriteCount). Don't fail the whole dry-plan over a
|
|
684
|
+
// single broken sub-recipe.
|
|
685
|
+
continue;
|
|
686
|
+
}
|
|
687
|
+
const nextVisited = new Set(visited);
|
|
688
|
+
nextVisited.add(nestedPath);
|
|
689
|
+
// Build dry-run steps for the nested recipe and recurse.
|
|
690
|
+
const nestedTriggerType = nestedRecipe.trigger?.type;
|
|
691
|
+
let nestedSteps;
|
|
692
|
+
let nestedMaxDepth = recipeMaxDepth;
|
|
693
|
+
if (nestedTriggerType === "chained") {
|
|
694
|
+
const { generateExecutionPlan } = await import("../recipes/chainedRunner.js");
|
|
695
|
+
const plan = generateExecutionPlan(nestedRecipe);
|
|
696
|
+
nestedMaxDepth = plan.maxDepth;
|
|
697
|
+
nestedSteps = plan.steps.map((s) => {
|
|
698
|
+
const base = { id: s.id, type: s.type };
|
|
699
|
+
if (s.tool !== undefined)
|
|
700
|
+
base.tool = s.tool;
|
|
701
|
+
if (s.into !== undefined)
|
|
702
|
+
base.into = s.into;
|
|
703
|
+
if (s.recipe !== undefined)
|
|
704
|
+
base.recipe = s.recipe;
|
|
705
|
+
if (s.optional !== undefined)
|
|
706
|
+
base.optional = s.optional;
|
|
707
|
+
if (s.dependencies)
|
|
708
|
+
base.dependencies = s.dependencies;
|
|
709
|
+
if (s.condition !== undefined)
|
|
710
|
+
base.condition = s.condition;
|
|
711
|
+
if (s.risk !== undefined)
|
|
712
|
+
base.risk = s.risk;
|
|
713
|
+
return enrichStepFromRegistry(base);
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
else {
|
|
717
|
+
nestedSteps = buildSimpleRecipeDryRunSteps(nestedRecipe, {}).map(enrichStepFromRegistry);
|
|
718
|
+
}
|
|
719
|
+
// Recurse before counting so deeper nested writes propagate up.
|
|
720
|
+
await detectNestedRecipeWritesInPlan(nestedSteps, nestedPath, nestedMaxDepth, nextVisited, depth + 1);
|
|
721
|
+
let count = 0;
|
|
722
|
+
for (const ns of nestedSteps) {
|
|
723
|
+
if (ns.isWrite)
|
|
724
|
+
count += 1;
|
|
725
|
+
if (ns.nestedWriteCount && ns.nestedWriteCount > 0) {
|
|
726
|
+
count += ns.nestedWriteCount;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
step.nestedWriteCount = count;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
566
732
|
export async function runRecipeDryPlan(recipeRef, options = {}) {
|
|
567
733
|
const recipePath = resolveRecipePath(recipeRef);
|
|
568
734
|
const recipe = loadYamlRecipe(recipePath);
|
|
@@ -597,13 +763,20 @@ export async function runRecipeDryPlan(recipeRef, options = {}) {
|
|
|
597
763
|
base.condition = step.condition;
|
|
598
764
|
if (step.risk !== undefined)
|
|
599
765
|
base.risk = step.risk;
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
766
|
+
// F-07 fix: read tool/into/recipe directly from the now-typed plan
|
|
767
|
+
// step instead of casting through `unknown`.
|
|
768
|
+
if (step.tool !== undefined)
|
|
769
|
+
base.tool = step.tool;
|
|
770
|
+
if (step.into !== undefined)
|
|
771
|
+
base.into = step.into;
|
|
772
|
+
if (step.recipe !== undefined)
|
|
773
|
+
base.recipe = step.recipe;
|
|
605
774
|
return enrichStepFromRegistry(base);
|
|
606
775
|
});
|
|
776
|
+
// F-07 fix: recurse into nested-recipe steps to detect writes the
|
|
777
|
+
// top-level enrichment cannot see. Without this, any chained recipe
|
|
778
|
+
// whose only writes live in a sub-recipe reports `hasWriteSteps:false`.
|
|
779
|
+
await detectNestedRecipeWritesInPlan(steps, recipePath, plan.maxDepth);
|
|
607
780
|
return {
|
|
608
781
|
schemaVersion: DRY_RUN_PLAN_SCHEMA_VERSION,
|
|
609
782
|
generatedAt,
|
|
@@ -714,9 +887,25 @@ export function runPreflightWatch(options) {
|
|
|
714
887
|
};
|
|
715
888
|
return runWatch(watchOptions);
|
|
716
889
|
}
|
|
890
|
+
/**
|
|
891
|
+
* Exported for the cli-warns-when-out-of-jail.test regression suite —
|
|
892
|
+
* the warn path is what we assert on, not the path-resolution behaviour.
|
|
893
|
+
* Internal callers should keep using the local symbol.
|
|
894
|
+
*/
|
|
895
|
+
export function resolveRecipeRefForCli(recipeRef) {
|
|
896
|
+
return resolveRecipePath(recipeRef);
|
|
897
|
+
}
|
|
717
898
|
function resolveRecipePath(recipeRef) {
|
|
718
899
|
const directPath = resolve(recipeRef);
|
|
719
900
|
if (existsSync(directPath) && statSync(directPath).isFile()) {
|
|
901
|
+
// F-10 CLI warn: a recipe file outside the recipe jail (e.g. a YAML
|
|
902
|
+
// dragged in from /tmp) still loads — but emit a stderr notice so the
|
|
903
|
+
// user knows they're loading a recipe whose tool dispatches will hit
|
|
904
|
+
// the jail check at runtime. The jail roots default to ~/.patchwork +
|
|
905
|
+
// CWD; /tmp is opt-in via CLAUDE_IDE_BRIDGE_RECIPE_TMP_JAIL=1.
|
|
906
|
+
if (tryResolveRecipePath(directPath) === null) {
|
|
907
|
+
console.warn(`warning: recipe file "${directPath}" lives outside the recipe jail (~/.patchwork, workspace). Tool dispatches that touch the filesystem will be rejected unless the path is inside the jail. Set CLAUDE_IDE_BRIDGE_RECIPE_TMP_JAIL=1 to opt /tmp into the jail.`);
|
|
908
|
+
}
|
|
720
909
|
return directPath;
|
|
721
910
|
}
|
|
722
911
|
const bundledDir = fileURLToPath(new URL("../../templates/recipes", import.meta.url));
|