patchwork-os 0.2.0-beta.9.canary.92 → 1.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (739) hide show
  1. package/README.bridge.md +15 -16
  2. package/README.md +46 -458
  3. package/dist/activationMetrics.js +2 -3
  4. package/dist/activationMetrics.js.map +1 -1
  5. package/dist/activityLog.d.ts +1 -0
  6. package/dist/activityLog.js +8 -3
  7. package/dist/activityLog.js.map +1 -1
  8. package/dist/adapters/gemini.js +2 -2
  9. package/dist/adapters/gemini.js.map +1 -1
  10. package/dist/adapters/grok.js +6 -1
  11. package/dist/adapters/grok.js.map +1 -1
  12. package/dist/adapters/openai.js +4 -0
  13. package/dist/adapters/openai.js.map +1 -1
  14. package/dist/approvalHttp.d.ts +9 -0
  15. package/dist/approvalHttp.js +210 -171
  16. package/dist/approvalHttp.js.map +1 -1
  17. package/dist/approvalKpi.d.ts +102 -0
  18. package/dist/approvalKpi.js +282 -0
  19. package/dist/approvalKpi.js.map +1 -0
  20. package/dist/approvalQueue.d.ts +1 -1
  21. package/dist/approvalQueue.js.map +1 -1
  22. package/dist/automation.d.ts +45 -4
  23. package/dist/automation.js +123 -15
  24. package/dist/automation.js.map +1 -1
  25. package/dist/bridge.d.ts +10 -0
  26. package/dist/bridge.js +225 -46
  27. package/dist/bridge.js.map +1 -1
  28. package/dist/bridgeLockDiscovery.d.ts +16 -1
  29. package/dist/bridgeLockDiscovery.js +38 -4
  30. package/dist/bridgeLockDiscovery.js.map +1 -1
  31. package/dist/bridgeToolsRules.js +3 -18
  32. package/dist/bridgeToolsRules.js.map +1 -1
  33. package/dist/claudeAuthHttp.d.ts +25 -0
  34. package/dist/claudeAuthHttp.js +219 -0
  35. package/dist/claudeAuthHttp.js.map +1 -0
  36. package/dist/claudeDriver.js +4 -1
  37. package/dist/claudeDriver.js.map +1 -1
  38. package/dist/claudeOrchestrator.d.ts +15 -0
  39. package/dist/claudeOrchestrator.js +44 -0
  40. package/dist/claudeOrchestrator.js.map +1 -1
  41. package/dist/commands/connect.d.ts +47 -0
  42. package/dist/commands/connect.js +419 -0
  43. package/dist/commands/connect.js.map +1 -0
  44. package/dist/commands/install.js +3 -10
  45. package/dist/commands/install.js.map +1 -1
  46. package/dist/commands/launchd.d.ts +7 -0
  47. package/dist/commands/launchd.js +20 -2
  48. package/dist/commands/launchd.js.map +1 -1
  49. package/dist/commands/patchworkInit.d.ts +7 -0
  50. package/dist/commands/patchworkInit.js +26 -0
  51. package/dist/commands/patchworkInit.js.map +1 -1
  52. package/dist/commands/recipe.d.ts +59 -4
  53. package/dist/commands/recipe.js +206 -5
  54. package/dist/commands/recipe.js.map +1 -1
  55. package/dist/commands/recipeInstall.d.ts +9 -0
  56. package/dist/commands/recipeInstall.js +56 -3
  57. package/dist/commands/recipeInstall.js.map +1 -1
  58. package/dist/commands/task.d.ts +25 -0
  59. package/dist/commands/task.js +61 -41
  60. package/dist/commands/task.js.map +1 -1
  61. package/dist/commands/tokenEfficiency.d.ts +4 -0
  62. package/dist/commands/tokenEfficiency.js +23 -26
  63. package/dist/commands/tokenEfficiency.js.map +1 -1
  64. package/dist/commands/tracesExport.d.ts +15 -1
  65. package/dist/commands/tracesExport.js +39 -5
  66. package/dist/commands/tracesExport.js.map +1 -1
  67. package/dist/config.js +16 -0
  68. package/dist/config.js.map +1 -1
  69. package/dist/connectorRoutes.js +613 -62
  70. package/dist/connectorRoutes.js.map +1 -1
  71. package/dist/connectors/asana.js +9 -3
  72. package/dist/connectors/asana.js.map +1 -1
  73. package/dist/connectors/baseConnector.d.ts +16 -0
  74. package/dist/connectors/baseConnector.js +2 -0
  75. package/dist/connectors/baseConnector.js.map +1 -1
  76. package/dist/connectors/caldiy.js +34 -0
  77. package/dist/connectors/caldiy.js.map +1 -1
  78. package/dist/connectors/confluence.js +9 -2
  79. package/dist/connectors/confluence.js.map +1 -1
  80. package/dist/connectors/connectorActivity.d.ts +24 -0
  81. package/dist/connectors/connectorActivity.js +32 -0
  82. package/dist/connectors/connectorActivity.js.map +1 -0
  83. package/dist/connectors/connectorRedirectUri.js +22 -2
  84. package/dist/connectors/connectorRedirectUri.js.map +1 -1
  85. package/dist/connectors/connectorRegistry.d.ts +0 -3
  86. package/dist/connectors/connectorRegistry.js +8 -8
  87. package/dist/connectors/connectorRegistry.js.map +1 -1
  88. package/dist/connectors/datadog.js +8 -1
  89. package/dist/connectors/datadog.js.map +1 -1
  90. package/dist/connectors/discord.js +4 -3
  91. package/dist/connectors/discord.js.map +1 -1
  92. package/dist/connectors/elasticsearch.js +22 -0
  93. package/dist/connectors/elasticsearch.js.map +1 -1
  94. package/dist/connectors/github.d.ts +38 -0
  95. package/dist/connectors/github.js +91 -5
  96. package/dist/connectors/github.js.map +1 -1
  97. package/dist/connectors/gitlab.js +19 -16
  98. package/dist/connectors/gitlab.js.map +1 -1
  99. package/dist/connectors/gmail.d.ts +5 -0
  100. package/dist/connectors/gmail.js +53 -11
  101. package/dist/connectors/gmail.js.map +1 -1
  102. package/dist/connectors/googleCalendar.js +5 -4
  103. package/dist/connectors/googleCalendar.js.map +1 -1
  104. package/dist/connectors/googleDocs.js +7 -6
  105. package/dist/connectors/googleDocs.js.map +1 -1
  106. package/dist/connectors/googleDrive.js +15 -8
  107. package/dist/connectors/googleDrive.js.map +1 -1
  108. package/dist/connectors/grafana.js +39 -3
  109. package/dist/connectors/grafana.js.map +1 -1
  110. package/dist/connectors/jira.d.ts +1 -1
  111. package/dist/connectors/jira.js +19 -4
  112. package/dist/connectors/jira.js.map +1 -1
  113. package/dist/connectors/linear.js +2 -2
  114. package/dist/connectors/linear.js.map +1 -1
  115. package/dist/connectors/mcpClient.d.ts +29 -1
  116. package/dist/connectors/mcpClient.js +114 -44
  117. package/dist/connectors/mcpClient.js.map +1 -1
  118. package/dist/connectors/mcpOAuth.d.ts +1 -0
  119. package/dist/connectors/mcpOAuth.js +49 -4
  120. package/dist/connectors/mcpOAuth.js.map +1 -1
  121. package/dist/connectors/monday.js +5 -4
  122. package/dist/connectors/monday.js.map +1 -1
  123. package/dist/connectors/mongodb.js +32 -5
  124. package/dist/connectors/mongodb.js.map +1 -1
  125. package/dist/connectors/notion.d.ts +1 -1
  126. package/dist/connectors/notion.js +22 -6
  127. package/dist/connectors/notion.js.map +1 -1
  128. package/dist/connectors/oauthError.d.ts +17 -0
  129. package/dist/connectors/oauthError.js +50 -0
  130. package/dist/connectors/oauthError.js.map +1 -0
  131. package/dist/connectors/postgres.d.ts +7 -0
  132. package/dist/connectors/postgres.js +32 -2
  133. package/dist/connectors/postgres.js.map +1 -1
  134. package/dist/connectors/posthog.js +26 -0
  135. package/dist/connectors/posthog.js.map +1 -1
  136. package/dist/connectors/redis.d.ts +1 -0
  137. package/dist/connectors/redis.js +47 -20
  138. package/dist/connectors/redis.js.map +1 -1
  139. package/dist/connectors/salesforce.js +66 -5
  140. package/dist/connectors/salesforce.js.map +1 -1
  141. package/dist/connectors/sentry.js +2 -2
  142. package/dist/connectors/sentry.js.map +1 -1
  143. package/dist/connectors/slack.js +37 -14
  144. package/dist/connectors/slack.js.map +1 -1
  145. package/dist/connectors/snowflake.js +24 -0
  146. package/dist/connectors/snowflake.js.map +1 -1
  147. package/dist/connectors/stripe.js +9 -2
  148. package/dist/connectors/stripe.js.map +1 -1
  149. package/dist/connectors/supabase.js +34 -0
  150. package/dist/connectors/supabase.js.map +1 -1
  151. package/dist/connectors/tokenStorage.d.ts +20 -0
  152. package/dist/connectors/tokenStorage.js +196 -64
  153. package/dist/connectors/tokenStorage.js.map +1 -1
  154. package/dist/connectors/woocommerce.js +34 -0
  155. package/dist/connectors/woocommerce.js.map +1 -1
  156. package/dist/copilot/parseIntent.d.ts +58 -0
  157. package/dist/copilot/parseIntent.js +149 -0
  158. package/dist/copilot/parseIntent.js.map +1 -0
  159. package/dist/decisionReplay.d.ts +8 -6
  160. package/dist/decisionReplay.js +35 -11
  161. package/dist/decisionReplay.js.map +1 -1
  162. package/dist/decisionTraceLog.d.ts +9 -0
  163. package/dist/decisionTraceLog.js +6 -0
  164. package/dist/decisionTraceLog.js.map +1 -1
  165. package/dist/drivers/claude/api.js +49 -7
  166. package/dist/drivers/claude/api.js.map +1 -1
  167. package/dist/drivers/claude/envSanitizer.d.ts +9 -1
  168. package/dist/drivers/claude/envSanitizer.js +41 -3
  169. package/dist/drivers/claude/envSanitizer.js.map +1 -1
  170. package/dist/drivers/claude/streamParser.d.ts +13 -0
  171. package/dist/drivers/claude/streamParser.js.map +1 -1
  172. package/dist/drivers/claude/subprocess.js +131 -16
  173. package/dist/drivers/claude/subprocess.js.map +1 -1
  174. package/dist/drivers/claude/subprocessSettings.d.ts +1 -1
  175. package/dist/drivers/claude/subprocessSettings.js +18 -4
  176. package/dist/drivers/claude/subprocessSettings.js.map +1 -1
  177. package/dist/drivers/gemini/index.d.ts +13 -0
  178. package/dist/drivers/gemini/index.js +211 -67
  179. package/dist/drivers/gemini/index.js.map +1 -1
  180. package/dist/drivers/local/index.d.ts +2 -17
  181. package/dist/drivers/local/index.js +5 -92
  182. package/dist/drivers/local/index.js.map +1 -1
  183. package/dist/drivers/openai/index.js +69 -9
  184. package/dist/drivers/openai/index.js.map +1 -1
  185. package/dist/drivers/outputCap.d.ts +27 -0
  186. package/dist/drivers/outputCap.js +50 -0
  187. package/dist/drivers/outputCap.js.map +1 -0
  188. package/dist/embeddings/cosine.d.ts +23 -0
  189. package/dist/embeddings/cosine.js +59 -0
  190. package/dist/embeddings/cosine.js.map +1 -0
  191. package/dist/embeddings/index.d.ts +19 -0
  192. package/dist/embeddings/index.js +35 -0
  193. package/dist/embeddings/index.js.map +1 -0
  194. package/dist/embeddings/localEmbeddings.d.ts +29 -0
  195. package/dist/embeddings/localEmbeddings.js +103 -0
  196. package/dist/embeddings/localEmbeddings.js.map +1 -0
  197. package/dist/embeddings/localEndpoints.d.ts +24 -0
  198. package/dist/embeddings/localEndpoints.js +37 -0
  199. package/dist/embeddings/localEndpoints.js.map +1 -0
  200. package/dist/embeddings/types.d.ts +32 -0
  201. package/dist/embeddings/types.js +12 -0
  202. package/dist/embeddings/types.js.map +1 -0
  203. package/dist/featureFlags.d.ts +18 -0
  204. package/dist/featureFlags.js +32 -0
  205. package/dist/featureFlags.js.map +1 -1
  206. package/dist/fp/automationInterpreter.js +118 -39
  207. package/dist/fp/automationInterpreter.js.map +1 -1
  208. package/dist/fp/automationProgram.d.ts +10 -0
  209. package/dist/fp/automationProgram.js.map +1 -1
  210. package/dist/fp/automationState.d.ts +6 -0
  211. package/dist/fp/automationState.js +38 -0
  212. package/dist/fp/automationState.js.map +1 -1
  213. package/dist/fp/commandDescription.d.ts +6 -0
  214. package/dist/fp/commandDescription.js +18 -5
  215. package/dist/fp/commandDescription.js.map +1 -1
  216. package/dist/fp/interpreterContext.d.ts +16 -5
  217. package/dist/fp/interpreterContext.js +59 -3
  218. package/dist/fp/interpreterContext.js.map +1 -1
  219. package/dist/fp/policyParser.js +18 -8
  220. package/dist/fp/policyParser.js.map +1 -1
  221. package/dist/haltPushDispatch.d.ts +4 -0
  222. package/dist/haltPushDispatch.js +7 -22
  223. package/dist/haltPushDispatch.js.map +1 -1
  224. package/dist/inboxRoutes.js +2 -2
  225. package/dist/inboxRoutes.js.map +1 -1
  226. package/dist/index.js +672 -135
  227. package/dist/index.js.map +1 -1
  228. package/dist/installGuard.js +6 -0
  229. package/dist/installGuard.js.map +1 -1
  230. package/dist/localEndpointGuard.d.ts +25 -0
  231. package/dist/localEndpointGuard.js +101 -0
  232. package/dist/localEndpointGuard.js.map +1 -0
  233. package/dist/mcpRoutes.js +1 -1
  234. package/dist/mcpRoutes.js.map +1 -1
  235. package/dist/oauth.d.ts +13 -0
  236. package/dist/oauth.js +53 -9
  237. package/dist/oauth.js.map +1 -1
  238. package/dist/orchestrator/childBridgeClient.d.ts +7 -0
  239. package/dist/orchestrator/childBridgeClient.js +42 -1
  240. package/dist/orchestrator/childBridgeClient.js.map +1 -1
  241. package/dist/orchestrator/orchestratorBridge.d.ts +33 -0
  242. package/dist/orchestrator/orchestratorBridge.js +75 -9
  243. package/dist/orchestrator/orchestratorBridge.js.map +1 -1
  244. package/dist/patchworkConfig.d.ts +4 -0
  245. package/dist/patchworkConfig.js +33 -4
  246. package/dist/patchworkConfig.js.map +1 -1
  247. package/dist/probe.js +39 -5
  248. package/dist/probe.js.map +1 -1
  249. package/dist/recipeOrchestration.d.ts +59 -0
  250. package/dist/recipeOrchestration.js +314 -60
  251. package/dist/recipeOrchestration.js.map +1 -1
  252. package/dist/recipeRoutes.d.ts +93 -0
  253. package/dist/recipeRoutes.js +664 -27
  254. package/dist/recipeRoutes.js.map +1 -1
  255. package/dist/recipes/RecipeOrchestrator.d.ts +14 -0
  256. package/dist/recipes/RecipeOrchestrator.js +42 -2
  257. package/dist/recipes/RecipeOrchestrator.js.map +1 -1
  258. package/dist/recipes/agentExecutor.d.ts +51 -2
  259. package/dist/recipes/agentExecutor.js +86 -13
  260. package/dist/recipes/agentExecutor.js.map +1 -1
  261. package/dist/recipes/chainedRunner.d.ts +111 -3
  262. package/dist/recipes/chainedRunner.js +440 -45
  263. package/dist/recipes/chainedRunner.js.map +1 -1
  264. package/dist/recipes/compiler.js +42 -29
  265. package/dist/recipes/compiler.js.map +1 -1
  266. package/dist/recipes/connectorPreflight.js +31 -0
  267. package/dist/recipes/connectorPreflight.js.map +1 -1
  268. package/dist/recipes/dependencyGraph.d.ts +16 -0
  269. package/dist/recipes/dependencyGraph.js +37 -2
  270. package/dist/recipes/dependencyGraph.js.map +1 -1
  271. package/dist/recipes/eventTriggerPrograms.d.ts +36 -0
  272. package/dist/recipes/eventTriggerPrograms.js +158 -0
  273. package/dist/recipes/eventTriggerPrograms.js.map +1 -0
  274. package/dist/recipes/githubInstallSource.d.ts +9 -2
  275. package/dist/recipes/githubInstallSource.js +36 -6
  276. package/dist/recipes/githubInstallSource.js.map +1 -1
  277. package/dist/recipes/haltCategory.d.ts +10 -0
  278. package/dist/recipes/haltCategory.js +11 -1
  279. package/dist/recipes/haltCategory.js.map +1 -1
  280. package/dist/recipes/idempotencyKey.d.ts +30 -3
  281. package/dist/recipes/idempotencyKey.js +89 -5
  282. package/dist/recipes/idempotencyKey.js.map +1 -1
  283. package/dist/recipes/installer.js +12 -35
  284. package/dist/recipes/installer.js.map +1 -1
  285. package/dist/recipes/judgeVerdict.d.ts +11 -1
  286. package/dist/recipes/judgeVerdict.js +47 -7
  287. package/dist/recipes/judgeVerdict.js.map +1 -1
  288. package/dist/recipes/names.d.ts +5 -0
  289. package/dist/recipes/names.js +10 -5
  290. package/dist/recipes/names.js.map +1 -1
  291. package/dist/recipes/parser.js +74 -10
  292. package/dist/recipes/parser.js.map +1 -1
  293. package/dist/recipes/pricing/costRouter.d.ts +43 -0
  294. package/dist/recipes/pricing/costRouter.js +44 -0
  295. package/dist/recipes/pricing/costRouter.js.map +1 -0
  296. package/dist/recipes/pricing/priceTable.d.ts +76 -0
  297. package/dist/recipes/pricing/priceTable.js +144 -0
  298. package/dist/recipes/pricing/priceTable.js.map +1 -0
  299. package/dist/recipes/replayRun.js +5 -2
  300. package/dist/recipes/replayRun.js.map +1 -1
  301. package/dist/recipes/resolveRecipePath.js +15 -1
  302. package/dist/recipes/resolveRecipePath.js.map +1 -1
  303. package/dist/recipes/runBudget.d.ts +93 -32
  304. package/dist/recipes/runBudget.js +213 -49
  305. package/dist/recipes/runBudget.js.map +1 -1
  306. package/dist/recipes/runRegistry.d.ts +32 -0
  307. package/dist/recipes/runRegistry.js +54 -0
  308. package/dist/recipes/runRegistry.js.map +1 -0
  309. package/dist/recipes/scheduler.js +6 -2
  310. package/dist/recipes/scheduler.js.map +1 -1
  311. package/dist/recipes/schema.d.ts +59 -6
  312. package/dist/recipes/schemaGenerator.d.ts +9 -0
  313. package/dist/recipes/schemaGenerator.js +446 -77
  314. package/dist/recipes/schemaGenerator.js.map +1 -1
  315. package/dist/recipes/simulation/aggregateRunRisk.d.ts +46 -0
  316. package/dist/recipes/simulation/aggregateRunRisk.js +120 -0
  317. package/dist/recipes/simulation/aggregateRunRisk.js.map +1 -0
  318. package/dist/recipes/simulation/costProjector.d.ts +32 -0
  319. package/dist/recipes/simulation/costProjector.js +194 -0
  320. package/dist/recipes/simulation/costProjector.js.map +1 -0
  321. package/dist/recipes/simulation/sideEffects.d.ts +32 -0
  322. package/dist/recipes/simulation/sideEffects.js +62 -0
  323. package/dist/recipes/simulation/sideEffects.js.map +1 -0
  324. package/dist/recipes/simulation/simulate.d.ts +36 -0
  325. package/dist/recipes/simulation/simulate.js +264 -0
  326. package/dist/recipes/simulation/simulate.js.map +1 -0
  327. package/dist/recipes/simulation/simulateMockedRun.d.ts +52 -0
  328. package/dist/recipes/simulation/simulateMockedRun.js +84 -0
  329. package/dist/recipes/simulation/simulateMockedRun.js.map +1 -0
  330. package/dist/recipes/simulation/synthesizeMockedOutputs.d.ts +31 -0
  331. package/dist/recipes/simulation/synthesizeMockedOutputs.js +50 -0
  332. package/dist/recipes/simulation/synthesizeMockedOutputs.js.map +1 -0
  333. package/dist/recipes/simulation/types.d.ts +198 -0
  334. package/dist/recipes/simulation/types.js +30 -0
  335. package/dist/recipes/simulation/types.js.map +1 -0
  336. package/dist/recipes/stepObservation.d.ts +12 -0
  337. package/dist/recipes/stepObservation.js +21 -1
  338. package/dist/recipes/stepObservation.js.map +1 -1
  339. package/dist/recipes/toolRegistry.js +61 -24
  340. package/dist/recipes/toolRegistry.js.map +1 -1
  341. package/dist/recipes/tools/airtable.d.ts +15 -0
  342. package/dist/recipes/tools/airtable.js +240 -0
  343. package/dist/recipes/tools/airtable.js.map +1 -0
  344. package/dist/recipes/tools/caldiy.d.ts +13 -0
  345. package/dist/recipes/tools/caldiy.js +215 -0
  346. package/dist/recipes/tools/caldiy.js.map +1 -0
  347. package/dist/recipes/tools/circleci.d.ts +10 -0
  348. package/dist/recipes/tools/circleci.js +204 -0
  349. package/dist/recipes/tools/circleci.js.map +1 -0
  350. package/dist/recipes/tools/cloudflare.d.ts +13 -0
  351. package/dist/recipes/tools/cloudflare.js +211 -0
  352. package/dist/recipes/tools/cloudflare.js.map +1 -0
  353. package/dist/recipes/tools/confluence.js +11 -10
  354. package/dist/recipes/tools/confluence.js.map +1 -1
  355. package/dist/recipes/tools/datadog.js +13 -12
  356. package/dist/recipes/tools/datadog.js.map +1 -1
  357. package/dist/recipes/tools/docs.d.ts +18 -0
  358. package/dist/recipes/tools/docs.js +95 -0
  359. package/dist/recipes/tools/docs.js.map +1 -0
  360. package/dist/recipes/tools/elasticsearch.d.ts +11 -0
  361. package/dist/recipes/tools/elasticsearch.js +157 -0
  362. package/dist/recipes/tools/elasticsearch.js.map +1 -0
  363. package/dist/recipes/tools/fanOut.js +4 -4
  364. package/dist/recipes/tools/fanOut.js.map +1 -1
  365. package/dist/recipes/tools/figma.d.ts +12 -0
  366. package/dist/recipes/tools/figma.js +195 -0
  367. package/dist/recipes/tools/figma.js.map +1 -0
  368. package/dist/recipes/tools/file.js +43 -22
  369. package/dist/recipes/tools/file.js.map +1 -1
  370. package/dist/recipes/tools/github.js +162 -5
  371. package/dist/recipes/tools/github.js.map +1 -1
  372. package/dist/recipes/tools/gmail.js +45 -33
  373. package/dist/recipes/tools/gmail.js.map +1 -1
  374. package/dist/recipes/tools/grafana.d.ts +11 -0
  375. package/dist/recipes/tools/grafana.js +216 -0
  376. package/dist/recipes/tools/grafana.js.map +1 -0
  377. package/dist/recipes/tools/http.d.ts +1 -1
  378. package/dist/recipes/tools/http.js +10 -28
  379. package/dist/recipes/tools/http.js.map +1 -1
  380. package/dist/recipes/tools/hubspot.js +13 -12
  381. package/dist/recipes/tools/hubspot.js.map +1 -1
  382. package/dist/recipes/tools/index.d.ts +28 -0
  383. package/dist/recipes/tools/index.js +28 -0
  384. package/dist/recipes/tools/index.js.map +1 -1
  385. package/dist/recipes/tools/intercom.js +11 -10
  386. package/dist/recipes/tools/intercom.js.map +1 -1
  387. package/dist/recipes/tools/jira.js +13 -0
  388. package/dist/recipes/tools/jira.js.map +1 -1
  389. package/dist/recipes/tools/meetingNotes.js +2 -2
  390. package/dist/recipes/tools/monday.d.ts +22 -0
  391. package/dist/recipes/tools/monday.js +242 -0
  392. package/dist/recipes/tools/monday.js.map +1 -0
  393. package/dist/recipes/tools/mongodb.d.ts +19 -0
  394. package/dist/recipes/tools/mongodb.js +194 -0
  395. package/dist/recipes/tools/mongodb.js.map +1 -0
  396. package/dist/recipes/tools/notion.js +11 -10
  397. package/dist/recipes/tools/notion.js.map +1 -1
  398. package/dist/recipes/tools/obsidian.d.ts +15 -0
  399. package/dist/recipes/tools/obsidian.js +173 -0
  400. package/dist/recipes/tools/obsidian.js.map +1 -0
  401. package/dist/recipes/tools/outcomes.d.ts +15 -0
  402. package/dist/recipes/tools/outcomes.js +111 -0
  403. package/dist/recipes/tools/outcomes.js.map +1 -0
  404. package/dist/recipes/tools/paystack.d.ts +11 -0
  405. package/dist/recipes/tools/paystack.js +212 -0
  406. package/dist/recipes/tools/paystack.js.map +1 -0
  407. package/dist/recipes/tools/pipedrive.d.ts +16 -0
  408. package/dist/recipes/tools/pipedrive.js +234 -0
  409. package/dist/recipes/tools/pipedrive.js.map +1 -0
  410. package/dist/recipes/tools/postgres.d.ts +15 -0
  411. package/dist/recipes/tools/postgres.js +186 -0
  412. package/dist/recipes/tools/postgres.js.map +1 -0
  413. package/dist/recipes/tools/posthog.d.ts +16 -0
  414. package/dist/recipes/tools/posthog.js +219 -0
  415. package/dist/recipes/tools/posthog.js.map +1 -0
  416. package/dist/recipes/tools/redis.d.ts +9 -0
  417. package/dist/recipes/tools/redis.js +141 -0
  418. package/dist/recipes/tools/redis.js.map +1 -0
  419. package/dist/recipes/tools/resend.d.ts +8 -0
  420. package/dist/recipes/tools/resend.js +153 -0
  421. package/dist/recipes/tools/resend.js.map +1 -0
  422. package/dist/recipes/tools/salesforce.d.ts +16 -0
  423. package/dist/recipes/tools/salesforce.js +184 -0
  424. package/dist/recipes/tools/salesforce.js.map +1 -0
  425. package/dist/recipes/tools/sendgrid.d.ts +9 -0
  426. package/dist/recipes/tools/sendgrid.js +175 -0
  427. package/dist/recipes/tools/sendgrid.js.map +1 -0
  428. package/dist/recipes/tools/shopify.d.ts +16 -0
  429. package/dist/recipes/tools/shopify.js +266 -0
  430. package/dist/recipes/tools/shopify.js.map +1 -0
  431. package/dist/recipes/tools/snowflake.d.ts +16 -0
  432. package/dist/recipes/tools/snowflake.js +173 -0
  433. package/dist/recipes/tools/snowflake.js.map +1 -0
  434. package/dist/recipes/tools/stripe.js +13 -12
  435. package/dist/recipes/tools/stripe.js.map +1 -1
  436. package/dist/recipes/tools/supabase.d.ts +9 -0
  437. package/dist/recipes/tools/supabase.js +133 -0
  438. package/dist/recipes/tools/supabase.js.map +1 -0
  439. package/dist/recipes/tools/todoist.d.ts +15 -0
  440. package/dist/recipes/tools/todoist.js +228 -0
  441. package/dist/recipes/tools/todoist.js.map +1 -0
  442. package/dist/recipes/tools/twilio.d.ts +11 -0
  443. package/dist/recipes/tools/twilio.js +180 -0
  444. package/dist/recipes/tools/twilio.js.map +1 -0
  445. package/dist/recipes/tools/vercel.d.ts +9 -0
  446. package/dist/recipes/tools/vercel.js +146 -0
  447. package/dist/recipes/tools/vercel.js.map +1 -0
  448. package/dist/recipes/tools/webflow.d.ts +11 -0
  449. package/dist/recipes/tools/webflow.js +244 -0
  450. package/dist/recipes/tools/webflow.js.map +1 -0
  451. package/dist/recipes/tools/woocommerce.d.ts +18 -0
  452. package/dist/recipes/tools/woocommerce.js +260 -0
  453. package/dist/recipes/tools/woocommerce.js.map +1 -0
  454. package/dist/recipes/tools/wrapConnectorExecute.d.ts +25 -0
  455. package/dist/recipes/tools/wrapConnectorExecute.js +37 -0
  456. package/dist/recipes/tools/wrapConnectorExecute.js.map +1 -0
  457. package/dist/recipes/tools/zendesk.js +11 -10
  458. package/dist/recipes/tools/zendesk.js.map +1 -1
  459. package/dist/recipes/triggerVars.d.ts +15 -0
  460. package/dist/recipes/triggerVars.js +57 -0
  461. package/dist/recipes/triggerVars.js.map +1 -0
  462. package/dist/recipes/validation.d.ts +1 -1
  463. package/dist/recipes/validation.js +536 -12
  464. package/dist/recipes/validation.js.map +1 -1
  465. package/dist/recipes/yamlPositions.d.ts +1 -1
  466. package/dist/recipes/yamlPositions.js +7 -2
  467. package/dist/recipes/yamlPositions.js.map +1 -1
  468. package/dist/recipes/yamlRunner.d.ts +216 -4
  469. package/dist/recipes/yamlRunner.js +1030 -96
  470. package/dist/recipes/yamlRunner.js.map +1 -1
  471. package/dist/recipesHttp.d.ts +5 -0
  472. package/dist/recipesHttp.js +68 -6
  473. package/dist/recipesHttp.js.map +1 -1
  474. package/dist/resources.js +14 -1
  475. package/dist/resources.js.map +1 -1
  476. package/dist/riskSignals.d.ts +42 -0
  477. package/dist/riskSignals.js +197 -0
  478. package/dist/riskSignals.js.map +1 -0
  479. package/dist/riskTier.d.ts +9 -0
  480. package/dist/riskTier.js +48 -0
  481. package/dist/riskTier.js.map +1 -1
  482. package/dist/runLog.d.ts +53 -0
  483. package/dist/runLog.js +75 -16
  484. package/dist/runLog.js.map +1 -1
  485. package/dist/schemas/recipe.v1.json +360 -16
  486. package/dist/server.d.ts +60 -0
  487. package/dist/server.js +192 -31
  488. package/dist/server.js.map +1 -1
  489. package/dist/sessionCheckpoint.js +4 -1
  490. package/dist/sessionCheckpoint.js.map +1 -1
  491. package/dist/sessionDetail.d.ts +43 -0
  492. package/dist/sessionDetail.js +59 -0
  493. package/dist/sessionDetail.js.map +1 -0
  494. package/dist/settingsEnv.d.ts +47 -0
  495. package/dist/settingsEnv.js +88 -0
  496. package/dist/settingsEnv.js.map +1 -0
  497. package/dist/streamableHttp.js +44 -10
  498. package/dist/streamableHttp.js.map +1 -1
  499. package/dist/ta/backtest/abnday.d.ts +53 -0
  500. package/dist/ta/backtest/abnday.js +123 -0
  501. package/dist/ta/backtest/abnday.js.map +1 -0
  502. package/dist/ta/backtest/directional.d.ts +48 -0
  503. package/dist/ta/backtest/directional.js +103 -0
  504. package/dist/ta/backtest/directional.js.map +1 -0
  505. package/dist/ta/backtest/fundx.d.ts +67 -0
  506. package/dist/ta/backtest/fundx.js +264 -0
  507. package/dist/ta/backtest/fundx.js.map +1 -0
  508. package/dist/ta/backtest/fvg.d.ts +62 -0
  509. package/dist/ta/backtest/fvg.js +236 -0
  510. package/dist/ta/backtest/fvg.js.map +1 -0
  511. package/dist/ta/backtest/ichimoku.d.ts +41 -0
  512. package/dist/ta/backtest/ichimoku.js +146 -0
  513. package/dist/ta/backtest/ichimoku.js.map +1 -0
  514. package/dist/ta/backtest/ingest.d.ts +20 -0
  515. package/dist/ta/backtest/ingest.js +104 -0
  516. package/dist/ta/backtest/ingest.js.map +1 -0
  517. package/dist/ta/backtest/msb.d.ts +49 -0
  518. package/dist/ta/backtest/msb.js +162 -0
  519. package/dist/ta/backtest/msb.js.map +1 -0
  520. package/dist/ta/backtest/scoring.d.ts +33 -0
  521. package/dist/ta/backtest/scoring.js +82 -0
  522. package/dist/ta/backtest/scoring.js.map +1 -0
  523. package/dist/ta/backtest/summary.d.ts +20 -0
  524. package/dist/ta/backtest/summary.js +42 -0
  525. package/dist/ta/backtest/summary.js.map +1 -0
  526. package/dist/ta/backtest/tsmom.d.ts +72 -0
  527. package/dist/ta/backtest/tsmom.js +202 -0
  528. package/dist/ta/backtest/tsmom.js.map +1 -0
  529. package/dist/ta/backtest/volsq.d.ts +34 -0
  530. package/dist/ta/backtest/volsq.js +154 -0
  531. package/dist/ta/backtest/volsq.js.map +1 -0
  532. package/dist/ta/backtest/walkForward.d.ts +45 -0
  533. package/dist/ta/backtest/walkForward.js +136 -0
  534. package/dist/ta/backtest/walkForward.js.map +1 -0
  535. package/dist/ta/cycles.d.ts +15 -0
  536. package/dist/ta/cycles.js +31 -0
  537. package/dist/ta/cycles.js.map +1 -0
  538. package/dist/ta/desk/accrualEmitter.d.ts +59 -0
  539. package/dist/ta/desk/accrualEmitter.js +136 -0
  540. package/dist/ta/desk/accrualEmitter.js.map +1 -0
  541. package/dist/ta/desk/cellBacktest.d.ts +179 -0
  542. package/dist/ta/desk/cellBacktest.js +514 -0
  543. package/dist/ta/desk/cellBacktest.js.map +1 -0
  544. package/dist/ta/desk/cells/wpMaRejection.d.ts +49 -0
  545. package/dist/ta/desk/cells/wpMaRejection.js +141 -0
  546. package/dist/ta/desk/cells/wpMaRejection.js.map +1 -0
  547. package/dist/ta/desk/cells/wpVolumeClimax.d.ts +57 -0
  548. package/dist/ta/desk/cells/wpVolumeClimax.js +193 -0
  549. package/dist/ta/desk/cells/wpVolumeClimax.js.map +1 -0
  550. package/dist/ta/desk/collectors.d.ts +18 -0
  551. package/dist/ta/desk/collectors.js +450 -0
  552. package/dist/ta/desk/collectors.js.map +1 -0
  553. package/dist/ta/desk/contract.d.ts +51 -0
  554. package/dist/ta/desk/contract.js +261 -0
  555. package/dist/ta/desk/contract.js.map +1 -0
  556. package/dist/ta/desk/deskLedger.d.ts +36 -0
  557. package/dist/ta/desk/deskLedger.js +239 -0
  558. package/dist/ta/desk/deskLedger.js.map +1 -0
  559. package/dist/ta/desk/liqTape.d.ts +37 -0
  560. package/dist/ta/desk/liqTape.js +99 -0
  561. package/dist/ta/desk/liqTape.js.map +1 -0
  562. package/dist/ta/desk/post.d.ts +20 -0
  563. package/dist/ta/desk/post.js +65 -0
  564. package/dist/ta/desk/post.js.map +1 -0
  565. package/dist/ta/desk/render.d.ts +25 -0
  566. package/dist/ta/desk/render.js +398 -0
  567. package/dist/ta/desk/render.js.map +1 -0
  568. package/dist/ta/desk/surfaces.d.ts +216 -0
  569. package/dist/ta/desk/surfaces.js +472 -0
  570. package/dist/ta/desk/surfaces.js.map +1 -0
  571. package/dist/ta/desk/types.d.ts +174 -0
  572. package/dist/ta/desk/types.js +104 -0
  573. package/dist/ta/desk/types.js.map +1 -0
  574. package/dist/ta/index.d.ts +23 -0
  575. package/dist/ta/index.js +54 -0
  576. package/dist/ta/index.js.map +1 -0
  577. package/dist/ta/ledger.d.ts +44 -0
  578. package/dist/ta/ledger.js +95 -0
  579. package/dist/ta/ledger.js.map +1 -0
  580. package/dist/ta/levels.d.ts +21 -0
  581. package/dist/ta/levels.js +41 -0
  582. package/dist/ta/levels.js.map +1 -0
  583. package/dist/ta/swings.d.ts +30 -0
  584. package/dist/ta/swings.js +83 -0
  585. package/dist/ta/swings.js.map +1 -0
  586. package/dist/ta/types.d.ts +81 -0
  587. package/dist/ta/types.js +20 -0
  588. package/dist/ta/types.js.map +1 -0
  589. package/dist/telemetry.js +20 -9
  590. package/dist/telemetry.js.map +1 -1
  591. package/dist/tokenUsageTracker.d.ts +2 -1
  592. package/dist/tokenUsageTracker.js +38 -20
  593. package/dist/tokenUsageTracker.js.map +1 -1
  594. package/dist/tools/contextBundle.js +13 -9
  595. package/dist/tools/contextBundle.js.map +1 -1
  596. package/dist/tools/ctxGetTaskContext.js +8 -3
  597. package/dist/tools/ctxGetTaskContext.js.map +1 -1
  598. package/dist/tools/ctxQueryTraces.d.ts +18 -1
  599. package/dist/tools/ctxQueryTraces.js +176 -27
  600. package/dist/tools/ctxQueryTraces.js.map +1 -1
  601. package/dist/tools/enrichCommit.js +5 -2
  602. package/dist/tools/enrichCommit.js.map +1 -1
  603. package/dist/tools/getDependencyTree.js +2 -2
  604. package/dist/tools/getDependencyTree.js.map +1 -1
  605. package/dist/tools/getDiagnostics.js +3 -0
  606. package/dist/tools/getDiagnostics.js.map +1 -1
  607. package/dist/tools/getDocumentSymbols.js +5 -1
  608. package/dist/tools/getDocumentSymbols.js.map +1 -1
  609. package/dist/tools/getGitHotspots.js +12 -1
  610. package/dist/tools/getGitHotspots.js.map +1 -1
  611. package/dist/tools/getGitLog.js +5 -2
  612. package/dist/tools/getGitLog.js.map +1 -1
  613. package/dist/tools/getGitStatus.js +6 -1
  614. package/dist/tools/getGitStatus.js.map +1 -1
  615. package/dist/tools/getProjectContext.js +3 -1
  616. package/dist/tools/getProjectContext.js.map +1 -1
  617. package/dist/tools/getToolCapabilities.js +39 -4
  618. package/dist/tools/getToolCapabilities.js.map +1 -1
  619. package/dist/tools/gitWrite.js +12 -3
  620. package/dist/tools/gitWrite.js.map +1 -1
  621. package/dist/tools/github/composite.d.ts +1 -1
  622. package/dist/tools/github/composite.js +7 -7
  623. package/dist/tools/github/composite.js.map +1 -1
  624. package/dist/tools/github/pr.d.ts +6 -6
  625. package/dist/tools/github/pr.js +18 -11
  626. package/dist/tools/github/pr.js.map +1 -1
  627. package/dist/tools/httpClient.js +55 -3
  628. package/dist/tools/httpClient.js.map +1 -1
  629. package/dist/tools/index.d.ts +2 -1
  630. package/dist/tools/index.js +19 -12
  631. package/dist/tools/index.js.map +1 -1
  632. package/dist/tools/lsp.d.ts +6 -0
  633. package/dist/tools/lsp.js +81 -12
  634. package/dist/tools/lsp.js.map +1 -1
  635. package/dist/tools/previewEdit.js +16 -1
  636. package/dist/tools/previewEdit.js.map +1 -1
  637. package/dist/tools/resumeClaudeTask.js +17 -0
  638. package/dist/tools/resumeClaudeTask.js.map +1 -1
  639. package/dist/tools/searchAndReplace.js +9 -5
  640. package/dist/tools/searchAndReplace.js.map +1 -1
  641. package/dist/tools/searchTools.d.ts +26 -0
  642. package/dist/tools/searchTools.js +42 -2
  643. package/dist/tools/searchTools.js.map +1 -1
  644. package/dist/tools/terminal.js +23 -51
  645. package/dist/tools/terminal.js.map +1 -1
  646. package/dist/tools/transaction.d.ts +9 -1
  647. package/dist/tools/transaction.js +59 -4
  648. package/dist/tools/transaction.js.map +1 -1
  649. package/dist/tools/utils.d.ts +16 -0
  650. package/dist/tools/utils.js +77 -7
  651. package/dist/tools/utils.js.map +1 -1
  652. package/dist/transport.d.ts +31 -0
  653. package/dist/transport.js +117 -14
  654. package/dist/transport.js.map +1 -1
  655. package/dist/wireHaltPushDispatch.js +12 -0
  656. package/dist/wireHaltPushDispatch.js.map +1 -1
  657. package/dist/workerGateDecisionLog.d.ts +141 -0
  658. package/dist/workerGateDecisionLog.js +361 -0
  659. package/dist/workerGateDecisionLog.js.map +1 -0
  660. package/dist/workers/actionClass.d.ts +38 -0
  661. package/dist/workers/actionClass.js +155 -0
  662. package/dist/workers/actionClass.js.map +1 -0
  663. package/dist/workers/backtest.d.ts +68 -0
  664. package/dist/workers/backtest.js +113 -0
  665. package/dist/workers/backtest.js.map +1 -0
  666. package/dist/workers/contextRisk.d.ts +35 -0
  667. package/dist/workers/contextRisk.js +20 -0
  668. package/dist/workers/contextRisk.js.map +1 -0
  669. package/dist/workers/contextRiskScorer.d.ts +48 -0
  670. package/dist/workers/contextRiskScorer.js +94 -0
  671. package/dist/workers/contextRiskScorer.js.map +1 -0
  672. package/dist/workers/graduation.d.ts +61 -0
  673. package/dist/workers/graduation.js +112 -0
  674. package/dist/workers/graduation.js.map +1 -0
  675. package/dist/workers/outcomeStore.d.ts +98 -0
  676. package/dist/workers/outcomeStore.js +146 -0
  677. package/dist/workers/outcomeStore.js.map +1 -0
  678. package/dist/workers/outcomesCli.d.ts +34 -0
  679. package/dist/workers/outcomesCli.js +91 -0
  680. package/dist/workers/outcomesCli.js.map +1 -0
  681. package/dist/workers/runWorkerShadow.d.ts +90 -0
  682. package/dist/workers/runWorkerShadow.js +323 -0
  683. package/dist/workers/runWorkerShadow.js.map +1 -0
  684. package/dist/workers/shadowGate.d.ts +30 -0
  685. package/dist/workers/shadowGate.js +58 -0
  686. package/dist/workers/shadowGate.js.map +1 -0
  687. package/dist/workers/shadowObserver.d.ts +165 -0
  688. package/dist/workers/shadowObserver.js +203 -0
  689. package/dist/workers/shadowObserver.js.map +1 -0
  690. package/dist/workers/shadowReport.d.ts +16 -0
  691. package/dist/workers/shadowReport.js +61 -0
  692. package/dist/workers/shadowReport.js.map +1 -0
  693. package/dist/workers/shadowRun.d.ts +38 -0
  694. package/dist/workers/shadowRun.js +44 -0
  695. package/dist/workers/shadowRun.js.map +1 -0
  696. package/dist/workers/trustLevel.d.ts +82 -0
  697. package/dist/workers/trustLevel.js +100 -0
  698. package/dist/workers/trustLevel.js.map +1 -0
  699. package/dist/workers/worker.d.ts +49 -0
  700. package/dist/workers/worker.js +88 -0
  701. package/dist/workers/worker.js.map +1 -0
  702. package/dist/workers/workerGate.d.ts +101 -0
  703. package/dist/workers/workerGate.js +210 -0
  704. package/dist/workers/workerGate.js.map +1 -0
  705. package/dist/workers/workerLevelStore.d.ts +33 -0
  706. package/dist/workers/workerLevelStore.js +87 -0
  707. package/dist/workers/workerLevelStore.js.map +1 -0
  708. package/dist/workers/workerLoader.d.ts +7 -0
  709. package/dist/workers/workerLoader.js +31 -0
  710. package/dist/workers/workerLoader.js.map +1 -0
  711. package/dist/writeFileAtomic.js +40 -13
  712. package/dist/writeFileAtomic.js.map +1 -1
  713. package/package.json +14 -6
  714. package/scripts/mcp-stdio-shim.cjs +247 -87
  715. package/templates/CLAUDE.bridge.md +1 -1
  716. package/templates/recipes/dependency-bump.yaml +33 -0
  717. package/templates/recipes/incident-to-pr.yaml +187 -0
  718. package/templates/recipes/outcome-ingester.yaml +53 -0
  719. package/templates/recipes/release-notes.yaml +30 -0
  720. package/templates/recipes/triage-failing-tests-autofile.yaml +152 -0
  721. package/templates/recipes/triage-failing-tests.yaml +38 -0
  722. package/templates/workers/dependency-upkeep.worker.yaml +26 -0
  723. package/templates/workers/release-notes.worker.yaml +17 -0
  724. package/templates/workers/test-guardian.worker.yaml +24 -0
  725. package/deploy/README.md +0 -172
  726. package/deploy/bootstrap-new-vps.sh +0 -364
  727. package/deploy/bootstrap-vps.sh +0 -192
  728. package/deploy/claude-ide-bridge.service.template +0 -67
  729. package/deploy/claude-ide-bridge@.service +0 -31
  730. package/deploy/deploy-dashboard.sh +0 -198
  731. package/deploy/deploy-landing.sh +0 -136
  732. package/deploy/ecosystem.config.js.example +0 -36
  733. package/deploy/install-vps-service.sh +0 -240
  734. package/deploy/macos/README.md +0 -153
  735. package/deploy/macos/com.patchwork.bridge.plist.template +0 -54
  736. package/deploy/macos/com.patchwork.tunnel.plist.template +0 -76
  737. package/deploy/macos/install-mac-bridge.sh +0 -244
  738. package/deploy/macos/uninstall-mac-bridge.sh +0 -22
  739. package/deploy/nginx-claude-bridge.conf.template +0 -129
@@ -0,0 +1,187 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/patchworkos/recipes/main/schema/recipe.v1.json
2
+ apiVersion: patchwork.sh/v1
3
+ version: 1.0.0
4
+ name: incident-to-pr
5
+ description: |
6
+ FLAGSHIP — the end-to-end AI-native incident-response loop. Turns a
7
+ production incident into a reviewed, ready-to-merge pull request. Every
8
+ primitive Patchwork added during the connector + judge→refine campaign
9
+ shows up here in one pipeline:
10
+
11
+ 1. investigate — an agent root-causes the incident against THIS repo
12
+ using the read/git tools it has via MCP (no writes).
13
+ 2. draft_fix — an agent writes the smallest correct patch + a PR
14
+ title/body. This is the draft the judge reviews.
15
+ 3. review_fix — a JUDGE step (agent.kind: judge) gives the draft a
16
+ cold-eyes senior-engineer review. On `request_changes`
17
+ it DRIVES the judge→refine loop: the draft step is
18
+ re-run with the judge's fix-list injected, up to
19
+ `max_revisions` cycles, until the judge approves. This
20
+ is the moat — quality is gated by an AI reviewer, not
21
+ by hope.
22
+ 4. open_pr — an agent opens the PR via the githubCreatePR MCP tool.
23
+ Opening a PR is a high-risk WRITE, so the runtime
24
+ approval gate pauses here for a human to sign off — the
25
+ human-in-the-loop checkpoint before anything lands.
26
+ 5. notify — posts the PR link + judge verdict to Slack.
27
+
28
+ REQUIREMENTS
29
+ - Bridge running with `--driver subprocess` so the agent steps have MCP
30
+ tool access (read files, git, githubCreatePR).
31
+ - GitHub connector connected (for the PR) and Slack connector connected
32
+ (for the alert) — visit /connections, or `patchwork connect github` /
33
+ `patchwork connect slack`.
34
+ - An approval gate of "high" or "all" to exercise the open_pr pause
35
+ (with the gate off, the PR opens unattended).
36
+
37
+ MANUAL RUN
38
+ patchwork recipe run incident-to-pr \
39
+ --var INCIDENT_TITLE="checkout 500s on /api/pay" \
40
+ --var STACK_TRACE="TypeError: cannot read 'id' of undefined at pay.ts:42"
41
+
42
+ WEBHOOK CONVERSION (PagerDuty / Sentry / Datadog)
43
+ Replace the trigger block with:
44
+ trigger:
45
+ type: webhook
46
+ path: /hooks/incident-to-pr
47
+ and reference {{payload.title}} / {{payload.body}} in place of the vars.
48
+
49
+ trigger:
50
+ type: manual
51
+ vars:
52
+ - name: INCIDENT_TITLE
53
+ description: "One-line incident summary (seeds the PR title)"
54
+ required: true
55
+ - name: STACK_TRACE
56
+ description: "Stack trace / error text to root-cause (optional, recommended)"
57
+ required: false
58
+ - name: SEVERITY
59
+ description: "critical | high | medium | low"
60
+ required: false
61
+ default: "high"
62
+ - name: SLACK_CHANNEL
63
+ description: "Slack channel for the resolution alert"
64
+ required: false
65
+ default: "#incidents"
66
+
67
+ steps:
68
+ - id: investigate
69
+ agent:
70
+ driver: claude-code
71
+ prompt: |
72
+ A production incident has fired. Root-cause it against THIS repository.
73
+
74
+ Incident: {{INCIDENT_TITLE}}
75
+ Severity: {{SEVERITY}}
76
+ Stack trace / error:
77
+ {{STACK_TRACE}}
78
+
79
+ Use the read and git tools available to you — read files, search the
80
+ codebase, inspect recent commits and run git blame on the implicated
81
+ files. Do NOT write any files in this step.
82
+
83
+ Respond with a concise root-cause analysis containing:
84
+ - the offending file(s) and line(s)
85
+ - what is going wrong and why
86
+ - the commit that most likely introduced it (if identifiable)
87
+ - the smallest correct fix you would make
88
+ into: investigation
89
+ risk: low
90
+
91
+ - id: draft_fix
92
+ awaits:
93
+ - investigate
94
+ agent:
95
+ driver: claude-code
96
+ prompt: |
97
+ Using the root-cause analysis below, write a concrete, MINIMAL fix.
98
+
99
+ Root-cause analysis:
100
+ {{investigation}}
101
+
102
+ Output exactly these four markdown sections and nothing else:
103
+
104
+ ## PR title
105
+ <conventional-commit-style title, <= 70 chars>
106
+
107
+ ## Summary
108
+ <2-4 sentences: what the bug was and how this change fixes it>
109
+
110
+ ## Patch
111
+ <a unified diff of the smallest change that fixes the root cause —
112
+ touch as few lines as possible; no drive-by refactors>
113
+
114
+ ## Test
115
+ <the test you would add or modify to prove the fix (a diff), or a
116
+ short note if existing coverage already exercises the path>
117
+
118
+ Do NOT write files in this step — only emit the four sections.
119
+ into: fix_draft
120
+ risk: low
121
+
122
+ - id: review_fix
123
+ awaits:
124
+ - draft_fix
125
+ agent:
126
+ kind: judge
127
+ reviews: fix_draft
128
+ max_revisions: 2
129
+ on_exhausted: proceed
130
+ driver: claude-code
131
+ prompt: |
132
+ You are a senior engineer doing a cold-eyes review of the proposed
133
+ fix below BEFORE it becomes a pull request. Judge it on:
134
+ - correctness: does it actually fix the root cause?
135
+ - minimality: smallest possible change, nothing unrelated?
136
+ - safety: regression risk, edge cases, missing guards?
137
+ - tests: is there a test that would FAIL without the fix?
138
+ - PR hygiene: clear, accurate title and summary?
139
+
140
+ Return a verdict: approve | request_changes | unparseable.
141
+ If request_changes, list concrete, actionable fixes — each one a
142
+ specific change the author must make. Those drive the revision loop;
143
+ the draft is regenerated with your fix-list and re-reviewed.
144
+ into: review
145
+ risk: low
146
+
147
+ - id: open_pr
148
+ awaits:
149
+ - review_fix
150
+ agent:
151
+ driver: claude-code
152
+ prompt: |
153
+ The fix below has passed judge review. Open a pull request for it.
154
+
155
+ Approved fix:
156
+ {{fix_draft}}
157
+
158
+ Do this:
159
+ 1. Create a branch off the default branch named
160
+ fix/<short-slug-derived-from-the-PR-title>.
161
+ 2. Apply the change from the "## Patch" section and add the test
162
+ from the "## Test" section.
163
+ 3. Open a pull request using the githubCreatePR tool, with the
164
+ "## PR title" as the title and the "## Summary" — followed by a
165
+ line "Fixes incident: {{INCIDENT_TITLE}}" — as the body.
166
+
167
+ Opening a PR is a write action; it will pause at the approval gate
168
+ for a human to confirm before it lands. After it succeeds, respond
169
+ with ONLY this JSON object (no markdown fences):
170
+ {"prUrl": "<url>", "prNumber": <number>, "branch": "<branch>"}
171
+
172
+ If the GitHub connector is not connected, respond with:
173
+ {"error": "GitHub connector not connected — visit /connections"}
174
+ into: pr
175
+ risk: high
176
+
177
+ - id: notify
178
+ awaits:
179
+ - open_pr
180
+ tool: slack.post_message
181
+ channel: "{{SLACK_CHANNEL}}"
182
+ text: |
183
+ :white_check_mark: Incident fix ready for review
184
+ *Incident:* {{INCIDENT_TITLE}} ({{SEVERITY}})
185
+ *Pull request:* {{pr}}
186
+ *Judge review:* {{review}}
187
+ risk: medium
@@ -0,0 +1,53 @@
1
+ # yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
2
+ #
3
+ # Outcome Ingester — polls GitHub for issues filed by the Test Guardian Worker
4
+ # and records their dispositions (confirmed / junk / unknown) to
5
+ # ~/.patchwork/outcome-log.jsonl. The worker trust-replay reads this file to
6
+ # flip junk filings to good:false past the 24h durability window, so the ramp
7
+ # demotes workers that file noise rather than rewarding them.
8
+ #
9
+ # Schedule: every 6 hours. Stagger from the triage recipe so the outcome poll
10
+ # runs well after new issues have settled (most "junk" signals appear within
11
+ # hours of filing).
12
+ #
13
+ # Prerequisite: GitHub connector authorised. This ingester scopes its poll by
14
+ # the `label` var below (default "test-failure" — the exact label the
15
+ # triage-failing-tests-autofile recipe's `file_issue` step applies). If you
16
+ # change the label the worker files under, change `label` here to match, or the
17
+ # poll returns nothing and no dispositions are ever recorded.
18
+ apiVersion: patchwork.sh/v1
19
+ name: outcome-ingester
20
+ description: Poll GitHub for Test Guardian issues and record outcome dispositions to the trust-replay store.
21
+ trigger:
22
+ type: cron
23
+ at: "0 */6 * * *"
24
+ vars:
25
+ - name: repo
26
+ default: ""
27
+ description: "owner/repo to poll — SET THIS to the SAME repo the autofile recipe files against; a blank repo makes the search qualifier malformed (`repo: label:...`) so no worker issues are found and no dispositions are recorded"
28
+ - name: label
29
+ default: "test-failure"
30
+ description: "Label that marks worker-filed issues (default matches the Test Guardian Worker)"
31
+ - name: max
32
+ default: "50"
33
+ description: "Max issues to poll per run"
34
+ steps:
35
+ - id: list_issues
36
+ tool: github.search_issues
37
+ query: "repo:{{repo}} label:{{label}}"
38
+ max: 50
39
+ into: issues
40
+
41
+ # Deterministic — no LLM in the classification path. An earlier LLM-judge
42
+ # agent step here was non-deterministic in production: the SAME closed/
43
+ # COMPLETED issues flipped between "confirmed" and "unknown" on alternating
44
+ # cron fires, and checkedAt was a hallucinated epoch spanning 2023-2027.
45
+ # Trust-replay reads this log to decide good:true/false, so the
46
+ # classification step MUST be pure data (state/stateReason/labels) plus
47
+ # the real clock, not a model's freehand judgment.
48
+ - id: classify_and_persist
49
+ when: "{{issues.json}}"
50
+ tool: outcomes.classify_issues
51
+ issues: "{{issues.json}}"
52
+ recipeName: outcome-ingester
53
+ into: outcome_result
@@ -0,0 +1,30 @@
1
+ # yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
2
+ # Body for the Release Worker (templates/workers/release-notes.worker.yaml).
3
+ # Self-waking on every commit (git_hook → onGitCommit, wired in #1016/#1018).
4
+ apiVersion: patchwork.sh/v1
5
+ name: release-notes
6
+ description: After a commit lands, draft a changelog entry from the new commits into the inbox.
7
+ trigger:
8
+ type: git_hook
9
+ event: post-commit
10
+ steps:
11
+ - tool: git.log_since
12
+ since: 24h
13
+ into: commits
14
+ - agent:
15
+ prompt: |
16
+ New commits landed in the last 24h:
17
+ {{commits}}
18
+
19
+ Write a concise changelog entry as a markdown bullet list — one line per
20
+ user-facing change, grouped under feat / fix / chore. Omit pure noise
21
+ (merge commits, formatting-only). If nothing is user-facing, say so.
22
+ # subprocess `claude -p` under your existing subscription (no API key)
23
+ driver: claude-code
24
+ into: notes
25
+ - tool: file.write
26
+ path: ~/.patchwork/inbox/release-notes-{{date}}.md
27
+ content: |
28
+ # Release notes draft — {{date}}
29
+
30
+ {{notes}}
@@ -0,0 +1,152 @@
1
+ # yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
2
+ #
3
+ # OPT-IN variant of `triage-failing-tests` for the Test Guardian Worker.
4
+ #
5
+ # This is the "make it real" recipe: it does everything the base recipe does
6
+ # (correlate the failure, write a triage note) AND files a GitHub issue — an
7
+ # explicit, RISKY, owned action (`github.create_issue` → the `issue` action
8
+ # class: compensable + brand-exposed). It is the action that lets the worker's
9
+ # trust dial actually move.
10
+ #
11
+ # DEFAULT-OFF: the Test Guardian Worker ships pointing at the base
12
+ # `triage-failing-tests` (draft-to-file only), so nothing here runs until you
13
+ # switch the worker to this recipe. To enable, IN THIS ORDER:
14
+ # 1. enable the `worker.autonomy` feature flag FIRST — this is what GATES the
15
+ # github.create_issue step for human approval until the worker EARNS L4
16
+ # trust on the `issue` class (then it flows autonomously);
17
+ # 2. point `recipe:` in templates/workers/test-guardian.worker.yaml at
18
+ # `triage-failing-tests-autofile`;
19
+ # 3. set `trigger.vars.repo` below to your "owner/repo".
20
+ #
21
+ # ⚠ ORDER MATTERS. With `worker.autonomy` OFF, steps 2+3 ALONE file a real issue
22
+ # on EVERY failing test run with NO approval — an automated (on_test_run) flat
23
+ # run is not gated unless the flag is on. The flag ADDS the gate; it is not what
24
+ # enables filing. Enable the flag first so the very first filing is gated.
25
+ # (Expect more approvals up front; the payoff — autonomous filing — comes after L4.)
26
+ apiVersion: patchwork.sh/v1
27
+ name: triage-failing-tests-autofile
28
+ description: On a failing test run, write a triage note and FILE a GitHub issue (opt-in; gated by the worker trust ramp).
29
+ trigger:
30
+ type: on_test_run
31
+ filter: failure
32
+ vars:
33
+ # REQUIRED to enable — the repository the issue is filed against.
34
+ - name: repo
35
+ default: ""
36
+ description: "owner/repo the issue is filed against (set this to enable)"
37
+ steps:
38
+ - id: get_commits
39
+ tool: git.log_since
40
+ since: 12h
41
+ into: recent
42
+ - id: triage_agent
43
+ agent:
44
+ prompt: |
45
+ Tests just failed. Runner: {{runner}}. Failed {{failed}} / {{total}}.
46
+
47
+ Failures:
48
+ {{failures}}
49
+
50
+ Recent commits (last 12h) that may be responsible:
51
+ {{recent}}
52
+
53
+ Write a triage note (≤5 sentences): (1) which test(s) failed, (2) the
54
+ single most likely cause, (3) the suspect commit if any, (4) the first
55
+ command to run to confirm.
56
+ driver: claude-code
57
+ into: triage
58
+ # Dedup read (issue-hygiene, part 1). Pull the currently-OPEN `test-failure`
59
+ # issues so the decision step below can avoid filing a duplicate of a failure
60
+ # that is already tracked. `assignee: any` is REQUIRED — worker-filed issues
61
+ # are unassigned, so the default `@me` filter would never see them.
62
+ # `optional: true` makes this FAIL-OPEN: if the list call fails (token expiry,
63
+ # rate limit, MCP outage) the run continues and `{{existing}}` is empty — a
64
+ # missed dedup (one possible duplicate) is strictly better than a blocked real
65
+ # filing. Dedup must never gate a genuine failure behind GitHub availability.
66
+ # `when: "{{repo}}"` skips this read when `repo` is unset: with an empty repo
67
+ # the connector would drop the owner/repo filter and dedup against EVERY
68
+ # accessible repo's `test-failure` issues (cross-repo poisoning). Skipping
69
+ # leaves `{{existing}}` empty → "not a duplicate"; the misconfig still surfaces
70
+ # loudly at file_issue (which hard-errors on an empty repo).
71
+ - id: list_existing
72
+ when: "{{repo}}"
73
+ optional: true
74
+ tool: github.list_issues
75
+ repo: "{{repo}}"
76
+ labels:
77
+ - test-failure
78
+ state: open
79
+ assignee: any
80
+ max: 30
81
+ into: existing
82
+ # Decision gate (issue-hygiene, part 2). A worker triage is a LEAD, not a
83
+ # verified diagnosis — the on_test_run event can fire on a flake, a transient,
84
+ # or an already-fixed failure (e.g. #1046: a triage that confidently blamed a
85
+ # commit for a test that actually passes on `main`). This single step answers
86
+ # the worker's real question — "is this worth filing a NEW issue?" — which is
87
+ # true ONLY when the failure (1) REPRODUCES on an isolated re-run AND (2) is
88
+ # NOT already covered by an open issue from `list_existing`. A `false` run
89
+ # still writes the draft note (below) but files NO issue: strictly noise-
90
+ # reducing, never blocks a real, novel failure.
91
+ # `optional: true` is a deliberate FAIL-CLOSED-ON-FILING guard: if THIS agent
92
+ # step itself fails (the re-run crashes, the model returns silent-fail /
93
+ # narration-only output), the run does NOT halt — `{{should_file}}` is left
94
+ # unset, so the file_issue gate below renders falsy and SKIPS. A decision we
95
+ # couldn't make must never auto-file a brand-exposed issue, and the triage note
96
+ # (written next) is preserved either way.
97
+ - id: decide_file
98
+ optional: true
99
+ agent:
100
+ prompt: |
101
+ A test run reported failures and this triage was written:
102
+
103
+ {{triage}}
104
+
105
+ Open issues already labelled `test-failure` (JSON; may be empty or an
106
+ error object if the lookup failed — treat anything other than a clear
107
+ matching issue as "not a duplicate"):
108
+ {{existing}}
109
+
110
+ Do BOTH checks, then decide whether to file a NEW issue:
111
+ 1. REPRODUCE: re-run ONLY the specific failing test(s) named above, in
112
+ isolation, on the current checkout — e.g.
113
+ `npx vitest run <file> -t "<test name>"`. A test that PASSES on
114
+ isolated re-run is a flake / transient / already-fixed.
115
+ 2. DEDUP: check whether an OPEN issue above already tracks THIS failure
116
+ (same test/file and root cause). If so, it is a duplicate.
117
+
118
+ Output EXACTLY one word and nothing else:
119
+ true — the failure REPRODUCED *and* is NOT already tracked (file it)
120
+ false — it did NOT reproduce, OR an open issue already covers it
121
+ driver: claude-code
122
+ into: should_file
123
+ - id: write_note
124
+ tool: file.write
125
+ path: ~/.patchwork/inbox/test-triage-{{date}}-{{time}}.md
126
+ content: |
127
+ # Test triage — {{date}} {{time}}
128
+
129
+ Runner {{runner}} · failed {{failed}}/{{total}} · file new issue: {{should_file}}
130
+
131
+ {{triage}}
132
+ # The risky owned action. Runs AFTER the draft is written — and the two steps
133
+ # between the note and here (list_existing, decide_file) are BOTH `optional`,
134
+ # so a gate rejection, a missing `repo`, a non-reproducing failure, a duplicate,
135
+ # OR a crashed decision agent never halts before write_note: the triage note is
136
+ # always preserved. Files ONLY when the decision step emitted a truthy verdict —
137
+ # `when` skips the step (not a failure) on a falsy guard ("", "false", "0",
138
+ # "null", "undefined"), which also covers the unset-var case when decide_file
139
+ # failed fail-open.
140
+ - id: file_issue
141
+ when: "{{should_file}}"
142
+ tool: github.create_issue
143
+ repo: "{{repo}}"
144
+ title: "Test triage {{date}}: {{runner}} failing {{failed}}/{{total}}"
145
+ body: |
146
+ {{triage}}
147
+
148
+ ---
149
+ _Filed by the Test Guardian Worker from a failing {{runner}} run (reproduced on isolated re-run; no open duplicate)._
150
+ labels:
151
+ - test-failure
152
+ into: filed_issue
@@ -0,0 +1,38 @@
1
+ # yaml-language-server: $schema=https://patchwork.dev/schemas/recipe.v1.json
2
+ # Body for the Test Guardian Worker
3
+ # (templates/workers/test-guardian.worker.yaml). Self-waking on a FAILING test
4
+ # run (on_test_run.filter: failure). Correlates the failure with recent commits
5
+ # and writes a triage note — richer than the plain watch-failing-tests recipe.
6
+ apiVersion: patchwork.sh/v1
7
+ name: triage-failing-tests
8
+ description: On a failing test run, correlate the failure with recent commits and write a triage note.
9
+ trigger:
10
+ type: on_test_run
11
+ filter: failure
12
+ steps:
13
+ - tool: git.log_since
14
+ since: 12h
15
+ into: recent
16
+ - agent:
17
+ prompt: |
18
+ Tests just failed. Runner: {{runner}}. Failed {{failed}} / {{total}}.
19
+
20
+ Failures:
21
+ {{failures}}
22
+
23
+ Recent commits (last 12h) that may be responsible:
24
+ {{recent}}
25
+
26
+ Write a triage note (≤5 sentences): (1) which test(s) failed, (2) the
27
+ single most likely cause, (3) the suspect commit if any, (4) the first
28
+ command to run to confirm.
29
+ driver: claude-code
30
+ into: triage
31
+ - tool: file.write
32
+ path: ~/.patchwork/inbox/test-triage-{{date}}-{{time}}.md
33
+ content: |
34
+ # Test triage — {{date}} {{time}}
35
+
36
+ Runner {{runner}} · failed {{failed}}/{{total}}
37
+
38
+ {{triage}}
@@ -0,0 +1,26 @@
1
+ # Dependency-upkeep worker — top-right beachhead. The classic low-blast,
2
+ # continuous, verifiable job to land first (the wedge): watch for outdated /
3
+ # vulnerable deps and open a bump PR.
4
+ id: dependency-upkeep-worker
5
+ name: Dependency Upkeep Worker
6
+ sector: engineering
7
+ recipe: dependency-bump
8
+ responsibilities:
9
+ - Audit dependencies for outdated / vulnerable packages
10
+ - Open a bump PR with the changelog and advisory links
11
+ owns:
12
+ - deps-read # auditDependencies / getSecurityAdvisories — read-only
13
+ - vcs-local # gitCommit / gitCheckout on a branch — reversible
14
+ - vcs-remote # githubCreatePR — compensable + brand-exposed
15
+ # Opening a PR (vcs-remote) is compensable — but there is NO outcome grader for
16
+ # PRs yet (OutcomeStore is issue-URL-keyed only), so a bump PR nobody reviews
17
+ # would fold good:true past the 24h durability window: the same trust-by-neglect
18
+ # the issue-class fix (#1064) closed, surviving on the PR path. Cap below the
19
+ # compensable auto-allow rung (L2) so PR-opening stays human-approved regardless
20
+ # of earned level — mirroring test-guardian's `issue` cap. Raise to 3 (open PRs
21
+ # autonomously, merging still human) once a PR-outcome grader exists (merged/
22
+ # closed-state detection feeding the OutcomeStore).
23
+ autonomyCeiling: 1
24
+ competence:
25
+ mean: 0.8
26
+ strength: 4
@@ -0,0 +1,17 @@
1
+ # Release worker — top-right beachhead (high task-impact × high autonomy-tolerance).
2
+ # Body: a chained recipe triggered on merge-to-main that drafts release notes.
3
+ # Reversible, verifiable, internal → fast ramp evidence.
4
+ id: release-notes-worker
5
+ name: Release Worker
6
+ sector: engineering
7
+ recipe: release-notes # the recipe that forms this worker's body
8
+ responsibilities:
9
+ - Watch merges to main and draft release notes / changelog entries
10
+ - Summarize the diff and link the PRs in the range
11
+ owns:
12
+ - vcs-read # getGitStatus / getGitDiff / getGitLog — reversible, low blast
13
+ - fs-write # editText / createFile (the changelog) — reversible
14
+ autonomyCeiling: 4 # internal + reversible: may earn full autonomy
15
+ competence: # shipped competence (a prior), NOT trust — trust earns locally
16
+ mean: 0.85
17
+ strength: 4
@@ -0,0 +1,24 @@
1
+ # Test-guardian worker — top-right beachhead. Fires on a test-run failure
2
+ # (on_test_run trigger), investigates the failure, and files an issue. Reversible
3
+ # investigation + compensable issue creation → may earn full autonomy on triage.
4
+ id: test-guardian-worker
5
+ name: Test Guardian Worker
6
+ sector: engineering
7
+ recipe: triage-failing-tests
8
+ responsibilities:
9
+ - On a failing test run, investigate the stack trace and identify the cause
10
+ - File / update an issue with the failure summary and the suspect commit
11
+ owns:
12
+ - ci # runTests (re-runnable) — reversible
13
+ - vcs-read # getGitDiff / gitBlame to find the suspect commit
14
+ - issue # githubCreateIssue / addLinearComment — compensable + brand-exposed
15
+ # Capped below the compensable auto-allow threshold (L2): the ramp has only
16
+ # been validated on synthetic data (one planted break, 16 gate decisions) and
17
+ # the outcome-verification signal (confirmed/junk labelling, see outcomeStore.ts)
18
+ # has no real-world recall/false-negative track record yet. Earned trust on
19
+ # `issue` can climb, but auto-filing stays gated for human approval until that
20
+ # signal exists. Raise once a real-world graduation is observed and confirmed.
21
+ autonomyCeiling: 1
22
+ competence:
23
+ mean: 0.8
24
+ strength: 4