patchwork-os 0.2.0-alpha.9 → 0.2.0-beta.0

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 (581) hide show
  1. package/README.bridge.md +6 -0
  2. package/README.md +315 -35
  3. package/deploy/bootstrap-new-vps.sh +12 -12
  4. package/deploy/bootstrap-vps.sh +187 -0
  5. package/deploy/deploy-dashboard.sh +174 -0
  6. package/deploy/deploy-landing.sh +136 -0
  7. package/dist/activationMetrics.d.ts +67 -0
  8. package/dist/activationMetrics.js +255 -0
  9. package/dist/activationMetrics.js.map +1 -0
  10. package/dist/activityLog.d.ts +49 -0
  11. package/dist/activityLog.js +78 -0
  12. package/dist/activityLog.js.map +1 -1
  13. package/dist/approvalHttp.d.ts +49 -2
  14. package/dist/approvalHttp.js +217 -21
  15. package/dist/approvalHttp.js.map +1 -1
  16. package/dist/approvalInsights.d.ts +49 -0
  17. package/dist/approvalInsights.js +97 -0
  18. package/dist/approvalInsights.js.map +1 -0
  19. package/dist/approvalQueue.d.ts +27 -1
  20. package/dist/approvalQueue.js +123 -3
  21. package/dist/approvalQueue.js.map +1 -1
  22. package/dist/approvalSignals.d.ts +124 -0
  23. package/dist/approvalSignals.js +512 -0
  24. package/dist/approvalSignals.js.map +1 -0
  25. package/dist/automation.d.ts +57 -0
  26. package/dist/automation.js +156 -59
  27. package/dist/automation.js.map +1 -1
  28. package/dist/automationSuggestions.d.ts +79 -0
  29. package/dist/automationSuggestions.js +150 -0
  30. package/dist/automationSuggestions.js.map +1 -0
  31. package/dist/bridge.d.ts +3 -0
  32. package/dist/bridge.js +174 -143
  33. package/dist/bridge.js.map +1 -1
  34. package/dist/bridgeToken.js +57 -19
  35. package/dist/bridgeToken.js.map +1 -1
  36. package/dist/ccPermissions.d.ts +15 -0
  37. package/dist/ccPermissions.js +21 -4
  38. package/dist/ccPermissions.js.map +1 -1
  39. package/dist/claudeDriver.js +74 -16
  40. package/dist/claudeDriver.js.map +1 -1
  41. package/dist/claudeOrchestrator.d.ts +1 -1
  42. package/dist/claudeOrchestrator.js +14 -8
  43. package/dist/claudeOrchestrator.js.map +1 -1
  44. package/dist/commands/dashboard.js +1 -1
  45. package/dist/commands/dashboard.js.map +1 -1
  46. package/dist/commands/launchd.d.ts +2 -0
  47. package/dist/commands/launchd.js +94 -0
  48. package/dist/commands/launchd.js.map +1 -0
  49. package/dist/commands/patchworkInit.d.ts +8 -0
  50. package/dist/commands/patchworkInit.js +77 -11
  51. package/dist/commands/patchworkInit.js.map +1 -1
  52. package/dist/commands/recipe.d.ts +289 -0
  53. package/dist/commands/recipe.js +1359 -0
  54. package/dist/commands/recipe.js.map +1 -0
  55. package/dist/commands/recipeInstall.d.ts +150 -0
  56. package/dist/commands/recipeInstall.js +647 -0
  57. package/dist/commands/recipeInstall.js.map +1 -0
  58. package/dist/commands/tracesExport.d.ts +83 -0
  59. package/dist/commands/tracesExport.js +269 -0
  60. package/dist/commands/tracesExport.js.map +1 -0
  61. package/dist/commands/tracesImport.d.ts +56 -0
  62. package/dist/commands/tracesImport.js +161 -0
  63. package/dist/commands/tracesImport.js.map +1 -0
  64. package/dist/config.d.ts +22 -1
  65. package/dist/config.js +108 -9
  66. package/dist/config.js.map +1 -1
  67. package/dist/connectorRoutes.d.ts +43 -0
  68. package/dist/connectorRoutes.js +1609 -0
  69. package/dist/connectorRoutes.js.map +1 -0
  70. package/dist/connectors/asana.d.ts +198 -0
  71. package/dist/connectors/asana.js +679 -0
  72. package/dist/connectors/asana.js.map +1 -0
  73. package/dist/connectors/baseConnector.d.ts +153 -0
  74. package/dist/connectors/baseConnector.js +336 -0
  75. package/dist/connectors/baseConnector.js.map +1 -0
  76. package/dist/connectors/confluence.d.ts +111 -0
  77. package/dist/connectors/confluence.js +406 -0
  78. package/dist/connectors/confluence.js.map +1 -0
  79. package/dist/connectors/datadog.d.ts +116 -0
  80. package/dist/connectors/datadog.js +385 -0
  81. package/dist/connectors/datadog.js.map +1 -0
  82. package/dist/connectors/discord.d.ts +150 -0
  83. package/dist/connectors/discord.js +543 -0
  84. package/dist/connectors/discord.js.map +1 -0
  85. package/dist/connectors/fixtureLibrary.d.ts +21 -0
  86. package/dist/connectors/fixtureLibrary.js +70 -0
  87. package/dist/connectors/fixtureLibrary.js.map +1 -0
  88. package/dist/connectors/fixtureRecorder.d.ts +1 -0
  89. package/dist/connectors/fixtureRecorder.js +35 -0
  90. package/dist/connectors/fixtureRecorder.js.map +1 -0
  91. package/dist/connectors/github.js +17 -18
  92. package/dist/connectors/github.js.map +1 -1
  93. package/dist/connectors/gitlab.d.ts +180 -0
  94. package/dist/connectors/gitlab.js +582 -0
  95. package/dist/connectors/gitlab.js.map +1 -0
  96. package/dist/connectors/gmail.d.ts +4 -1
  97. package/dist/connectors/gmail.js +149 -27
  98. package/dist/connectors/gmail.js.map +1 -1
  99. package/dist/connectors/googleCalendar.d.ts +4 -1
  100. package/dist/connectors/googleCalendar.js +88 -25
  101. package/dist/connectors/googleCalendar.js.map +1 -1
  102. package/dist/connectors/googleDrive.d.ts +34 -0
  103. package/dist/connectors/googleDrive.js +321 -0
  104. package/dist/connectors/googleDrive.js.map +1 -0
  105. package/dist/connectors/htmlEscape.d.ts +5 -0
  106. package/dist/connectors/htmlEscape.js +13 -0
  107. package/dist/connectors/htmlEscape.js.map +1 -0
  108. package/dist/connectors/hubspot.d.ts +112 -0
  109. package/dist/connectors/hubspot.js +408 -0
  110. package/dist/connectors/hubspot.js.map +1 -0
  111. package/dist/connectors/intercom.d.ts +102 -0
  112. package/dist/connectors/intercom.js +402 -0
  113. package/dist/connectors/intercom.js.map +1 -0
  114. package/dist/connectors/jira.d.ts +98 -0
  115. package/dist/connectors/jira.js +379 -0
  116. package/dist/connectors/jira.js.map +1 -0
  117. package/dist/connectors/linear.js +30 -19
  118. package/dist/connectors/linear.js.map +1 -1
  119. package/dist/connectors/mcpOAuth.d.ts +3 -0
  120. package/dist/connectors/mcpOAuth.js +64 -10
  121. package/dist/connectors/mcpOAuth.js.map +1 -1
  122. package/dist/connectors/mockConnector.d.ts +28 -0
  123. package/dist/connectors/mockConnector.js +81 -0
  124. package/dist/connectors/mockConnector.js.map +1 -0
  125. package/dist/connectors/notion.d.ts +143 -0
  126. package/dist/connectors/notion.js +424 -0
  127. package/dist/connectors/notion.js.map +1 -0
  128. package/dist/connectors/oauthStateStore.d.ts +31 -0
  129. package/dist/connectors/oauthStateStore.js +52 -0
  130. package/dist/connectors/oauthStateStore.js.map +1 -0
  131. package/dist/connectors/pagerduty.d.ts +160 -0
  132. package/dist/connectors/pagerduty.js +464 -0
  133. package/dist/connectors/pagerduty.js.map +1 -0
  134. package/dist/connectors/sentry.js +5 -13
  135. package/dist/connectors/sentry.js.map +1 -1
  136. package/dist/connectors/slack.d.ts +16 -1
  137. package/dist/connectors/slack.js +155 -32
  138. package/dist/connectors/slack.js.map +1 -1
  139. package/dist/connectors/stripe.d.ts +116 -0
  140. package/dist/connectors/stripe.js +379 -0
  141. package/dist/connectors/stripe.js.map +1 -0
  142. package/dist/connectors/tokenStorage.d.ts +35 -0
  143. package/dist/connectors/tokenStorage.js +484 -0
  144. package/dist/connectors/tokenStorage.js.map +1 -0
  145. package/dist/connectors/zendesk.d.ts +104 -0
  146. package/dist/connectors/zendesk.js +442 -0
  147. package/dist/connectors/zendesk.js.map +1 -0
  148. package/dist/cors.d.ts +10 -0
  149. package/dist/cors.js +29 -0
  150. package/dist/cors.js.map +1 -0
  151. package/dist/decisionReplay.d.ts +72 -0
  152. package/dist/decisionReplay.js +92 -0
  153. package/dist/decisionReplay.js.map +1 -0
  154. package/dist/decisionTraceLog.d.ts +6 -0
  155. package/dist/decisionTraceLog.js +54 -2
  156. package/dist/decisionTraceLog.js.map +1 -1
  157. package/dist/drivers/gemini/index.d.ts +5 -1
  158. package/dist/drivers/gemini/index.js +39 -5
  159. package/dist/drivers/gemini/index.js.map +1 -1
  160. package/dist/drivers/index.d.ts +5 -0
  161. package/dist/drivers/index.js +1 -1
  162. package/dist/drivers/index.js.map +1 -1
  163. package/dist/featureFlags.d.ts +79 -0
  164. package/dist/featureFlags.js +208 -0
  165. package/dist/featureFlags.js.map +1 -0
  166. package/dist/fp/automationInterpreter.js +26 -21
  167. package/dist/fp/automationInterpreter.js.map +1 -1
  168. package/dist/fp/automationProgram.d.ts +1 -1
  169. package/dist/fp/automationProgram.js.map +1 -1
  170. package/dist/fp/automationState.js +4 -1
  171. package/dist/fp/automationState.js.map +1 -1
  172. package/dist/fp/policyParser.js +21 -1
  173. package/dist/fp/policyParser.js.map +1 -1
  174. package/dist/inboxRoutes.d.ts +22 -0
  175. package/dist/inboxRoutes.js +114 -0
  176. package/dist/inboxRoutes.js.map +1 -0
  177. package/dist/index.js +1400 -201
  178. package/dist/index.js.map +1 -1
  179. package/dist/installGuard.d.ts +25 -0
  180. package/dist/installGuard.js +48 -0
  181. package/dist/installGuard.js.map +1 -0
  182. package/dist/mcpRoutes.d.ts +37 -0
  183. package/dist/mcpRoutes.js +76 -0
  184. package/dist/mcpRoutes.js.map +1 -0
  185. package/dist/oauth.d.ts +7 -1
  186. package/dist/oauth.js +201 -39
  187. package/dist/oauth.js.map +1 -1
  188. package/dist/oauthRoutes.d.ts +32 -0
  189. package/dist/oauthRoutes.js +124 -0
  190. package/dist/oauthRoutes.js.map +1 -0
  191. package/dist/orchestrator/orchestratorBridge.js +2 -2
  192. package/dist/orchestrator/orchestratorBridge.js.map +1 -1
  193. package/dist/patchworkConfig.d.ts +16 -0
  194. package/dist/patchworkConfig.js +1 -1
  195. package/dist/patchworkConfig.js.map +1 -1
  196. package/dist/pluginLoader.d.ts +28 -0
  197. package/dist/pluginLoader.js +77 -11
  198. package/dist/pluginLoader.js.map +1 -1
  199. package/dist/pluginWatcher.js +8 -3
  200. package/dist/pluginWatcher.js.map +1 -1
  201. package/dist/preToolUseHook.d.ts +12 -0
  202. package/dist/preToolUseHook.js +23 -0
  203. package/dist/preToolUseHook.js.map +1 -1
  204. package/dist/recipeOrchestration.d.ts +121 -0
  205. package/dist/recipeOrchestration.js +955 -0
  206. package/dist/recipeOrchestration.js.map +1 -0
  207. package/dist/recipeRoutes.d.ts +180 -0
  208. package/dist/recipeRoutes.js +1345 -0
  209. package/dist/recipeRoutes.js.map +1 -0
  210. package/dist/recipes/RecipeOrchestrator.d.ts +40 -0
  211. package/dist/recipes/RecipeOrchestrator.js +51 -0
  212. package/dist/recipes/RecipeOrchestrator.js.map +1 -0
  213. package/dist/recipes/agentExecutor.d.ts +29 -0
  214. package/dist/recipes/agentExecutor.js +49 -0
  215. package/dist/recipes/agentExecutor.js.map +1 -0
  216. package/dist/recipes/chainedRunner.d.ts +191 -0
  217. package/dist/recipes/chainedRunner.js +759 -0
  218. package/dist/recipes/chainedRunner.js.map +1 -0
  219. package/dist/recipes/compiler.js +3 -3
  220. package/dist/recipes/compiler.js.map +1 -1
  221. package/dist/recipes/dependencyGraph.d.ts +39 -0
  222. package/dist/recipes/dependencyGraph.js +199 -0
  223. package/dist/recipes/dependencyGraph.js.map +1 -0
  224. package/dist/recipes/disabledMarkers.d.ts +48 -0
  225. package/dist/recipes/disabledMarkers.js +52 -0
  226. package/dist/recipes/disabledMarkers.js.map +1 -0
  227. package/dist/recipes/installer.js +3 -3
  228. package/dist/recipes/installer.js.map +1 -1
  229. package/dist/recipes/legacyRecipeCompat.d.ts +10 -0
  230. package/dist/recipes/legacyRecipeCompat.js +131 -0
  231. package/dist/recipes/legacyRecipeCompat.js.map +1 -0
  232. package/dist/recipes/manifest.d.ts +47 -0
  233. package/dist/recipes/manifest.js +156 -0
  234. package/dist/recipes/manifest.js.map +1 -0
  235. package/dist/recipes/migrationWarnings.d.ts +12 -0
  236. package/dist/recipes/migrationWarnings.js +44 -0
  237. package/dist/recipes/migrationWarnings.js.map +1 -0
  238. package/dist/recipes/migrations/index.d.ts +24 -0
  239. package/dist/recipes/migrations/index.js +55 -0
  240. package/dist/recipes/migrations/index.js.map +1 -0
  241. package/dist/recipes/migrations/types.d.ts +28 -0
  242. package/dist/recipes/migrations/types.js +2 -0
  243. package/dist/recipes/migrations/types.js.map +1 -0
  244. package/dist/recipes/migrations/v1.d.ts +11 -0
  245. package/dist/recipes/migrations/v1.js +18 -0
  246. package/dist/recipes/migrations/v1.js.map +1 -0
  247. package/dist/recipes/names.d.ts +40 -0
  248. package/dist/recipes/names.js +66 -0
  249. package/dist/recipes/names.js.map +1 -0
  250. package/dist/recipes/nestedRecipeStep.d.ts +58 -0
  251. package/dist/recipes/nestedRecipeStep.js +95 -0
  252. package/dist/recipes/nestedRecipeStep.js.map +1 -0
  253. package/dist/recipes/outputRegistry.d.ts +28 -0
  254. package/dist/recipes/outputRegistry.js +52 -0
  255. package/dist/recipes/outputRegistry.js.map +1 -0
  256. package/dist/recipes/parser.js +4 -1
  257. package/dist/recipes/parser.js.map +1 -1
  258. package/dist/recipes/replayRun.d.ts +62 -0
  259. package/dist/recipes/replayRun.js +97 -0
  260. package/dist/recipes/replayRun.js.map +1 -0
  261. package/dist/recipes/resolveRecipePath.d.ts +69 -0
  262. package/dist/recipes/resolveRecipePath.js +202 -0
  263. package/dist/recipes/resolveRecipePath.js.map +1 -0
  264. package/dist/recipes/scheduler.d.ts +23 -7
  265. package/dist/recipes/scheduler.js +225 -45
  266. package/dist/recipes/scheduler.js.map +1 -1
  267. package/dist/recipes/schema.d.ts +17 -2
  268. package/dist/recipes/schemaGenerator.d.ts +28 -0
  269. package/dist/recipes/schemaGenerator.js +565 -0
  270. package/dist/recipes/schemaGenerator.js.map +1 -0
  271. package/dist/recipes/stepObservation.d.ts +44 -0
  272. package/dist/recipes/stepObservation.js +232 -0
  273. package/dist/recipes/stepObservation.js.map +1 -0
  274. package/dist/recipes/templateEngine.d.ts +62 -0
  275. package/dist/recipes/templateEngine.js +201 -0
  276. package/dist/recipes/templateEngine.js.map +1 -0
  277. package/dist/recipes/toolRegistry.d.ts +186 -0
  278. package/dist/recipes/toolRegistry.js +309 -0
  279. package/dist/recipes/toolRegistry.js.map +1 -0
  280. package/dist/recipes/tools/asana.d.ts +16 -0
  281. package/dist/recipes/tools/asana.js +524 -0
  282. package/dist/recipes/tools/asana.js.map +1 -0
  283. package/dist/recipes/tools/calendar.d.ts +6 -0
  284. package/dist/recipes/tools/calendar.js +61 -0
  285. package/dist/recipes/tools/calendar.js.map +1 -0
  286. package/dist/recipes/tools/confluence.d.ts +6 -0
  287. package/dist/recipes/tools/confluence.js +254 -0
  288. package/dist/recipes/tools/confluence.js.map +1 -0
  289. package/dist/recipes/tools/datadog.d.ts +6 -0
  290. package/dist/recipes/tools/datadog.js +239 -0
  291. package/dist/recipes/tools/datadog.js.map +1 -0
  292. package/dist/recipes/tools/diagnostics.d.ts +6 -0
  293. package/dist/recipes/tools/diagnostics.js +36 -0
  294. package/dist/recipes/tools/diagnostics.js.map +1 -0
  295. package/dist/recipes/tools/discord.d.ts +18 -0
  296. package/dist/recipes/tools/discord.js +254 -0
  297. package/dist/recipes/tools/discord.js.map +1 -0
  298. package/dist/recipes/tools/file.d.ts +12 -0
  299. package/dist/recipes/tools/file.js +174 -0
  300. package/dist/recipes/tools/file.js.map +1 -0
  301. package/dist/recipes/tools/git.d.ts +6 -0
  302. package/dist/recipes/tools/git.js +63 -0
  303. package/dist/recipes/tools/git.js.map +1 -0
  304. package/dist/recipes/tools/github.d.ts +6 -0
  305. package/dist/recipes/tools/github.js +116 -0
  306. package/dist/recipes/tools/github.js.map +1 -0
  307. package/dist/recipes/tools/gitlab.d.ts +11 -0
  308. package/dist/recipes/tools/gitlab.js +285 -0
  309. package/dist/recipes/tools/gitlab.js.map +1 -0
  310. package/dist/recipes/tools/gmail.d.ts +6 -0
  311. package/dist/recipes/tools/gmail.js +434 -0
  312. package/dist/recipes/tools/gmail.js.map +1 -0
  313. package/dist/recipes/tools/googleDrive.d.ts +1 -0
  314. package/dist/recipes/tools/googleDrive.js +55 -0
  315. package/dist/recipes/tools/googleDrive.js.map +1 -0
  316. package/dist/recipes/tools/hubspot.d.ts +6 -0
  317. package/dist/recipes/tools/hubspot.js +232 -0
  318. package/dist/recipes/tools/hubspot.js.map +1 -0
  319. package/dist/recipes/tools/index.d.ts +30 -0
  320. package/dist/recipes/tools/index.js +33 -0
  321. package/dist/recipes/tools/index.js.map +1 -0
  322. package/dist/recipes/tools/intercom.d.ts +6 -0
  323. package/dist/recipes/tools/intercom.js +226 -0
  324. package/dist/recipes/tools/intercom.js.map +1 -0
  325. package/dist/recipes/tools/jira.d.ts +14 -0
  326. package/dist/recipes/tools/jira.js +369 -0
  327. package/dist/recipes/tools/jira.js.map +1 -0
  328. package/dist/recipes/tools/linear.d.ts +7 -0
  329. package/dist/recipes/tools/linear.js +307 -0
  330. package/dist/recipes/tools/linear.js.map +1 -0
  331. package/dist/recipes/tools/meetingNotes.d.ts +21 -0
  332. package/dist/recipes/tools/meetingNotes.js +701 -0
  333. package/dist/recipes/tools/meetingNotes.js.map +1 -0
  334. package/dist/recipes/tools/notion.d.ts +6 -0
  335. package/dist/recipes/tools/notion.js +278 -0
  336. package/dist/recipes/tools/notion.js.map +1 -0
  337. package/dist/recipes/tools/pagerduty.d.ts +15 -0
  338. package/dist/recipes/tools/pagerduty.js +451 -0
  339. package/dist/recipes/tools/pagerduty.js.map +1 -0
  340. package/dist/recipes/tools/sentry.d.ts +12 -0
  341. package/dist/recipes/tools/sentry.js +73 -0
  342. package/dist/recipes/tools/sentry.js.map +1 -0
  343. package/dist/recipes/tools/slack.d.ts +6 -0
  344. package/dist/recipes/tools/slack.js +82 -0
  345. package/dist/recipes/tools/slack.js.map +1 -0
  346. package/dist/recipes/tools/stripe.d.ts +6 -0
  347. package/dist/recipes/tools/stripe.js +265 -0
  348. package/dist/recipes/tools/stripe.js.map +1 -0
  349. package/dist/recipes/tools/zendesk.d.ts +6 -0
  350. package/dist/recipes/tools/zendesk.js +245 -0
  351. package/dist/recipes/tools/zendesk.js.map +1 -0
  352. package/dist/recipes/validation.d.ts +13 -0
  353. package/dist/recipes/validation.js +617 -0
  354. package/dist/recipes/validation.js.map +1 -0
  355. package/dist/recipes/yamlRunner.d.ts +116 -1
  356. package/dist/recipes/yamlRunner.js +1000 -401
  357. package/dist/recipes/yamlRunner.js.map +1 -1
  358. package/dist/recipesHttp.d.ts +137 -6
  359. package/dist/recipesHttp.js +941 -29
  360. package/dist/recipesHttp.js.map +1 -1
  361. package/dist/riskTier.js +7 -1
  362. package/dist/riskTier.js.map +1 -1
  363. package/dist/runLog.d.ts +100 -1
  364. package/dist/runLog.js +258 -5
  365. package/dist/runLog.js.map +1 -1
  366. package/dist/schemas/dry-run-plan.v1.json +139 -0
  367. package/dist/schemas/recipe.v1.json +684 -0
  368. package/dist/server.d.ts +121 -8
  369. package/dist/server.js +538 -735
  370. package/dist/server.js.map +1 -1
  371. package/dist/ssrfGuard.d.ts +54 -0
  372. package/dist/ssrfGuard.js +122 -0
  373. package/dist/ssrfGuard.js.map +1 -0
  374. package/dist/streamableHttp.d.ts +39 -1
  375. package/dist/streamableHttp.js +128 -17
  376. package/dist/streamableHttp.js.map +1 -1
  377. package/dist/tokenUsageTracker.d.ts +33 -0
  378. package/dist/tokenUsageTracker.js +146 -0
  379. package/dist/tokenUsageTracker.js.map +1 -0
  380. package/dist/tools/activityLog.d.ts +2 -0
  381. package/dist/tools/addLinearComment.d.ts +1 -0
  382. package/dist/tools/addLinearComment.js +4 -2
  383. package/dist/tools/addLinearComment.js.map +1 -1
  384. package/dist/tools/batchLsp.d.ts +3 -0
  385. package/dist/tools/bridgeDoctor.d.ts +1 -0
  386. package/dist/tools/bridgeDoctor.js +2 -2
  387. package/dist/tools/bridgeDoctor.js.map +1 -1
  388. package/dist/tools/bridgeStatus.d.ts +1 -0
  389. package/dist/tools/cancelClaudeTask.d.ts +2 -0
  390. package/dist/tools/cancelClaudeTask.js +1 -0
  391. package/dist/tools/cancelClaudeTask.js.map +1 -1
  392. package/dist/tools/checkDocumentDirty.d.ts +1 -0
  393. package/dist/tools/clipboard.d.ts +2 -0
  394. package/dist/tools/closeTabs.d.ts +2 -0
  395. package/dist/tools/codeLens.d.ts +1 -0
  396. package/dist/tools/contextBundle.d.ts +1 -0
  397. package/dist/tools/createIssueFromAIComment.d.ts +1 -0
  398. package/dist/tools/createLinearIssue.d.ts +1 -0
  399. package/dist/tools/ctxGetTaskContext.d.ts +1 -0
  400. package/dist/tools/ctxQueryTraces.d.ts +1 -0
  401. package/dist/tools/ctxSaveTrace.d.ts +1 -0
  402. package/dist/tools/debug.d.ts +4 -0
  403. package/dist/tools/decorations.d.ts +2 -0
  404. package/dist/tools/documentLinks.d.ts +1 -0
  405. package/dist/tools/editText.d.ts +1 -0
  406. package/dist/tools/enrichCommit.d.ts +1 -0
  407. package/dist/tools/enrichStackTrace.d.ts +1 -0
  408. package/dist/tools/explainDiagnostic.d.ts +1 -0
  409. package/dist/tools/explainSymbol.d.ts +1 -0
  410. package/dist/tools/fetchCalendarEvents.d.ts +1 -0
  411. package/dist/tools/fetchGithubIssue.d.ts +1 -0
  412. package/dist/tools/fetchGithubPR.d.ts +1 -0
  413. package/dist/tools/fetchLinearIssue.d.ts +1 -0
  414. package/dist/tools/fetchSentryIssue.d.ts +1 -0
  415. package/dist/tools/fetchSlackProfile.d.ts +1 -0
  416. package/dist/tools/fetchSlackProfile.js +4 -1
  417. package/dist/tools/fetchSlackProfile.js.map +1 -1
  418. package/dist/tools/fileOperations.d.ts +3 -0
  419. package/dist/tools/fileWatcher.d.ts +2 -0
  420. package/dist/tools/findFiles.d.ts +1 -0
  421. package/dist/tools/findRelatedTests.d.ts +1 -0
  422. package/dist/tools/fixAllLintErrors.d.ts +1 -0
  423. package/dist/tools/foldingRanges.d.ts +1 -0
  424. package/dist/tools/formatDocument.d.ts +1 -0
  425. package/dist/tools/generateTests.d.ts +1 -0
  426. package/dist/tools/getAIComments.d.ts +1 -0
  427. package/dist/tools/getAnalyticsReport.d.ts +1 -0
  428. package/dist/tools/getArchitectureContext.d.ts +1 -0
  429. package/dist/tools/getBufferContent.d.ts +1 -0
  430. package/dist/tools/getChangeImpact.d.ts +1 -0
  431. package/dist/tools/getClaudeTaskStatus.d.ts +2 -0
  432. package/dist/tools/getClaudeTaskStatus.js +1 -0
  433. package/dist/tools/getClaudeTaskStatus.js.map +1 -1
  434. package/dist/tools/getCodeCoverage.d.ts +1 -0
  435. package/dist/tools/getCommitsForIssue.d.ts +1 -0
  436. package/dist/tools/getConnectorStatus.d.ts +1 -0
  437. package/dist/tools/getCurrentSelection.d.ts +2 -0
  438. package/dist/tools/getDebugState.d.ts +1 -0
  439. package/dist/tools/getDependencyTree.d.ts +1 -0
  440. package/dist/tools/getDiagnostics.d.ts +1 -0
  441. package/dist/tools/getDiffFromHandoff.d.ts +1 -0
  442. package/dist/tools/getDocumentSymbols.d.ts +25 -0
  443. package/dist/tools/getDocumentSymbols.js +74 -8
  444. package/dist/tools/getDocumentSymbols.js.map +1 -1
  445. package/dist/tools/getFileTree.d.ts +1 -0
  446. package/dist/tools/getGitDiff.d.ts +1 -0
  447. package/dist/tools/getGitHotspots.d.ts +1 -0
  448. package/dist/tools/getGitLog.d.ts +1 -0
  449. package/dist/tools/getGitStatus.d.ts +1 -0
  450. package/dist/tools/getImportTree.d.ts +1 -0
  451. package/dist/tools/getImportedSignatures.d.ts +1 -0
  452. package/dist/tools/getOpenEditors.d.ts +1 -0
  453. package/dist/tools/getPRTemplate.d.ts +1 -0
  454. package/dist/tools/getProjectContext.d.ts +1 -0
  455. package/dist/tools/getProjectInfo.d.ts +1 -0
  456. package/dist/tools/getSecurityAdvisories.d.ts +1 -0
  457. package/dist/tools/getSecurityAdvisories.js +10 -1
  458. package/dist/tools/getSecurityAdvisories.js.map +1 -1
  459. package/dist/tools/getSessionUsage.d.ts +4 -0
  460. package/dist/tools/getSessionUsage.js +3 -0
  461. package/dist/tools/getSessionUsage.js.map +1 -1
  462. package/dist/tools/getSymbolHistory.d.ts +1 -0
  463. package/dist/tools/getToolCapabilities.d.ts +1 -0
  464. package/dist/tools/getTypeSignature.d.ts +1 -0
  465. package/dist/tools/getWorkspaceFolders.d.ts +1 -0
  466. package/dist/tools/getWorkspaceSettings.d.ts +1 -0
  467. package/dist/tools/gitHistory.d.ts +2 -0
  468. package/dist/tools/gitWrite.d.ts +11 -0
  469. package/dist/tools/github/actions.d.ts +2 -0
  470. package/dist/tools/github/actions.js +4 -2
  471. package/dist/tools/github/actions.js.map +1 -1
  472. package/dist/tools/github/composite.d.ts +342 -0
  473. package/dist/tools/github/composite.js +343 -0
  474. package/dist/tools/github/composite.js.map +1 -0
  475. package/dist/tools/github/index.d.ts +1 -0
  476. package/dist/tools/github/index.js +1 -0
  477. package/dist/tools/github/index.js.map +1 -1
  478. package/dist/tools/github/issues.d.ts +4 -0
  479. package/dist/tools/github/issues.js +8 -4
  480. package/dist/tools/github/issues.js.map +1 -1
  481. package/dist/tools/github/pr.d.ts +7 -0
  482. package/dist/tools/github/pr.js +50 -12
  483. package/dist/tools/github/pr.js.map +1 -1
  484. package/dist/tools/handoffNote.d.ts +4 -0
  485. package/dist/tools/handoffNote.js +2 -0
  486. package/dist/tools/handoffNote.js.map +1 -1
  487. package/dist/tools/hoverAtCursor.d.ts +1 -0
  488. package/dist/tools/httpClient.d.ts +2 -0
  489. package/dist/tools/index.d.ts +8 -0
  490. package/dist/tools/index.js +47 -8
  491. package/dist/tools/index.js.map +1 -1
  492. package/dist/tools/inlayHints.d.ts +1 -0
  493. package/dist/tools/launchQuickTask.d.ts +2 -0
  494. package/dist/tools/launchQuickTask.js +1 -0
  495. package/dist/tools/launchQuickTask.js.map +1 -1
  496. package/dist/tools/listClaudeTasks.d.ts +2 -0
  497. package/dist/tools/listClaudeTasks.js +1 -0
  498. package/dist/tools/listClaudeTasks.js.map +1 -1
  499. package/dist/tools/listTerminals.d.ts +1 -0
  500. package/dist/tools/lsp.d.ts +14 -0
  501. package/dist/tools/navigateToSymbolByName.d.ts +1 -0
  502. package/dist/tools/openDiff.d.ts +1 -0
  503. package/dist/tools/openFile.d.ts +1 -0
  504. package/dist/tools/openInBrowser.d.ts +1 -0
  505. package/dist/tools/organizeImports.d.ts +1 -0
  506. package/dist/tools/performanceReport.d.ts +1 -0
  507. package/dist/tools/planPersistence.d.ts +5 -0
  508. package/dist/tools/previewEdit.d.ts +1 -0
  509. package/dist/tools/refactorAnalyze.d.ts +1 -0
  510. package/dist/tools/refactorPreview.d.ts +2 -0
  511. package/dist/tools/refactorPreview.js +1 -0
  512. package/dist/tools/refactorPreview.js.map +1 -1
  513. package/dist/tools/replaceBlock.d.ts +1 -0
  514. package/dist/tools/resumeClaudeTask.d.ts +2 -0
  515. package/dist/tools/resumeClaudeTask.js +1 -0
  516. package/dist/tools/resumeClaudeTask.js.map +1 -1
  517. package/dist/tools/runClaudeTask.d.ts +2 -0
  518. package/dist/tools/runClaudeTask.js +1 -0
  519. package/dist/tools/runClaudeTask.js.map +1 -1
  520. package/dist/tools/runCommand.d.ts +1 -0
  521. package/dist/tools/runTests.d.ts +1 -0
  522. package/dist/tools/saveDocument.d.ts +1 -0
  523. package/dist/tools/screenshotAndAnnotate.d.ts +1 -0
  524. package/dist/tools/searchAndReplace.d.ts +1 -0
  525. package/dist/tools/searchTools.d.ts +1 -0
  526. package/dist/tools/searchTools.js +1 -1
  527. package/dist/tools/searchTools.js.map +1 -1
  528. package/dist/tools/searchWorkspace.d.ts +1 -0
  529. package/dist/tools/selectionRanges.d.ts +1 -0
  530. package/dist/tools/semanticTokens.d.ts +1 -0
  531. package/dist/tools/setActiveWorkspaceFolder.d.ts +1 -0
  532. package/dist/tools/signatureHelp.d.ts +1 -0
  533. package/dist/tools/slackListChannels.d.ts +1 -0
  534. package/dist/tools/slackListChannels.js.map +1 -1
  535. package/dist/tools/slackPostMessage.d.ts +1 -0
  536. package/dist/tools/slackPostMessage.js +11 -6
  537. package/dist/tools/slackPostMessage.js.map +1 -1
  538. package/dist/tools/terminal.d.ts +6 -0
  539. package/dist/tools/testTraceToSource.d.ts +1 -0
  540. package/dist/tools/testTraceToSource.js +2 -2
  541. package/dist/tools/testTraceToSource.js.map +1 -1
  542. package/dist/tools/transaction.d.ts +23 -0
  543. package/dist/tools/transaction.js +29 -0
  544. package/dist/tools/transaction.js.map +1 -1
  545. package/dist/tools/typeHierarchy.d.ts +1 -0
  546. package/dist/tools/updateLinearIssue.d.ts +1 -0
  547. package/dist/tools/updateLinearIssue.js +20 -6
  548. package/dist/tools/updateLinearIssue.js.map +1 -1
  549. package/dist/tools/utils.d.ts +2 -0
  550. package/dist/tools/utils.js.map +1 -1
  551. package/dist/tools/vscodeCommands.d.ts +2 -0
  552. package/dist/tools/vscodeTasks.d.ts +2 -0
  553. package/dist/tools/workspaceSettings.d.ts +1 -0
  554. package/dist/traceEncryption.d.ts +46 -0
  555. package/dist/traceEncryption.js +124 -0
  556. package/dist/traceEncryption.js.map +1 -0
  557. package/dist/transport.d.ts +46 -1
  558. package/dist/transport.js +173 -19
  559. package/dist/transport.js.map +1 -1
  560. package/package.json +30 -8
  561. package/scripts/mcp-stdio-shim.cjs +19 -3
  562. package/scripts/start-all.sh +30 -1
  563. package/templates/automation-policies/recipe-authoring.json +25 -0
  564. package/templates/automation-policy.example.json +6 -0
  565. package/templates/co.patchwork-os.bridge.plist +34 -0
  566. package/templates/policies/README.md +72 -0
  567. package/templates/policies/conservative.json +14 -0
  568. package/templates/policies/developer.json +14 -0
  569. package/templates/policies/headless-ci.json +24 -0
  570. package/templates/policies/personal-assistant.json +15 -0
  571. package/templates/policies/regulated-industry.json +18 -0
  572. package/templates/recipes/lint-on-save.yaml +1 -2
  573. package/templates/recipes/morning-brief-slack.yaml +57 -0
  574. package/templates/recipes/morning-brief.yaml +2 -2
  575. package/templates/recipes/project-health-check.yaml +50 -0
  576. package/templates/recipes/webhook/README.md +70 -0
  577. package/templates/recipes/webhook/capture-thought.yaml +26 -0
  578. package/templates/recipes/webhook/customer-escalation.yaml +49 -0
  579. package/templates/recipes/webhook/incident-intake.yaml +46 -0
  580. package/templates/recipes/webhook/meeting-prep.yaml +48 -0
  581. package/templates/recipes/webhook/morning-brief.yaml +57 -0
@@ -3,29 +3,50 @@ import { homedir } from "node:os";
3
3
  import { dirname, join, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import { loadConfig, saveConfig, } from "../patchworkConfig.js";
6
+ import { registerPreToolUseHook } from "../preToolUseHook.js";
6
7
  function parseArgs(argv) {
7
8
  if (argv.includes("--help") || argv.includes("-h"))
8
9
  return { help: true };
9
10
  return {
10
11
  force: argv.includes("--force"),
11
12
  skipOllama: argv.includes("--no-ollama"),
13
+ withConnectors: argv.includes("--with-connectors"),
12
14
  };
13
15
  }
16
+ // Recipes that run with no external service credentials (local file/git only).
17
+ // Anything not in this set requires a connector (gmail, github, linear, slack,
18
+ // sentry, calendar, …) and is skipped on first init unless --with-connectors.
19
+ const LOCAL_ONLY_RECIPES = new Set([
20
+ "ambient-journal.yaml",
21
+ "daily-status.yaml",
22
+ "lint-on-save.yaml",
23
+ "stale-branches.yaml",
24
+ "watch-failing-tests.yaml",
25
+ ]);
26
+ // Dev/dogfood fixtures that aren't user-facing and shouldn't be seeded by
27
+ // either init mode. Skipped silently regardless of --with-connectors.
28
+ const DEV_FIXTURE_RECIPES = new Set([
29
+ "ctx-loop-test.yaml",
30
+ ]);
14
31
  function printHelp() {
15
32
  process.stdout.write(`patchwork-os init — Set up ~/.patchwork on this machine
16
33
 
17
34
  Usage: patchwork-os init [options]
18
35
 
19
36
  Options:
20
- --force Overwrite existing config (default: merge, preserve)
21
- --no-ollama Skip Ollama detection
22
- --help, -h Show this help
37
+ --force Overwrite existing config (default: merge, preserve)
38
+ --no-ollama Skip Ollama detection
39
+ --with-connectors Also copy connector-dependent recipes (gmail, github, …)
40
+ --help, -h Show this help
23
41
 
24
42
  What it does:
25
43
  1. Create ~/.patchwork/{config.json,recipes,inbox,journal}
26
- 2. Copy 5 local-only recipe templates to ~/.patchwork/recipes/
44
+ 2. Copy local-only recipe templates to ~/.patchwork/recipes/
45
+ (add --with-connectors to also copy gmail/github/etc. recipes)
27
46
  3. Detect Ollama at localhost:11434 → set provider to ollama-local
28
- 4. Print next steps
47
+ 4. Register the Patchwork PreToolUse hook in ~/.claude/settings.json
48
+ so Claude Code routes tool calls through your delegation policy
49
+ 5. Print next steps
29
50
  `);
30
51
  }
31
52
  function findTemplatesDir() {
@@ -76,10 +97,17 @@ export async function runPatchworkInit(argv, opts = {}) {
76
97
  const templatesDir = findTemplatesDir();
77
98
  let recipesCopied = 0;
78
99
  let recipesSkipped = 0;
100
+ let recipesGated = 0;
79
101
  if (templatesDir) {
80
102
  for (const name of readdirSync(templatesDir)) {
81
103
  if (!name.endsWith(".yaml"))
82
104
  continue;
105
+ if (DEV_FIXTURE_RECIPES.has(name))
106
+ continue;
107
+ if (!parsed.withConnectors && !LOCAL_ONLY_RECIPES.has(name)) {
108
+ recipesGated++;
109
+ continue;
110
+ }
83
111
  const dest = join(recipesDir, name);
84
112
  if (existsSync(dest) && !parsed.force) {
85
113
  recipesSkipped++;
@@ -88,7 +116,10 @@ export async function runPatchworkInit(argv, opts = {}) {
88
116
  copyFileSync(join(templatesDir, name), dest);
89
117
  recipesCopied++;
90
118
  }
91
- log(` ✓ recipes: ${recipesCopied} copied, ${recipesSkipped} preserved\n`);
119
+ const gatedNote = recipesGated
120
+ ? ` (${recipesGated} connector-recipes skipped — re-run with --with-connectors)`
121
+ : "";
122
+ log(` ✓ recipes: ${recipesCopied} copied, ${recipesSkipped} preserved${gatedNote}\n`);
92
123
  }
93
124
  else {
94
125
  log(` ! recipe templates not found (expected templates/recipes/)\n`);
@@ -127,7 +158,7 @@ export async function runPatchworkInit(argv, opts = {}) {
127
158
  model: ollamaDetected ? "local" : "claude",
128
159
  recipesDir,
129
160
  dashboard: {
130
- port: 3000,
161
+ port: 3200,
131
162
  requireApproval: ["high"],
132
163
  pushNotifications: false,
133
164
  },
@@ -139,10 +170,44 @@ export async function runPatchworkInit(argv, opts = {}) {
139
170
  existsSync(configPath) && parsed.force ? "overwritten" : "created";
140
171
  }
141
172
  log(` ✓ config ${configAction}: ${configPath}\n`);
142
- log(`\nNext:
143
- 1. patchwork-os recipe run ambient-journal # try a local recipe
144
- 2. patchwork-os # launch terminal dashboard
145
- 3. Connect Gmail (coming in W2)see docs/adr/0008-connector-scope-decision.md\n`);
173
+ // Register the Patchwork PreToolUse hook in Claude Code's settings.json
174
+ // so CC actually routes tool calls through the bridge's approval queue.
175
+ // Without this, `--approval-gate` is silently inert and the entire
176
+ // personalSignals catalog has no input data exactly the foot-gun
177
+ // PR #150 added a startup warning for. Now `patchwork-init` fixes it
178
+ // at the source rather than just warning about it later.
179
+ const ccSettingsDir = process.env.CLAUDE_CONFIG_DIR ?? join(home, ".claude");
180
+ mkdirSync(ccSettingsDir, { recursive: true });
181
+ const ccSettingsPath = join(ccSettingsDir, "settings.json");
182
+ const hookResult = registerPreToolUseHook(ccSettingsPath);
183
+ let preToolUseHook;
184
+ if (hookResult.action === "added") {
185
+ log(` ✓ Claude Code PreToolUse hook registered: ${ccSettingsPath}\n`);
186
+ preToolUseHook = "added";
187
+ }
188
+ else if (hookResult.action === "already-wired") {
189
+ log(` ✓ Claude Code PreToolUse hook already registered\n`);
190
+ preToolUseHook = "already-wired";
191
+ }
192
+ else {
193
+ log(` ! Could not register Claude Code PreToolUse hook: ${hookResult.error ?? "unknown"}\n` +
194
+ ` Delegation policy will not see traffic until you add the hook manually.\n`);
195
+ preToolUseHook = "error";
196
+ }
197
+ // CC reads hooks at session start, so the registration we just did
198
+ // (or confirmed) only takes effect for *future* sessions. Without
199
+ // this prompt, users follow the docs, run init, and the delegation policy
200
+ // still appears inert — the trap that wasted hours of investigation
201
+ // during dogfood verification on 2026-05-03.
202
+ const restartLine = preToolUseHook === "added"
203
+ ? `\n ⚠ Restart Claude Code so the new PreToolUse hook takes effect.\n (CC reads hooks at session start — existing sessions won't see the change.)\n`
204
+ : "";
205
+ log(`${restartLine}\nNext:
206
+ 1. patchwork start # launch bridge + Claude + dashboard (one command)
207
+ 2. patchwork-os recipe run daily-status # zero-config: yesterday's commits + today's hints
208
+ 3. patchwork-os # terminal dashboard (TUI, alternative to web)
209
+ 4. patchwork-os recipe list # browse installed recipes
210
+ 5. patchwork-os init --with-connectors # add gmail/github/linear/etc. recipes\n`);
146
211
  return {
147
212
  configPath,
148
213
  recipesDir,
@@ -150,6 +215,7 @@ export async function runPatchworkInit(argv, opts = {}) {
150
215
  recipesSkipped,
151
216
  ollamaDetected,
152
217
  configAction,
218
+ preToolUseHook,
153
219
  };
154
220
  }
155
221
  //# sourceMappingURL=patchworkInit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"patchworkInit.js","sourceRoot":"","sources":["../../src/commands/patchworkInit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patchworkInit.js","sourceRoot":"","sources":["../../src/commands/patchworkInit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Recipe CLI commands — new, lint, test, watch, record, fmt
3
+ *
4
+ * Implements the A2 CLI UX milestone for recipe authoring.
5
+ */
6
+ import "../recipes/tools/index.js";
7
+ import { type LintIssue, type LintResult } from "../recipes/validation.js";
8
+ import { type RunnerDeps, type RunResult, type YamlRecipe } from "../recipes/yamlRunner.js";
9
+ export interface NewOptions {
10
+ name: string;
11
+ description: string;
12
+ template?: string;
13
+ outputDir?: string;
14
+ }
15
+ export declare function runNew(options: NewOptions): {
16
+ path: string;
17
+ content: string;
18
+ };
19
+ export declare function listTemplates(): string[];
20
+ export interface SchemaWriteResult {
21
+ outputDir: string;
22
+ filesWritten: string[];
23
+ }
24
+ export declare function runSchema(outputDir: string): Promise<SchemaWriteResult>;
25
+ export type { LintIssue, LintResult };
26
+ /**
27
+ * Lint a recipe file against the schema.
28
+ * Falls back to basic YAML parsing if schema linting is disabled.
29
+ */
30
+ export declare function runLint(recipePath: string): LintResult;
31
+ export interface FmtResult {
32
+ formatted: string;
33
+ changed: boolean;
34
+ }
35
+ /**
36
+ * Format/normalize a recipe file.
37
+ * - Normalizes YAML formatting
38
+ * - Sorts keys in consistent order
39
+ * - Validates and re-serializes
40
+ */
41
+ export declare function runFmt(recipePath: string, options?: {
42
+ check?: boolean;
43
+ }): FmtResult;
44
+ export interface FmtWatchOptions {
45
+ recipePath: string;
46
+ check?: boolean;
47
+ onResult: (result: FmtResult) => void | Promise<void>;
48
+ onError?: (err: Error) => void;
49
+ debounceMs?: number;
50
+ watchFactory?: WatchFactory;
51
+ }
52
+ /**
53
+ * Watch a recipe file and re-run `runFmt` on every save (debounced).
54
+ * Mirrors runPreflightWatch / runTestWatch — composes runWatch + runFmt.
55
+ * Returns a stop function.
56
+ */
57
+ export declare function runFmtWatch(options: FmtWatchOptions): () => void;
58
+ export interface RunRecipeOptions {
59
+ dryRun?: boolean;
60
+ step?: string;
61
+ vars?: Record<string, string>;
62
+ workdir?: string;
63
+ deps?: Partial<RunnerDeps>;
64
+ }
65
+ export interface RunRecipeStepSelection {
66
+ query: string;
67
+ matchedBy: "id" | "into" | "tool";
68
+ matchedValue: string;
69
+ }
70
+ export interface RunRecipeResult {
71
+ recipe: YamlRecipe;
72
+ recipePath: string;
73
+ result: RunResult | import("../recipes/chainedRunner.js").ChainedRunResult;
74
+ stepSelection?: RunRecipeStepSelection;
75
+ }
76
+ export interface RecipeExecutionSummary {
77
+ ok: boolean;
78
+ steps: number;
79
+ outputs: string[];
80
+ errorMessage?: string;
81
+ failed?: number;
82
+ skipped?: number;
83
+ }
84
+ export interface WatchedRecipeRunResult {
85
+ lint: LintResult;
86
+ run?: RunRecipeResult;
87
+ summary?: RecipeExecutionSummary;
88
+ }
89
+ export declare function runRecipe(recipeRef: string, options?: RunRecipeOptions): Promise<RunRecipeResult>;
90
+ export declare function summarizeRecipeExecution(result: RunRecipeResult["result"]): RecipeExecutionSummary;
91
+ /**
92
+ * Normalize either a yamlRunner RunResult or a chainedRunner ChainedRunResult
93
+ * into the RunStepResult[] shape expected by RecipeRunLog.appendDirect.
94
+ * Returns undefined when the result has no step-level detail.
95
+ */
96
+ export declare function extractRunLogStepResults(result: RunRecipeResult["result"]): Array<{
97
+ id: string;
98
+ tool?: string;
99
+ status: "ok" | "skipped" | "error";
100
+ error?: string;
101
+ durationMs: number;
102
+ }> | undefined;
103
+ export declare function formatRunReport(result: RunRecipeResult["result"], recipeName: string): string;
104
+ export declare function runWatchedRecipe(recipePath: string, options?: Pick<RunRecipeOptions, "workdir" | "deps" | "vars">): Promise<WatchedRecipeRunResult>;
105
+ /**
106
+ * Stable JSON schema version for machine-readable dry-run plans.
107
+ * Bump on breaking shape changes; consumers (dashboard run timeline, external tools)
108
+ * should gate on this field.
109
+ */
110
+ export declare const DRY_RUN_PLAN_SCHEMA_VERSION = 1;
111
+ export interface RecipeDryRunPlanStep {
112
+ id: string;
113
+ type: "tool" | "agent" | "recipe";
114
+ tool?: string;
115
+ /** Namespace derived from tool id (e.g. "gmail" from "gmail.fetch_unread"). */
116
+ namespace?: string;
117
+ into?: string;
118
+ optional?: boolean;
119
+ prompt?: string;
120
+ params?: Record<string, unknown>;
121
+ dependencies?: string[];
122
+ condition?: string;
123
+ /** Explicit risk on the step, or registry default when absent. */
124
+ risk?: "low" | "medium" | "high";
125
+ /** Registry metadata — true if the tool mutates external state. */
126
+ isWrite?: boolean;
127
+ /** Registry metadata — true if the tool calls an external SaaS connector. */
128
+ isConnector?: boolean;
129
+ /** True if the tool id is known to the registry (false → unresolved at plan time). */
130
+ resolved?: boolean;
131
+ /**
132
+ * Nested-recipe reference for `step.type === "recipe"` (chained recipes
133
+ * with `recipe:` or `chain:` field). Bare name (e.g. `branch-health`) or
134
+ * relative/absolute path. F-07 fix: this is now part of the plan-step
135
+ * shape so write-detection can recurse into nested recipes.
136
+ */
137
+ recipe?: string;
138
+ /**
139
+ * F-07 fix: when this step is a nested recipe and its writes were
140
+ * detected via recursion, this is the count of write-tagged tool steps
141
+ * inside the nested recipe (transitively). 0 if the recurse depth was
142
+ * hit before any writes were found, undefined for non-recipe steps.
143
+ */
144
+ nestedWriteCount?: number;
145
+ }
146
+ export interface RecipeDryRunPlan {
147
+ /** Stable schema version for consumers. */
148
+ schemaVersion: typeof DRY_RUN_PLAN_SCHEMA_VERSION;
149
+ recipe: string;
150
+ mode: "dry-run";
151
+ triggerType: string;
152
+ /** ISO-8601 generation timestamp. */
153
+ generatedAt: string;
154
+ stepSelection?: RunRecipeStepSelection;
155
+ steps: RecipeDryRunPlanStep[];
156
+ parallelGroups?: string[][];
157
+ maxDepth?: number;
158
+ /** Distinct connector namespaces referenced by the plan. */
159
+ connectorNamespaces?: string[];
160
+ /** True if any step is registry-tagged as a write/mutation. */
161
+ hasWriteSteps?: boolean;
162
+ /**
163
+ * Static lint pass over the recipe definition (validateRecipeDefinition).
164
+ * Surfaces error- and warning-level issues — including dotted-ref / output
165
+ * schema warnings — so editors and dashboards consuming the plan see the
166
+ * same signal as the CLI lint and the dashboard editor. Always present;
167
+ * arrays may be empty when the recipe is clean.
168
+ */
169
+ lint: {
170
+ errors: string[];
171
+ warnings: string[];
172
+ };
173
+ }
174
+ export declare function runRecipeDryPlan(recipeRef: string, options?: RunRecipeOptions): Promise<RecipeDryRunPlan>;
175
+ export type PreflightIssueCode = "unresolved-tool" | "unacknowledged-write" | "missing-fixture" | "lint-error" | "lint-warning" | "into-shadows-builtin" | "into-duplicate";
176
+ export interface PreflightIssue {
177
+ level: "error" | "warning";
178
+ code: PreflightIssueCode;
179
+ message: string;
180
+ stepId?: string;
181
+ tool?: string;
182
+ namespace?: string;
183
+ }
184
+ export interface PreflightResult {
185
+ ok: boolean;
186
+ recipe: string;
187
+ issues: PreflightIssue[];
188
+ plan: RecipeDryRunPlan;
189
+ }
190
+ export interface PreflightOptions extends RunRecipeOptions {
191
+ /**
192
+ * If true, steps tagged `isWrite: true` fail preflight unless the recipe opts in
193
+ * via a matching `allowWrites` entry (tool id or namespace). Default: true.
194
+ */
195
+ requireWriteAck?: boolean;
196
+ /**
197
+ * Explicit allowlist of tool ids or namespaces the caller acknowledges as writes.
198
+ * Example: `["slack.post_message", "github"]`.
199
+ */
200
+ allowWrites?: string[];
201
+ /**
202
+ * If true, missing fixture libraries for connector namespaces become errors.
203
+ * Default: false — preflight is a policy check, not a mock-run.
204
+ */
205
+ requireFixtures?: boolean;
206
+ /** Override fixtures dir (defaults to ~/.patchwork/fixtures). */
207
+ fixturesDir?: string;
208
+ }
209
+ /**
210
+ * Static policy check over a recipe: lint + dry-plan + unresolved/write/fixture checks.
211
+ * No connector calls, no agent calls — safe to run in CI.
212
+ */
213
+ export declare function runPreflight(recipeRef: string, options?: PreflightOptions): Promise<PreflightResult>;
214
+ export interface PreflightWatchOptions extends PreflightOptions {
215
+ recipePath: string;
216
+ onResult: (result: PreflightResult) => void | Promise<void>;
217
+ onError?: (err: Error) => void;
218
+ debounceMs?: number;
219
+ watchFactory?: WatchFactory;
220
+ }
221
+ /**
222
+ * Watch a recipe file and run preflight on every save (debounced). Composes
223
+ * runWatch + runPreflight so editor integrations get live policy feedback
224
+ * without spawning the CLI per keystroke.
225
+ *
226
+ * Returns a stop function. If a preflight is in-flight when a new save lands,
227
+ * at most one rerun is queued (matches runWatch semantics).
228
+ */
229
+ export declare function runPreflightWatch(options: PreflightWatchOptions): () => void;
230
+ /**
231
+ * Exported for the cli-warns-when-out-of-jail.test regression suite —
232
+ * the warn path is what we assert on, not the path-resolution behaviour.
233
+ * Internal callers should keep using the local symbol.
234
+ */
235
+ export declare function resolveRecipeRefForCli(recipeRef: string): string;
236
+ export interface RecipeTestResult {
237
+ valid: boolean;
238
+ issues: LintIssue[];
239
+ warnings: number;
240
+ errors: number;
241
+ requiredFixtures: string[];
242
+ missingFixtures: string[];
243
+ stepsRun: number;
244
+ outputs: string[];
245
+ assertionFailures: import("../recipes/yamlRunner.js").AssertionFailure[];
246
+ }
247
+ export interface RecipeRecordResult {
248
+ valid: boolean;
249
+ issues: LintIssue[];
250
+ warnings: number;
251
+ errors: number;
252
+ recordedFixtures: string[];
253
+ stepsRun: number;
254
+ outputs: string[];
255
+ }
256
+ export declare function runRecord(recipePath: string, options?: {
257
+ fixturesDir?: string;
258
+ deps?: Partial<RunnerDeps>;
259
+ }): Promise<RecipeRecordResult>;
260
+ export declare function runTest(recipePath: string, options?: {
261
+ fixturesDir?: string;
262
+ }): Promise<RecipeTestResult>;
263
+ export interface TestWatchOptions {
264
+ recipePath: string;
265
+ fixturesDir?: string;
266
+ onResult: (result: RecipeTestResult) => void | Promise<void>;
267
+ onError?: (err: Error) => void;
268
+ debounceMs?: number;
269
+ watchFactory?: WatchFactory;
270
+ }
271
+ /**
272
+ * Watch a recipe file and re-run `patchwork recipe test` on every save (debounced).
273
+ * Mirrors runPreflightWatch — composes runWatch + runTest.
274
+ * Returns a stop function.
275
+ */
276
+ export declare function runTestWatch(options: TestWatchOptions): () => void;
277
+ type WatchFactory = (path: string, options: {
278
+ recursive: boolean;
279
+ }, listener: (eventType: string, changedFile: string | Buffer | null) => void) => {
280
+ close(): void;
281
+ };
282
+ export interface WatchOptions {
283
+ recipePath: string;
284
+ onChange: () => void | Promise<void>;
285
+ onError?: (err: Error) => void;
286
+ debounceMs?: number;
287
+ watchFactory?: WatchFactory;
288
+ }
289
+ export declare function runWatch(options: WatchOptions): () => void;