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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (739) hide show
  1. package/README.bridge.md +15 -16
  2. package/README.md +46 -458
  3. package/dist/activationMetrics.js +2 -3
  4. package/dist/activationMetrics.js.map +1 -1
  5. package/dist/activityLog.d.ts +1 -0
  6. package/dist/activityLog.js +8 -3
  7. package/dist/activityLog.js.map +1 -1
  8. package/dist/adapters/gemini.js +2 -2
  9. package/dist/adapters/gemini.js.map +1 -1
  10. package/dist/adapters/grok.js +6 -1
  11. package/dist/adapters/grok.js.map +1 -1
  12. package/dist/adapters/openai.js +4 -0
  13. package/dist/adapters/openai.js.map +1 -1
  14. package/dist/approvalHttp.d.ts +9 -0
  15. package/dist/approvalHttp.js +210 -171
  16. package/dist/approvalHttp.js.map +1 -1
  17. package/dist/approvalKpi.d.ts +102 -0
  18. package/dist/approvalKpi.js +282 -0
  19. package/dist/approvalKpi.js.map +1 -0
  20. package/dist/approvalQueue.d.ts +1 -1
  21. package/dist/approvalQueue.js.map +1 -1
  22. package/dist/automation.d.ts +45 -4
  23. package/dist/automation.js +123 -15
  24. package/dist/automation.js.map +1 -1
  25. package/dist/bridge.d.ts +10 -0
  26. package/dist/bridge.js +225 -46
  27. package/dist/bridge.js.map +1 -1
  28. package/dist/bridgeLockDiscovery.d.ts +16 -1
  29. package/dist/bridgeLockDiscovery.js +38 -4
  30. package/dist/bridgeLockDiscovery.js.map +1 -1
  31. package/dist/bridgeToolsRules.js +3 -18
  32. package/dist/bridgeToolsRules.js.map +1 -1
  33. package/dist/claudeAuthHttp.d.ts +25 -0
  34. package/dist/claudeAuthHttp.js +219 -0
  35. package/dist/claudeAuthHttp.js.map +1 -0
  36. package/dist/claudeDriver.js +4 -1
  37. package/dist/claudeDriver.js.map +1 -1
  38. package/dist/claudeOrchestrator.d.ts +15 -0
  39. package/dist/claudeOrchestrator.js +44 -0
  40. package/dist/claudeOrchestrator.js.map +1 -1
  41. package/dist/commands/connect.d.ts +47 -0
  42. package/dist/commands/connect.js +419 -0
  43. package/dist/commands/connect.js.map +1 -0
  44. package/dist/commands/install.js +3 -10
  45. package/dist/commands/install.js.map +1 -1
  46. package/dist/commands/launchd.d.ts +7 -0
  47. package/dist/commands/launchd.js +20 -2
  48. package/dist/commands/launchd.js.map +1 -1
  49. package/dist/commands/patchworkInit.d.ts +7 -0
  50. package/dist/commands/patchworkInit.js +26 -0
  51. package/dist/commands/patchworkInit.js.map +1 -1
  52. package/dist/commands/recipe.d.ts +59 -4
  53. package/dist/commands/recipe.js +206 -5
  54. package/dist/commands/recipe.js.map +1 -1
  55. package/dist/commands/recipeInstall.d.ts +9 -0
  56. package/dist/commands/recipeInstall.js +56 -3
  57. package/dist/commands/recipeInstall.js.map +1 -1
  58. package/dist/commands/task.d.ts +25 -0
  59. package/dist/commands/task.js +61 -41
  60. package/dist/commands/task.js.map +1 -1
  61. package/dist/commands/tokenEfficiency.d.ts +4 -0
  62. package/dist/commands/tokenEfficiency.js +23 -26
  63. package/dist/commands/tokenEfficiency.js.map +1 -1
  64. package/dist/commands/tracesExport.d.ts +15 -1
  65. package/dist/commands/tracesExport.js +39 -5
  66. package/dist/commands/tracesExport.js.map +1 -1
  67. package/dist/config.js +16 -0
  68. package/dist/config.js.map +1 -1
  69. package/dist/connectorRoutes.js +613 -62
  70. package/dist/connectorRoutes.js.map +1 -1
  71. package/dist/connectors/asana.js +9 -3
  72. package/dist/connectors/asana.js.map +1 -1
  73. package/dist/connectors/baseConnector.d.ts +16 -0
  74. package/dist/connectors/baseConnector.js +2 -0
  75. package/dist/connectors/baseConnector.js.map +1 -1
  76. package/dist/connectors/caldiy.js +34 -0
  77. package/dist/connectors/caldiy.js.map +1 -1
  78. package/dist/connectors/confluence.js +9 -2
  79. package/dist/connectors/confluence.js.map +1 -1
  80. package/dist/connectors/connectorActivity.d.ts +24 -0
  81. package/dist/connectors/connectorActivity.js +32 -0
  82. package/dist/connectors/connectorActivity.js.map +1 -0
  83. package/dist/connectors/connectorRedirectUri.js +22 -2
  84. package/dist/connectors/connectorRedirectUri.js.map +1 -1
  85. package/dist/connectors/connectorRegistry.d.ts +0 -3
  86. package/dist/connectors/connectorRegistry.js +8 -8
  87. package/dist/connectors/connectorRegistry.js.map +1 -1
  88. package/dist/connectors/datadog.js +8 -1
  89. package/dist/connectors/datadog.js.map +1 -1
  90. package/dist/connectors/discord.js +4 -3
  91. package/dist/connectors/discord.js.map +1 -1
  92. package/dist/connectors/elasticsearch.js +22 -0
  93. package/dist/connectors/elasticsearch.js.map +1 -1
  94. package/dist/connectors/github.d.ts +38 -0
  95. package/dist/connectors/github.js +91 -5
  96. package/dist/connectors/github.js.map +1 -1
  97. package/dist/connectors/gitlab.js +19 -16
  98. package/dist/connectors/gitlab.js.map +1 -1
  99. package/dist/connectors/gmail.d.ts +5 -0
  100. package/dist/connectors/gmail.js +53 -11
  101. package/dist/connectors/gmail.js.map +1 -1
  102. package/dist/connectors/googleCalendar.js +5 -4
  103. package/dist/connectors/googleCalendar.js.map +1 -1
  104. package/dist/connectors/googleDocs.js +7 -6
  105. package/dist/connectors/googleDocs.js.map +1 -1
  106. package/dist/connectors/googleDrive.js +15 -8
  107. package/dist/connectors/googleDrive.js.map +1 -1
  108. package/dist/connectors/grafana.js +39 -3
  109. package/dist/connectors/grafana.js.map +1 -1
  110. package/dist/connectors/jira.d.ts +1 -1
  111. package/dist/connectors/jira.js +19 -4
  112. package/dist/connectors/jira.js.map +1 -1
  113. package/dist/connectors/linear.js +2 -2
  114. package/dist/connectors/linear.js.map +1 -1
  115. package/dist/connectors/mcpClient.d.ts +29 -1
  116. package/dist/connectors/mcpClient.js +114 -44
  117. package/dist/connectors/mcpClient.js.map +1 -1
  118. package/dist/connectors/mcpOAuth.d.ts +1 -0
  119. package/dist/connectors/mcpOAuth.js +49 -4
  120. package/dist/connectors/mcpOAuth.js.map +1 -1
  121. package/dist/connectors/monday.js +5 -4
  122. package/dist/connectors/monday.js.map +1 -1
  123. package/dist/connectors/mongodb.js +32 -5
  124. package/dist/connectors/mongodb.js.map +1 -1
  125. package/dist/connectors/notion.d.ts +1 -1
  126. package/dist/connectors/notion.js +22 -6
  127. package/dist/connectors/notion.js.map +1 -1
  128. package/dist/connectors/oauthError.d.ts +17 -0
  129. package/dist/connectors/oauthError.js +50 -0
  130. package/dist/connectors/oauthError.js.map +1 -0
  131. package/dist/connectors/postgres.d.ts +7 -0
  132. package/dist/connectors/postgres.js +32 -2
  133. package/dist/connectors/postgres.js.map +1 -1
  134. package/dist/connectors/posthog.js +26 -0
  135. package/dist/connectors/posthog.js.map +1 -1
  136. package/dist/connectors/redis.d.ts +1 -0
  137. package/dist/connectors/redis.js +47 -20
  138. package/dist/connectors/redis.js.map +1 -1
  139. package/dist/connectors/salesforce.js +66 -5
  140. package/dist/connectors/salesforce.js.map +1 -1
  141. package/dist/connectors/sentry.js +2 -2
  142. package/dist/connectors/sentry.js.map +1 -1
  143. package/dist/connectors/slack.js +37 -14
  144. package/dist/connectors/slack.js.map +1 -1
  145. package/dist/connectors/snowflake.js +24 -0
  146. package/dist/connectors/snowflake.js.map +1 -1
  147. package/dist/connectors/stripe.js +9 -2
  148. package/dist/connectors/stripe.js.map +1 -1
  149. package/dist/connectors/supabase.js +34 -0
  150. package/dist/connectors/supabase.js.map +1 -1
  151. package/dist/connectors/tokenStorage.d.ts +20 -0
  152. package/dist/connectors/tokenStorage.js +196 -64
  153. package/dist/connectors/tokenStorage.js.map +1 -1
  154. package/dist/connectors/woocommerce.js +34 -0
  155. package/dist/connectors/woocommerce.js.map +1 -1
  156. package/dist/copilot/parseIntent.d.ts +58 -0
  157. package/dist/copilot/parseIntent.js +149 -0
  158. package/dist/copilot/parseIntent.js.map +1 -0
  159. package/dist/decisionReplay.d.ts +8 -6
  160. package/dist/decisionReplay.js +35 -11
  161. package/dist/decisionReplay.js.map +1 -1
  162. package/dist/decisionTraceLog.d.ts +9 -0
  163. package/dist/decisionTraceLog.js +6 -0
  164. package/dist/decisionTraceLog.js.map +1 -1
  165. package/dist/drivers/claude/api.js +49 -7
  166. package/dist/drivers/claude/api.js.map +1 -1
  167. package/dist/drivers/claude/envSanitizer.d.ts +9 -1
  168. package/dist/drivers/claude/envSanitizer.js +41 -3
  169. package/dist/drivers/claude/envSanitizer.js.map +1 -1
  170. package/dist/drivers/claude/streamParser.d.ts +13 -0
  171. package/dist/drivers/claude/streamParser.js.map +1 -1
  172. package/dist/drivers/claude/subprocess.js +131 -16
  173. package/dist/drivers/claude/subprocess.js.map +1 -1
  174. package/dist/drivers/claude/subprocessSettings.d.ts +1 -1
  175. package/dist/drivers/claude/subprocessSettings.js +18 -4
  176. package/dist/drivers/claude/subprocessSettings.js.map +1 -1
  177. package/dist/drivers/gemini/index.d.ts +13 -0
  178. package/dist/drivers/gemini/index.js +211 -67
  179. package/dist/drivers/gemini/index.js.map +1 -1
  180. package/dist/drivers/local/index.d.ts +2 -17
  181. package/dist/drivers/local/index.js +5 -92
  182. package/dist/drivers/local/index.js.map +1 -1
  183. package/dist/drivers/openai/index.js +69 -9
  184. package/dist/drivers/openai/index.js.map +1 -1
  185. package/dist/drivers/outputCap.d.ts +27 -0
  186. package/dist/drivers/outputCap.js +50 -0
  187. package/dist/drivers/outputCap.js.map +1 -0
  188. package/dist/embeddings/cosine.d.ts +23 -0
  189. package/dist/embeddings/cosine.js +59 -0
  190. package/dist/embeddings/cosine.js.map +1 -0
  191. package/dist/embeddings/index.d.ts +19 -0
  192. package/dist/embeddings/index.js +35 -0
  193. package/dist/embeddings/index.js.map +1 -0
  194. package/dist/embeddings/localEmbeddings.d.ts +29 -0
  195. package/dist/embeddings/localEmbeddings.js +103 -0
  196. package/dist/embeddings/localEmbeddings.js.map +1 -0
  197. package/dist/embeddings/localEndpoints.d.ts +24 -0
  198. package/dist/embeddings/localEndpoints.js +37 -0
  199. package/dist/embeddings/localEndpoints.js.map +1 -0
  200. package/dist/embeddings/types.d.ts +32 -0
  201. package/dist/embeddings/types.js +12 -0
  202. package/dist/embeddings/types.js.map +1 -0
  203. package/dist/featureFlags.d.ts +18 -0
  204. package/dist/featureFlags.js +32 -0
  205. package/dist/featureFlags.js.map +1 -1
  206. package/dist/fp/automationInterpreter.js +118 -39
  207. package/dist/fp/automationInterpreter.js.map +1 -1
  208. package/dist/fp/automationProgram.d.ts +10 -0
  209. package/dist/fp/automationProgram.js.map +1 -1
  210. package/dist/fp/automationState.d.ts +6 -0
  211. package/dist/fp/automationState.js +38 -0
  212. package/dist/fp/automationState.js.map +1 -1
  213. package/dist/fp/commandDescription.d.ts +6 -0
  214. package/dist/fp/commandDescription.js +18 -5
  215. package/dist/fp/commandDescription.js.map +1 -1
  216. package/dist/fp/interpreterContext.d.ts +16 -5
  217. package/dist/fp/interpreterContext.js +59 -3
  218. package/dist/fp/interpreterContext.js.map +1 -1
  219. package/dist/fp/policyParser.js +18 -8
  220. package/dist/fp/policyParser.js.map +1 -1
  221. package/dist/haltPushDispatch.d.ts +4 -0
  222. package/dist/haltPushDispatch.js +7 -22
  223. package/dist/haltPushDispatch.js.map +1 -1
  224. package/dist/inboxRoutes.js +2 -2
  225. package/dist/inboxRoutes.js.map +1 -1
  226. package/dist/index.js +672 -135
  227. package/dist/index.js.map +1 -1
  228. package/dist/installGuard.js +6 -0
  229. package/dist/installGuard.js.map +1 -1
  230. package/dist/localEndpointGuard.d.ts +25 -0
  231. package/dist/localEndpointGuard.js +101 -0
  232. package/dist/localEndpointGuard.js.map +1 -0
  233. package/dist/mcpRoutes.js +1 -1
  234. package/dist/mcpRoutes.js.map +1 -1
  235. package/dist/oauth.d.ts +13 -0
  236. package/dist/oauth.js +53 -9
  237. package/dist/oauth.js.map +1 -1
  238. package/dist/orchestrator/childBridgeClient.d.ts +7 -0
  239. package/dist/orchestrator/childBridgeClient.js +42 -1
  240. package/dist/orchestrator/childBridgeClient.js.map +1 -1
  241. package/dist/orchestrator/orchestratorBridge.d.ts +33 -0
  242. package/dist/orchestrator/orchestratorBridge.js +75 -9
  243. package/dist/orchestrator/orchestratorBridge.js.map +1 -1
  244. package/dist/patchworkConfig.d.ts +4 -0
  245. package/dist/patchworkConfig.js +33 -4
  246. package/dist/patchworkConfig.js.map +1 -1
  247. package/dist/probe.js +39 -5
  248. package/dist/probe.js.map +1 -1
  249. package/dist/recipeOrchestration.d.ts +59 -0
  250. package/dist/recipeOrchestration.js +314 -60
  251. package/dist/recipeOrchestration.js.map +1 -1
  252. package/dist/recipeRoutes.d.ts +93 -0
  253. package/dist/recipeRoutes.js +664 -27
  254. package/dist/recipeRoutes.js.map +1 -1
  255. package/dist/recipes/RecipeOrchestrator.d.ts +14 -0
  256. package/dist/recipes/RecipeOrchestrator.js +42 -2
  257. package/dist/recipes/RecipeOrchestrator.js.map +1 -1
  258. package/dist/recipes/agentExecutor.d.ts +51 -2
  259. package/dist/recipes/agentExecutor.js +86 -13
  260. package/dist/recipes/agentExecutor.js.map +1 -1
  261. package/dist/recipes/chainedRunner.d.ts +111 -3
  262. package/dist/recipes/chainedRunner.js +440 -45
  263. package/dist/recipes/chainedRunner.js.map +1 -1
  264. package/dist/recipes/compiler.js +42 -29
  265. package/dist/recipes/compiler.js.map +1 -1
  266. package/dist/recipes/connectorPreflight.js +31 -0
  267. package/dist/recipes/connectorPreflight.js.map +1 -1
  268. package/dist/recipes/dependencyGraph.d.ts +16 -0
  269. package/dist/recipes/dependencyGraph.js +37 -2
  270. package/dist/recipes/dependencyGraph.js.map +1 -1
  271. package/dist/recipes/eventTriggerPrograms.d.ts +36 -0
  272. package/dist/recipes/eventTriggerPrograms.js +158 -0
  273. package/dist/recipes/eventTriggerPrograms.js.map +1 -0
  274. package/dist/recipes/githubInstallSource.d.ts +9 -2
  275. package/dist/recipes/githubInstallSource.js +36 -6
  276. package/dist/recipes/githubInstallSource.js.map +1 -1
  277. package/dist/recipes/haltCategory.d.ts +10 -0
  278. package/dist/recipes/haltCategory.js +11 -1
  279. package/dist/recipes/haltCategory.js.map +1 -1
  280. package/dist/recipes/idempotencyKey.d.ts +30 -3
  281. package/dist/recipes/idempotencyKey.js +89 -5
  282. package/dist/recipes/idempotencyKey.js.map +1 -1
  283. package/dist/recipes/installer.js +12 -35
  284. package/dist/recipes/installer.js.map +1 -1
  285. package/dist/recipes/judgeVerdict.d.ts +11 -1
  286. package/dist/recipes/judgeVerdict.js +47 -7
  287. package/dist/recipes/judgeVerdict.js.map +1 -1
  288. package/dist/recipes/names.d.ts +5 -0
  289. package/dist/recipes/names.js +10 -5
  290. package/dist/recipes/names.js.map +1 -1
  291. package/dist/recipes/parser.js +74 -10
  292. package/dist/recipes/parser.js.map +1 -1
  293. package/dist/recipes/pricing/costRouter.d.ts +43 -0
  294. package/dist/recipes/pricing/costRouter.js +44 -0
  295. package/dist/recipes/pricing/costRouter.js.map +1 -0
  296. package/dist/recipes/pricing/priceTable.d.ts +76 -0
  297. package/dist/recipes/pricing/priceTable.js +144 -0
  298. package/dist/recipes/pricing/priceTable.js.map +1 -0
  299. package/dist/recipes/replayRun.js +5 -2
  300. package/dist/recipes/replayRun.js.map +1 -1
  301. package/dist/recipes/resolveRecipePath.js +15 -1
  302. package/dist/recipes/resolveRecipePath.js.map +1 -1
  303. package/dist/recipes/runBudget.d.ts +93 -32
  304. package/dist/recipes/runBudget.js +213 -49
  305. package/dist/recipes/runBudget.js.map +1 -1
  306. package/dist/recipes/runRegistry.d.ts +32 -0
  307. package/dist/recipes/runRegistry.js +54 -0
  308. package/dist/recipes/runRegistry.js.map +1 -0
  309. package/dist/recipes/scheduler.js +6 -2
  310. package/dist/recipes/scheduler.js.map +1 -1
  311. package/dist/recipes/schema.d.ts +59 -6
  312. package/dist/recipes/schemaGenerator.d.ts +9 -0
  313. package/dist/recipes/schemaGenerator.js +446 -77
  314. package/dist/recipes/schemaGenerator.js.map +1 -1
  315. package/dist/recipes/simulation/aggregateRunRisk.d.ts +46 -0
  316. package/dist/recipes/simulation/aggregateRunRisk.js +120 -0
  317. package/dist/recipes/simulation/aggregateRunRisk.js.map +1 -0
  318. package/dist/recipes/simulation/costProjector.d.ts +32 -0
  319. package/dist/recipes/simulation/costProjector.js +194 -0
  320. package/dist/recipes/simulation/costProjector.js.map +1 -0
  321. package/dist/recipes/simulation/sideEffects.d.ts +32 -0
  322. package/dist/recipes/simulation/sideEffects.js +62 -0
  323. package/dist/recipes/simulation/sideEffects.js.map +1 -0
  324. package/dist/recipes/simulation/simulate.d.ts +36 -0
  325. package/dist/recipes/simulation/simulate.js +264 -0
  326. package/dist/recipes/simulation/simulate.js.map +1 -0
  327. package/dist/recipes/simulation/simulateMockedRun.d.ts +52 -0
  328. package/dist/recipes/simulation/simulateMockedRun.js +84 -0
  329. package/dist/recipes/simulation/simulateMockedRun.js.map +1 -0
  330. package/dist/recipes/simulation/synthesizeMockedOutputs.d.ts +31 -0
  331. package/dist/recipes/simulation/synthesizeMockedOutputs.js +50 -0
  332. package/dist/recipes/simulation/synthesizeMockedOutputs.js.map +1 -0
  333. package/dist/recipes/simulation/types.d.ts +198 -0
  334. package/dist/recipes/simulation/types.js +30 -0
  335. package/dist/recipes/simulation/types.js.map +1 -0
  336. package/dist/recipes/stepObservation.d.ts +12 -0
  337. package/dist/recipes/stepObservation.js +21 -1
  338. package/dist/recipes/stepObservation.js.map +1 -1
  339. package/dist/recipes/toolRegistry.js +61 -24
  340. package/dist/recipes/toolRegistry.js.map +1 -1
  341. package/dist/recipes/tools/airtable.d.ts +15 -0
  342. package/dist/recipes/tools/airtable.js +240 -0
  343. package/dist/recipes/tools/airtable.js.map +1 -0
  344. package/dist/recipes/tools/caldiy.d.ts +13 -0
  345. package/dist/recipes/tools/caldiy.js +215 -0
  346. package/dist/recipes/tools/caldiy.js.map +1 -0
  347. package/dist/recipes/tools/circleci.d.ts +10 -0
  348. package/dist/recipes/tools/circleci.js +204 -0
  349. package/dist/recipes/tools/circleci.js.map +1 -0
  350. package/dist/recipes/tools/cloudflare.d.ts +13 -0
  351. package/dist/recipes/tools/cloudflare.js +211 -0
  352. package/dist/recipes/tools/cloudflare.js.map +1 -0
  353. package/dist/recipes/tools/confluence.js +11 -10
  354. package/dist/recipes/tools/confluence.js.map +1 -1
  355. package/dist/recipes/tools/datadog.js +13 -12
  356. package/dist/recipes/tools/datadog.js.map +1 -1
  357. package/dist/recipes/tools/docs.d.ts +18 -0
  358. package/dist/recipes/tools/docs.js +95 -0
  359. package/dist/recipes/tools/docs.js.map +1 -0
  360. package/dist/recipes/tools/elasticsearch.d.ts +11 -0
  361. package/dist/recipes/tools/elasticsearch.js +157 -0
  362. package/dist/recipes/tools/elasticsearch.js.map +1 -0
  363. package/dist/recipes/tools/fanOut.js +4 -4
  364. package/dist/recipes/tools/fanOut.js.map +1 -1
  365. package/dist/recipes/tools/figma.d.ts +12 -0
  366. package/dist/recipes/tools/figma.js +195 -0
  367. package/dist/recipes/tools/figma.js.map +1 -0
  368. package/dist/recipes/tools/file.js +43 -22
  369. package/dist/recipes/tools/file.js.map +1 -1
  370. package/dist/recipes/tools/github.js +162 -5
  371. package/dist/recipes/tools/github.js.map +1 -1
  372. package/dist/recipes/tools/gmail.js +45 -33
  373. package/dist/recipes/tools/gmail.js.map +1 -1
  374. package/dist/recipes/tools/grafana.d.ts +11 -0
  375. package/dist/recipes/tools/grafana.js +216 -0
  376. package/dist/recipes/tools/grafana.js.map +1 -0
  377. package/dist/recipes/tools/http.d.ts +1 -1
  378. package/dist/recipes/tools/http.js +10 -28
  379. package/dist/recipes/tools/http.js.map +1 -1
  380. package/dist/recipes/tools/hubspot.js +13 -12
  381. package/dist/recipes/tools/hubspot.js.map +1 -1
  382. package/dist/recipes/tools/index.d.ts +28 -0
  383. package/dist/recipes/tools/index.js +28 -0
  384. package/dist/recipes/tools/index.js.map +1 -1
  385. package/dist/recipes/tools/intercom.js +11 -10
  386. package/dist/recipes/tools/intercom.js.map +1 -1
  387. package/dist/recipes/tools/jira.js +13 -0
  388. package/dist/recipes/tools/jira.js.map +1 -1
  389. package/dist/recipes/tools/meetingNotes.js +2 -2
  390. package/dist/recipes/tools/monday.d.ts +22 -0
  391. package/dist/recipes/tools/monday.js +242 -0
  392. package/dist/recipes/tools/monday.js.map +1 -0
  393. package/dist/recipes/tools/mongodb.d.ts +19 -0
  394. package/dist/recipes/tools/mongodb.js +194 -0
  395. package/dist/recipes/tools/mongodb.js.map +1 -0
  396. package/dist/recipes/tools/notion.js +11 -10
  397. package/dist/recipes/tools/notion.js.map +1 -1
  398. package/dist/recipes/tools/obsidian.d.ts +15 -0
  399. package/dist/recipes/tools/obsidian.js +173 -0
  400. package/dist/recipes/tools/obsidian.js.map +1 -0
  401. package/dist/recipes/tools/outcomes.d.ts +15 -0
  402. package/dist/recipes/tools/outcomes.js +111 -0
  403. package/dist/recipes/tools/outcomes.js.map +1 -0
  404. package/dist/recipes/tools/paystack.d.ts +11 -0
  405. package/dist/recipes/tools/paystack.js +212 -0
  406. package/dist/recipes/tools/paystack.js.map +1 -0
  407. package/dist/recipes/tools/pipedrive.d.ts +16 -0
  408. package/dist/recipes/tools/pipedrive.js +234 -0
  409. package/dist/recipes/tools/pipedrive.js.map +1 -0
  410. package/dist/recipes/tools/postgres.d.ts +15 -0
  411. package/dist/recipes/tools/postgres.js +186 -0
  412. package/dist/recipes/tools/postgres.js.map +1 -0
  413. package/dist/recipes/tools/posthog.d.ts +16 -0
  414. package/dist/recipes/tools/posthog.js +219 -0
  415. package/dist/recipes/tools/posthog.js.map +1 -0
  416. package/dist/recipes/tools/redis.d.ts +9 -0
  417. package/dist/recipes/tools/redis.js +141 -0
  418. package/dist/recipes/tools/redis.js.map +1 -0
  419. package/dist/recipes/tools/resend.d.ts +8 -0
  420. package/dist/recipes/tools/resend.js +153 -0
  421. package/dist/recipes/tools/resend.js.map +1 -0
  422. package/dist/recipes/tools/salesforce.d.ts +16 -0
  423. package/dist/recipes/tools/salesforce.js +184 -0
  424. package/dist/recipes/tools/salesforce.js.map +1 -0
  425. package/dist/recipes/tools/sendgrid.d.ts +9 -0
  426. package/dist/recipes/tools/sendgrid.js +175 -0
  427. package/dist/recipes/tools/sendgrid.js.map +1 -0
  428. package/dist/recipes/tools/shopify.d.ts +16 -0
  429. package/dist/recipes/tools/shopify.js +266 -0
  430. package/dist/recipes/tools/shopify.js.map +1 -0
  431. package/dist/recipes/tools/snowflake.d.ts +16 -0
  432. package/dist/recipes/tools/snowflake.js +173 -0
  433. package/dist/recipes/tools/snowflake.js.map +1 -0
  434. package/dist/recipes/tools/stripe.js +13 -12
  435. package/dist/recipes/tools/stripe.js.map +1 -1
  436. package/dist/recipes/tools/supabase.d.ts +9 -0
  437. package/dist/recipes/tools/supabase.js +133 -0
  438. package/dist/recipes/tools/supabase.js.map +1 -0
  439. package/dist/recipes/tools/todoist.d.ts +15 -0
  440. package/dist/recipes/tools/todoist.js +228 -0
  441. package/dist/recipes/tools/todoist.js.map +1 -0
  442. package/dist/recipes/tools/twilio.d.ts +11 -0
  443. package/dist/recipes/tools/twilio.js +180 -0
  444. package/dist/recipes/tools/twilio.js.map +1 -0
  445. package/dist/recipes/tools/vercel.d.ts +9 -0
  446. package/dist/recipes/tools/vercel.js +146 -0
  447. package/dist/recipes/tools/vercel.js.map +1 -0
  448. package/dist/recipes/tools/webflow.d.ts +11 -0
  449. package/dist/recipes/tools/webflow.js +244 -0
  450. package/dist/recipes/tools/webflow.js.map +1 -0
  451. package/dist/recipes/tools/woocommerce.d.ts +18 -0
  452. package/dist/recipes/tools/woocommerce.js +260 -0
  453. package/dist/recipes/tools/woocommerce.js.map +1 -0
  454. package/dist/recipes/tools/wrapConnectorExecute.d.ts +25 -0
  455. package/dist/recipes/tools/wrapConnectorExecute.js +37 -0
  456. package/dist/recipes/tools/wrapConnectorExecute.js.map +1 -0
  457. package/dist/recipes/tools/zendesk.js +11 -10
  458. package/dist/recipes/tools/zendesk.js.map +1 -1
  459. package/dist/recipes/triggerVars.d.ts +15 -0
  460. package/dist/recipes/triggerVars.js +57 -0
  461. package/dist/recipes/triggerVars.js.map +1 -0
  462. package/dist/recipes/validation.d.ts +1 -1
  463. package/dist/recipes/validation.js +536 -12
  464. package/dist/recipes/validation.js.map +1 -1
  465. package/dist/recipes/yamlPositions.d.ts +1 -1
  466. package/dist/recipes/yamlPositions.js +7 -2
  467. package/dist/recipes/yamlPositions.js.map +1 -1
  468. package/dist/recipes/yamlRunner.d.ts +216 -4
  469. package/dist/recipes/yamlRunner.js +1030 -96
  470. package/dist/recipes/yamlRunner.js.map +1 -1
  471. package/dist/recipesHttp.d.ts +5 -0
  472. package/dist/recipesHttp.js +68 -6
  473. package/dist/recipesHttp.js.map +1 -1
  474. package/dist/resources.js +14 -1
  475. package/dist/resources.js.map +1 -1
  476. package/dist/riskSignals.d.ts +42 -0
  477. package/dist/riskSignals.js +197 -0
  478. package/dist/riskSignals.js.map +1 -0
  479. package/dist/riskTier.d.ts +9 -0
  480. package/dist/riskTier.js +48 -0
  481. package/dist/riskTier.js.map +1 -1
  482. package/dist/runLog.d.ts +53 -0
  483. package/dist/runLog.js +75 -16
  484. package/dist/runLog.js.map +1 -1
  485. package/dist/schemas/recipe.v1.json +360 -16
  486. package/dist/server.d.ts +60 -0
  487. package/dist/server.js +192 -31
  488. package/dist/server.js.map +1 -1
  489. package/dist/sessionCheckpoint.js +4 -1
  490. package/dist/sessionCheckpoint.js.map +1 -1
  491. package/dist/sessionDetail.d.ts +43 -0
  492. package/dist/sessionDetail.js +59 -0
  493. package/dist/sessionDetail.js.map +1 -0
  494. package/dist/settingsEnv.d.ts +47 -0
  495. package/dist/settingsEnv.js +88 -0
  496. package/dist/settingsEnv.js.map +1 -0
  497. package/dist/streamableHttp.js +44 -10
  498. package/dist/streamableHttp.js.map +1 -1
  499. package/dist/ta/backtest/abnday.d.ts +53 -0
  500. package/dist/ta/backtest/abnday.js +123 -0
  501. package/dist/ta/backtest/abnday.js.map +1 -0
  502. package/dist/ta/backtest/directional.d.ts +48 -0
  503. package/dist/ta/backtest/directional.js +103 -0
  504. package/dist/ta/backtest/directional.js.map +1 -0
  505. package/dist/ta/backtest/fundx.d.ts +67 -0
  506. package/dist/ta/backtest/fundx.js +264 -0
  507. package/dist/ta/backtest/fundx.js.map +1 -0
  508. package/dist/ta/backtest/fvg.d.ts +62 -0
  509. package/dist/ta/backtest/fvg.js +236 -0
  510. package/dist/ta/backtest/fvg.js.map +1 -0
  511. package/dist/ta/backtest/ichimoku.d.ts +41 -0
  512. package/dist/ta/backtest/ichimoku.js +146 -0
  513. package/dist/ta/backtest/ichimoku.js.map +1 -0
  514. package/dist/ta/backtest/ingest.d.ts +20 -0
  515. package/dist/ta/backtest/ingest.js +104 -0
  516. package/dist/ta/backtest/ingest.js.map +1 -0
  517. package/dist/ta/backtest/msb.d.ts +49 -0
  518. package/dist/ta/backtest/msb.js +162 -0
  519. package/dist/ta/backtest/msb.js.map +1 -0
  520. package/dist/ta/backtest/scoring.d.ts +33 -0
  521. package/dist/ta/backtest/scoring.js +82 -0
  522. package/dist/ta/backtest/scoring.js.map +1 -0
  523. package/dist/ta/backtest/summary.d.ts +20 -0
  524. package/dist/ta/backtest/summary.js +42 -0
  525. package/dist/ta/backtest/summary.js.map +1 -0
  526. package/dist/ta/backtest/tsmom.d.ts +72 -0
  527. package/dist/ta/backtest/tsmom.js +202 -0
  528. package/dist/ta/backtest/tsmom.js.map +1 -0
  529. package/dist/ta/backtest/volsq.d.ts +34 -0
  530. package/dist/ta/backtest/volsq.js +154 -0
  531. package/dist/ta/backtest/volsq.js.map +1 -0
  532. package/dist/ta/backtest/walkForward.d.ts +45 -0
  533. package/dist/ta/backtest/walkForward.js +136 -0
  534. package/dist/ta/backtest/walkForward.js.map +1 -0
  535. package/dist/ta/cycles.d.ts +15 -0
  536. package/dist/ta/cycles.js +31 -0
  537. package/dist/ta/cycles.js.map +1 -0
  538. package/dist/ta/desk/accrualEmitter.d.ts +59 -0
  539. package/dist/ta/desk/accrualEmitter.js +136 -0
  540. package/dist/ta/desk/accrualEmitter.js.map +1 -0
  541. package/dist/ta/desk/cellBacktest.d.ts +179 -0
  542. package/dist/ta/desk/cellBacktest.js +514 -0
  543. package/dist/ta/desk/cellBacktest.js.map +1 -0
  544. package/dist/ta/desk/cells/wpMaRejection.d.ts +49 -0
  545. package/dist/ta/desk/cells/wpMaRejection.js +141 -0
  546. package/dist/ta/desk/cells/wpMaRejection.js.map +1 -0
  547. package/dist/ta/desk/cells/wpVolumeClimax.d.ts +57 -0
  548. package/dist/ta/desk/cells/wpVolumeClimax.js +193 -0
  549. package/dist/ta/desk/cells/wpVolumeClimax.js.map +1 -0
  550. package/dist/ta/desk/collectors.d.ts +18 -0
  551. package/dist/ta/desk/collectors.js +450 -0
  552. package/dist/ta/desk/collectors.js.map +1 -0
  553. package/dist/ta/desk/contract.d.ts +51 -0
  554. package/dist/ta/desk/contract.js +261 -0
  555. package/dist/ta/desk/contract.js.map +1 -0
  556. package/dist/ta/desk/deskLedger.d.ts +36 -0
  557. package/dist/ta/desk/deskLedger.js +239 -0
  558. package/dist/ta/desk/deskLedger.js.map +1 -0
  559. package/dist/ta/desk/liqTape.d.ts +37 -0
  560. package/dist/ta/desk/liqTape.js +99 -0
  561. package/dist/ta/desk/liqTape.js.map +1 -0
  562. package/dist/ta/desk/post.d.ts +20 -0
  563. package/dist/ta/desk/post.js +65 -0
  564. package/dist/ta/desk/post.js.map +1 -0
  565. package/dist/ta/desk/render.d.ts +25 -0
  566. package/dist/ta/desk/render.js +398 -0
  567. package/dist/ta/desk/render.js.map +1 -0
  568. package/dist/ta/desk/surfaces.d.ts +216 -0
  569. package/dist/ta/desk/surfaces.js +472 -0
  570. package/dist/ta/desk/surfaces.js.map +1 -0
  571. package/dist/ta/desk/types.d.ts +174 -0
  572. package/dist/ta/desk/types.js +104 -0
  573. package/dist/ta/desk/types.js.map +1 -0
  574. package/dist/ta/index.d.ts +23 -0
  575. package/dist/ta/index.js +54 -0
  576. package/dist/ta/index.js.map +1 -0
  577. package/dist/ta/ledger.d.ts +44 -0
  578. package/dist/ta/ledger.js +95 -0
  579. package/dist/ta/ledger.js.map +1 -0
  580. package/dist/ta/levels.d.ts +21 -0
  581. package/dist/ta/levels.js +41 -0
  582. package/dist/ta/levels.js.map +1 -0
  583. package/dist/ta/swings.d.ts +30 -0
  584. package/dist/ta/swings.js +83 -0
  585. package/dist/ta/swings.js.map +1 -0
  586. package/dist/ta/types.d.ts +81 -0
  587. package/dist/ta/types.js +20 -0
  588. package/dist/ta/types.js.map +1 -0
  589. package/dist/telemetry.js +20 -9
  590. package/dist/telemetry.js.map +1 -1
  591. package/dist/tokenUsageTracker.d.ts +2 -1
  592. package/dist/tokenUsageTracker.js +38 -20
  593. package/dist/tokenUsageTracker.js.map +1 -1
  594. package/dist/tools/contextBundle.js +13 -9
  595. package/dist/tools/contextBundle.js.map +1 -1
  596. package/dist/tools/ctxGetTaskContext.js +8 -3
  597. package/dist/tools/ctxGetTaskContext.js.map +1 -1
  598. package/dist/tools/ctxQueryTraces.d.ts +18 -1
  599. package/dist/tools/ctxQueryTraces.js +176 -27
  600. package/dist/tools/ctxQueryTraces.js.map +1 -1
  601. package/dist/tools/enrichCommit.js +5 -2
  602. package/dist/tools/enrichCommit.js.map +1 -1
  603. package/dist/tools/getDependencyTree.js +2 -2
  604. package/dist/tools/getDependencyTree.js.map +1 -1
  605. package/dist/tools/getDiagnostics.js +3 -0
  606. package/dist/tools/getDiagnostics.js.map +1 -1
  607. package/dist/tools/getDocumentSymbols.js +5 -1
  608. package/dist/tools/getDocumentSymbols.js.map +1 -1
  609. package/dist/tools/getGitHotspots.js +12 -1
  610. package/dist/tools/getGitHotspots.js.map +1 -1
  611. package/dist/tools/getGitLog.js +5 -2
  612. package/dist/tools/getGitLog.js.map +1 -1
  613. package/dist/tools/getGitStatus.js +6 -1
  614. package/dist/tools/getGitStatus.js.map +1 -1
  615. package/dist/tools/getProjectContext.js +3 -1
  616. package/dist/tools/getProjectContext.js.map +1 -1
  617. package/dist/tools/getToolCapabilities.js +39 -4
  618. package/dist/tools/getToolCapabilities.js.map +1 -1
  619. package/dist/tools/gitWrite.js +12 -3
  620. package/dist/tools/gitWrite.js.map +1 -1
  621. package/dist/tools/github/composite.d.ts +1 -1
  622. package/dist/tools/github/composite.js +7 -7
  623. package/dist/tools/github/composite.js.map +1 -1
  624. package/dist/tools/github/pr.d.ts +6 -6
  625. package/dist/tools/github/pr.js +18 -11
  626. package/dist/tools/github/pr.js.map +1 -1
  627. package/dist/tools/httpClient.js +55 -3
  628. package/dist/tools/httpClient.js.map +1 -1
  629. package/dist/tools/index.d.ts +2 -1
  630. package/dist/tools/index.js +19 -12
  631. package/dist/tools/index.js.map +1 -1
  632. package/dist/tools/lsp.d.ts +6 -0
  633. package/dist/tools/lsp.js +81 -12
  634. package/dist/tools/lsp.js.map +1 -1
  635. package/dist/tools/previewEdit.js +16 -1
  636. package/dist/tools/previewEdit.js.map +1 -1
  637. package/dist/tools/resumeClaudeTask.js +17 -0
  638. package/dist/tools/resumeClaudeTask.js.map +1 -1
  639. package/dist/tools/searchAndReplace.js +9 -5
  640. package/dist/tools/searchAndReplace.js.map +1 -1
  641. package/dist/tools/searchTools.d.ts +26 -0
  642. package/dist/tools/searchTools.js +42 -2
  643. package/dist/tools/searchTools.js.map +1 -1
  644. package/dist/tools/terminal.js +23 -51
  645. package/dist/tools/terminal.js.map +1 -1
  646. package/dist/tools/transaction.d.ts +9 -1
  647. package/dist/tools/transaction.js +59 -4
  648. package/dist/tools/transaction.js.map +1 -1
  649. package/dist/tools/utils.d.ts +16 -0
  650. package/dist/tools/utils.js +77 -7
  651. package/dist/tools/utils.js.map +1 -1
  652. package/dist/transport.d.ts +31 -0
  653. package/dist/transport.js +117 -14
  654. package/dist/transport.js.map +1 -1
  655. package/dist/wireHaltPushDispatch.js +12 -0
  656. package/dist/wireHaltPushDispatch.js.map +1 -1
  657. package/dist/workerGateDecisionLog.d.ts +141 -0
  658. package/dist/workerGateDecisionLog.js +361 -0
  659. package/dist/workerGateDecisionLog.js.map +1 -0
  660. package/dist/workers/actionClass.d.ts +38 -0
  661. package/dist/workers/actionClass.js +155 -0
  662. package/dist/workers/actionClass.js.map +1 -0
  663. package/dist/workers/backtest.d.ts +68 -0
  664. package/dist/workers/backtest.js +113 -0
  665. package/dist/workers/backtest.js.map +1 -0
  666. package/dist/workers/contextRisk.d.ts +35 -0
  667. package/dist/workers/contextRisk.js +20 -0
  668. package/dist/workers/contextRisk.js.map +1 -0
  669. package/dist/workers/contextRiskScorer.d.ts +48 -0
  670. package/dist/workers/contextRiskScorer.js +94 -0
  671. package/dist/workers/contextRiskScorer.js.map +1 -0
  672. package/dist/workers/graduation.d.ts +61 -0
  673. package/dist/workers/graduation.js +112 -0
  674. package/dist/workers/graduation.js.map +1 -0
  675. package/dist/workers/outcomeStore.d.ts +98 -0
  676. package/dist/workers/outcomeStore.js +146 -0
  677. package/dist/workers/outcomeStore.js.map +1 -0
  678. package/dist/workers/outcomesCli.d.ts +34 -0
  679. package/dist/workers/outcomesCli.js +91 -0
  680. package/dist/workers/outcomesCli.js.map +1 -0
  681. package/dist/workers/runWorkerShadow.d.ts +90 -0
  682. package/dist/workers/runWorkerShadow.js +323 -0
  683. package/dist/workers/runWorkerShadow.js.map +1 -0
  684. package/dist/workers/shadowGate.d.ts +30 -0
  685. package/dist/workers/shadowGate.js +58 -0
  686. package/dist/workers/shadowGate.js.map +1 -0
  687. package/dist/workers/shadowObserver.d.ts +165 -0
  688. package/dist/workers/shadowObserver.js +203 -0
  689. package/dist/workers/shadowObserver.js.map +1 -0
  690. package/dist/workers/shadowReport.d.ts +16 -0
  691. package/dist/workers/shadowReport.js +61 -0
  692. package/dist/workers/shadowReport.js.map +1 -0
  693. package/dist/workers/shadowRun.d.ts +38 -0
  694. package/dist/workers/shadowRun.js +44 -0
  695. package/dist/workers/shadowRun.js.map +1 -0
  696. package/dist/workers/trustLevel.d.ts +82 -0
  697. package/dist/workers/trustLevel.js +100 -0
  698. package/dist/workers/trustLevel.js.map +1 -0
  699. package/dist/workers/worker.d.ts +49 -0
  700. package/dist/workers/worker.js +88 -0
  701. package/dist/workers/worker.js.map +1 -0
  702. package/dist/workers/workerGate.d.ts +101 -0
  703. package/dist/workers/workerGate.js +210 -0
  704. package/dist/workers/workerGate.js.map +1 -0
  705. package/dist/workers/workerLevelStore.d.ts +33 -0
  706. package/dist/workers/workerLevelStore.js +87 -0
  707. package/dist/workers/workerLevelStore.js.map +1 -0
  708. package/dist/workers/workerLoader.d.ts +7 -0
  709. package/dist/workers/workerLoader.js +31 -0
  710. package/dist/workers/workerLoader.js.map +1 -0
  711. package/dist/writeFileAtomic.js +40 -13
  712. package/dist/writeFileAtomic.js.map +1 -1
  713. package/package.json +14 -6
  714. package/scripts/mcp-stdio-shim.cjs +247 -87
  715. package/templates/CLAUDE.bridge.md +1 -1
  716. package/templates/recipes/dependency-bump.yaml +33 -0
  717. package/templates/recipes/incident-to-pr.yaml +187 -0
  718. package/templates/recipes/outcome-ingester.yaml +53 -0
  719. package/templates/recipes/release-notes.yaml +30 -0
  720. package/templates/recipes/triage-failing-tests-autofile.yaml +152 -0
  721. package/templates/recipes/triage-failing-tests.yaml +38 -0
  722. package/templates/workers/dependency-upkeep.worker.yaml +26 -0
  723. package/templates/workers/release-notes.worker.yaml +17 -0
  724. package/templates/workers/test-guardian.worker.yaml +24 -0
  725. package/deploy/README.md +0 -172
  726. package/deploy/bootstrap-new-vps.sh +0 -364
  727. package/deploy/bootstrap-vps.sh +0 -192
  728. package/deploy/claude-ide-bridge.service.template +0 -67
  729. package/deploy/claude-ide-bridge@.service +0 -31
  730. package/deploy/deploy-dashboard.sh +0 -198
  731. package/deploy/deploy-landing.sh +0 -136
  732. package/deploy/ecosystem.config.js.example +0 -36
  733. package/deploy/install-vps-service.sh +0 -240
  734. package/deploy/macos/README.md +0 -153
  735. package/deploy/macos/com.patchwork.bridge.plist.template +0 -54
  736. package/deploy/macos/com.patchwork.tunnel.plist.template +0 -76
  737. package/deploy/macos/install-mac-bridge.sh +0 -244
  738. package/deploy/macos/uninstall-mac-bridge.sh +0 -22
  739. package/deploy/nginx-claude-bridge.conf.template +0 -129
@@ -0,0 +1,261 @@
1
+ /**
2
+ * contract.ts — assemble the FLAT payload + THREE asserts that ABORT loudly.
3
+ *
4
+ * (a) JSON.stringify(payload).length < 7000
5
+ * (b) every numbersIndex token is provenance-backed
6
+ * (c) no banned field/token name present
7
+ *
8
+ * The code guarantee is the real moat boundary: a faithful LLM narrating a
9
+ * dishonest JSON would pass a byte-present judge, so the JSON must be honest by
10
+ * construction. On total feed failure this still produces a fully-degraded
11
+ * payload (surfaces become 'feed offline' lines; posture forced 'Standing
12
+ * aside').
13
+ */
14
+ import { renderAtlas, renderBtcDna, renderDepth, renderFeedHealth, renderLedger, renderLiqGeometry, renderLiqTape, renderMaxPain, renderNav, renderRektShield, renderTodaysRead, } from "./render.js";
15
+ import { computeAtlas, computeBtcDna, computeIchimokuLocation, computeRektShield, computeTodaysRead, depthSurface, liqGeometrySurface, maxPainSurface, stopVsBand, } from "./surfaces.js";
16
+ import { ALLOWED_POSTURES, BANNED_CLAIM_VOCAB, BANNED_TOKENS, narratedNumbers, PAYLOAD_BYTE_BUDGET, SCHEMA_VERSION, } from "./types.js";
17
+ export class ContractError extends Error {
18
+ }
19
+ /** Build the flat payload and run the three asserts before returning it. */
20
+ export function assemblePayload(input) {
21
+ const { feeds, trade, ledger, tri, nowMs, cachedLedger, verdicts, liqTape } = input;
22
+ const todaysRead = computeTodaysRead(feeds, tri);
23
+ const rekt = computeRektShield(trade, nowMs);
24
+ const dna = computeBtcDna(feeds);
25
+ const ichi = computeIchimokuLocation(feeds.btc1d.value);
26
+ const atlas = computeAtlas(feeds.atlas.value);
27
+ const depth = depthSurface(feeds.depth.value);
28
+ const maxPain = maxPainSurface(feeds.options.value, nowMs);
29
+ // Modeled liq geometry — NO new fetch. mid = order-book depth mid; fall back to
30
+ // the latest BTC 1d close when depth is offline. OI $ = latest perp-OI notional
31
+ // (reused from the openInterestHist fetch). Pure leverage-bucket arithmetic.
32
+ const btcCandles = feeds.btc1d.value;
33
+ const lastClose = btcCandles && btcCandles.length > 0
34
+ ? btcCandles[btcCandles.length - 1]?.close
35
+ : null;
36
+ const geoMid = typeof depth.mid === "number" ? depth.mid : (lastClose ?? null);
37
+ const liqGeo = liqGeometrySurface(geoMid, feeds.oiNotional.value);
38
+ const stopBand = stopVsBand(trade, liqGeo);
39
+ const todaysReadFrag = renderTodaysRead(todaysRead);
40
+ const rektFrag = renderRektShield(rekt, stopBand);
41
+ const dnaFrag = renderBtcDna(dna, ichi);
42
+ const atlasFrag = renderAtlas(atlas);
43
+ const depthFrag = renderDepth(depth);
44
+ const maxPainFrag = renderMaxPain(maxPain);
45
+ const liqGeoFrag = renderLiqGeometry(liqGeo);
46
+ const ledgerFrag = renderLedger(ledger, cachedLedger ? ledger.asOf : null, verdicts);
47
+ const liqTapeFrag = liqTape ? renderLiqTape(liqTape) : null;
48
+ const engineHealthy = feeds.btc1d.state === "live";
49
+ const navFrag = renderNav(engineHealthy);
50
+ // asOfData = newest live datum across collectors.
51
+ const asOfs = [
52
+ feeds.btc1d.asOf,
53
+ feeds.btc24hPct.asOf,
54
+ feeds.funding.asOf,
55
+ feeds.atlas.asOf,
56
+ feeds.feargreed.asOf,
57
+ ].filter((x) => typeof x === "string");
58
+ const asOfData = asOfs.length > 0
59
+ ? asOfs.sort().slice(-1)[0]
60
+ : new Date(nowMs).toISOString();
61
+ const frags = [
62
+ todaysReadFrag,
63
+ rektFrag,
64
+ dnaFrag,
65
+ atlasFrag,
66
+ depthFrag,
67
+ maxPainFrag,
68
+ liqGeoFrag,
69
+ ledgerFrag,
70
+ navFrag,
71
+ ];
72
+ if (liqTapeFrag)
73
+ frags.push(liqTapeFrag);
74
+ // numbersIndex — dedup, preserve order, newline-joined. Dates/schemaVersion
75
+ // are NOT fragment numbers so they never enter here.
76
+ const seen = new Set();
77
+ const indexLines = [];
78
+ for (const frag of frags) {
79
+ for (const nt of frag.numbers) {
80
+ if (seen.has(nt.token))
81
+ continue;
82
+ seen.add(nt.token);
83
+ indexLines.push(nt.token);
84
+ }
85
+ }
86
+ const numbersIndex = indexLines.join("\n");
87
+ const payload = {
88
+ schemaVersion: SCHEMA_VERSION,
89
+ generatedAt: new Date(nowMs).toISOString(),
90
+ asOfData,
91
+ feedHealthMd: renderFeedHealth(feeds),
92
+ allowedPostures: ALLOWED_POSTURES.join(" | "),
93
+ todaysReadMd: todaysReadFrag.md,
94
+ rektShieldMd: rektFrag.md,
95
+ btcDnaMd: dnaFrag.md,
96
+ atlasMd: atlasFrag.md,
97
+ depthMd: depthFrag.md,
98
+ maxPainMd: maxPainFrag.md,
99
+ liqGeoMd: liqGeoFrag.md,
100
+ ...(liqTapeFrag ? { liqTapeMd: liqTapeFrag.md } : {}),
101
+ ledgerMd: ledgerFrag.md,
102
+ navMd: navFrag.md,
103
+ numbersIndex,
104
+ };
105
+ assertContract(payload, frags);
106
+ return payload;
107
+ }
108
+ /**
109
+ * The THREE asserts. Throws ContractError (loud abort) on any failure.
110
+ * Exported so the build-failing unit test can call it directly.
111
+ */
112
+ export function assertContract(payload, frags) {
113
+ // (a) byte budget
114
+ const bytes = Buffer.byteLength(JSON.stringify(payload), "utf-8");
115
+ if (bytes >= PAYLOAD_BYTE_BUDGET) {
116
+ throw new ContractError(`payload ${bytes} bytes >= ${PAYLOAD_BYTE_BUDGET} budget — aborting POST`);
117
+ }
118
+ // The user-facing markdown surfaces — every banned claim word in these must
119
+ // co-locate a closed/location label (check c).
120
+ const surfaceFields = [
121
+ payload.feedHealthMd,
122
+ payload.allowedPostures,
123
+ payload.todaysReadMd,
124
+ payload.rektShieldMd,
125
+ payload.btcDnaMd,
126
+ payload.atlasMd,
127
+ payload.depthMd,
128
+ payload.maxPainMd,
129
+ payload.liqGeoMd,
130
+ payload.ledgerMd,
131
+ payload.navMd,
132
+ ];
133
+ // The NARRATIVE FACT surfaces — the subset whose printed numbers are claims of
134
+ // fact the engine fully controls, so each MUST trace to numbersIndex (b2).
135
+ // EXCLUDED:
136
+ // - feedHealthMd / allowedPostures: digits are structural identifiers
137
+ // (feed names like "binance24h", posture vocab like "Watching X").
138
+ // - atlasMd: its only numeric CLAIMS are the per-sector change24hPct values,
139
+ // already provenance-backed by check (b); its sector NAMES come verbatim
140
+ // from the live CoinGecko feed ("Layer 1", "Web3") and carry unpredictable
141
+ // identifier digits the engine cannot pre-register. narratedNumbers()
142
+ // strips glued identifiers (L1/Web3) but a SPACE-separated name ("Layer 1")
143
+ // still yields a bare digit — not a claim, so atlas is guard-exempt.
144
+ const factSurfaces = [
145
+ payload.todaysReadMd,
146
+ payload.rektShieldMd,
147
+ payload.btcDnaMd,
148
+ payload.depthMd,
149
+ payload.maxPainMd,
150
+ payload.liqGeoMd,
151
+ payload.ledgerMd,
152
+ payload.navMd,
153
+ ...(payload.liqTapeMd ? [payload.liqTapeMd] : []),
154
+ ];
155
+ // (b) every numbersIndex token is provenance-backed (index → provenance)
156
+ const backed = new Set();
157
+ for (const frag of frags) {
158
+ for (const nt of frag.numbers) {
159
+ if (!nt.provenance) {
160
+ throw new ContractError(`numbersIndex token "${nt.token}" has no provenance`);
161
+ }
162
+ backed.add(nt.token);
163
+ }
164
+ }
165
+ for (const token of payload.numbersIndex.split("\n").filter(Boolean)) {
166
+ if (!backed.has(token)) {
167
+ throw new ContractError(`numbersIndex token "${token}" is not provenance-backed`);
168
+ }
169
+ }
170
+ // (c) no banned field/token NAME present anywhere in the payload.
171
+ // Match as a whole identifier token, NOT a substring — otherwise the English
172
+ // word "graded" (a legitimate ledger state) trips the "grade" ban, and
173
+ // "upgrade" would too. Banned names are field identifiers; bound them by
174
+ // non-alphanumeric edges so prose words are not false-positives.
175
+ const haystack = JSON.stringify(payload);
176
+ for (const banned of BANNED_TOKENS) {
177
+ const re = new RegExp(`(^|[^a-zA-Z])${banned}([^a-zA-Z]|$)`, "i");
178
+ if (re.test(haystack)) {
179
+ throw new ContractError(`banned token name "${banned}" present in payload`);
180
+ }
181
+ }
182
+ // Falsified claim vocab is allowed ONLY in the audit-view rendering of the
183
+ // ledger ("ichimoku family ... closed"); banned as a positive lean elsewhere.
184
+ // We assert the family name never appears OUTSIDE the explicit closed-label
185
+ // context. Simplest honest rule: the only legal occurrences carry the word
186
+ // "closed" alongside. Enforce by requiring every occurrence to co-locate.
187
+ // (surfaceFields declared above — reused here.)
188
+ for (const vocab of BANNED_CLAIM_VOCAB) {
189
+ const v = vocab.toLowerCase();
190
+ if (!haystack.toLowerCase().includes(v))
191
+ continue;
192
+ // every surface field mentioning the banned vocab must co-locate an
193
+ // explicit "closed" or "location" audit label — else it is a live claim.
194
+ const mentioning = surfaceFields.filter((md) => md.toLowerCase().includes(v));
195
+ for (const md of mentioning) {
196
+ const lower = md.toLowerCase();
197
+ if (!lower.includes("closed") && !lower.includes("location")) {
198
+ throw new ContractError(`banned claim vocab "${vocab}" present without closed/location label`);
199
+ }
200
+ }
201
+ }
202
+ // (d) BIDIRECTIONAL number trace — every PRINTED number in the fact surfaces
203
+ // is in numbersIndex (the complement of check (b), which only verifies the
204
+ // other direction). Closes the leak class where a surface narrates a number
205
+ // — e.g. the Deribit DDMMMYY expiry's embedded 27/26 — that was never
206
+ // registered. narratedNumbers() strips the date/time + identifier exempt
207
+ // classes first. Runs LAST so the categorical banned-NAME/vocab violations
208
+ // (b,c) surface ahead of this finer-grained trace check.
209
+ const indexed = new Set(payload.numbersIndex.split("\n").filter(Boolean));
210
+ for (const md of factSurfaces) {
211
+ for (const token of narratedNumbers(md)) {
212
+ if (!indexed.has(token)) {
213
+ throw new ContractError(`narrated number "${token}" is not in numbersIndex (printed but un-indexed) — surface: ${md.slice(0, 60)}…`);
214
+ }
215
+ }
216
+ }
217
+ }
218
+ /**
219
+ * A fully-degraded payload for total feed failure (still POSTed). Routed
220
+ * through assertContract so the static prose can never silently drift to
221
+ * narrate a number outside its index or a banned name — the provenance
222
+ * round-trip holds on the exact path (total feed failure) where it matters most.
223
+ */
224
+ export function degradedPayload(nowMs) {
225
+ const payload = buildDegradedPayload(nowMs);
226
+ // The degraded numbersIndex tokens, each provenance-backed by construction.
227
+ const frags = [
228
+ {
229
+ md: "degraded",
230
+ numbers: payload.numbersIndex
231
+ .split("\n")
232
+ .filter(Boolean)
233
+ .map((token) => ({
234
+ token,
235
+ provenance: token === "-0.53" ? "matured-ledger" : "det",
236
+ })),
237
+ },
238
+ ];
239
+ assertContract(payload, frags);
240
+ return payload;
241
+ }
242
+ function buildDegradedPayload(nowMs) {
243
+ return {
244
+ schemaVersion: SCHEMA_VERSION,
245
+ generatedAt: new Date(nowMs).toISOString(),
246
+ asOfData: new Date(nowMs).toISOString(),
247
+ feedHealthMd: "binanceSpot: offline · binance24h: offline · binanceFutures: offline · coingecko: offline · feargreed: offline · orderbookDepth: offline · deribitOptions: offline · liqMap: offline-paid · etfFlows: offline-paid · whale: offline-paid · bybitCrossVenue: offline-deferred",
248
+ allowedPostures: ALLOWED_POSTURES.join(" | "),
249
+ todaysReadMd: "**Desk posture: Standing aside.** Reason: all market feeds offline — no read. Tri-count — risk 0 / watch 0 / confirm 0 (no live ledger files reachable). Breadth — feed offline.",
250
+ rektShieldMd: "No hypothetical trade supplied — Rekt Shield idle. (Risk math is feed-independent; it activates only on a supplied trade.)",
251
+ btcDnaMd: "Trend: feed offline. Funding-stress: feed offline. Spot-confirm: feed offline. Leverage: feed offline. Whale: pending — feed offline. Liquidity-trap: pending — liq-map paid. ETF: pending — paid. Location (no edge): Ichimoku location unavailable. Ichimoku family closed 2026-06-11 — location context, not a signal. Coverage: 0 of 7 strands live, 7 pending/offline.",
252
+ atlasMd: "Atlas offline — sector feed unavailable.",
253
+ depthMd: "Order book: feed offline.",
254
+ maxPainMd: "Deribit options: feed offline.",
255
+ liqGeoMd: "Liq geometry: feed offline — mid or OI unavailable.",
256
+ ledgerMd: "LEDGER (history, not a forward probability). No fresh ledger summary reachable. FALSIFIED/BANNED (audit): wp-level-fifty @4h edge -0.53 — falsified. ichimoku-family @1d — closed 2026-06-11. Live signal audit: 0 open claims, 0 graded.",
257
+ navMd: "Read Market → Find Setups → Confirm → Assess/Protect Risk → Review proof. Terminal: Stand Aside. Engine: waiting — awaiting cron data.",
258
+ numbersIndex: ["0", "7", "-0.53"].join("\n"),
259
+ };
260
+ }
261
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/ta/desk/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * deskLedger.ts — the moat-native ledger spine, on a SEPARATE file.
3
+ *
4
+ * ~/.patchwork/qumo-ledger.jsonl (NEVER the shared ta-ledger.jsonl —
5
+ * ta.score parses ALL rows asset-filtered-only, so QUMO types there would
6
+ * pollute the local scorer.)
7
+ *
8
+ * Daily reads the matured summary (cheap). Nightly --backtest reruns cells +
9
+ * dartboard + kill-gate and rewrites the summary. Emits ONLY the genuine
10
+ * ScoreSummary {matured,scorable,holds,holdRate,baselineRate,edge} + altsetup
11
+ * kill-gate state (N/40 + permutation p). Only-positive cells are PAIRED with a
12
+ * falsified/banned audit view (price-fifty −0.53, ichimoku) shown by name.
13
+ * NO totalR / avgR / grade.
14
+ */
15
+ import { LEDGER_BASELINE } from "../ledger.js";
16
+ import type { Candle } from "../types.js";
17
+ import type { LedgerCell } from "./types.js";
18
+ export declare const QUMO_LEDGER: string;
19
+ export declare const QUMO_SUMMARY: string;
20
+ /** The static falsified/banned audit rows — visible by name, never hidden. */
21
+ export declare const FALSIFIED_AUDIT: LedgerCell[];
22
+ export interface LedgerSummary {
23
+ asOf: string;
24
+ cells: LedgerCell[];
25
+ openClaims: number;
26
+ gradedClaims: number;
27
+ }
28
+ /** Read the cached daily summary. Returns a degraded shell if missing. */
29
+ export declare function readLedgerSummary(): LedgerSummary;
30
+ /**
31
+ * Run the nightly backtest: score level-cells via scoreLedger, setup arms via
32
+ * the paired-dartboard kill-gate, write the summary. `candlesByAsset` supplies
33
+ * the OHLCV the rows need; an empty map → cells stay WATCH/empty (honest).
34
+ */
35
+ export declare function runBacktest(candlesByAsset: Map<string, Candle[]>, nowMs: number): LedgerSummary;
36
+ export { LEDGER_BASELINE };
@@ -0,0 +1,239 @@
1
+ /**
2
+ * deskLedger.ts — the moat-native ledger spine, on a SEPARATE file.
3
+ *
4
+ * ~/.patchwork/qumo-ledger.jsonl (NEVER the shared ta-ledger.jsonl —
5
+ * ta.score parses ALL rows asset-filtered-only, so QUMO types there would
6
+ * pollute the local scorer.)
7
+ *
8
+ * Daily reads the matured summary (cheap). Nightly --backtest reruns cells +
9
+ * dartboard + kill-gate and rewrites the summary. Emits ONLY the genuine
10
+ * ScoreSummary {matured,scorable,holds,holdRate,baselineRate,edge} + altsetup
11
+ * kill-gate state (N/40 + permutation p). Only-positive cells are PAIRED with a
12
+ * falsified/banned audit view (price-fifty −0.53, ichimoku) shown by name.
13
+ * NO totalR / avgR / grade.
14
+ */
15
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
16
+ import { homedir } from "node:os";
17
+ import path from "node:path";
18
+ import { mulberry32 } from "../backtest/scoring.js";
19
+ import { LEDGER_BASELINE, parseLedger, scoreLedger } from "../ledger.js";
20
+ const PATCHWORK = path.join(homedir(), ".patchwork");
21
+ export const QUMO_LEDGER = path.join(PATCHWORK, "qumo-ledger.jsonl");
22
+ export const QUMO_SUMMARY = path.join(PATCHWORK, "qumo-ledger-summary.json");
23
+ /** Setup-cell arms we track (paired against a dartboard arm). */
24
+ const SETUP_ARMS = ["kodama"];
25
+ const GATE = 40;
26
+ /** The static falsified/banned audit rows — visible by name, never hidden. */
27
+ export const FALSIFIED_AUDIT = [
28
+ {
29
+ type: "wp-level-fifty",
30
+ timeframe: "4h",
31
+ status: "FALSIFIED",
32
+ edge: -0.53,
33
+ note: "falsified — banned even as reference (mirrors closed price-fifty @4h)",
34
+ },
35
+ {
36
+ type: "ichimoku-family",
37
+ timeframe: "1d",
38
+ status: "BANNED",
39
+ note: "closed 2026-06-11 — banned even as reference",
40
+ },
41
+ ];
42
+ /** Read the cached daily summary. Returns a degraded shell if missing. */
43
+ export function readLedgerSummary() {
44
+ try {
45
+ if (existsSync(QUMO_SUMMARY)) {
46
+ const j = JSON.parse(readFileSync(QUMO_SUMMARY, "utf-8"));
47
+ if (j && Array.isArray(j.cells))
48
+ return j;
49
+ }
50
+ }
51
+ catch {
52
+ // fall through to degraded shell
53
+ }
54
+ return {
55
+ asOf: new Date().toISOString(),
56
+ cells: [...FALSIFIED_AUDIT],
57
+ openClaims: 0,
58
+ gradedClaims: 0,
59
+ };
60
+ }
61
+ /** Race a setup card to win/loss/push/unscorable (altsetup-killgate pattern). */
62
+ function raceCard(r, candles) {
63
+ if (!(r.rRef && r.rRef > 0) ||
64
+ !(r.lastClose && r.lastClose > 0) ||
65
+ r.invalidation === undefined) {
66
+ return "unscorable";
67
+ }
68
+ const start = Date.parse(r.madeAt);
69
+ const end = Date.parse(r.outcomeWindowEndsAt);
70
+ const window = candles.filter((c) => c.openTime > start && c.openTime <= end);
71
+ if (window.length === 0)
72
+ return "unscorable";
73
+ const long = r.direction !== "short";
74
+ for (const c of window) {
75
+ const loss = long ? c.low <= r.invalidation : c.high >= r.invalidation;
76
+ const win = long ? c.high >= r.rRef : c.low <= r.rRef;
77
+ if (loss)
78
+ return "loss";
79
+ if (win)
80
+ return "win";
81
+ }
82
+ return "push";
83
+ }
84
+ /**
85
+ * Run the nightly backtest: score level-cells via scoreLedger, setup arms via
86
+ * the paired-dartboard kill-gate, write the summary. `candlesByAsset` supplies
87
+ * the OHLCV the rows need; an empty map → cells stay WATCH/empty (honest).
88
+ */
89
+ export function runBacktest(candlesByAsset, nowMs) {
90
+ const cells = [];
91
+ let openClaims = 0;
92
+ let gradedClaims = 0;
93
+ let rows = [];
94
+ if (existsSync(QUMO_LEDGER)) {
95
+ try {
96
+ rows = parseLedger(readFileSync(QUMO_LEDGER, "utf-8"));
97
+ }
98
+ catch {
99
+ rows = [];
100
+ }
101
+ }
102
+ // 1) Level-cells via scoreLedger (price-only, backtestable immediately).
103
+ const btc = candlesByAsset.get("BTCUSDT") ?? [];
104
+ if (btc.length > 0 && rows.length > 0) {
105
+ const levelRows = rows.filter((r) => r.kind !== "card");
106
+ const summaries = scoreLedger(levelRows, btc, nowMs);
107
+ for (const s of summaries) {
108
+ if (s.scorable < 30 || s.matured < 10) {
109
+ cells.push({
110
+ type: s.type,
111
+ timeframe: s.timeframe,
112
+ status: "WATCH",
113
+ matured: s.matured,
114
+ scorable: s.scorable,
115
+ decided: s.scorable,
116
+ gate: GATE,
117
+ });
118
+ }
119
+ else {
120
+ // No statistical test on this path — positive edge alone cannot earn GRADED.
121
+ // FALSIFIED is valid (enough data, edge ≤ 0); GRADED requires the kill-gate in section 2.
122
+ const status = s.edge > 0 ? "WATCH" : "FALSIFIED";
123
+ cells.push({
124
+ type: s.type,
125
+ timeframe: s.timeframe,
126
+ status,
127
+ matured: s.matured,
128
+ scorable: s.scorable,
129
+ holds: s.holds,
130
+ holdRate: Number(s.holdRate.toFixed(2)),
131
+ baselineRate: s.baselineRate,
132
+ edge: Number(s.edge.toFixed(2)),
133
+ });
134
+ if (status === "GRADED")
135
+ gradedClaims++;
136
+ }
137
+ }
138
+ }
139
+ // 2) Setup arms via paired-dartboard kill-gate (altsetup-killgate pattern).
140
+ for (const arm of SETUP_ARMS) {
141
+ const byDate = new Map();
142
+ const totals = {
143
+ [arm]: { wins: 0, decided: 0 },
144
+ dartboard: { wins: 0, decided: 0 },
145
+ };
146
+ const cards = rows.filter((r) => r.kind === "card" &&
147
+ (r.type === arm || r.type === "dartboard") &&
148
+ nowMs >= Date.parse(r.outcomeWindowEndsAt));
149
+ for (const r of cards) {
150
+ const t = totals[r.type];
151
+ if (!t)
152
+ continue;
153
+ const candles = candlesByAsset.get(r.asset) ?? [];
154
+ const res = raceCard(r, candles);
155
+ if (res !== "win" && res !== "loss")
156
+ continue;
157
+ t.decided++;
158
+ if (res === "win")
159
+ t.wins++;
160
+ const dk = r.madeAt.slice(0, 10);
161
+ const d = byDate.get(dk) ?? {};
162
+ const slot = d[r.type] ?? { wins: 0, decided: 0 };
163
+ slot.decided++;
164
+ if (res === "win")
165
+ slot.wins++;
166
+ d[r.type] = slot;
167
+ byDate.set(dk, d);
168
+ }
169
+ const decided = Math.min(totals[arm]?.decided ?? 0, totals.dartboard?.decided ?? 0);
170
+ if (decided < GATE) {
171
+ cells.push({
172
+ type: arm,
173
+ timeframe: "1d",
174
+ status: "WATCH",
175
+ decided,
176
+ gate: GATE,
177
+ note: "accumulating — no test run",
178
+ });
179
+ }
180
+ else {
181
+ const deltas = [];
182
+ for (const [, d] of byDate) {
183
+ const a = d[arm];
184
+ const b = d.dartboard;
185
+ if (!a?.decided || !b?.decided)
186
+ continue;
187
+ deltas.push(a.wins / a.decided - b.wins / b.decided);
188
+ }
189
+ const meanD = deltas.reduce((x, y) => x + y, 0) / Math.max(1, deltas.length);
190
+ const rng = mulberry32(777);
191
+ let ge = 0;
192
+ for (let i = 0; i < 1000; i++) {
193
+ let s = 0;
194
+ for (const dd of deltas)
195
+ s += rng() < 0.5 ? -dd : dd;
196
+ if (s / Math.max(1, deltas.length) >= meanD)
197
+ ge++;
198
+ }
199
+ const p = (1 + ge) / 1001;
200
+ const holdRate = (totals[arm]?.wins ?? 0) / (totals[arm]?.decided ?? 1);
201
+ const baseRate = (totals.dartboard?.wins ?? 0) /
202
+ Math.max(1, totals.dartboard?.decided ?? 0);
203
+ const edge = holdRate - baseRate;
204
+ cells.push({
205
+ type: arm,
206
+ timeframe: "1d",
207
+ status: meanD > 0 && p < 0.05 ? "GRADED" : "FALSIFIED",
208
+ decided,
209
+ gate: GATE,
210
+ holdRate: Number(holdRate.toFixed(2)),
211
+ baselineRate: Number(baseRate.toFixed(2)),
212
+ edge: Number(edge.toFixed(2)),
213
+ permutationP: Number(p.toFixed(3)),
214
+ });
215
+ if (meanD > 0 && p < 0.05)
216
+ gradedClaims++;
217
+ }
218
+ }
219
+ // 3) Live signal audit — count open forward claims.
220
+ openClaims = rows.filter((r) => nowMs < Date.parse(r.outcomeWindowEndsAt)).length;
221
+ // 4) ALWAYS append the falsified/banned audit view (survivorship guard).
222
+ cells.push(...FALSIFIED_AUDIT);
223
+ const summary = {
224
+ asOf: new Date(nowMs).toISOString(),
225
+ cells,
226
+ openClaims,
227
+ gradedClaims,
228
+ };
229
+ try {
230
+ mkdirSync(PATCHWORK, { recursive: true });
231
+ writeFileSync(QUMO_SUMMARY, JSON.stringify(summary, null, 2));
232
+ }
233
+ catch {
234
+ // summary write failure is non-fatal for a --backtest invocation
235
+ }
236
+ return summary;
237
+ }
238
+ export { LEDGER_BASELINE };
239
+ //# sourceMappingURL=deskLedger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deskLedger.js","sourceRoot":"","sources":["../../../src/ta/desk/deskLedger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * liqTape.ts — read the local liquidation tape JSONL files and produce
3
+ * a per-asset 24h summary for the desk's liquidations surface.
4
+ *
5
+ * Data source: qumo-liq-collector.ts (resident VPS process, writes daily files).
6
+ * File format: one JSON row per line:
7
+ * { ts: number, sym: string, side: "long"|"short", qty: number, price: number, usd: number }
8
+ *
9
+ * Called from collectors.ts when QUMO_LIQ_DIR is set and tape files exist.
10
+ * NEVER throws — returns empty tape on any error.
11
+ */
12
+ export interface LiqRow {
13
+ ts: number;
14
+ sym: string;
15
+ side: "long" | "short";
16
+ qty: number;
17
+ price: number;
18
+ usd: number;
19
+ }
20
+ export interface LiqTapeSummary {
21
+ windowHours: number;
22
+ asOf: number;
23
+ totalLongUsd: number;
24
+ totalShortUsd: number;
25
+ longCount: number;
26
+ shortCount: number;
27
+ topSymbols: Array<{
28
+ sym: string;
29
+ longUsd: number;
30
+ shortUsd: number;
31
+ }>;
32
+ }
33
+ /**
34
+ * Produce a 24h liquidation summary from the local tape.
35
+ * Returns null if no tape files exist (collector not yet running).
36
+ */
37
+ export declare function readLiqTape(nowMs: number, windowHours?: number): LiqTapeSummary | null;