patchwork-os 0.2.0-beta.10.canary.98 → 0.2.0-beta.11
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 +20 -1
- package/dist/adapters/grok.js +6 -1
- package/dist/adapters/grok.js.map +1 -1
- package/dist/approvalHttp.js +61 -66
- package/dist/approvalHttp.js.map +1 -1
- package/dist/bridge.js +3 -2
- package/dist/bridge.js.map +1 -1
- package/dist/claudeOrchestrator.js +15 -0
- package/dist/claudeOrchestrator.js.map +1 -1
- package/dist/commands/connect.d.ts +47 -0
- package/dist/commands/connect.js +419 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/patchworkInit.d.ts +7 -0
- package/dist/commands/patchworkInit.js +26 -0
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +14 -0
- package/dist/commands/recipe.js +51 -0
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.js +15 -0
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/connectors/postgres.d.ts +7 -0
- package/dist/connectors/postgres.js +16 -2
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/snowflake.js +6 -0
- package/dist/connectors/snowflake.js.map +1 -1
- package/dist/connectors/tokenStorage.d.ts +8 -0
- package/dist/connectors/tokenStorage.js +42 -3
- package/dist/connectors/tokenStorage.js.map +1 -1
- package/dist/drivers/claude/api.js +15 -2
- package/dist/drivers/claude/api.js.map +1 -1
- package/dist/drivers/claude/subprocess.js +1 -29
- package/dist/drivers/claude/subprocess.js.map +1 -1
- package/dist/drivers/gemini/index.js +9 -5
- package/dist/drivers/gemini/index.js.map +1 -1
- package/dist/drivers/openai/index.js +29 -4
- package/dist/drivers/openai/index.js.map +1 -1
- package/dist/drivers/outputCap.d.ts +27 -0
- package/dist/drivers/outputCap.js +50 -0
- package/dist/drivers/outputCap.js.map +1 -0
- package/dist/featureFlags.d.ts +9 -0
- package/dist/featureFlags.js +16 -0
- package/dist/featureFlags.js.map +1 -1
- package/dist/fp/commandDescription.d.ts +6 -0
- package/dist/fp/commandDescription.js +4 -4
- package/dist/fp/commandDescription.js.map +1 -1
- package/dist/fp/policyParser.js +13 -7
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/haltPushDispatch.js +7 -22
- package/dist/haltPushDispatch.js.map +1 -1
- package/dist/index.js +148 -0
- package/dist/index.js.map +1 -1
- package/dist/mcpRoutes.js +1 -1
- package/dist/mcpRoutes.js.map +1 -1
- package/dist/oauth.d.ts +13 -0
- package/dist/oauth.js +34 -1
- package/dist/oauth.js.map +1 -1
- package/dist/recipeOrchestration.js +10 -0
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipeRoutes.d.ts +39 -0
- package/dist/recipeRoutes.js +214 -12
- package/dist/recipeRoutes.js.map +1 -1
- package/dist/recipes/agentExecutor.d.ts +20 -0
- package/dist/recipes/agentExecutor.js +32 -10
- package/dist/recipes/agentExecutor.js.map +1 -1
- package/dist/recipes/chainedRunner.d.ts +41 -2
- package/dist/recipes/chainedRunner.js +134 -6
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/connectorPreflight.js +30 -0
- package/dist/recipes/connectorPreflight.js.map +1 -1
- package/dist/recipes/haltCategory.d.ts +5 -0
- package/dist/recipes/haltCategory.js +7 -1
- package/dist/recipes/haltCategory.js.map +1 -1
- package/dist/recipes/judgeVerdict.d.ts +10 -0
- package/dist/recipes/judgeVerdict.js +10 -0
- package/dist/recipes/judgeVerdict.js.map +1 -1
- package/dist/recipes/names.d.ts +5 -0
- package/dist/recipes/names.js +10 -5
- package/dist/recipes/names.js.map +1 -1
- package/dist/recipes/parser.js +32 -9
- package/dist/recipes/parser.js.map +1 -1
- package/dist/recipes/pricing/costRouter.d.ts +43 -0
- package/dist/recipes/pricing/costRouter.js +44 -0
- package/dist/recipes/pricing/costRouter.js.map +1 -0
- package/dist/recipes/pricing/priceTable.d.ts +76 -0
- package/dist/recipes/pricing/priceTable.js +144 -0
- package/dist/recipes/pricing/priceTable.js.map +1 -0
- package/dist/recipes/runBudget.d.ts +82 -32
- package/dist/recipes/runBudget.js +182 -49
- package/dist/recipes/runBudget.js.map +1 -1
- package/dist/recipes/schema.d.ts +25 -4
- package/dist/recipes/schemaGenerator.d.ts +9 -0
- package/dist/recipes/schemaGenerator.js +386 -75
- package/dist/recipes/schemaGenerator.js.map +1 -1
- package/dist/recipes/simulation/aggregateRunRisk.d.ts +43 -0
- package/dist/recipes/simulation/aggregateRunRisk.js +117 -0
- package/dist/recipes/simulation/aggregateRunRisk.js.map +1 -0
- package/dist/recipes/simulation/costProjector.d.ts +32 -0
- package/dist/recipes/simulation/costProjector.js +194 -0
- package/dist/recipes/simulation/costProjector.js.map +1 -0
- package/dist/recipes/simulation/sideEffects.d.ts +32 -0
- package/dist/recipes/simulation/sideEffects.js +62 -0
- package/dist/recipes/simulation/sideEffects.js.map +1 -0
- package/dist/recipes/simulation/simulate.d.ts +36 -0
- package/dist/recipes/simulation/simulate.js +264 -0
- package/dist/recipes/simulation/simulate.js.map +1 -0
- package/dist/recipes/simulation/simulateMockedRun.d.ts +52 -0
- package/dist/recipes/simulation/simulateMockedRun.js +72 -0
- package/dist/recipes/simulation/simulateMockedRun.js.map +1 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.d.ts +31 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.js +50 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.js.map +1 -0
- package/dist/recipes/simulation/types.d.ts +198 -0
- package/dist/recipes/simulation/types.js +30 -0
- package/dist/recipes/simulation/types.js.map +1 -0
- package/dist/recipes/stepObservation.d.ts +12 -0
- package/dist/recipes/stepObservation.js +21 -1
- package/dist/recipes/stepObservation.js.map +1 -1
- package/dist/recipes/tools/airtable.d.ts +15 -0
- package/dist/recipes/tools/airtable.js +240 -0
- package/dist/recipes/tools/airtable.js.map +1 -0
- package/dist/recipes/tools/caldiy.d.ts +13 -0
- package/dist/recipes/tools/caldiy.js +214 -0
- package/dist/recipes/tools/caldiy.js.map +1 -0
- package/dist/recipes/tools/circleci.d.ts +10 -0
- package/dist/recipes/tools/circleci.js +204 -0
- package/dist/recipes/tools/circleci.js.map +1 -0
- package/dist/recipes/tools/cloudflare.d.ts +13 -0
- package/dist/recipes/tools/cloudflare.js +211 -0
- package/dist/recipes/tools/cloudflare.js.map +1 -0
- package/dist/recipes/tools/docs.d.ts +18 -0
- package/dist/recipes/tools/docs.js +94 -0
- package/dist/recipes/tools/docs.js.map +1 -0
- package/dist/recipes/tools/elasticsearch.d.ts +11 -0
- package/dist/recipes/tools/elasticsearch.js +156 -0
- package/dist/recipes/tools/elasticsearch.js.map +1 -0
- package/dist/recipes/tools/figma.d.ts +12 -0
- package/dist/recipes/tools/figma.js +194 -0
- package/dist/recipes/tools/figma.js.map +1 -0
- package/dist/recipes/tools/grafana.d.ts +11 -0
- package/dist/recipes/tools/grafana.js +216 -0
- package/dist/recipes/tools/grafana.js.map +1 -0
- package/dist/recipes/tools/http.d.ts +1 -1
- package/dist/recipes/tools/http.js +10 -28
- package/dist/recipes/tools/http.js.map +1 -1
- package/dist/recipes/tools/index.d.ts +26 -0
- package/dist/recipes/tools/index.js +26 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/tools/monday.d.ts +22 -0
- package/dist/recipes/tools/monday.js +242 -0
- package/dist/recipes/tools/monday.js.map +1 -0
- package/dist/recipes/tools/obsidian.d.ts +15 -0
- package/dist/recipes/tools/obsidian.js +172 -0
- package/dist/recipes/tools/obsidian.js.map +1 -0
- package/dist/recipes/tools/paystack.d.ts +11 -0
- package/dist/recipes/tools/paystack.js +211 -0
- package/dist/recipes/tools/paystack.js.map +1 -0
- package/dist/recipes/tools/pipedrive.d.ts +16 -0
- package/dist/recipes/tools/pipedrive.js +233 -0
- package/dist/recipes/tools/pipedrive.js.map +1 -0
- package/dist/recipes/tools/postgres.d.ts +15 -0
- package/dist/recipes/tools/postgres.js +185 -0
- package/dist/recipes/tools/postgres.js.map +1 -0
- package/dist/recipes/tools/posthog.d.ts +16 -0
- package/dist/recipes/tools/posthog.js +219 -0
- package/dist/recipes/tools/posthog.js.map +1 -0
- package/dist/recipes/tools/redis.d.ts +9 -0
- package/dist/recipes/tools/redis.js +140 -0
- package/dist/recipes/tools/redis.js.map +1 -0
- package/dist/recipes/tools/resend.d.ts +8 -0
- package/dist/recipes/tools/resend.js +153 -0
- package/dist/recipes/tools/resend.js.map +1 -0
- package/dist/recipes/tools/salesforce.d.ts +16 -0
- package/dist/recipes/tools/salesforce.js +184 -0
- package/dist/recipes/tools/salesforce.js.map +1 -0
- package/dist/recipes/tools/sendgrid.d.ts +9 -0
- package/dist/recipes/tools/sendgrid.js +174 -0
- package/dist/recipes/tools/sendgrid.js.map +1 -0
- package/dist/recipes/tools/shopify.d.ts +16 -0
- package/dist/recipes/tools/shopify.js +265 -0
- package/dist/recipes/tools/shopify.js.map +1 -0
- package/dist/recipes/tools/snowflake.d.ts +16 -0
- package/dist/recipes/tools/snowflake.js +173 -0
- package/dist/recipes/tools/snowflake.js.map +1 -0
- package/dist/recipes/tools/stripe.js +13 -12
- package/dist/recipes/tools/stripe.js.map +1 -1
- package/dist/recipes/tools/supabase.d.ts +9 -0
- package/dist/recipes/tools/supabase.js +132 -0
- package/dist/recipes/tools/supabase.js.map +1 -0
- package/dist/recipes/tools/todoist.d.ts +15 -0
- package/dist/recipes/tools/todoist.js +227 -0
- package/dist/recipes/tools/todoist.js.map +1 -0
- package/dist/recipes/tools/twilio.d.ts +11 -0
- package/dist/recipes/tools/twilio.js +180 -0
- package/dist/recipes/tools/twilio.js.map +1 -0
- package/dist/recipes/tools/vercel.d.ts +9 -0
- package/dist/recipes/tools/vercel.js +145 -0
- package/dist/recipes/tools/vercel.js.map +1 -0
- package/dist/recipes/tools/webflow.d.ts +11 -0
- package/dist/recipes/tools/webflow.js +243 -0
- package/dist/recipes/tools/webflow.js.map +1 -0
- package/dist/recipes/tools/woocommerce.d.ts +18 -0
- package/dist/recipes/tools/woocommerce.js +259 -0
- package/dist/recipes/tools/woocommerce.js.map +1 -0
- package/dist/recipes/tools/wrapConnectorExecute.d.ts +25 -0
- package/dist/recipes/tools/wrapConnectorExecute.js +37 -0
- package/dist/recipes/tools/wrapConnectorExecute.js.map +1 -0
- package/dist/recipes/validation.js +264 -0
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +112 -3
- package/dist/recipes/yamlRunner.js +482 -19
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/runLog.d.ts +46 -0
- package/dist/runLog.js +4 -0
- package/dist/runLog.js.map +1 -1
- package/dist/schemas/recipe.v1.json +217 -11
- package/dist/server.d.ts +3 -0
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/dist/streamableHttp.js +3 -2
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/gitWrite.js +5 -1
- package/dist/tools/gitWrite.js.map +1 -1
- package/dist/tools/terminal.js +15 -49
- package/dist/tools/terminal.js.map +1 -1
- package/dist/transport.d.ts +1 -0
- package/dist/transport.js +7 -0
- package/dist/transport.js.map +1 -1
- package/package.json +3 -3
- package/scripts/mcp-stdio-shim.cjs +218 -84
- package/templates/recipes/incident-to-pr.yaml +187 -0
|
@@ -87,7 +87,63 @@
|
|
|
87
87
|
},
|
|
88
88
|
"filter": {
|
|
89
89
|
"type": "string",
|
|
90
|
-
"description": "File filter pattern (for file_watch trigger)"
|
|
90
|
+
"description": "File filter pattern (for file_watch trigger). For on_test_run triggers, one of: any | failure | pass-after-fail."
|
|
91
|
+
},
|
|
92
|
+
"vars": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"description": "Declared input variables resolvable as {{name}} in steps. Place declared variables here (NOT at recipe root — top-level vars are ignored at runtime).",
|
|
95
|
+
"items": {
|
|
96
|
+
"type": "object",
|
|
97
|
+
"required": [
|
|
98
|
+
"name"
|
|
99
|
+
],
|
|
100
|
+
"properties": {
|
|
101
|
+
"name": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"pattern": "^[A-Za-z_][A-Za-z0-9_]{0,63}$",
|
|
104
|
+
"description": "Variable name (letter/underscore start; letters, digits, underscores; max 64 chars)."
|
|
105
|
+
},
|
|
106
|
+
"required": {
|
|
107
|
+
"type": "boolean",
|
|
108
|
+
"description": "Whether the variable must be supplied."
|
|
109
|
+
},
|
|
110
|
+
"default": {
|
|
111
|
+
"description": "Default value when not supplied."
|
|
112
|
+
},
|
|
113
|
+
"description": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"description": "Human-readable description of the variable."
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"inputs": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"description": "Alias for trigger.vars — declared input variables resolvable as {{name}} in steps.",
|
|
123
|
+
"items": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"required": [
|
|
126
|
+
"name"
|
|
127
|
+
],
|
|
128
|
+
"properties": {
|
|
129
|
+
"name": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"pattern": "^[A-Za-z_][A-Za-z0-9_]{0,63}$",
|
|
132
|
+
"description": "Variable name (letter/underscore start; letters, digits, underscores; max 64 chars)."
|
|
133
|
+
},
|
|
134
|
+
"required": {
|
|
135
|
+
"type": "boolean",
|
|
136
|
+
"description": "Whether the variable must be supplied."
|
|
137
|
+
},
|
|
138
|
+
"default": {
|
|
139
|
+
"description": "Default value when not supplied."
|
|
140
|
+
},
|
|
141
|
+
"description": {
|
|
142
|
+
"type": "string",
|
|
143
|
+
"description": "Human-readable description of the variable."
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
91
147
|
},
|
|
92
148
|
"eventSource": {
|
|
93
149
|
"type": "string",
|
|
@@ -285,6 +341,50 @@
|
|
|
285
341
|
"judge"
|
|
286
342
|
],
|
|
287
343
|
"description": "When set to 'judge', the agent step emits a structured verdictReason and stores the verdict in the run log."
|
|
344
|
+
},
|
|
345
|
+
"reviews": {
|
|
346
|
+
"type": "string",
|
|
347
|
+
"description": "Step output key the judge reviews (its `into`, default 'agent_output'). Required for the judge→refine loop."
|
|
348
|
+
},
|
|
349
|
+
"max_revisions": {
|
|
350
|
+
"type": "integer",
|
|
351
|
+
"minimum": 0,
|
|
352
|
+
"description": "OPT-IN judge→refine loop. Max revise→re-judge cycles when the verdict is 'request_changes' (0/absent = augment-only, no loop). Requires kind:judge + reviews."
|
|
353
|
+
},
|
|
354
|
+
"on_exhausted": {
|
|
355
|
+
"type": "string",
|
|
356
|
+
"enum": [
|
|
357
|
+
"halt",
|
|
358
|
+
"proceed"
|
|
359
|
+
],
|
|
360
|
+
"description": "When the revision budget is exhausted and the judge still requests changes: 'halt' (default) fails the run; 'proceed' continues with the last draft."
|
|
361
|
+
},
|
|
362
|
+
"downshift": {
|
|
363
|
+
"type": "array",
|
|
364
|
+
"description": "OPT-IN cost-aware routing (Phase 4). Ordered cheaper fallbacks tried when budget.usdMax is set and the remaining budget is too tight for the preferred driver/model. Each entry overrides driver and/or model. Absent → preferred model always used.",
|
|
365
|
+
"items": {
|
|
366
|
+
"type": "object",
|
|
367
|
+
"additionalProperties": false,
|
|
368
|
+
"minProperties": 1,
|
|
369
|
+
"properties": {
|
|
370
|
+
"driver": {
|
|
371
|
+
"type": "string",
|
|
372
|
+
"enum": [
|
|
373
|
+
"claude",
|
|
374
|
+
"claude-code",
|
|
375
|
+
"api",
|
|
376
|
+
"openai",
|
|
377
|
+
"grok",
|
|
378
|
+
"gemini",
|
|
379
|
+
"anthropic",
|
|
380
|
+
"local"
|
|
381
|
+
]
|
|
382
|
+
},
|
|
383
|
+
"model": {
|
|
384
|
+
"type": "string"
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
288
388
|
}
|
|
289
389
|
}
|
|
290
390
|
}
|
|
@@ -631,10 +731,12 @@
|
|
|
631
731
|
"description": "Agent step configuration",
|
|
632
732
|
"properties": {
|
|
633
733
|
"prompt": {
|
|
634
|
-
"type": "string"
|
|
734
|
+
"type": "string",
|
|
735
|
+
"description": "Prompt to send to the AI (supports {{templates}})"
|
|
635
736
|
},
|
|
636
737
|
"model": {
|
|
637
|
-
"type": "string"
|
|
738
|
+
"type": "string",
|
|
739
|
+
"description": "Model to use for the agent step"
|
|
638
740
|
},
|
|
639
741
|
"driver": {
|
|
640
742
|
"type": "string",
|
|
@@ -646,10 +748,12 @@
|
|
|
646
748
|
"grok",
|
|
647
749
|
"gemini",
|
|
648
750
|
"anthropic"
|
|
649
|
-
]
|
|
751
|
+
],
|
|
752
|
+
"description": "Driver for agent execution"
|
|
650
753
|
},
|
|
651
754
|
"into": {
|
|
652
|
-
"type": "string"
|
|
755
|
+
"type": "string",
|
|
756
|
+
"description": "Variable name to store output in context"
|
|
653
757
|
},
|
|
654
758
|
"mcpAccess": {
|
|
655
759
|
"type": "boolean",
|
|
@@ -661,6 +765,50 @@
|
|
|
661
765
|
"judge"
|
|
662
766
|
],
|
|
663
767
|
"description": "When set to 'judge', the agent step emits a structured verdictReason and stores the verdict in the run log."
|
|
768
|
+
},
|
|
769
|
+
"reviews": {
|
|
770
|
+
"type": "string",
|
|
771
|
+
"description": "Step output key the judge reviews (its `into`, default 'agent_output'). Required for the judge→refine loop."
|
|
772
|
+
},
|
|
773
|
+
"max_revisions": {
|
|
774
|
+
"type": "integer",
|
|
775
|
+
"minimum": 0,
|
|
776
|
+
"description": "OPT-IN judge→refine loop. Max revise→re-judge cycles when the verdict is 'request_changes' (0/absent = augment-only, no loop). Requires kind:judge + reviews."
|
|
777
|
+
},
|
|
778
|
+
"on_exhausted": {
|
|
779
|
+
"type": "string",
|
|
780
|
+
"enum": [
|
|
781
|
+
"halt",
|
|
782
|
+
"proceed"
|
|
783
|
+
],
|
|
784
|
+
"description": "When the revision budget is exhausted and the judge still requests changes: 'halt' (default) fails the run; 'proceed' continues with the last draft."
|
|
785
|
+
},
|
|
786
|
+
"downshift": {
|
|
787
|
+
"type": "array",
|
|
788
|
+
"description": "OPT-IN cost-aware routing (Phase 4). Ordered cheaper fallbacks tried when budget.usdMax is set and the remaining budget is too tight for the preferred driver/model. Each entry overrides driver and/or model. Absent → preferred model always used.",
|
|
789
|
+
"items": {
|
|
790
|
+
"type": "object",
|
|
791
|
+
"additionalProperties": false,
|
|
792
|
+
"minProperties": 1,
|
|
793
|
+
"properties": {
|
|
794
|
+
"driver": {
|
|
795
|
+
"type": "string",
|
|
796
|
+
"enum": [
|
|
797
|
+
"claude",
|
|
798
|
+
"claude-code",
|
|
799
|
+
"api",
|
|
800
|
+
"openai",
|
|
801
|
+
"grok",
|
|
802
|
+
"gemini",
|
|
803
|
+
"anthropic",
|
|
804
|
+
"local"
|
|
805
|
+
]
|
|
806
|
+
},
|
|
807
|
+
"model": {
|
|
808
|
+
"type": "string"
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
}
|
|
664
812
|
}
|
|
665
813
|
}
|
|
666
814
|
}
|
|
@@ -1006,10 +1154,12 @@
|
|
|
1006
1154
|
"description": "Agent step configuration",
|
|
1007
1155
|
"properties": {
|
|
1008
1156
|
"prompt": {
|
|
1009
|
-
"type": "string"
|
|
1157
|
+
"type": "string",
|
|
1158
|
+
"description": "Prompt to send to the AI (supports {{templates}})"
|
|
1010
1159
|
},
|
|
1011
1160
|
"model": {
|
|
1012
|
-
"type": "string"
|
|
1161
|
+
"type": "string",
|
|
1162
|
+
"description": "Model to use for the agent step"
|
|
1013
1163
|
},
|
|
1014
1164
|
"driver": {
|
|
1015
1165
|
"type": "string",
|
|
@@ -1021,10 +1171,12 @@
|
|
|
1021
1171
|
"grok",
|
|
1022
1172
|
"gemini",
|
|
1023
1173
|
"anthropic"
|
|
1024
|
-
]
|
|
1174
|
+
],
|
|
1175
|
+
"description": "Driver for agent execution"
|
|
1025
1176
|
},
|
|
1026
1177
|
"into": {
|
|
1027
|
-
"type": "string"
|
|
1178
|
+
"type": "string",
|
|
1179
|
+
"description": "Variable name to store output in context"
|
|
1028
1180
|
},
|
|
1029
1181
|
"mcpAccess": {
|
|
1030
1182
|
"type": "boolean",
|
|
@@ -1036,6 +1188,50 @@
|
|
|
1036
1188
|
"judge"
|
|
1037
1189
|
],
|
|
1038
1190
|
"description": "When set to 'judge', the agent step emits a structured verdictReason and stores the verdict in the run log."
|
|
1191
|
+
},
|
|
1192
|
+
"reviews": {
|
|
1193
|
+
"type": "string",
|
|
1194
|
+
"description": "Step output key the judge reviews (its `into`, default 'agent_output'). Required for the judge→refine loop."
|
|
1195
|
+
},
|
|
1196
|
+
"max_revisions": {
|
|
1197
|
+
"type": "integer",
|
|
1198
|
+
"minimum": 0,
|
|
1199
|
+
"description": "OPT-IN judge→refine loop. Max revise→re-judge cycles when the verdict is 'request_changes' (0/absent = augment-only, no loop). Requires kind:judge + reviews."
|
|
1200
|
+
},
|
|
1201
|
+
"on_exhausted": {
|
|
1202
|
+
"type": "string",
|
|
1203
|
+
"enum": [
|
|
1204
|
+
"halt",
|
|
1205
|
+
"proceed"
|
|
1206
|
+
],
|
|
1207
|
+
"description": "When the revision budget is exhausted and the judge still requests changes: 'halt' (default) fails the run; 'proceed' continues with the last draft."
|
|
1208
|
+
},
|
|
1209
|
+
"downshift": {
|
|
1210
|
+
"type": "array",
|
|
1211
|
+
"description": "OPT-IN cost-aware routing (Phase 4). Ordered cheaper fallbacks tried when budget.usdMax is set and the remaining budget is too tight for the preferred driver/model. Each entry overrides driver and/or model. Absent → preferred model always used.",
|
|
1212
|
+
"items": {
|
|
1213
|
+
"type": "object",
|
|
1214
|
+
"additionalProperties": false,
|
|
1215
|
+
"minProperties": 1,
|
|
1216
|
+
"properties": {
|
|
1217
|
+
"driver": {
|
|
1218
|
+
"type": "string",
|
|
1219
|
+
"enum": [
|
|
1220
|
+
"claude",
|
|
1221
|
+
"claude-code",
|
|
1222
|
+
"api",
|
|
1223
|
+
"openai",
|
|
1224
|
+
"grok",
|
|
1225
|
+
"gemini",
|
|
1226
|
+
"anthropic",
|
|
1227
|
+
"local"
|
|
1228
|
+
]
|
|
1229
|
+
},
|
|
1230
|
+
"model": {
|
|
1231
|
+
"type": "string"
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1039
1235
|
}
|
|
1040
1236
|
}
|
|
1041
1237
|
}
|
|
@@ -1345,19 +1541,29 @@
|
|
|
1345
1541
|
},
|
|
1346
1542
|
"budget": {
|
|
1347
1543
|
"type": "object",
|
|
1348
|
-
"description": "Per-recipe
|
|
1544
|
+
"description": "Per-recipe budget. Set tokensMax and/or usdMax; on breach the run halts with budget_exceeded (or warns). Enforced for API drivers that report token usage and (for usdMax) have a price-table entry; subscription drivers (Claude CLI) report no tokens and are skipped (fail-open with a one-time warning).",
|
|
1349
1545
|
"properties": {
|
|
1350
1546
|
"tokensMax": {
|
|
1351
1547
|
"type": "number",
|
|
1548
|
+
"exclusiveMinimum": 0,
|
|
1352
1549
|
"description": "Cumulative input + output tokens allowed across the whole run"
|
|
1353
1550
|
},
|
|
1551
|
+
"usdMax": {
|
|
1552
|
+
"type": "number",
|
|
1553
|
+
"exclusiveMinimum": 0,
|
|
1554
|
+
"description": "Cumulative USD allowed across the whole run, priced from token usage via the model price table. Unpriced models / subscription drivers fail open (never halt on them)."
|
|
1555
|
+
},
|
|
1556
|
+
"estimateUnmeasured": {
|
|
1557
|
+
"type": "boolean",
|
|
1558
|
+
"description": "OPT-IN (default false). Estimate the notional list-price USD an unmeasured/subscription call would have cost and surface a ≈$ figure. Label only — never counted toward usdMax, never halts. Requires usdMax."
|
|
1559
|
+
},
|
|
1354
1560
|
"onBreach": {
|
|
1355
1561
|
"type": "string",
|
|
1356
1562
|
"enum": [
|
|
1357
1563
|
"halt",
|
|
1358
1564
|
"warn"
|
|
1359
1565
|
],
|
|
1360
|
-
"description": "halt (default): stop run on next admission check. warn: continue but record the breach in the run log.",
|
|
1566
|
+
"description": "halt (default): stop run on next admission check. warn: continue but record the breach in the run log. Applies to both tokensMax and usdMax.",
|
|
1361
1567
|
"default": "halt"
|
|
1362
1568
|
}
|
|
1363
1569
|
}
|
package/dist/server.d.ts
CHANGED
|
@@ -183,6 +183,9 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
183
183
|
}) => import("./recipes/judgeSummary.js").JudgeSummary) | null;
|
|
184
184
|
/** Patchwork: set by bridge to generate a dry-run plan for a recipe by name. */
|
|
185
185
|
runPlanFn: ((recipeName: string) => Promise<Record<string, unknown>>) | null;
|
|
186
|
+
/** Patchwork: set by bridge to generate a What-If Preview simulation for a
|
|
187
|
+
* recipe by name (static counterfactual; superset of the dry-run plan). */
|
|
188
|
+
simulateFn: ((recipeName: string) => Promise<Record<string, unknown>>) | null;
|
|
186
189
|
/** Patchwork (VD-4): mocked replay of an existing run. Returns the new
|
|
187
190
|
* run's seq plus any unmocked steps the caller may want to surface. */
|
|
188
191
|
runReplayFn: ((seq: number) => Promise<{
|
package/dist/server.js
CHANGED
|
@@ -141,6 +141,9 @@ export class Server extends EventEmitter {
|
|
|
141
141
|
judgeSummaryFn = null;
|
|
142
142
|
/** Patchwork: set by bridge to generate a dry-run plan for a recipe by name. */
|
|
143
143
|
runPlanFn = null;
|
|
144
|
+
/** Patchwork: set by bridge to generate a What-If Preview simulation for a
|
|
145
|
+
* recipe by name (static counterfactual; superset of the dry-run plan). */
|
|
146
|
+
simulateFn = null;
|
|
144
147
|
/** Patchwork (VD-4): mocked replay of an existing run. Returns the new
|
|
145
148
|
* run's seq plus any unmocked steps the caller may want to surface. */
|
|
146
149
|
runReplayFn = null;
|
|
@@ -1163,6 +1166,7 @@ export class Server extends EventEmitter {
|
|
|
1163
1166
|
haltSummaryFn: this.haltSummaryFn,
|
|
1164
1167
|
judgeSummaryFn: this.judgeSummaryFn,
|
|
1165
1168
|
runPlanFn: this.runPlanFn,
|
|
1169
|
+
simulateFn: this.simulateFn,
|
|
1166
1170
|
runReplayFn: this.runReplayFn,
|
|
1167
1171
|
runRecipeFn: this.runRecipeFn,
|
|
1168
1172
|
onRecipesChangedFn: this.onRecipesChangedFn,
|