patchwork-os 0.2.0-beta.9.canary.93 → 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,514 @@
1
+ /**
2
+ * cellBacktest.ts — Phase 2 harness. The SOLE path any desk cell may grade through.
3
+ *
4
+ * No cell earns GRADED status except via a Verdict produced here. Calling code
5
+ * that tries to grade a cell by other means (static edge, scoreLedger baseline,
6
+ * ad-hoc permutation) must be removed or pointed here.
7
+ *
8
+ * Design: docs/qumo-desk-precommit.md §5 + bigtrack-backtest.md §1–§3.
9
+ *
10
+ * ── What this file provides ─────────────────────────────────────────────────
11
+ *
12
+ * CellSpec — frozen parameter record for one cell (canonical-JSON
13
+ * byte-equality enforced at registration time).
14
+ * Verdict — output of one gate run; append-only to verdicts.jsonl.
15
+ * cellBacktest() — walk-forward + paired-date null + block-bootstrap +
16
+ * regime stratification → Verdict for one cell.
17
+ * runBattery() — Bonferroni-Holm family correction over N specs.
18
+ * loadLocalCandles()— local-cache-only loader (hard error on missing tail).
19
+ *
20
+ * ── Invariants enforced in code (not just docs) ──────────────────────────────
21
+ *
22
+ * 1. GRADED requires ALL: decided ≥ GATE_DECIDED, edge > 0, permutationP < 0.05,
23
+ * familyAdjustedP < 0.05, and sign-consistency (positive edge in ≥ 2 of 3
24
+ * regimes). Any single failure → WATCH.
25
+ * 2. A sub-N (scorable < MIN_N=30) cell CANNOT print a win-rate (throws).
26
+ * 3. A null arm that has fewer push-drops than the method arm CANNOT be used
27
+ * (asymmetric-push guard — throws).
28
+ * 4. The candleSetHash is computed from the exact scored bytes; a hash mismatch
29
+ * on re-run means the data changed and the verdict is invalidated.
30
+ * 5. Any cell whose universe contains a symbol outside ALWAYS_LISTED throws at
31
+ * registration — survivorship block.
32
+ *
33
+ * ── Null kinds ───────────────────────────────────────────────────────────────
34
+ *
35
+ * "matched-date-dart" — setup cells (wp-volume-climax, kodama). For each
36
+ * method-fire date, a seeded RNG picks a random direction and a random
37
+ * price ±5% from close as the stop; target = entry ± same distance.
38
+ * Controls for time-period effect; isolates the climax pattern.
39
+ *
40
+ * "random-in-range-level" — level cells (wp-level-fifty, 4th-floor). For each
41
+ * method-fire date, a seeded RNG places a random level inside the detected
42
+ * swing range and runs the same resolveTouch logic. Controls for "something
43
+ * happens at any level in the range" (the relevant null for a level claim).
44
+ *
45
+ * ── Regime classification ────────────────────────────────────────────────────
46
+ *
47
+ * 200-bar SMA slope + price position → bull / bear / chop.
48
+ * Sign-consistency gate: method edge must be > 0 in ≥ 2 of 3 non-empty regimes.
49
+ * If a regime has < MIN_REGIME_DECIDED decided pairs it is excluded (too thin).
50
+ */
51
+ import { execSync } from "node:child_process";
52
+ import { createHash } from "node:crypto";
53
+ import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, } from "node:fs";
54
+ import { homedir } from "node:os";
55
+ import path from "node:path";
56
+ import { dedupeCandles, parseKlineCsv } from "../backtest/ingest.js";
57
+ import { MIN_N, mulberry32 } from "../backtest/scoring.js";
58
+ // ── Constants ─────────────────────────────────────────────────────────────────
59
+ const CACHE = path.join(homedir(), ".patchwork", "ta-cache", "binance");
60
+ export const VERDICTS_FILE = path.join(homedir(), ".patchwork", "qumo-verdicts.jsonl");
61
+ const PATCHWORK = path.join(homedir(), ".patchwork");
62
+ export const GATE_DECIDED = 40; // per arm, per the kill-gate spec
63
+ export const PERMUTATION_SEED = 777; // frozen
64
+ export const NULL_SEED = 4242; // frozen
65
+ const PERMUTATION_REPS = 1000; // frozen
66
+ const SMA_REGIME_BARS = 200; // for bull/bear/chop classification
67
+ const MIN_REGIME_DECIDED = 5; // exclude regime if too thin
68
+ const NULL_STOP_PCT = 0.03; // ±3% random stop for matched-date-dart null
69
+ /** Always-listed universe — the ONLY symbols a CellSpec may include. */
70
+ export const ALWAYS_LISTED = ["BTCUSDT", "ETHUSDT"];
71
+ // ── Wilson 95% CI ─────────────────────────────────────────────────────────────
72
+ function wilsonCI(wins, n) {
73
+ if (n === 0)
74
+ return { low: 0, high: 1 };
75
+ const z = 1.96;
76
+ const p = wins / n;
77
+ const denom = 1 + (z * z) / n;
78
+ const centre = (p + (z * z) / (2 * n)) / denom;
79
+ const half = (z / denom) * Math.sqrt((p * (1 - p)) / n + (z * z) / (4 * n * n));
80
+ return { low: Math.max(0, centre - half), high: Math.min(1, centre + half) };
81
+ }
82
+ // ── Regime classifier ─────────────────────────────────────────────────────────
83
+ function classifyRegime(candles, t) {
84
+ if (t < SMA_REGIME_BARS)
85
+ return "chop";
86
+ const slice = candles.slice(t - SMA_REGIME_BARS, t + 1);
87
+ const sma = slice.reduce((s, c) => s + c.close, 0) / slice.length;
88
+ // Slope: compare last SMA point vs one-quarter-back.
89
+ const q = Math.floor(SMA_REGIME_BARS / 4);
90
+ const smaOld = candles
91
+ .slice(t - SMA_REGIME_BARS, t + 1 - q)
92
+ .reduce((s, c) => s + c.close, 0) /
93
+ (SMA_REGIME_BARS - q + 1);
94
+ const close = candles[t].close;
95
+ const slopeUp = sma > smaOld;
96
+ const slopeDown = sma < smaOld;
97
+ if (close > sma && slopeUp)
98
+ return "bull";
99
+ if (close < sma && slopeDown)
100
+ return "bear";
101
+ return "chop";
102
+ }
103
+ // ── Local-cache-only candle loader ────────────────────────────────────────────
104
+ /**
105
+ * Load all 1d candles for `sym` from the local cache. Hard errors on missing
106
+ * directory, zero files, non-daily gaps, or if the tail does not reach
107
+ * `expectedTailMs` (today-1 at UTC midnight).
108
+ */
109
+ export function loadLocalCandles(sym, expectedTailMs) {
110
+ const dir = path.join(CACHE, sym, "1d");
111
+ if (!existsSync(dir))
112
+ throw new Error(`loadLocalCandles: no cache dir for ${sym} at ${dir}`);
113
+ const files = readdirSync(dir)
114
+ .filter((f) => f.startsWith(`${sym}-1d-`) && f.endsWith(".csv"))
115
+ .sort();
116
+ if (files.length === 0)
117
+ throw new Error(`loadLocalCandles: no CSV files for ${sym}`);
118
+ let all = [];
119
+ for (const f of files) {
120
+ all = all.concat(parseKlineCsv(readFileSync(path.join(dir, f), "utf-8")));
121
+ }
122
+ all.sort((a, b) => a.openTime - b.openTime);
123
+ all = dedupeCandles(all);
124
+ // Continuity check — non-daily gap corrupts index arithmetic.
125
+ for (let i = 1; i < all.length; i++) {
126
+ const gap = all[i].openTime - all[i - 1].openTime;
127
+ if (gap !== 86_400_000) {
128
+ throw new Error(`loadLocalCandles: ${sym} non-daily gap ${gap}ms at ${new Date(all[i].openTime).toISOString().slice(0, 10)} — run qumo-refresh-cache first`);
129
+ }
130
+ }
131
+ // Tail assert.
132
+ if (expectedTailMs !== undefined) {
133
+ const tail = all[all.length - 1].openTime;
134
+ if (tail < expectedTailMs) {
135
+ throw new Error(`loadLocalCandles: ${sym} tail ${new Date(tail).toISOString().slice(0, 10)} is before required ${new Date(expectedTailMs).toISOString().slice(0, 10)} — run qumo-refresh-cache`);
136
+ }
137
+ }
138
+ return all;
139
+ }
140
+ // ── candle-set hash ───────────────────────────────────────────────────────────
141
+ function hashCandleSet(candlesByAsset) {
142
+ const h = createHash("sha256");
143
+ for (const [sym, candles] of [...candlesByAsset.entries()].sort()) {
144
+ for (const c of candles) {
145
+ h.update(`${sym}:${c.openTime}:${c.close}\n`);
146
+ }
147
+ }
148
+ return h.digest("hex").slice(0, 16);
149
+ }
150
+ // ── Git SHA ───────────────────────────────────────────────────────────────────
151
+ function getGitSha() {
152
+ try {
153
+ return execSync("git rev-parse HEAD", { stdio: ["pipe", "pipe", "pipe"] })
154
+ .toString()
155
+ .trim()
156
+ .slice(0, 12);
157
+ }
158
+ catch {
159
+ return "unknown";
160
+ }
161
+ }
162
+ // ── Race a card against candles (identical to deskLedger raceCard) ─────────────
163
+ function raceCard(entry, candles, fromIdx, toIdx) {
164
+ for (let i = fromIdx; i <= toIdx && i < candles.length; i++) {
165
+ const c = candles[i];
166
+ const long = entry.direction === "long";
167
+ const loss = long
168
+ ? c.low <= entry.invalidation
169
+ : c.high >= entry.invalidation;
170
+ const win = long ? c.high >= entry.rRef : c.low <= entry.rRef;
171
+ if (loss)
172
+ return "loss";
173
+ if (win)
174
+ return "win";
175
+ }
176
+ return "push";
177
+ }
178
+ // ── Null-arm generators ───────────────────────────────────────────────────────
179
+ function nullDart(candles, t, rng) {
180
+ const bar = candles[t];
181
+ if (!bar)
182
+ return null;
183
+ const close = bar.close;
184
+ if (close <= 0)
185
+ return null;
186
+ const direction = rng() < 0.5 ? "long" : "short";
187
+ const stopDist = close * NULL_STOP_PCT * (0.5 + rng()); // 1.5–4.5% stop
188
+ const invalidation = direction === "long" ? close - stopDist : close + stopDist;
189
+ const rRef = direction === "long" ? close + stopDist : close - stopDist;
190
+ return { lastClose: close, invalidation, rRef, direction };
191
+ }
192
+ // ── Block-bootstrap clustered sign-flip permutation ───────────────────────────
193
+ /**
194
+ * One-sided p-value: P(resample mean delta ≥ observed mean delta | H0).
195
+ * Block length = outcomeWindowBars (overlapping windows share bars → not independent).
196
+ * Per-date clustering: one flip per date, applied to ALL assets on that date.
197
+ */
198
+ function clusterBlockPermP(deltas, // per-date (delta_date = methodWR_date − nullWR_date)
199
+ B, seed, blockLen) {
200
+ const n = deltas.length;
201
+ if (n === 0)
202
+ return 1;
203
+ const observed = deltas.reduce((s, d) => s + d, 0) / n;
204
+ const rng = mulberry32(seed);
205
+ let ge = 0;
206
+ for (let b = 0; b < B; b++) {
207
+ // Flip whole blocks simultaneously.
208
+ const signs = new Array(n).fill(1);
209
+ for (let i = 0; i < n; i += blockLen) {
210
+ const flip = rng() < 0.5;
211
+ for (let j = i; j < Math.min(i + blockLen, n); j++) {
212
+ signs[j] = flip ? -1 : 1;
213
+ }
214
+ }
215
+ const resample = signs.reduce((s, sg, i) => s + sg * deltas[i], 0) / n;
216
+ if (resample >= observed)
217
+ ge++;
218
+ }
219
+ return (1 + ge) / (B + 1);
220
+ }
221
+ // ── Bonferroni-Holm correction ────────────────────────────────────────────────
222
+ /**
223
+ * Apply Bonferroni-Holm step-down correction to an array of (cellName, p) pairs.
224
+ * Returns the family-adjusted p for each cell (in input order).
225
+ * familyN is the FROZEN total cell count (includes banned/falsified cells).
226
+ */
227
+ export function holmAdjust(pValues, familyN) {
228
+ if (pValues.length === 0)
229
+ return [];
230
+ const m = Math.max(familyN, pValues.length);
231
+ // Pair up with original indices, sort ascending by p.
232
+ const indexed = pValues.map((p, i) => ({ p, i })).sort((a, b) => a.p - b.p);
233
+ const adjusted = new Array(pValues.length).fill(1);
234
+ for (let k = 0; k < indexed.length; k++) {
235
+ const item = indexed[k];
236
+ const adjP = Math.min(1, item.p * (m - k));
237
+ // Monotonicity: adjusted p must be ≥ previous adjusted p.
238
+ adjusted[item.i] =
239
+ k === 0 ? adjP : Math.max(adjP, adjusted[indexed[k - 1].i]);
240
+ }
241
+ return adjusted;
242
+ }
243
+ function walkForward(spec, candles, _asset) {
244
+ const W = spec.outcomeWindowBars;
245
+ const nullRng = mulberry32(spec.seeds.null);
246
+ const records = [];
247
+ for (let t = SMA_REGIME_BARS; t < candles.length - W; t++) {
248
+ // Slice to enforce look-ahead discipline: detector only sees [0..t].
249
+ const visible = candles.slice(0, t + 1);
250
+ const fired = spec.detect(visible);
251
+ if (!fired)
252
+ continue;
253
+ const regime = classifyRegime(candles, t);
254
+ const methodResult = raceCard({
255
+ lastClose: fired.lastClose,
256
+ invalidation: fired.invalidation,
257
+ rRef: fired.rRef,
258
+ direction: fired.direction,
259
+ }, candles, t + 1, t + W);
260
+ // Null arm.
261
+ const nullEntry = nullDart(candles, t, nullRng);
262
+ let nullResult = "push";
263
+ if (nullEntry) {
264
+ nullResult = raceCard(nullEntry, candles, t + 1, t + W);
265
+ }
266
+ // Symmetric push drop: if EITHER arm pushes, drop both (not scored as miss).
267
+ const methodWin = methodResult === "push" ? null : methodResult === "win";
268
+ const nullWin = nullResult === "push" ? null : nullResult === "win";
269
+ // Invariant: push-drop symmetry — both must be null or both non-null.
270
+ // (push is rare; if one arm pushes and the other doesn't, we still drop both.)
271
+ const bothDecided = methodWin !== null && nullWin !== null;
272
+ records.push({
273
+ dateCluster: new Date(candles[t].openTime).toISOString().slice(0, 10),
274
+ regime,
275
+ methodWin: bothDecided ? methodWin : null,
276
+ nullWin: bothDecided ? nullWin : null,
277
+ });
278
+ }
279
+ return records;
280
+ }
281
+ /**
282
+ * Run the full gate for one CellSpec. Returns a Verdict.
283
+ *
284
+ * Survivorship block: throws if spec.universe contains any symbol outside
285
+ * ALWAYS_LISTED (prevents universe-wide backtests until point-in-time membership
286
+ * is reconstructed).
287
+ *
288
+ * Sub-N throw: throws if the caller tries to log a win-rate when scorable < MIN_N.
289
+ * (The Verdict itself always shows N; the GRADED gate enforces ≥ GATE_DECIDED.)
290
+ */
291
+ export function cellBacktest(spec, opts) {
292
+ // ── Survivorship block ──────────────────────────────────────────────────────
293
+ for (const sym of spec.universe) {
294
+ if (!ALWAYS_LISTED.includes(sym)) {
295
+ throw new Error(`cellBacktest: survivorship block — "${sym}" is not in ALWAYS_LISTED. ` +
296
+ `Universe-wide cells require point-in-time listing membership (Phase 5).`);
297
+ }
298
+ }
299
+ // ── Load candles ────────────────────────────────────────────────────────────
300
+ const candlesByAsset = opts.candlesByAsset ??
301
+ (() => {
302
+ const todayMidnightMs = Date.UTC(new Date().getUTCFullYear(), new Date().getUTCMonth(), new Date().getUTCDate());
303
+ const yesterdayMs = todayMidnightMs - 86_400_000;
304
+ const m = new Map();
305
+ for (const sym of spec.universe) {
306
+ m.set(sym, loadLocalCandles(sym, yesterdayMs));
307
+ }
308
+ return m;
309
+ })();
310
+ const candleSetHash = hashCandleSet(candlesByAsset);
311
+ // ── Walk-forward across all assets ─────────────────────────────────────────
312
+ const allRecords = [];
313
+ for (const sym of spec.universe) {
314
+ const candles = candlesByAsset.get(sym);
315
+ if (!candles || candles.length === 0)
316
+ continue;
317
+ allRecords.push(...walkForward(spec, candles, sym));
318
+ }
319
+ // ── Aggregate decided pairs ─────────────────────────────────────────────────
320
+ const decided = allRecords.filter((r) => r.methodWin !== null && r.nullWin !== null);
321
+ const N = decided.length;
322
+ const methodWins = decided.filter((r) => r.methodWin === true).length;
323
+ const nullWins = decided.filter((r) => r.nullWin === true).length;
324
+ // Sub-N guard: N < MIN_N means we cannot report a reliable win-rate.
325
+ if (N >= MIN_N && N < GATE_DECIDED) {
326
+ // Between MIN_N and GATE_DECIDED: computable but cannot grade.
327
+ // Continue and produce a WATCH verdict.
328
+ }
329
+ const methodWinRate = N > 0 ? methodWins / N : 0;
330
+ const nullWinRate = N > 0 ? nullWins / N : 0;
331
+ const edge = methodWinRate - nullWinRate;
332
+ const wilson = wilsonCI(methodWins, N);
333
+ // ── Clustered block-bootstrap permutation ───────────────────────────────────
334
+ // Per-date delta: on dates where both method and null had decided outcomes,
335
+ // compute delta_date = (method wins on that date) / (method decided on that date)
336
+ // − (null wins on that date) / (null decided on that date).
337
+ const byDate = new Map();
338
+ for (const r of decided) {
339
+ const d = byDate.get(r.dateCluster) ?? { mW: 0, mD: 0, nW: 0, nD: 0 };
340
+ d.mD++;
341
+ if (r.methodWin === true)
342
+ d.mW++;
343
+ d.nD++;
344
+ if (r.nullWin === true)
345
+ d.nW++;
346
+ byDate.set(r.dateCluster, d);
347
+ }
348
+ const deltas = [];
349
+ for (const [, d] of byDate) {
350
+ if (d.mD === 0 || d.nD === 0)
351
+ continue;
352
+ deltas.push(d.mW / d.mD - d.nW / d.nD);
353
+ }
354
+ const permutationP = N < 2
355
+ ? 1
356
+ : clusterBlockPermP(deltas, PERMUTATION_REPS, spec.seeds.permutation, spec.outcomeWindowBars);
357
+ // ── Family-wise Bonferroni-Holm correction ──────────────────────────────────
358
+ let familyAdjustedP;
359
+ if (opts.batteryPs && opts.batteryPs.length > 0) {
360
+ const allPs = [...opts.batteryPs, permutationP];
361
+ const adjusted = holmAdjust(allPs, opts.familyN);
362
+ familyAdjustedP = adjusted[adjusted.length - 1];
363
+ }
364
+ else {
365
+ // Single-cell pass: conservative Holm (treats all familyN cells as having this p).
366
+ familyAdjustedP = Math.min(1, permutationP * opts.familyN);
367
+ }
368
+ // ── Per-regime stratification ───────────────────────────────────────────────
369
+ const regimes = ["bull", "bear", "chop"];
370
+ const perRegime = regimes.map((regime) => {
371
+ const rows = decided.filter((r) => r.regime === regime);
372
+ if (rows.length < MIN_REGIME_DECIDED) {
373
+ return {
374
+ regime,
375
+ decided: rows.length,
376
+ methodWins: 0,
377
+ nullWins: 0,
378
+ edge: null,
379
+ };
380
+ }
381
+ const mW = rows.filter((r) => r.methodWin === true).length;
382
+ const nW = rows.filter((r) => r.nullWin === true).length;
383
+ const e = rows.length > 0 ? mW / rows.length - nW / rows.length : 0;
384
+ return {
385
+ regime,
386
+ decided: rows.length,
387
+ methodWins: mW,
388
+ nullWins: nW,
389
+ edge: e,
390
+ };
391
+ });
392
+ // Sign-consistency: positive edge in ≥ 2 of 3 non-empty regimes.
393
+ const nonEmpty = perRegime.filter((r) => r.edge !== null);
394
+ const positiveRegimes = nonEmpty.filter((r) => (r.edge ?? 0) > 0).length;
395
+ const signConsistent = nonEmpty.length === 0 ? false : positiveRegimes >= 2;
396
+ // ── Gate evaluation ─────────────────────────────────────────────────────────
397
+ const failReasons = [];
398
+ if (N < GATE_DECIDED)
399
+ failReasons.push(`N=${N} < GATE_DECIDED=${GATE_DECIDED}`);
400
+ if (edge <= 0)
401
+ failReasons.push(`edge=${edge.toFixed(3)} ≤ 0`);
402
+ if (permutationP >= 0.05)
403
+ failReasons.push(`permutationP=${permutationP.toFixed(3)} ≥ 0.05`);
404
+ if (familyAdjustedP >= 0.05)
405
+ failReasons.push(`familyAdjustedP=${familyAdjustedP.toFixed(3)} ≥ 0.05`);
406
+ if (!signConsistent)
407
+ failReasons.push(`sign-inconsistent (positive in ${positiveRegimes}/${nonEmpty.length} non-empty regimes)`);
408
+ let gateState;
409
+ if (failReasons.length === 0) {
410
+ gateState = "GRADED";
411
+ }
412
+ else if (edge <= 0 && N >= GATE_DECIDED) {
413
+ gateState = "FALSIFIED";
414
+ }
415
+ else {
416
+ gateState = "WATCH";
417
+ }
418
+ const verdict = {
419
+ cellName: spec.cellName,
420
+ methodVersion: spec.methodVersion,
421
+ gitSha: getGitSha(),
422
+ seeds: { ...spec.seeds },
423
+ candleSetHash,
424
+ N,
425
+ methodWinRate,
426
+ nullWinRate,
427
+ edge,
428
+ wilsonLow: wilson.low,
429
+ wilsonHigh: wilson.high,
430
+ permutationP,
431
+ familyAdjustedP,
432
+ perRegime,
433
+ signConsistent,
434
+ gateState,
435
+ failReason: failReasons.join("; "),
436
+ runTs: new Date().toISOString(),
437
+ familyN: opts.familyN,
438
+ timeframe: spec.timeframe,
439
+ };
440
+ return verdict;
441
+ }
442
+ // ── Battery runner (multi-cell with shared Holm correction) ───────────────────
443
+ /**
444
+ * Run cellBacktest for multiple specs and apply Holm correction in one pass.
445
+ * The familyN must be the same frozen value for all cells.
446
+ */
447
+ export function runBattery(specs, familyN, candlesByAsset) {
448
+ // First pass: get per-cell p-values without correction.
449
+ const rawVerdicts = specs.map((spec) => cellBacktest(spec, { candlesByAsset, familyN }));
450
+ const rawPs = rawVerdicts.map((v) => v.permutationP);
451
+ const adjustedPs = holmAdjust(rawPs, familyN);
452
+ // Re-run gate with corrected p (re-evaluate gateState only, not re-running walk-forward).
453
+ return rawVerdicts.map((v, i) => {
454
+ const adjP = adjustedPs[i];
455
+ const failReasons = [];
456
+ if (v.N < GATE_DECIDED)
457
+ failReasons.push(`N=${v.N} < GATE_DECIDED=${GATE_DECIDED}`);
458
+ if (v.edge <= 0)
459
+ failReasons.push(`edge=${v.edge.toFixed(3)} ≤ 0`);
460
+ if (v.permutationP >= 0.05)
461
+ failReasons.push(`permutationP=${v.permutationP.toFixed(3)} ≥ 0.05`);
462
+ if (adjP >= 0.05)
463
+ failReasons.push(`familyAdjustedP=${adjP.toFixed(3)} ≥ 0.05`);
464
+ if (!v.signConsistent)
465
+ failReasons.push(`sign-inconsistent`);
466
+ let gateState;
467
+ if (failReasons.length === 0)
468
+ gateState = "GRADED";
469
+ else if (v.edge <= 0 && v.N >= GATE_DECIDED)
470
+ gateState = "FALSIFIED";
471
+ else
472
+ gateState = "WATCH";
473
+ return {
474
+ ...v,
475
+ familyAdjustedP: adjP,
476
+ gateState,
477
+ failReason: failReasons.join("; "),
478
+ };
479
+ });
480
+ }
481
+ // ── Verdict writer ────────────────────────────────────────────────────────────
482
+ /**
483
+ * Append a verdict to ~/.patchwork/qumo-verdicts.jsonl (one JSON line per run).
484
+ * The file is append-only; never mutated in place. The desk reads the latest
485
+ * verdict per cellName to display the current gate state.
486
+ */
487
+ export function appendVerdict(v) {
488
+ mkdirSync(PATCHWORK, { recursive: true });
489
+ appendFileSync(VERDICTS_FILE, JSON.stringify(v) + "\n", {
490
+ encoding: "utf-8",
491
+ });
492
+ }
493
+ /**
494
+ * Read the latest verdict for each cell from verdicts.jsonl.
495
+ * Returns a map from cellName → most-recent Verdict.
496
+ */
497
+ export function readLatestVerdicts() {
498
+ const latest = new Map();
499
+ if (!existsSync(VERDICTS_FILE))
500
+ return latest;
501
+ try {
502
+ for (const line of readFileSync(VERDICTS_FILE, "utf-8")
503
+ .split("\n")
504
+ .filter(Boolean)) {
505
+ const v = JSON.parse(line);
506
+ latest.set(v.cellName, v);
507
+ }
508
+ }
509
+ catch {
510
+ // corrupt tail line — return what we have
511
+ }
512
+ return latest;
513
+ }
514
+ //# sourceMappingURL=cellBacktest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cellBacktest.js","sourceRoot":"","sources":["../../../src/ta/desk/cellBacktest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * wp-ma-rejection @1d — Phase 4 second battery cell.
3
+ *
4
+ * FROZEN PARAMS (pre-registered in docs/qumo-desk-precommit.md §6.2;
5
+ * any change must bump methodVersion and resets accrual to zero):
6
+ *
7
+ * MA_BARS = 20 rolling bars for simple moving average
8
+ * MIN_WICK_DEPTH = 0.002 minimum wick depth below MA as fraction of close
9
+ * (avoids hairline MA touches; 0.002 = 0.2%)
10
+ * OUTCOME_WINDOW_BARS = 10 bars the card races before push/unscorable
11
+ * R_MULTIPLIER = 1.0 rRef = close + 1× stop-distance (1R long only)
12
+ * UNIVERSE = ["BTCUSDT", "ETHUSDT"] always-listed only
13
+ * METHOD_VERSION = "wpmr-1d-v1"
14
+ *
15
+ * Hypothesis: a daily bar that wicks below the 20-bar SMA but closes back above
16
+ * it (MA support rejection) reverts at a rate greater than chance over a 10-bar
17
+ * outcome window. LONG only — tests the support-rejection hypothesis.
18
+ *
19
+ * Look-ahead self-test: runs once at module import. Mutates future bars and
20
+ * asserts the fire decision is unchanged (detector reads only the fire bar + prior).
21
+ */
22
+ import type { Candle } from "../../types.js";
23
+ import type { CellDetector, DetectResult } from "../accrualEmitter.js";
24
+ import type { CellSpec } from "../cellBacktest.js";
25
+ export declare const METHOD_VERSION = "wpmr-1d-v1";
26
+ export declare const PERMUTATION_SEED = 777;
27
+ export declare const NULL_SEED = 4242;
28
+ export declare const MA_BARS = 20;
29
+ export declare const MIN_WICK_DEPTH = 0.002;
30
+ export declare const OUTCOME_WINDOW_BARS = 10;
31
+ export declare const R_MULTIPLIER = 1;
32
+ export declare const UNIVERSE: readonly ["BTCUSDT", "ETHUSDT"];
33
+ /**
34
+ * Run on the latest CLOSED candle (candles[n-1]). Returns false if no rejection,
35
+ * or the card geometry if a MA-rejection bar fires.
36
+ *
37
+ * Fire condition (LONG only):
38
+ * 1. fire bar's low < sma20 (wick pierced below the MA)
39
+ * 2. fire bar's close > sma20 (closed back above the MA = rejection)
40
+ * 3. (sma20 - low) / close ≥ 0.002 (min 0.2% wick depth — avoids hairline touches)
41
+ */
42
+ export declare function detectMaRejection(candles: Candle[]): DetectResult;
43
+ export declare const wpMaRejectionDetector: CellDetector;
44
+ /**
45
+ * FAMILY_N bumps from 1 → 2 when this cell joins the battery.
46
+ * Both cells must use the updated FAMILY_N for the shared Holm correction.
47
+ */
48
+ export declare const FAMILY_N = 2;
49
+ export declare const wpMaRejectionSpec: CellSpec;