patchwork-os 0.2.0-alpha.3 → 0.2.0-alpha.31
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.bridge.md +6 -0
- package/README.md +40 -15
- package/deploy/bootstrap-vps.sh +184 -0
- package/deploy/deploy-dashboard.sh +174 -0
- package/deploy/deploy-landing.sh +79 -0
- package/dist/activationMetrics.d.ts +67 -0
- package/dist/activationMetrics.js +255 -0
- package/dist/activationMetrics.js.map +1 -0
- package/dist/approvalHttp.d.ts +24 -2
- package/dist/approvalHttp.js +150 -10
- package/dist/approvalHttp.js.map +1 -1
- package/dist/approvalQueue.d.ts +16 -1
- package/dist/approvalQueue.js +44 -3
- package/dist/approvalQueue.js.map +1 -1
- package/dist/automation.d.ts +20 -0
- package/dist/automation.js +54 -1
- package/dist/automation.js.map +1 -1
- package/dist/bridge.d.ts +2 -0
- package/dist/bridge.js +55 -130
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeToken.js +57 -19
- package/dist/bridgeToken.js.map +1 -1
- package/dist/ccPermissions.js +6 -4
- package/dist/ccPermissions.js.map +1 -1
- package/dist/claudeOrchestrator.d.ts +1 -1
- package/dist/claudeOrchestrator.js +14 -8
- package/dist/claudeOrchestrator.js.map +1 -1
- package/dist/commands/launchd.d.ts +2 -0
- package/dist/commands/launchd.js +94 -0
- package/dist/commands/launchd.js.map +1 -0
- package/dist/commands/recipe.d.ts +258 -0
- package/dist/commands/recipe.js +1130 -0
- package/dist/commands/recipe.js.map +1 -0
- package/dist/commands/recipeInstall.d.ts +72 -0
- package/dist/commands/recipeInstall.js +339 -0
- package/dist/commands/recipeInstall.js.map +1 -0
- package/dist/config.d.ts +14 -1
- package/dist/config.js +99 -8
- package/dist/config.js.map +1 -1
- package/dist/connectors/baseConnector.d.ts +117 -0
- package/dist/connectors/baseConnector.js +213 -0
- package/dist/connectors/baseConnector.js.map +1 -0
- package/dist/connectors/confluence.d.ts +111 -0
- package/dist/connectors/confluence.js +406 -0
- package/dist/connectors/confluence.js.map +1 -0
- package/dist/connectors/datadog.d.ts +116 -0
- package/dist/connectors/datadog.js +385 -0
- package/dist/connectors/datadog.js.map +1 -0
- package/dist/connectors/fixtureLibrary.d.ts +21 -0
- package/dist/connectors/fixtureLibrary.js +70 -0
- package/dist/connectors/fixtureLibrary.js.map +1 -0
- package/dist/connectors/fixtureRecorder.d.ts +1 -0
- package/dist/connectors/fixtureRecorder.js +35 -0
- package/dist/connectors/fixtureRecorder.js.map +1 -0
- package/dist/connectors/github.d.ts +58 -8
- package/dist/connectors/github.js +312 -84
- package/dist/connectors/github.js.map +1 -1
- package/dist/connectors/gmail.d.ts +4 -1
- package/dist/connectors/gmail.js +79 -16
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleCalendar.d.ts +60 -0
- package/dist/connectors/googleCalendar.js +345 -0
- package/dist/connectors/googleCalendar.js.map +1 -0
- package/dist/connectors/hubspot.d.ts +112 -0
- package/dist/connectors/hubspot.js +408 -0
- package/dist/connectors/hubspot.js.map +1 -0
- package/dist/connectors/intercom.d.ts +102 -0
- package/dist/connectors/intercom.js +402 -0
- package/dist/connectors/intercom.js.map +1 -0
- package/dist/connectors/jira.d.ts +98 -0
- package/dist/connectors/jira.js +379 -0
- package/dist/connectors/jira.js.map +1 -0
- package/dist/connectors/linear.d.ts +69 -19
- package/dist/connectors/linear.js +170 -129
- package/dist/connectors/linear.js.map +1 -1
- package/dist/connectors/mcpClient.d.ts +56 -0
- package/dist/connectors/mcpClient.js +189 -0
- package/dist/connectors/mcpClient.js.map +1 -0
- package/dist/connectors/mcpOAuth.d.ts +84 -0
- package/dist/connectors/mcpOAuth.js +389 -0
- package/dist/connectors/mcpOAuth.js.map +1 -0
- package/dist/connectors/mockConnector.d.ts +28 -0
- package/dist/connectors/mockConnector.js +81 -0
- package/dist/connectors/mockConnector.js.map +1 -0
- package/dist/connectors/notion.d.ts +143 -0
- package/dist/connectors/notion.js +424 -0
- package/dist/connectors/notion.js.map +1 -0
- package/dist/connectors/sentry.d.ts +17 -21
- package/dist/connectors/sentry.js +115 -131
- package/dist/connectors/sentry.js.map +1 -1
- package/dist/connectors/slack.d.ts +50 -0
- package/dist/connectors/slack.js +324 -0
- package/dist/connectors/slack.js.map +1 -0
- package/dist/connectors/stripe.d.ts +116 -0
- package/dist/connectors/stripe.js +379 -0
- package/dist/connectors/stripe.js.map +1 -0
- package/dist/connectors/tokenStorage.d.ts +35 -0
- package/dist/connectors/tokenStorage.js +459 -0
- package/dist/connectors/tokenStorage.js.map +1 -0
- package/dist/connectors/zendesk.d.ts +104 -0
- package/dist/connectors/zendesk.js +424 -0
- package/dist/connectors/zendesk.js.map +1 -0
- package/dist/drivers/gemini/index.d.ts +5 -1
- package/dist/drivers/gemini/index.js +39 -5
- package/dist/drivers/gemini/index.js.map +1 -1
- package/dist/drivers/index.d.ts +5 -0
- package/dist/drivers/index.js +1 -1
- package/dist/drivers/index.js.map +1 -1
- package/dist/featureFlags.d.ts +73 -0
- package/dist/featureFlags.js +203 -0
- package/dist/featureFlags.js.map +1 -0
- package/dist/fp/automationInterpreter.js +1 -0
- package/dist/fp/automationInterpreter.js.map +1 -1
- package/dist/fp/automationProgram.d.ts +1 -1
- package/dist/fp/automationProgram.js.map +1 -1
- package/dist/fp/policyParser.js +17 -0
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/index.js +621 -61
- package/dist/index.js.map +1 -1
- package/dist/installGuard.d.ts +25 -0
- package/dist/installGuard.js +48 -0
- package/dist/installGuard.js.map +1 -0
- package/dist/oauth.d.ts +4 -1
- package/dist/oauth.js +50 -14
- package/dist/oauth.js.map +1 -1
- package/dist/patchworkConfig.d.ts +9 -0
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +53 -0
- package/dist/recipeOrchestration.js +272 -0
- package/dist/recipeOrchestration.js.map +1 -0
- package/dist/recipes/RecipeOrchestrator.d.ts +40 -0
- package/dist/recipes/RecipeOrchestrator.js +51 -0
- package/dist/recipes/RecipeOrchestrator.js.map +1 -0
- package/dist/recipes/agentExecutor.d.ts +28 -0
- package/dist/recipes/agentExecutor.js +42 -0
- package/dist/recipes/agentExecutor.js.map +1 -0
- package/dist/recipes/chainedRunner.d.ts +140 -0
- package/dist/recipes/chainedRunner.js +539 -0
- package/dist/recipes/chainedRunner.js.map +1 -0
- package/dist/recipes/dependencyGraph.d.ts +39 -0
- package/dist/recipes/dependencyGraph.js +199 -0
- package/dist/recipes/dependencyGraph.js.map +1 -0
- package/dist/recipes/legacyRecipeCompat.d.ts +2 -0
- package/dist/recipes/legacyRecipeCompat.js +112 -0
- package/dist/recipes/legacyRecipeCompat.js.map +1 -0
- package/dist/recipes/manifest.d.ts +47 -0
- package/dist/recipes/manifest.js +141 -0
- package/dist/recipes/manifest.js.map +1 -0
- package/dist/recipes/nestedRecipeStep.d.ts +58 -0
- package/dist/recipes/nestedRecipeStep.js +95 -0
- package/dist/recipes/nestedRecipeStep.js.map +1 -0
- package/dist/recipes/outputRegistry.d.ts +28 -0
- package/dist/recipes/outputRegistry.js +52 -0
- package/dist/recipes/outputRegistry.js.map +1 -0
- package/dist/recipes/scheduler.d.ts +23 -7
- package/dist/recipes/scheduler.js +131 -41
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schema.d.ts +17 -2
- package/dist/recipes/schemaGenerator.d.ts +28 -0
- package/dist/recipes/schemaGenerator.js +565 -0
- package/dist/recipes/schemaGenerator.js.map +1 -0
- package/dist/recipes/templateEngine.d.ts +62 -0
- package/dist/recipes/templateEngine.js +182 -0
- package/dist/recipes/templateEngine.js.map +1 -0
- package/dist/recipes/toolRegistry.d.ts +181 -0
- package/dist/recipes/toolRegistry.js +300 -0
- package/dist/recipes/toolRegistry.js.map +1 -0
- package/dist/recipes/tools/calendar.d.ts +6 -0
- package/dist/recipes/tools/calendar.js +61 -0
- package/dist/recipes/tools/calendar.js.map +1 -0
- package/dist/recipes/tools/confluence.d.ts +6 -0
- package/dist/recipes/tools/confluence.js +254 -0
- package/dist/recipes/tools/confluence.js.map +1 -0
- package/dist/recipes/tools/datadog.d.ts +6 -0
- package/dist/recipes/tools/datadog.js +239 -0
- package/dist/recipes/tools/datadog.js.map +1 -0
- package/dist/recipes/tools/diagnostics.d.ts +6 -0
- package/dist/recipes/tools/diagnostics.js +36 -0
- package/dist/recipes/tools/diagnostics.js.map +1 -0
- package/dist/recipes/tools/file.d.ts +6 -0
- package/dist/recipes/tools/file.js +170 -0
- package/dist/recipes/tools/file.js.map +1 -0
- package/dist/recipes/tools/git.d.ts +6 -0
- package/dist/recipes/tools/git.js +63 -0
- package/dist/recipes/tools/git.js.map +1 -0
- package/dist/recipes/tools/github.d.ts +6 -0
- package/dist/recipes/tools/github.js +91 -0
- package/dist/recipes/tools/github.js.map +1 -0
- package/dist/recipes/tools/gmail.d.ts +6 -0
- package/dist/recipes/tools/gmail.js +210 -0
- package/dist/recipes/tools/gmail.js.map +1 -0
- package/dist/recipes/tools/hubspot.d.ts +6 -0
- package/dist/recipes/tools/hubspot.js +232 -0
- package/dist/recipes/tools/hubspot.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +22 -0
- package/dist/recipes/tools/index.js +25 -0
- package/dist/recipes/tools/index.js.map +1 -0
- package/dist/recipes/tools/intercom.d.ts +6 -0
- package/dist/recipes/tools/intercom.js +226 -0
- package/dist/recipes/tools/intercom.js.map +1 -0
- package/dist/recipes/tools/linear.d.ts +6 -0
- package/dist/recipes/tools/linear.js +83 -0
- package/dist/recipes/tools/linear.js.map +1 -0
- package/dist/recipes/tools/notion.d.ts +6 -0
- package/dist/recipes/tools/notion.js +278 -0
- package/dist/recipes/tools/notion.js.map +1 -0
- package/dist/recipes/tools/slack.d.ts +6 -0
- package/dist/recipes/tools/slack.js +72 -0
- package/dist/recipes/tools/slack.js.map +1 -0
- package/dist/recipes/tools/stripe.d.ts +6 -0
- package/dist/recipes/tools/stripe.js +265 -0
- package/dist/recipes/tools/stripe.js.map +1 -0
- package/dist/recipes/tools/zendesk.d.ts +6 -0
- package/dist/recipes/tools/zendesk.js +245 -0
- package/dist/recipes/tools/zendesk.js.map +1 -0
- package/dist/recipes/validation.d.ts +13 -0
- package/dist/recipes/validation.js +433 -0
- package/dist/recipes/validation.js.map +1 -0
- package/dist/recipes/yamlRunner.d.ts +87 -0
- package/dist/recipes/yamlRunner.js +693 -409
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +34 -6
- package/dist/recipesHttp.js +285 -15
- package/dist/recipesHttp.js.map +1 -1
- package/dist/riskTier.js +1 -0
- package/dist/riskTier.js.map +1 -1
- package/dist/runLog.d.ts +23 -0
- package/dist/runLog.js +56 -1
- 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 +32 -1
- package/dist/server.js +980 -97
- package/dist/server.js.map +1 -1
- package/dist/streamableHttp.js +2 -0
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/addLinearComment.d.ts +55 -0
- package/dist/tools/addLinearComment.js +72 -0
- package/dist/tools/addLinearComment.js.map +1 -0
- package/dist/tools/bridgeDoctor.js +2 -2
- package/dist/tools/bridgeDoctor.js.map +1 -1
- package/dist/tools/createLinearIssue.d.ts +84 -0
- package/dist/tools/createLinearIssue.js +146 -0
- package/dist/tools/createLinearIssue.js.map +1 -0
- package/dist/tools/fetchCalendarEvents.d.ts +94 -0
- package/dist/tools/fetchCalendarEvents.js +97 -0
- package/dist/tools/fetchCalendarEvents.js.map +1 -0
- package/dist/tools/fetchGithubIssue.d.ts +80 -0
- package/dist/tools/fetchGithubIssue.js +84 -0
- package/dist/tools/fetchGithubIssue.js.map +1 -0
- package/dist/tools/fetchGithubPR.d.ts +89 -0
- package/dist/tools/fetchGithubPR.js +96 -0
- package/dist/tools/fetchGithubPR.js.map +1 -0
- package/dist/tools/fetchSlackProfile.d.ts +43 -0
- package/dist/tools/fetchSlackProfile.js +46 -0
- package/dist/tools/fetchSlackProfile.js.map +1 -0
- package/dist/tools/getConnectorStatus.d.ts +58 -0
- package/dist/tools/getConnectorStatus.js +56 -0
- package/dist/tools/getConnectorStatus.js.map +1 -0
- package/dist/tools/github/actions.js +4 -2
- package/dist/tools/github/actions.js.map +1 -1
- package/dist/tools/github/composite.d.ts +339 -0
- package/dist/tools/github/composite.js +343 -0
- package/dist/tools/github/composite.js.map +1 -0
- package/dist/tools/github/index.d.ts +2 -1
- package/dist/tools/github/index.js +2 -1
- package/dist/tools/github/index.js.map +1 -1
- package/dist/tools/github/issues.js +8 -4
- package/dist/tools/github/issues.js.map +1 -1
- package/dist/tools/github/pr.d.ts +122 -0
- package/dist/tools/github/pr.js +195 -5
- package/dist/tools/github/pr.js.map +1 -1
- package/dist/tools/index.js +32 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/searchTools.js +1 -1
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/tools/slackListChannels.d.ts +65 -0
- package/dist/tools/slackListChannels.js +70 -0
- package/dist/tools/slackListChannels.js.map +1 -0
- package/dist/tools/slackPostMessage.d.ts +57 -0
- package/dist/tools/slackPostMessage.js +77 -0
- package/dist/tools/slackPostMessage.js.map +1 -0
- package/dist/tools/testTraceToSource.js +2 -2
- package/dist/tools/testTraceToSource.js.map +1 -1
- package/dist/tools/updateLinearIssue.d.ts +89 -0
- package/dist/tools/updateLinearIssue.js +117 -0
- package/dist/tools/updateLinearIssue.js.map +1 -0
- package/dist/transport.d.ts +7 -1
- package/dist/transport.js +85 -11
- package/dist/transport.js.map +1 -1
- package/package.json +5 -2
- package/scripts/start-all.sh +56 -19
- package/templates/automation-policies/recipe-authoring.json +25 -0
- package/templates/automation-policy.example.json +6 -0
- package/templates/co.patchwork-os.bridge.plist +34 -0
- package/templates/recipes/ctx-loop-test.yaml +75 -0
- package/templates/recipes/lint-on-save.yaml +1 -2
- package/templates/recipes/morning-brief-slack.yaml +57 -0
- package/templates/recipes/morning-brief.yaml +14 -6
- package/templates/recipes/project-health-check.yaml +50 -0
- package/templates/recipes/sentry-to-linear.yaml +77 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified agent dispatch. Superset of both:
|
|
3
|
+
* - runYamlRecipe agent block (yamlRunner.ts:378-475)
|
|
4
|
+
* - chainedRunner.executeAgent (yamlRunner.ts:1030-1058)
|
|
5
|
+
*
|
|
6
|
+
* Drift fix: chainedRunner was missing driver:"local" and pwCfg.model==="local".
|
|
7
|
+
* CHANGELOG: chained users with model:local in ~/.patchwork/config now route to
|
|
8
|
+
* localFn (Ollama/LM Studio) instead of Anthropic API — opt-in behaviour change.
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_MODEL = "claude-haiku-4-5-20251001";
|
|
11
|
+
export async function executeAgent(input, deps) {
|
|
12
|
+
const { prompt, driver, model } = input;
|
|
13
|
+
if (driver === "anthropic" || driver === "claude") {
|
|
14
|
+
return deps.anthropicFn(prompt, model ?? DEFAULT_MODEL);
|
|
15
|
+
}
|
|
16
|
+
if (driver === "openai" || driver === "grok" || driver === "gemini") {
|
|
17
|
+
return deps.providerDriverFn(driver, prompt, model);
|
|
18
|
+
}
|
|
19
|
+
if (driver === "subprocess" || driver === "claude-code") {
|
|
20
|
+
return deps.claudeCliFn(prompt);
|
|
21
|
+
}
|
|
22
|
+
if (driver === "local") {
|
|
23
|
+
return deps.localFn(prompt, model ?? DEFAULT_MODEL);
|
|
24
|
+
}
|
|
25
|
+
if (driver !== undefined) {
|
|
26
|
+
throw new Error(`Unknown driver: "${driver}"`);
|
|
27
|
+
}
|
|
28
|
+
// No driver — check pwCfg for local model preference (THE MISSING BRANCH).
|
|
29
|
+
const pwCfg = deps.loadPatchworkConfig();
|
|
30
|
+
if (pwCfg.model === "local") {
|
|
31
|
+
return deps.localFn(prompt, model ?? DEFAULT_MODEL);
|
|
32
|
+
}
|
|
33
|
+
// Auto-detect: prefer API key, otherwise probe for claude CLI.
|
|
34
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
35
|
+
return deps.anthropicFn(prompt, model ?? DEFAULT_MODEL);
|
|
36
|
+
}
|
|
37
|
+
if (deps.probeClaudeCli()) {
|
|
38
|
+
return deps.claudeCliFn(prompt);
|
|
39
|
+
}
|
|
40
|
+
return deps.anthropicFn(prompt, model ?? DEFAULT_MODEL);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=agentExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentExecutor.js","sourceRoot":"","sources":["../../src/recipes/agentExecutor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwBH,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAyB,EACzB,IAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAExC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,aAAa,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,aAAa,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,2EAA2E;IAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACzC,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,aAAa,CAAC,CAAC;IACtD,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,aAAa,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,aAAa,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChainedRecipeRunner — executes recipes with:
|
|
3
|
+
* - Parallel step execution (respecting dependencies)
|
|
4
|
+
* - Template-based variable resolution
|
|
5
|
+
* - Nested recipe calls
|
|
6
|
+
* - Conditional step execution (when)
|
|
7
|
+
* - Dry-run mode
|
|
8
|
+
*/
|
|
9
|
+
import type { NestedRecipeConfig } from "./nestedRecipeStep.js";
|
|
10
|
+
import type { OutputRegistry } from "./outputRegistry.js";
|
|
11
|
+
import type { ErrorPolicy } from "./schema.js";
|
|
12
|
+
import type { TemplateContext, TemplateError } from "./templateEngine.js";
|
|
13
|
+
export interface ChainedStep {
|
|
14
|
+
id: string;
|
|
15
|
+
tool?: string;
|
|
16
|
+
agent?: {
|
|
17
|
+
prompt: string;
|
|
18
|
+
model?: string;
|
|
19
|
+
driver?: string;
|
|
20
|
+
};
|
|
21
|
+
recipe?: NestedRecipeConfig["recipe"];
|
|
22
|
+
chain?: NestedRecipeConfig["recipe"];
|
|
23
|
+
/** Sugar: run these steps concurrently. Expanded to flat steps at runtime. */
|
|
24
|
+
parallel?: ChainedStep[];
|
|
25
|
+
vars?: Record<string, string>;
|
|
26
|
+
awaits?: string[];
|
|
27
|
+
when?: string;
|
|
28
|
+
output?: string;
|
|
29
|
+
risk?: "low" | "medium" | "high";
|
|
30
|
+
optional?: boolean;
|
|
31
|
+
/** Retry count for this step on failure (overrides recipe-level on_error.retry). */
|
|
32
|
+
retry?: number;
|
|
33
|
+
/** Delay in ms between retries (default 1000). */
|
|
34
|
+
retryDelay?: number;
|
|
35
|
+
transform?: string;
|
|
36
|
+
[key: string]: unknown;
|
|
37
|
+
}
|
|
38
|
+
export interface ChainedRecipe {
|
|
39
|
+
name: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
steps: ChainedStep[];
|
|
42
|
+
maxConcurrency?: number;
|
|
43
|
+
maxDepth?: number;
|
|
44
|
+
/** Plugin specs (npm package name or local path) to load before running steps. */
|
|
45
|
+
servers?: string[];
|
|
46
|
+
on_error?: ErrorPolicy;
|
|
47
|
+
}
|
|
48
|
+
export interface RunOptions {
|
|
49
|
+
env: Record<string, string | undefined>;
|
|
50
|
+
maxConcurrency: number;
|
|
51
|
+
maxDepth: number;
|
|
52
|
+
dryRun: boolean;
|
|
53
|
+
sourcePath?: string;
|
|
54
|
+
onStepStart?: (stepId: string) => void;
|
|
55
|
+
onStepComplete?: (stepId: string, error?: Error) => void;
|
|
56
|
+
/**
|
|
57
|
+
* Directory holding `runs.jsonl`. When set, top-level (depth 0) runs are
|
|
58
|
+
* appended so the dashboard Runs page shows chained recipes alongside
|
|
59
|
+
* yamlRunner runs. Omit in tests to avoid filesystem writes.
|
|
60
|
+
*/
|
|
61
|
+
runLogDir?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface StepExecutionContext {
|
|
64
|
+
registry: OutputRegistry;
|
|
65
|
+
step: ChainedStep;
|
|
66
|
+
options: RunOptions;
|
|
67
|
+
recipe: ChainedRecipe;
|
|
68
|
+
depth: number;
|
|
69
|
+
}
|
|
70
|
+
export type ToolExecutor = (tool: string, params: Record<string, unknown>) => Promise<unknown>;
|
|
71
|
+
export type AgentExecutor = (prompt: string, model?: string, driver?: string) => Promise<string>;
|
|
72
|
+
export interface ExecutionDeps {
|
|
73
|
+
executeTool: ToolExecutor;
|
|
74
|
+
executeAgent: AgentExecutor;
|
|
75
|
+
loadNestedRecipe: (name: string, parentSourcePath?: string) => Promise<{
|
|
76
|
+
recipe: ChainedRecipe;
|
|
77
|
+
sourcePath?: string;
|
|
78
|
+
} | null>;
|
|
79
|
+
}
|
|
80
|
+
/** Build template context from registry and env */
|
|
81
|
+
export declare function buildTemplateContext(registry: OutputRegistry, env: Record<string, string | undefined>): TemplateContext;
|
|
82
|
+
/** Resolve all template strings in a step */
|
|
83
|
+
export declare function resolveStepTemplates(step: ChainedStep, context: TemplateContext): {
|
|
84
|
+
resolved: Record<string, unknown>;
|
|
85
|
+
conditionResult: boolean;
|
|
86
|
+
errors: TemplateError[];
|
|
87
|
+
};
|
|
88
|
+
/** Execute a single step */
|
|
89
|
+
export declare function executeChainedStep(ctx: StepExecutionContext, deps: ExecutionDeps): Promise<{
|
|
90
|
+
success: boolean;
|
|
91
|
+
skipped?: boolean;
|
|
92
|
+
data?: unknown;
|
|
93
|
+
error?: string;
|
|
94
|
+
}>;
|
|
95
|
+
export interface ChainedStepRunResult {
|
|
96
|
+
success: boolean;
|
|
97
|
+
skipped?: boolean;
|
|
98
|
+
durationMs?: number;
|
|
99
|
+
error?: Error;
|
|
100
|
+
}
|
|
101
|
+
export interface ChainedRunResult {
|
|
102
|
+
success: boolean;
|
|
103
|
+
stepResults: Map<string, ChainedStepRunResult>;
|
|
104
|
+
summary: {
|
|
105
|
+
total: number;
|
|
106
|
+
succeeded: number;
|
|
107
|
+
failed: number;
|
|
108
|
+
skipped: number;
|
|
109
|
+
};
|
|
110
|
+
errorMessage?: string;
|
|
111
|
+
/** Step output data keyed by step id, stringified for expect: assertions. */
|
|
112
|
+
context: Record<string, string>;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Expand `parallel:` sugar into flat steps with auto-generated ids and
|
|
116
|
+
* correct `awaits` wiring so the existing dependency graph handles execution.
|
|
117
|
+
*
|
|
118
|
+
* A `parallel:` step is a group container — it has no id/tool/agent of its
|
|
119
|
+
* own. Each child in the group inherits the group's `awaits` and is assigned
|
|
120
|
+
* an id of `<groupId>_<index>`. Steps that previously awaited the group
|
|
121
|
+
* (determined by a post-pass) are rewritten to await all children instead.
|
|
122
|
+
*
|
|
123
|
+
* Expansion is recursive so nested `parallel:` blocks work too.
|
|
124
|
+
*/
|
|
125
|
+
export declare function expandParallelSteps(steps: ChainedStep[]): ChainedStep[];
|
|
126
|
+
/** Main entry point: run a chained recipe */
|
|
127
|
+
export declare function runChainedRecipe(recipe: ChainedRecipe, options: RunOptions, deps: ExecutionDeps, existingRegistry?: OutputRegistry, depth?: number): Promise<ChainedRunResult>;
|
|
128
|
+
/** Generate execution plan for dry-run mode */
|
|
129
|
+
export declare function generateExecutionPlan(recipe: ChainedRecipe): {
|
|
130
|
+
steps: Array<{
|
|
131
|
+
id: string;
|
|
132
|
+
type: "tool" | "agent" | "recipe";
|
|
133
|
+
dependencies: string[];
|
|
134
|
+
condition?: string;
|
|
135
|
+
risk: "low" | "medium" | "high";
|
|
136
|
+
optional?: boolean;
|
|
137
|
+
}>;
|
|
138
|
+
parallelGroups: string[][];
|
|
139
|
+
maxDepth: number;
|
|
140
|
+
};
|