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.
- package/README.bridge.md +15 -16
- package/README.md +46 -458
- package/dist/activationMetrics.js +2 -3
- package/dist/activationMetrics.js.map +1 -1
- package/dist/activityLog.d.ts +1 -0
- package/dist/activityLog.js +8 -3
- package/dist/activityLog.js.map +1 -1
- package/dist/adapters/gemini.js +2 -2
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/grok.js +6 -1
- package/dist/adapters/grok.js.map +1 -1
- package/dist/adapters/openai.js +4 -0
- package/dist/adapters/openai.js.map +1 -1
- package/dist/approvalHttp.d.ts +9 -0
- package/dist/approvalHttp.js +210 -171
- package/dist/approvalHttp.js.map +1 -1
- package/dist/approvalKpi.d.ts +102 -0
- package/dist/approvalKpi.js +282 -0
- package/dist/approvalKpi.js.map +1 -0
- package/dist/approvalQueue.d.ts +1 -1
- package/dist/approvalQueue.js.map +1 -1
- package/dist/automation.d.ts +45 -4
- package/dist/automation.js +123 -15
- package/dist/automation.js.map +1 -1
- package/dist/bridge.d.ts +10 -0
- package/dist/bridge.js +225 -46
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeLockDiscovery.d.ts +16 -1
- package/dist/bridgeLockDiscovery.js +38 -4
- package/dist/bridgeLockDiscovery.js.map +1 -1
- package/dist/bridgeToolsRules.js +3 -18
- package/dist/bridgeToolsRules.js.map +1 -1
- package/dist/claudeAuthHttp.d.ts +25 -0
- package/dist/claudeAuthHttp.js +219 -0
- package/dist/claudeAuthHttp.js.map +1 -0
- package/dist/claudeDriver.js +4 -1
- package/dist/claudeDriver.js.map +1 -1
- package/dist/claudeOrchestrator.d.ts +15 -0
- package/dist/claudeOrchestrator.js +44 -0
- package/dist/claudeOrchestrator.js.map +1 -1
- package/dist/commands/connect.d.ts +47 -0
- package/dist/commands/connect.js +419 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/install.js +3 -10
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/launchd.d.ts +7 -0
- package/dist/commands/launchd.js +20 -2
- package/dist/commands/launchd.js.map +1 -1
- package/dist/commands/patchworkInit.d.ts +7 -0
- package/dist/commands/patchworkInit.js +26 -0
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +59 -4
- package/dist/commands/recipe.js +206 -5
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.d.ts +9 -0
- package/dist/commands/recipeInstall.js +56 -3
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/commands/task.d.ts +25 -0
- package/dist/commands/task.js +61 -41
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/tokenEfficiency.d.ts +4 -0
- package/dist/commands/tokenEfficiency.js +23 -26
- package/dist/commands/tokenEfficiency.js.map +1 -1
- package/dist/commands/tracesExport.d.ts +15 -1
- package/dist/commands/tracesExport.js +39 -5
- package/dist/commands/tracesExport.js.map +1 -1
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/connectorRoutes.js +613 -62
- package/dist/connectorRoutes.js.map +1 -1
- package/dist/connectors/asana.js +9 -3
- package/dist/connectors/asana.js.map +1 -1
- package/dist/connectors/baseConnector.d.ts +16 -0
- package/dist/connectors/baseConnector.js +2 -0
- package/dist/connectors/baseConnector.js.map +1 -1
- package/dist/connectors/caldiy.js +34 -0
- package/dist/connectors/caldiy.js.map +1 -1
- package/dist/connectors/confluence.js +9 -2
- package/dist/connectors/confluence.js.map +1 -1
- package/dist/connectors/connectorActivity.d.ts +24 -0
- package/dist/connectors/connectorActivity.js +32 -0
- package/dist/connectors/connectorActivity.js.map +1 -0
- package/dist/connectors/connectorRedirectUri.js +22 -2
- package/dist/connectors/connectorRedirectUri.js.map +1 -1
- package/dist/connectors/connectorRegistry.d.ts +0 -3
- package/dist/connectors/connectorRegistry.js +8 -8
- package/dist/connectors/connectorRegistry.js.map +1 -1
- package/dist/connectors/datadog.js +8 -1
- package/dist/connectors/datadog.js.map +1 -1
- package/dist/connectors/discord.js +4 -3
- package/dist/connectors/discord.js.map +1 -1
- package/dist/connectors/elasticsearch.js +22 -0
- package/dist/connectors/elasticsearch.js.map +1 -1
- package/dist/connectors/github.d.ts +38 -0
- package/dist/connectors/github.js +91 -5
- package/dist/connectors/github.js.map +1 -1
- package/dist/connectors/gitlab.js +19 -16
- package/dist/connectors/gitlab.js.map +1 -1
- package/dist/connectors/gmail.d.ts +5 -0
- package/dist/connectors/gmail.js +53 -11
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleCalendar.js +5 -4
- package/dist/connectors/googleCalendar.js.map +1 -1
- package/dist/connectors/googleDocs.js +7 -6
- package/dist/connectors/googleDocs.js.map +1 -1
- package/dist/connectors/googleDrive.js +15 -8
- package/dist/connectors/googleDrive.js.map +1 -1
- package/dist/connectors/grafana.js +39 -3
- package/dist/connectors/grafana.js.map +1 -1
- package/dist/connectors/jira.d.ts +1 -1
- package/dist/connectors/jira.js +19 -4
- package/dist/connectors/jira.js.map +1 -1
- package/dist/connectors/linear.js +2 -2
- package/dist/connectors/linear.js.map +1 -1
- package/dist/connectors/mcpClient.d.ts +29 -1
- package/dist/connectors/mcpClient.js +114 -44
- package/dist/connectors/mcpClient.js.map +1 -1
- package/dist/connectors/mcpOAuth.d.ts +1 -0
- package/dist/connectors/mcpOAuth.js +49 -4
- package/dist/connectors/mcpOAuth.js.map +1 -1
- package/dist/connectors/monday.js +5 -4
- package/dist/connectors/monday.js.map +1 -1
- package/dist/connectors/mongodb.js +32 -5
- package/dist/connectors/mongodb.js.map +1 -1
- package/dist/connectors/notion.d.ts +1 -1
- package/dist/connectors/notion.js +22 -6
- package/dist/connectors/notion.js.map +1 -1
- package/dist/connectors/oauthError.d.ts +17 -0
- package/dist/connectors/oauthError.js +50 -0
- package/dist/connectors/oauthError.js.map +1 -0
- package/dist/connectors/postgres.d.ts +7 -0
- package/dist/connectors/postgres.js +32 -2
- package/dist/connectors/postgres.js.map +1 -1
- package/dist/connectors/posthog.js +26 -0
- package/dist/connectors/posthog.js.map +1 -1
- package/dist/connectors/redis.d.ts +1 -0
- package/dist/connectors/redis.js +47 -20
- package/dist/connectors/redis.js.map +1 -1
- package/dist/connectors/salesforce.js +66 -5
- package/dist/connectors/salesforce.js.map +1 -1
- package/dist/connectors/sentry.js +2 -2
- package/dist/connectors/sentry.js.map +1 -1
- package/dist/connectors/slack.js +37 -14
- package/dist/connectors/slack.js.map +1 -1
- package/dist/connectors/snowflake.js +24 -0
- package/dist/connectors/snowflake.js.map +1 -1
- package/dist/connectors/stripe.js +9 -2
- package/dist/connectors/stripe.js.map +1 -1
- package/dist/connectors/supabase.js +34 -0
- package/dist/connectors/supabase.js.map +1 -1
- package/dist/connectors/tokenStorage.d.ts +20 -0
- package/dist/connectors/tokenStorage.js +196 -64
- package/dist/connectors/tokenStorage.js.map +1 -1
- package/dist/connectors/woocommerce.js +34 -0
- package/dist/connectors/woocommerce.js.map +1 -1
- package/dist/copilot/parseIntent.d.ts +58 -0
- package/dist/copilot/parseIntent.js +149 -0
- package/dist/copilot/parseIntent.js.map +1 -0
- package/dist/decisionReplay.d.ts +8 -6
- package/dist/decisionReplay.js +35 -11
- package/dist/decisionReplay.js.map +1 -1
- package/dist/decisionTraceLog.d.ts +9 -0
- package/dist/decisionTraceLog.js +6 -0
- package/dist/decisionTraceLog.js.map +1 -1
- package/dist/drivers/claude/api.js +49 -7
- package/dist/drivers/claude/api.js.map +1 -1
- package/dist/drivers/claude/envSanitizer.d.ts +9 -1
- package/dist/drivers/claude/envSanitizer.js +41 -3
- package/dist/drivers/claude/envSanitizer.js.map +1 -1
- package/dist/drivers/claude/streamParser.d.ts +13 -0
- package/dist/drivers/claude/streamParser.js.map +1 -1
- package/dist/drivers/claude/subprocess.js +131 -16
- package/dist/drivers/claude/subprocess.js.map +1 -1
- package/dist/drivers/claude/subprocessSettings.d.ts +1 -1
- package/dist/drivers/claude/subprocessSettings.js +18 -4
- package/dist/drivers/claude/subprocessSettings.js.map +1 -1
- package/dist/drivers/gemini/index.d.ts +13 -0
- package/dist/drivers/gemini/index.js +211 -67
- package/dist/drivers/gemini/index.js.map +1 -1
- package/dist/drivers/local/index.d.ts +2 -17
- package/dist/drivers/local/index.js +5 -92
- package/dist/drivers/local/index.js.map +1 -1
- package/dist/drivers/openai/index.js +69 -9
- package/dist/drivers/openai/index.js.map +1 -1
- package/dist/drivers/outputCap.d.ts +27 -0
- package/dist/drivers/outputCap.js +50 -0
- package/dist/drivers/outputCap.js.map +1 -0
- package/dist/embeddings/cosine.d.ts +23 -0
- package/dist/embeddings/cosine.js +59 -0
- package/dist/embeddings/cosine.js.map +1 -0
- package/dist/embeddings/index.d.ts +19 -0
- package/dist/embeddings/index.js +35 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/localEmbeddings.d.ts +29 -0
- package/dist/embeddings/localEmbeddings.js +103 -0
- package/dist/embeddings/localEmbeddings.js.map +1 -0
- package/dist/embeddings/localEndpoints.d.ts +24 -0
- package/dist/embeddings/localEndpoints.js +37 -0
- package/dist/embeddings/localEndpoints.js.map +1 -0
- package/dist/embeddings/types.d.ts +32 -0
- package/dist/embeddings/types.js +12 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/featureFlags.d.ts +18 -0
- package/dist/featureFlags.js +32 -0
- package/dist/featureFlags.js.map +1 -1
- package/dist/fp/automationInterpreter.js +118 -39
- package/dist/fp/automationInterpreter.js.map +1 -1
- package/dist/fp/automationProgram.d.ts +10 -0
- package/dist/fp/automationProgram.js.map +1 -1
- package/dist/fp/automationState.d.ts +6 -0
- package/dist/fp/automationState.js +38 -0
- package/dist/fp/automationState.js.map +1 -1
- package/dist/fp/commandDescription.d.ts +6 -0
- package/dist/fp/commandDescription.js +18 -5
- package/dist/fp/commandDescription.js.map +1 -1
- package/dist/fp/interpreterContext.d.ts +16 -5
- package/dist/fp/interpreterContext.js +59 -3
- package/dist/fp/interpreterContext.js.map +1 -1
- package/dist/fp/policyParser.js +18 -8
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/haltPushDispatch.d.ts +4 -0
- package/dist/haltPushDispatch.js +7 -22
- package/dist/haltPushDispatch.js.map +1 -1
- package/dist/inboxRoutes.js +2 -2
- package/dist/inboxRoutes.js.map +1 -1
- package/dist/index.js +672 -135
- package/dist/index.js.map +1 -1
- package/dist/installGuard.js +6 -0
- package/dist/installGuard.js.map +1 -1
- package/dist/localEndpointGuard.d.ts +25 -0
- package/dist/localEndpointGuard.js +101 -0
- package/dist/localEndpointGuard.js.map +1 -0
- package/dist/mcpRoutes.js +1 -1
- package/dist/mcpRoutes.js.map +1 -1
- package/dist/oauth.d.ts +13 -0
- package/dist/oauth.js +53 -9
- package/dist/oauth.js.map +1 -1
- package/dist/orchestrator/childBridgeClient.d.ts +7 -0
- package/dist/orchestrator/childBridgeClient.js +42 -1
- package/dist/orchestrator/childBridgeClient.js.map +1 -1
- package/dist/orchestrator/orchestratorBridge.d.ts +33 -0
- package/dist/orchestrator/orchestratorBridge.js +75 -9
- package/dist/orchestrator/orchestratorBridge.js.map +1 -1
- package/dist/patchworkConfig.d.ts +4 -0
- package/dist/patchworkConfig.js +33 -4
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/probe.js +39 -5
- package/dist/probe.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +59 -0
- package/dist/recipeOrchestration.js +314 -60
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipeRoutes.d.ts +93 -0
- package/dist/recipeRoutes.js +664 -27
- package/dist/recipeRoutes.js.map +1 -1
- package/dist/recipes/RecipeOrchestrator.d.ts +14 -0
- package/dist/recipes/RecipeOrchestrator.js +42 -2
- package/dist/recipes/RecipeOrchestrator.js.map +1 -1
- package/dist/recipes/agentExecutor.d.ts +51 -2
- package/dist/recipes/agentExecutor.js +86 -13
- package/dist/recipes/agentExecutor.js.map +1 -1
- package/dist/recipes/chainedRunner.d.ts +111 -3
- package/dist/recipes/chainedRunner.js +440 -45
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/compiler.js +42 -29
- package/dist/recipes/compiler.js.map +1 -1
- package/dist/recipes/connectorPreflight.js +31 -0
- package/dist/recipes/connectorPreflight.js.map +1 -1
- package/dist/recipes/dependencyGraph.d.ts +16 -0
- package/dist/recipes/dependencyGraph.js +37 -2
- package/dist/recipes/dependencyGraph.js.map +1 -1
- package/dist/recipes/eventTriggerPrograms.d.ts +36 -0
- package/dist/recipes/eventTriggerPrograms.js +158 -0
- package/dist/recipes/eventTriggerPrograms.js.map +1 -0
- package/dist/recipes/githubInstallSource.d.ts +9 -2
- package/dist/recipes/githubInstallSource.js +36 -6
- package/dist/recipes/githubInstallSource.js.map +1 -1
- package/dist/recipes/haltCategory.d.ts +10 -0
- package/dist/recipes/haltCategory.js +11 -1
- package/dist/recipes/haltCategory.js.map +1 -1
- package/dist/recipes/idempotencyKey.d.ts +30 -3
- package/dist/recipes/idempotencyKey.js +89 -5
- package/dist/recipes/idempotencyKey.js.map +1 -1
- package/dist/recipes/installer.js +12 -35
- package/dist/recipes/installer.js.map +1 -1
- package/dist/recipes/judgeVerdict.d.ts +11 -1
- package/dist/recipes/judgeVerdict.js +47 -7
- package/dist/recipes/judgeVerdict.js.map +1 -1
- package/dist/recipes/names.d.ts +5 -0
- package/dist/recipes/names.js +10 -5
- package/dist/recipes/names.js.map +1 -1
- package/dist/recipes/parser.js +74 -10
- package/dist/recipes/parser.js.map +1 -1
- package/dist/recipes/pricing/costRouter.d.ts +43 -0
- package/dist/recipes/pricing/costRouter.js +44 -0
- package/dist/recipes/pricing/costRouter.js.map +1 -0
- package/dist/recipes/pricing/priceTable.d.ts +76 -0
- package/dist/recipes/pricing/priceTable.js +144 -0
- package/dist/recipes/pricing/priceTable.js.map +1 -0
- package/dist/recipes/replayRun.js +5 -2
- package/dist/recipes/replayRun.js.map +1 -1
- package/dist/recipes/resolveRecipePath.js +15 -1
- package/dist/recipes/resolveRecipePath.js.map +1 -1
- package/dist/recipes/runBudget.d.ts +93 -32
- package/dist/recipes/runBudget.js +213 -49
- package/dist/recipes/runBudget.js.map +1 -1
- package/dist/recipes/runRegistry.d.ts +32 -0
- package/dist/recipes/runRegistry.js +54 -0
- package/dist/recipes/runRegistry.js.map +1 -0
- package/dist/recipes/scheduler.js +6 -2
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schema.d.ts +59 -6
- package/dist/recipes/schemaGenerator.d.ts +9 -0
- package/dist/recipes/schemaGenerator.js +446 -77
- package/dist/recipes/schemaGenerator.js.map +1 -1
- package/dist/recipes/simulation/aggregateRunRisk.d.ts +46 -0
- package/dist/recipes/simulation/aggregateRunRisk.js +120 -0
- package/dist/recipes/simulation/aggregateRunRisk.js.map +1 -0
- package/dist/recipes/simulation/costProjector.d.ts +32 -0
- package/dist/recipes/simulation/costProjector.js +194 -0
- package/dist/recipes/simulation/costProjector.js.map +1 -0
- package/dist/recipes/simulation/sideEffects.d.ts +32 -0
- package/dist/recipes/simulation/sideEffects.js +62 -0
- package/dist/recipes/simulation/sideEffects.js.map +1 -0
- package/dist/recipes/simulation/simulate.d.ts +36 -0
- package/dist/recipes/simulation/simulate.js +264 -0
- package/dist/recipes/simulation/simulate.js.map +1 -0
- package/dist/recipes/simulation/simulateMockedRun.d.ts +52 -0
- package/dist/recipes/simulation/simulateMockedRun.js +84 -0
- package/dist/recipes/simulation/simulateMockedRun.js.map +1 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.d.ts +31 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.js +50 -0
- package/dist/recipes/simulation/synthesizeMockedOutputs.js.map +1 -0
- package/dist/recipes/simulation/types.d.ts +198 -0
- package/dist/recipes/simulation/types.js +30 -0
- package/dist/recipes/simulation/types.js.map +1 -0
- package/dist/recipes/stepObservation.d.ts +12 -0
- package/dist/recipes/stepObservation.js +21 -1
- package/dist/recipes/stepObservation.js.map +1 -1
- package/dist/recipes/toolRegistry.js +61 -24
- package/dist/recipes/toolRegistry.js.map +1 -1
- package/dist/recipes/tools/airtable.d.ts +15 -0
- package/dist/recipes/tools/airtable.js +240 -0
- package/dist/recipes/tools/airtable.js.map +1 -0
- package/dist/recipes/tools/caldiy.d.ts +13 -0
- package/dist/recipes/tools/caldiy.js +215 -0
- package/dist/recipes/tools/caldiy.js.map +1 -0
- package/dist/recipes/tools/circleci.d.ts +10 -0
- package/dist/recipes/tools/circleci.js +204 -0
- package/dist/recipes/tools/circleci.js.map +1 -0
- package/dist/recipes/tools/cloudflare.d.ts +13 -0
- package/dist/recipes/tools/cloudflare.js +211 -0
- package/dist/recipes/tools/cloudflare.js.map +1 -0
- package/dist/recipes/tools/confluence.js +11 -10
- package/dist/recipes/tools/confluence.js.map +1 -1
- package/dist/recipes/tools/datadog.js +13 -12
- package/dist/recipes/tools/datadog.js.map +1 -1
- package/dist/recipes/tools/docs.d.ts +18 -0
- package/dist/recipes/tools/docs.js +95 -0
- package/dist/recipes/tools/docs.js.map +1 -0
- package/dist/recipes/tools/elasticsearch.d.ts +11 -0
- package/dist/recipes/tools/elasticsearch.js +157 -0
- package/dist/recipes/tools/elasticsearch.js.map +1 -0
- package/dist/recipes/tools/fanOut.js +4 -4
- package/dist/recipes/tools/fanOut.js.map +1 -1
- package/dist/recipes/tools/figma.d.ts +12 -0
- package/dist/recipes/tools/figma.js +195 -0
- package/dist/recipes/tools/figma.js.map +1 -0
- package/dist/recipes/tools/file.js +43 -22
- package/dist/recipes/tools/file.js.map +1 -1
- package/dist/recipes/tools/github.js +162 -5
- package/dist/recipes/tools/github.js.map +1 -1
- package/dist/recipes/tools/gmail.js +45 -33
- package/dist/recipes/tools/gmail.js.map +1 -1
- package/dist/recipes/tools/grafana.d.ts +11 -0
- package/dist/recipes/tools/grafana.js +216 -0
- package/dist/recipes/tools/grafana.js.map +1 -0
- package/dist/recipes/tools/http.d.ts +1 -1
- package/dist/recipes/tools/http.js +10 -28
- package/dist/recipes/tools/http.js.map +1 -1
- package/dist/recipes/tools/hubspot.js +13 -12
- package/dist/recipes/tools/hubspot.js.map +1 -1
- package/dist/recipes/tools/index.d.ts +28 -0
- package/dist/recipes/tools/index.js +28 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/tools/intercom.js +11 -10
- package/dist/recipes/tools/intercom.js.map +1 -1
- package/dist/recipes/tools/jira.js +13 -0
- package/dist/recipes/tools/jira.js.map +1 -1
- package/dist/recipes/tools/meetingNotes.js +2 -2
- package/dist/recipes/tools/monday.d.ts +22 -0
- package/dist/recipes/tools/monday.js +242 -0
- package/dist/recipes/tools/monday.js.map +1 -0
- package/dist/recipes/tools/mongodb.d.ts +19 -0
- package/dist/recipes/tools/mongodb.js +194 -0
- package/dist/recipes/tools/mongodb.js.map +1 -0
- package/dist/recipes/tools/notion.js +11 -10
- package/dist/recipes/tools/notion.js.map +1 -1
- package/dist/recipes/tools/obsidian.d.ts +15 -0
- package/dist/recipes/tools/obsidian.js +173 -0
- package/dist/recipes/tools/obsidian.js.map +1 -0
- package/dist/recipes/tools/outcomes.d.ts +15 -0
- package/dist/recipes/tools/outcomes.js +111 -0
- package/dist/recipes/tools/outcomes.js.map +1 -0
- package/dist/recipes/tools/paystack.d.ts +11 -0
- package/dist/recipes/tools/paystack.js +212 -0
- package/dist/recipes/tools/paystack.js.map +1 -0
- package/dist/recipes/tools/pipedrive.d.ts +16 -0
- package/dist/recipes/tools/pipedrive.js +234 -0
- package/dist/recipes/tools/pipedrive.js.map +1 -0
- package/dist/recipes/tools/postgres.d.ts +15 -0
- package/dist/recipes/tools/postgres.js +186 -0
- package/dist/recipes/tools/postgres.js.map +1 -0
- package/dist/recipes/tools/posthog.d.ts +16 -0
- package/dist/recipes/tools/posthog.js +219 -0
- package/dist/recipes/tools/posthog.js.map +1 -0
- package/dist/recipes/tools/redis.d.ts +9 -0
- package/dist/recipes/tools/redis.js +141 -0
- package/dist/recipes/tools/redis.js.map +1 -0
- package/dist/recipes/tools/resend.d.ts +8 -0
- package/dist/recipes/tools/resend.js +153 -0
- package/dist/recipes/tools/resend.js.map +1 -0
- package/dist/recipes/tools/salesforce.d.ts +16 -0
- package/dist/recipes/tools/salesforce.js +184 -0
- package/dist/recipes/tools/salesforce.js.map +1 -0
- package/dist/recipes/tools/sendgrid.d.ts +9 -0
- package/dist/recipes/tools/sendgrid.js +175 -0
- package/dist/recipes/tools/sendgrid.js.map +1 -0
- package/dist/recipes/tools/shopify.d.ts +16 -0
- package/dist/recipes/tools/shopify.js +266 -0
- package/dist/recipes/tools/shopify.js.map +1 -0
- package/dist/recipes/tools/snowflake.d.ts +16 -0
- package/dist/recipes/tools/snowflake.js +173 -0
- package/dist/recipes/tools/snowflake.js.map +1 -0
- package/dist/recipes/tools/stripe.js +13 -12
- package/dist/recipes/tools/stripe.js.map +1 -1
- package/dist/recipes/tools/supabase.d.ts +9 -0
- package/dist/recipes/tools/supabase.js +133 -0
- package/dist/recipes/tools/supabase.js.map +1 -0
- package/dist/recipes/tools/todoist.d.ts +15 -0
- package/dist/recipes/tools/todoist.js +228 -0
- package/dist/recipes/tools/todoist.js.map +1 -0
- package/dist/recipes/tools/twilio.d.ts +11 -0
- package/dist/recipes/tools/twilio.js +180 -0
- package/dist/recipes/tools/twilio.js.map +1 -0
- package/dist/recipes/tools/vercel.d.ts +9 -0
- package/dist/recipes/tools/vercel.js +146 -0
- package/dist/recipes/tools/vercel.js.map +1 -0
- package/dist/recipes/tools/webflow.d.ts +11 -0
- package/dist/recipes/tools/webflow.js +244 -0
- package/dist/recipes/tools/webflow.js.map +1 -0
- package/dist/recipes/tools/woocommerce.d.ts +18 -0
- package/dist/recipes/tools/woocommerce.js +260 -0
- package/dist/recipes/tools/woocommerce.js.map +1 -0
- package/dist/recipes/tools/wrapConnectorExecute.d.ts +25 -0
- package/dist/recipes/tools/wrapConnectorExecute.js +37 -0
- package/dist/recipes/tools/wrapConnectorExecute.js.map +1 -0
- package/dist/recipes/tools/zendesk.js +11 -10
- package/dist/recipes/tools/zendesk.js.map +1 -1
- package/dist/recipes/triggerVars.d.ts +15 -0
- package/dist/recipes/triggerVars.js +57 -0
- package/dist/recipes/triggerVars.js.map +1 -0
- package/dist/recipes/validation.d.ts +1 -1
- package/dist/recipes/validation.js +536 -12
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/yamlPositions.d.ts +1 -1
- package/dist/recipes/yamlPositions.js +7 -2
- package/dist/recipes/yamlPositions.js.map +1 -1
- package/dist/recipes/yamlRunner.d.ts +216 -4
- package/dist/recipes/yamlRunner.js +1030 -96
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +5 -0
- package/dist/recipesHttp.js +68 -6
- package/dist/recipesHttp.js.map +1 -1
- package/dist/resources.js +14 -1
- package/dist/resources.js.map +1 -1
- package/dist/riskSignals.d.ts +42 -0
- package/dist/riskSignals.js +197 -0
- package/dist/riskSignals.js.map +1 -0
- package/dist/riskTier.d.ts +9 -0
- package/dist/riskTier.js +48 -0
- package/dist/riskTier.js.map +1 -1
- package/dist/runLog.d.ts +53 -0
- package/dist/runLog.js +75 -16
- package/dist/runLog.js.map +1 -1
- package/dist/schemas/recipe.v1.json +360 -16
- package/dist/server.d.ts +60 -0
- package/dist/server.js +192 -31
- package/dist/server.js.map +1 -1
- package/dist/sessionCheckpoint.js +4 -1
- package/dist/sessionCheckpoint.js.map +1 -1
- package/dist/sessionDetail.d.ts +43 -0
- package/dist/sessionDetail.js +59 -0
- package/dist/sessionDetail.js.map +1 -0
- package/dist/settingsEnv.d.ts +47 -0
- package/dist/settingsEnv.js +88 -0
- package/dist/settingsEnv.js.map +1 -0
- package/dist/streamableHttp.js +44 -10
- package/dist/streamableHttp.js.map +1 -1
- package/dist/ta/backtest/abnday.d.ts +53 -0
- package/dist/ta/backtest/abnday.js +123 -0
- package/dist/ta/backtest/abnday.js.map +1 -0
- package/dist/ta/backtest/directional.d.ts +48 -0
- package/dist/ta/backtest/directional.js +103 -0
- package/dist/ta/backtest/directional.js.map +1 -0
- package/dist/ta/backtest/fundx.d.ts +67 -0
- package/dist/ta/backtest/fundx.js +264 -0
- package/dist/ta/backtest/fundx.js.map +1 -0
- package/dist/ta/backtest/fvg.d.ts +62 -0
- package/dist/ta/backtest/fvg.js +236 -0
- package/dist/ta/backtest/fvg.js.map +1 -0
- package/dist/ta/backtest/ichimoku.d.ts +41 -0
- package/dist/ta/backtest/ichimoku.js +146 -0
- package/dist/ta/backtest/ichimoku.js.map +1 -0
- package/dist/ta/backtest/ingest.d.ts +20 -0
- package/dist/ta/backtest/ingest.js +104 -0
- package/dist/ta/backtest/ingest.js.map +1 -0
- package/dist/ta/backtest/msb.d.ts +49 -0
- package/dist/ta/backtest/msb.js +162 -0
- package/dist/ta/backtest/msb.js.map +1 -0
- package/dist/ta/backtest/scoring.d.ts +33 -0
- package/dist/ta/backtest/scoring.js +82 -0
- package/dist/ta/backtest/scoring.js.map +1 -0
- package/dist/ta/backtest/summary.d.ts +20 -0
- package/dist/ta/backtest/summary.js +42 -0
- package/dist/ta/backtest/summary.js.map +1 -0
- package/dist/ta/backtest/tsmom.d.ts +72 -0
- package/dist/ta/backtest/tsmom.js +202 -0
- package/dist/ta/backtest/tsmom.js.map +1 -0
- package/dist/ta/backtest/volsq.d.ts +34 -0
- package/dist/ta/backtest/volsq.js +154 -0
- package/dist/ta/backtest/volsq.js.map +1 -0
- package/dist/ta/backtest/walkForward.d.ts +45 -0
- package/dist/ta/backtest/walkForward.js +136 -0
- package/dist/ta/backtest/walkForward.js.map +1 -0
- package/dist/ta/cycles.d.ts +15 -0
- package/dist/ta/cycles.js +31 -0
- package/dist/ta/cycles.js.map +1 -0
- package/dist/ta/desk/accrualEmitter.d.ts +59 -0
- package/dist/ta/desk/accrualEmitter.js +136 -0
- package/dist/ta/desk/accrualEmitter.js.map +1 -0
- package/dist/ta/desk/cellBacktest.d.ts +179 -0
- package/dist/ta/desk/cellBacktest.js +514 -0
- package/dist/ta/desk/cellBacktest.js.map +1 -0
- package/dist/ta/desk/cells/wpMaRejection.d.ts +49 -0
- package/dist/ta/desk/cells/wpMaRejection.js +141 -0
- package/dist/ta/desk/cells/wpMaRejection.js.map +1 -0
- package/dist/ta/desk/cells/wpVolumeClimax.d.ts +57 -0
- package/dist/ta/desk/cells/wpVolumeClimax.js +193 -0
- package/dist/ta/desk/cells/wpVolumeClimax.js.map +1 -0
- package/dist/ta/desk/collectors.d.ts +18 -0
- package/dist/ta/desk/collectors.js +450 -0
- package/dist/ta/desk/collectors.js.map +1 -0
- package/dist/ta/desk/contract.d.ts +51 -0
- package/dist/ta/desk/contract.js +261 -0
- package/dist/ta/desk/contract.js.map +1 -0
- package/dist/ta/desk/deskLedger.d.ts +36 -0
- package/dist/ta/desk/deskLedger.js +239 -0
- package/dist/ta/desk/deskLedger.js.map +1 -0
- package/dist/ta/desk/liqTape.d.ts +37 -0
- package/dist/ta/desk/liqTape.js +99 -0
- package/dist/ta/desk/liqTape.js.map +1 -0
- package/dist/ta/desk/post.d.ts +20 -0
- package/dist/ta/desk/post.js +65 -0
- package/dist/ta/desk/post.js.map +1 -0
- package/dist/ta/desk/render.d.ts +25 -0
- package/dist/ta/desk/render.js +398 -0
- package/dist/ta/desk/render.js.map +1 -0
- package/dist/ta/desk/surfaces.d.ts +216 -0
- package/dist/ta/desk/surfaces.js +472 -0
- package/dist/ta/desk/surfaces.js.map +1 -0
- package/dist/ta/desk/types.d.ts +174 -0
- package/dist/ta/desk/types.js +104 -0
- package/dist/ta/desk/types.js.map +1 -0
- package/dist/ta/index.d.ts +23 -0
- package/dist/ta/index.js +54 -0
- package/dist/ta/index.js.map +1 -0
- package/dist/ta/ledger.d.ts +44 -0
- package/dist/ta/ledger.js +95 -0
- package/dist/ta/ledger.js.map +1 -0
- package/dist/ta/levels.d.ts +21 -0
- package/dist/ta/levels.js +41 -0
- package/dist/ta/levels.js.map +1 -0
- package/dist/ta/swings.d.ts +30 -0
- package/dist/ta/swings.js +83 -0
- package/dist/ta/swings.js.map +1 -0
- package/dist/ta/types.d.ts +81 -0
- package/dist/ta/types.js +20 -0
- package/dist/ta/types.js.map +1 -0
- package/dist/telemetry.js +20 -9
- package/dist/telemetry.js.map +1 -1
- package/dist/tokenUsageTracker.d.ts +2 -1
- package/dist/tokenUsageTracker.js +38 -20
- package/dist/tokenUsageTracker.js.map +1 -1
- package/dist/tools/contextBundle.js +13 -9
- package/dist/tools/contextBundle.js.map +1 -1
- package/dist/tools/ctxGetTaskContext.js +8 -3
- package/dist/tools/ctxGetTaskContext.js.map +1 -1
- package/dist/tools/ctxQueryTraces.d.ts +18 -1
- package/dist/tools/ctxQueryTraces.js +176 -27
- package/dist/tools/ctxQueryTraces.js.map +1 -1
- package/dist/tools/enrichCommit.js +5 -2
- package/dist/tools/enrichCommit.js.map +1 -1
- package/dist/tools/getDependencyTree.js +2 -2
- package/dist/tools/getDependencyTree.js.map +1 -1
- package/dist/tools/getDiagnostics.js +3 -0
- package/dist/tools/getDiagnostics.js.map +1 -1
- package/dist/tools/getDocumentSymbols.js +5 -1
- package/dist/tools/getDocumentSymbols.js.map +1 -1
- package/dist/tools/getGitHotspots.js +12 -1
- package/dist/tools/getGitHotspots.js.map +1 -1
- package/dist/tools/getGitLog.js +5 -2
- package/dist/tools/getGitLog.js.map +1 -1
- package/dist/tools/getGitStatus.js +6 -1
- package/dist/tools/getGitStatus.js.map +1 -1
- package/dist/tools/getProjectContext.js +3 -1
- package/dist/tools/getProjectContext.js.map +1 -1
- package/dist/tools/getToolCapabilities.js +39 -4
- package/dist/tools/getToolCapabilities.js.map +1 -1
- package/dist/tools/gitWrite.js +12 -3
- package/dist/tools/gitWrite.js.map +1 -1
- package/dist/tools/github/composite.d.ts +1 -1
- package/dist/tools/github/composite.js +7 -7
- package/dist/tools/github/composite.js.map +1 -1
- package/dist/tools/github/pr.d.ts +6 -6
- package/dist/tools/github/pr.js +18 -11
- package/dist/tools/github/pr.js.map +1 -1
- package/dist/tools/httpClient.js +55 -3
- package/dist/tools/httpClient.js.map +1 -1
- package/dist/tools/index.d.ts +2 -1
- package/dist/tools/index.js +19 -12
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lsp.d.ts +6 -0
- package/dist/tools/lsp.js +81 -12
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/previewEdit.js +16 -1
- package/dist/tools/previewEdit.js.map +1 -1
- package/dist/tools/resumeClaudeTask.js +17 -0
- package/dist/tools/resumeClaudeTask.js.map +1 -1
- package/dist/tools/searchAndReplace.js +9 -5
- package/dist/tools/searchAndReplace.js.map +1 -1
- package/dist/tools/searchTools.d.ts +26 -0
- package/dist/tools/searchTools.js +42 -2
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/tools/terminal.js +23 -51
- package/dist/tools/terminal.js.map +1 -1
- package/dist/tools/transaction.d.ts +9 -1
- package/dist/tools/transaction.js +59 -4
- package/dist/tools/transaction.js.map +1 -1
- package/dist/tools/utils.d.ts +16 -0
- package/dist/tools/utils.js +77 -7
- package/dist/tools/utils.js.map +1 -1
- package/dist/transport.d.ts +31 -0
- package/dist/transport.js +117 -14
- package/dist/transport.js.map +1 -1
- package/dist/wireHaltPushDispatch.js +12 -0
- package/dist/wireHaltPushDispatch.js.map +1 -1
- package/dist/workerGateDecisionLog.d.ts +141 -0
- package/dist/workerGateDecisionLog.js +361 -0
- package/dist/workerGateDecisionLog.js.map +1 -0
- package/dist/workers/actionClass.d.ts +38 -0
- package/dist/workers/actionClass.js +155 -0
- package/dist/workers/actionClass.js.map +1 -0
- package/dist/workers/backtest.d.ts +68 -0
- package/dist/workers/backtest.js +113 -0
- package/dist/workers/backtest.js.map +1 -0
- package/dist/workers/contextRisk.d.ts +35 -0
- package/dist/workers/contextRisk.js +20 -0
- package/dist/workers/contextRisk.js.map +1 -0
- package/dist/workers/contextRiskScorer.d.ts +48 -0
- package/dist/workers/contextRiskScorer.js +94 -0
- package/dist/workers/contextRiskScorer.js.map +1 -0
- package/dist/workers/graduation.d.ts +61 -0
- package/dist/workers/graduation.js +112 -0
- package/dist/workers/graduation.js.map +1 -0
- package/dist/workers/outcomeStore.d.ts +98 -0
- package/dist/workers/outcomeStore.js +146 -0
- package/dist/workers/outcomeStore.js.map +1 -0
- package/dist/workers/outcomesCli.d.ts +34 -0
- package/dist/workers/outcomesCli.js +91 -0
- package/dist/workers/outcomesCli.js.map +1 -0
- package/dist/workers/runWorkerShadow.d.ts +90 -0
- package/dist/workers/runWorkerShadow.js +323 -0
- package/dist/workers/runWorkerShadow.js.map +1 -0
- package/dist/workers/shadowGate.d.ts +30 -0
- package/dist/workers/shadowGate.js +58 -0
- package/dist/workers/shadowGate.js.map +1 -0
- package/dist/workers/shadowObserver.d.ts +165 -0
- package/dist/workers/shadowObserver.js +203 -0
- package/dist/workers/shadowObserver.js.map +1 -0
- package/dist/workers/shadowReport.d.ts +16 -0
- package/dist/workers/shadowReport.js +61 -0
- package/dist/workers/shadowReport.js.map +1 -0
- package/dist/workers/shadowRun.d.ts +38 -0
- package/dist/workers/shadowRun.js +44 -0
- package/dist/workers/shadowRun.js.map +1 -0
- package/dist/workers/trustLevel.d.ts +82 -0
- package/dist/workers/trustLevel.js +100 -0
- package/dist/workers/trustLevel.js.map +1 -0
- package/dist/workers/worker.d.ts +49 -0
- package/dist/workers/worker.js +88 -0
- package/dist/workers/worker.js.map +1 -0
- package/dist/workers/workerGate.d.ts +101 -0
- package/dist/workers/workerGate.js +210 -0
- package/dist/workers/workerGate.js.map +1 -0
- package/dist/workers/workerLevelStore.d.ts +33 -0
- package/dist/workers/workerLevelStore.js +87 -0
- package/dist/workers/workerLevelStore.js.map +1 -0
- package/dist/workers/workerLoader.d.ts +7 -0
- package/dist/workers/workerLoader.js +31 -0
- package/dist/workers/workerLoader.js.map +1 -0
- package/dist/writeFileAtomic.js +40 -13
- package/dist/writeFileAtomic.js.map +1 -1
- package/package.json +14 -6
- package/scripts/mcp-stdio-shim.cjs +247 -87
- package/templates/CLAUDE.bridge.md +1 -1
- package/templates/recipes/dependency-bump.yaml +33 -0
- package/templates/recipes/incident-to-pr.yaml +187 -0
- package/templates/recipes/outcome-ingester.yaml +53 -0
- package/templates/recipes/release-notes.yaml +30 -0
- package/templates/recipes/triage-failing-tests-autofile.yaml +152 -0
- package/templates/recipes/triage-failing-tests.yaml +38 -0
- package/templates/workers/dependency-upkeep.worker.yaml +26 -0
- package/templates/workers/release-notes.worker.yaml +17 -0
- package/templates/workers/test-guardian.worker.yaml +24 -0
- package/deploy/README.md +0 -172
- package/deploy/bootstrap-new-vps.sh +0 -364
- package/deploy/bootstrap-vps.sh +0 -192
- package/deploy/claude-ide-bridge.service.template +0 -67
- package/deploy/claude-ide-bridge@.service +0 -31
- package/deploy/deploy-dashboard.sh +0 -198
- package/deploy/deploy-landing.sh +0 -136
- package/deploy/ecosystem.config.js.example +0 -36
- package/deploy/install-vps-service.sh +0 -240
- package/deploy/macos/README.md +0 -153
- package/deploy/macos/com.patchwork.bridge.plist.template +0 -54
- package/deploy/macos/com.patchwork.tunnel.plist.template +0 -76
- package/deploy/macos/install-mac-bridge.sh +0 -244
- package/deploy/macos/uninstall-mac-bridge.sh +0 -22
- 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;
|