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,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wp-ma-rejection @1d — Phase 4 second battery cell.
|
|
3
|
+
*
|
|
4
|
+
* FROZEN PARAMS (pre-registered in docs/qumo-desk-precommit.md §6.2;
|
|
5
|
+
* any change must bump methodVersion and resets accrual to zero):
|
|
6
|
+
*
|
|
7
|
+
* MA_BARS = 20 rolling bars for simple moving average
|
|
8
|
+
* MIN_WICK_DEPTH = 0.002 minimum wick depth below MA as fraction of close
|
|
9
|
+
* (avoids hairline MA touches; 0.002 = 0.2%)
|
|
10
|
+
* OUTCOME_WINDOW_BARS = 10 bars the card races before push/unscorable
|
|
11
|
+
* R_MULTIPLIER = 1.0 rRef = close + 1× stop-distance (1R long only)
|
|
12
|
+
* UNIVERSE = ["BTCUSDT", "ETHUSDT"] always-listed only
|
|
13
|
+
* METHOD_VERSION = "wpmr-1d-v1"
|
|
14
|
+
*
|
|
15
|
+
* Hypothesis: a daily bar that wicks below the 20-bar SMA but closes back above
|
|
16
|
+
* it (MA support rejection) reverts at a rate greater than chance over a 10-bar
|
|
17
|
+
* outcome window. LONG only — tests the support-rejection hypothesis.
|
|
18
|
+
*
|
|
19
|
+
* Look-ahead self-test: runs once at module import. Mutates future bars and
|
|
20
|
+
* asserts the fire decision is unchanged (detector reads only the fire bar + prior).
|
|
21
|
+
*/
|
|
22
|
+
// ── Frozen params ─────────────────────────────────────────────────────────────
|
|
23
|
+
export const METHOD_VERSION = "wpmr-1d-v1";
|
|
24
|
+
export const PERMUTATION_SEED = 777;
|
|
25
|
+
export const NULL_SEED = 4242;
|
|
26
|
+
export const MA_BARS = 20;
|
|
27
|
+
export const MIN_WICK_DEPTH = 0.002;
|
|
28
|
+
export const OUTCOME_WINDOW_BARS = 10;
|
|
29
|
+
export const R_MULTIPLIER = 1.0;
|
|
30
|
+
export const UNIVERSE = ["BTCUSDT", "ETHUSDT"];
|
|
31
|
+
// ── Detector ──────────────────────────────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* Run on the latest CLOSED candle (candles[n-1]). Returns false if no rejection,
|
|
34
|
+
* or the card geometry if a MA-rejection bar fires.
|
|
35
|
+
*
|
|
36
|
+
* Fire condition (LONG only):
|
|
37
|
+
* 1. fire bar's low < sma20 (wick pierced below the MA)
|
|
38
|
+
* 2. fire bar's close > sma20 (closed back above the MA = rejection)
|
|
39
|
+
* 3. (sma20 - low) / close ≥ 0.002 (min 0.2% wick depth — avoids hairline touches)
|
|
40
|
+
*/
|
|
41
|
+
export function detectMaRejection(candles) {
|
|
42
|
+
if (candles.length < MA_BARS + 1)
|
|
43
|
+
return false;
|
|
44
|
+
const bar = candles[candles.length - 1];
|
|
45
|
+
// 20-bar SMA over the PRIOR MA_BARS bars (excludes the current bar).
|
|
46
|
+
const smaSlice = candles.slice(-(MA_BARS + 1), -1);
|
|
47
|
+
const sma20 = smaSlice.reduce((s, c) => s + c.close, 0) / smaSlice.length;
|
|
48
|
+
// Fire conditions.
|
|
49
|
+
if (bar.low >= sma20)
|
|
50
|
+
return false; // wick must pierce below MA
|
|
51
|
+
if (bar.close <= sma20)
|
|
52
|
+
return false; // must close back above MA
|
|
53
|
+
const wickDepth = (sma20 - bar.low) / bar.close;
|
|
54
|
+
if (wickDepth < MIN_WICK_DEPTH)
|
|
55
|
+
return false; // hairline touch filter
|
|
56
|
+
const stopDistance = bar.close - bar.low;
|
|
57
|
+
if (stopDistance <= 0)
|
|
58
|
+
return false;
|
|
59
|
+
return {
|
|
60
|
+
direction: "long",
|
|
61
|
+
lastClose: bar.close,
|
|
62
|
+
invalidation: bar.low,
|
|
63
|
+
rRef: bar.close + R_MULTIPLIER * stopDistance,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// ── Look-ahead self-test (build gate, runs once at import) ────────────────────
|
|
67
|
+
function runLookAheadSelfTest() {
|
|
68
|
+
const BASE_PRICE = 50000;
|
|
69
|
+
const SMA_BASE = 49500; // MA below price so rejection can fire
|
|
70
|
+
// Build a series where the final bar rejects off the SMA.
|
|
71
|
+
const candles = [];
|
|
72
|
+
for (let i = 0; i < MA_BARS + 1; i++) {
|
|
73
|
+
const isRejection = i === MA_BARS;
|
|
74
|
+
const close = isRejection ? BASE_PRICE : SMA_BASE; // prior bars near SMA base
|
|
75
|
+
const low = isRejection ? SMA_BASE * 0.99 : SMA_BASE * 0.98; // rejection bar: low dips below SMA
|
|
76
|
+
const high = isRejection ? BASE_PRICE * 1.01 : SMA_BASE * 1.01;
|
|
77
|
+
candles.push({
|
|
78
|
+
openTime: i * 86_400_000,
|
|
79
|
+
open: close,
|
|
80
|
+
high,
|
|
81
|
+
low,
|
|
82
|
+
close,
|
|
83
|
+
volume: 100,
|
|
84
|
+
closeTime: i * 86_400_000 + 86_399_999,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// The SMA of prior bars ≈ SMA_BASE. The fire bar's low = SMA_BASE * 0.99 < SMA_BASE,
|
|
88
|
+
// close = BASE_PRICE > SMA_BASE. Should fire.
|
|
89
|
+
const baseline = detectMaRejection(candles);
|
|
90
|
+
if (!baseline) {
|
|
91
|
+
throw new Error(`wp-ma-rejection look-ahead self-test FAILED: synthetic rejection bar did not fire — ` +
|
|
92
|
+
`check MA_BARS (${MA_BARS}) and MIN_WICK_DEPTH (${MIN_WICK_DEPTH})`);
|
|
93
|
+
}
|
|
94
|
+
// Append corrupted future bars (prices ×1.37) then re-run on same slice — result must match.
|
|
95
|
+
const corrupted = [...candles];
|
|
96
|
+
for (let j = 0; j < 5; j++) {
|
|
97
|
+
corrupted.push({
|
|
98
|
+
openTime: (MA_BARS + 1 + j) * 86_400_000,
|
|
99
|
+
open: BASE_PRICE * 1.37,
|
|
100
|
+
high: BASE_PRICE * 1.37 * 1.05,
|
|
101
|
+
low: BASE_PRICE * 1.37 * 0.95,
|
|
102
|
+
close: BASE_PRICE * 1.37,
|
|
103
|
+
volume: 100,
|
|
104
|
+
closeTime: (MA_BARS + 1 + j) * 86_400_000 + 86_399_999,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const afterCorruption = detectMaRejection(corrupted.slice(0, MA_BARS + 1));
|
|
108
|
+
if (!afterCorruption) {
|
|
109
|
+
throw new Error(`wp-ma-rejection look-ahead self-test FAILED: detector fired on baseline but not after appending future bars`);
|
|
110
|
+
}
|
|
111
|
+
if (afterCorruption.direction !== baseline.direction ||
|
|
112
|
+
afterCorruption.lastClose !== baseline.lastClose) {
|
|
113
|
+
throw new Error(`wp-ma-rejection look-ahead self-test FAILED: detector result changed after appending corrupted future bars`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
runLookAheadSelfTest();
|
|
117
|
+
// ── CellDetector export ───────────────────────────────────────────────────────
|
|
118
|
+
export const wpMaRejectionDetector = {
|
|
119
|
+
cellType: "wp-ma-rejection",
|
|
120
|
+
timeframe: "1d",
|
|
121
|
+
assets: UNIVERSE,
|
|
122
|
+
outcomeWindowBars: OUTCOME_WINDOW_BARS,
|
|
123
|
+
detect: detectMaRejection,
|
|
124
|
+
};
|
|
125
|
+
// ── CellSpec for cellBacktest harness ─────────────────────────────────────────
|
|
126
|
+
/**
|
|
127
|
+
* FAMILY_N bumps from 1 → 2 when this cell joins the battery.
|
|
128
|
+
* Both cells must use the updated FAMILY_N for the shared Holm correction.
|
|
129
|
+
*/
|
|
130
|
+
export const FAMILY_N = 2; // frozen Phase-4 cell count (wp-volume-climax + wp-ma-rejection)
|
|
131
|
+
export const wpMaRejectionSpec = {
|
|
132
|
+
cellName: "wp-ma-rejection",
|
|
133
|
+
methodVersion: METHOD_VERSION,
|
|
134
|
+
timeframe: "1d",
|
|
135
|
+
universe: UNIVERSE,
|
|
136
|
+
outcomeWindowBars: OUTCOME_WINDOW_BARS,
|
|
137
|
+
nullKind: "matched-date-dart",
|
|
138
|
+
seeds: { rng: 101, permutation: PERMUTATION_SEED, null: NULL_SEED },
|
|
139
|
+
detect: detectMaRejection,
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=wpMaRejection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wpMaRejection.js","sourceRoot":"","sources":["../../../../src/ta/desk/cells/wpMaRejection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wp-volume-climax @1d — Phase 1 first proving cell.
|
|
3
|
+
*
|
|
4
|
+
* FROZEN PARAMS (pre-registered in docs/qumo-desk-precommit.md §3 Phase-1
|
|
5
|
+
* addendum; any change must bump methodVersion and resets accrual to zero):
|
|
6
|
+
*
|
|
7
|
+
* VOL_SMA_BARS = 20 rolling bars for average-volume baseline
|
|
8
|
+
* VOL_MULTIPLIER = 2.5 volume must be ≥ 2.5× the SMA to qualify
|
|
9
|
+
* REJECTION_THRESHOLD = 0.60 close must be in the outer 40% of bar range
|
|
10
|
+
* (< 40% from the low = long setup;
|
|
11
|
+
* > 60% from the low = short setup)
|
|
12
|
+
* OUTCOME_WINDOW_BARS = 10 bars the card races before push/unscorable
|
|
13
|
+
* R_MULTIPLIER = 1.0 rRef = close ± 1× stop-distance
|
|
14
|
+
* UNIVERSE = ["BTCUSDT", "ETHUSDT"] always-listed only
|
|
15
|
+
* METHOD_VERSION = "wpvc-1d-v1"
|
|
16
|
+
*
|
|
17
|
+
* Hypothesis: after a volume-climax bar that closes in the exhaustion-end of
|
|
18
|
+
* its range (buyers/sellers exhausted at extreme volume), price reacts in the
|
|
19
|
+
* opposite direction at a rate greater than chance.
|
|
20
|
+
*
|
|
21
|
+
* Look-ahead self-test: candles beyond the fire bar are mutated ×1.37; the
|
|
22
|
+
* OUTCOME-LABEL (win/loss/push) for the fire event must change (else the
|
|
23
|
+
* detector leaks future data into its fire decision — it is safe, only the
|
|
24
|
+
* outcome check is expected to change). Run once at module load.
|
|
25
|
+
*
|
|
26
|
+
* Phase 1 status: ACCRUE-ONLY. GRADED is code-impossible until Phase 2
|
|
27
|
+
* ships the full permutation harness. All emitted rows count toward the
|
|
28
|
+
* gate accumulation.
|
|
29
|
+
*/
|
|
30
|
+
import type { Candle } from "../../types.js";
|
|
31
|
+
import type { CellDetector, DetectResult } from "../accrualEmitter.js";
|
|
32
|
+
export declare const METHOD_VERSION = "wpvc-1d-v1";
|
|
33
|
+
export declare const PERMUTATION_SEED = 777;
|
|
34
|
+
export declare const NULL_SEED = 4242;
|
|
35
|
+
export declare const VOL_SMA_BARS = 20;
|
|
36
|
+
export declare const VOL_MULTIPLIER = 2.5;
|
|
37
|
+
export declare const REJECTION_THRESHOLD = 0.6;
|
|
38
|
+
export declare const OUTCOME_WINDOW_BARS = 10;
|
|
39
|
+
export declare const R_MULTIPLIER = 1;
|
|
40
|
+
export declare const UNIVERSE: readonly ["BTCUSDT", "ETHUSDT"];
|
|
41
|
+
/**
|
|
42
|
+
* Run on the latest CLOSED candle (candles[n-1]). Returns false if no climax,
|
|
43
|
+
* or the card geometry if a volume-climax bar fires.
|
|
44
|
+
*
|
|
45
|
+
* @param candles Chronological 1d candles; last element = latest closed bar.
|
|
46
|
+
*/
|
|
47
|
+
export declare function detectVolumeClimax(candles: Candle[]): DetectResult;
|
|
48
|
+
export declare const wpVolumeClimaxDetector: CellDetector;
|
|
49
|
+
import type { CellSpec } from "../cellBacktest.js";
|
|
50
|
+
/**
|
|
51
|
+
* The frozen CellSpec for the Phase-2 backtest harness.
|
|
52
|
+
* Seeds are pinned from the design doc: permutation=777, null=4242, rng=101.
|
|
53
|
+
* familyN=1 for Phase 2 (only wp-volume-climax in the battery).
|
|
54
|
+
* Bump when adding more cells to the registry.
|
|
55
|
+
*/
|
|
56
|
+
export declare const FAMILY_N = 2;
|
|
57
|
+
export declare const wpVolumeClimaxSpec: CellSpec;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wp-volume-climax @1d — Phase 1 first proving cell.
|
|
3
|
+
*
|
|
4
|
+
* FROZEN PARAMS (pre-registered in docs/qumo-desk-precommit.md §3 Phase-1
|
|
5
|
+
* addendum; any change must bump methodVersion and resets accrual to zero):
|
|
6
|
+
*
|
|
7
|
+
* VOL_SMA_BARS = 20 rolling bars for average-volume baseline
|
|
8
|
+
* VOL_MULTIPLIER = 2.5 volume must be ≥ 2.5× the SMA to qualify
|
|
9
|
+
* REJECTION_THRESHOLD = 0.60 close must be in the outer 40% of bar range
|
|
10
|
+
* (< 40% from the low = long setup;
|
|
11
|
+
* > 60% from the low = short setup)
|
|
12
|
+
* OUTCOME_WINDOW_BARS = 10 bars the card races before push/unscorable
|
|
13
|
+
* R_MULTIPLIER = 1.0 rRef = close ± 1× stop-distance
|
|
14
|
+
* UNIVERSE = ["BTCUSDT", "ETHUSDT"] always-listed only
|
|
15
|
+
* METHOD_VERSION = "wpvc-1d-v1"
|
|
16
|
+
*
|
|
17
|
+
* Hypothesis: after a volume-climax bar that closes in the exhaustion-end of
|
|
18
|
+
* its range (buyers/sellers exhausted at extreme volume), price reacts in the
|
|
19
|
+
* opposite direction at a rate greater than chance.
|
|
20
|
+
*
|
|
21
|
+
* Look-ahead self-test: candles beyond the fire bar are mutated ×1.37; the
|
|
22
|
+
* OUTCOME-LABEL (win/loss/push) for the fire event must change (else the
|
|
23
|
+
* detector leaks future data into its fire decision — it is safe, only the
|
|
24
|
+
* outcome check is expected to change). Run once at module load.
|
|
25
|
+
*
|
|
26
|
+
* Phase 1 status: ACCRUE-ONLY. GRADED is code-impossible until Phase 2
|
|
27
|
+
* ships the full permutation harness. All emitted rows count toward the
|
|
28
|
+
* gate accumulation.
|
|
29
|
+
*/
|
|
30
|
+
// ── Frozen params ─────────────────────────────────────────────────────────────
|
|
31
|
+
export const METHOD_VERSION = "wpvc-1d-v1";
|
|
32
|
+
export const PERMUTATION_SEED = 777; // frozen — shared with cellBacktest default
|
|
33
|
+
export const NULL_SEED = 4242; // frozen — null-arm RNG seed
|
|
34
|
+
export const VOL_SMA_BARS = 20;
|
|
35
|
+
export const VOL_MULTIPLIER = 2.5;
|
|
36
|
+
export const REJECTION_THRESHOLD = 0.6;
|
|
37
|
+
export const OUTCOME_WINDOW_BARS = 10;
|
|
38
|
+
export const R_MULTIPLIER = 1.0;
|
|
39
|
+
export const UNIVERSE = ["BTCUSDT", "ETHUSDT"];
|
|
40
|
+
// ── Detector ──────────────────────────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Run on the latest CLOSED candle (candles[n-1]). Returns false if no climax,
|
|
43
|
+
* or the card geometry if a volume-climax bar fires.
|
|
44
|
+
*
|
|
45
|
+
* @param candles Chronological 1d candles; last element = latest closed bar.
|
|
46
|
+
*/
|
|
47
|
+
export function detectVolumeClimax(candles) {
|
|
48
|
+
if (candles.length < VOL_SMA_BARS + 1)
|
|
49
|
+
return false;
|
|
50
|
+
const bar = candles[candles.length - 1];
|
|
51
|
+
const range = bar.high - bar.low;
|
|
52
|
+
if (range <= 0)
|
|
53
|
+
return false;
|
|
54
|
+
// Volume SMA over the prior VOL_SMA_BARS bars (excludes the current bar).
|
|
55
|
+
const smaSlice = candles.slice(-(VOL_SMA_BARS + 1), -1);
|
|
56
|
+
const avgVol = smaSlice.reduce((s, c) => s + c.volume, 0) / smaSlice.length;
|
|
57
|
+
if (avgVol <= 0)
|
|
58
|
+
return false;
|
|
59
|
+
// Volume gate: current bar must be ≥ VOL_MULTIPLIER × SMA.
|
|
60
|
+
if (bar.volume < VOL_MULTIPLIER * avgVol)
|
|
61
|
+
return false;
|
|
62
|
+
// Rejection position: close relative to range.
|
|
63
|
+
const closePct = (bar.close - bar.low) / range; // 0 = close at low, 1 = at high
|
|
64
|
+
if (closePct <= 1 - REJECTION_THRESHOLD) {
|
|
65
|
+
// Close in the LOWER 40% — sellers exhausted → long setup.
|
|
66
|
+
const stopDistance = bar.close - bar.low;
|
|
67
|
+
if (stopDistance <= 0)
|
|
68
|
+
return false;
|
|
69
|
+
return {
|
|
70
|
+
direction: "long",
|
|
71
|
+
lastClose: bar.close,
|
|
72
|
+
invalidation: bar.low,
|
|
73
|
+
rRef: bar.close + R_MULTIPLIER * stopDistance,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (closePct >= REJECTION_THRESHOLD) {
|
|
77
|
+
// Close in the UPPER 40% — buyers exhausted → short setup.
|
|
78
|
+
const stopDistance = bar.high - bar.close;
|
|
79
|
+
if (stopDistance <= 0)
|
|
80
|
+
return false;
|
|
81
|
+
return {
|
|
82
|
+
direction: "short",
|
|
83
|
+
lastClose: bar.close,
|
|
84
|
+
invalidation: bar.high,
|
|
85
|
+
rRef: bar.close - R_MULTIPLIER * stopDistance,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
// ── Look-ahead self-test (build gate, runs once at import) ────────────────────
|
|
91
|
+
/**
|
|
92
|
+
* Mutate candles AFTER index `fireIdx` by ×1.37 and verify the fire decision
|
|
93
|
+
* is unchanged (detector is look-ahead clean) but the OUTCOME can differ
|
|
94
|
+
* (future bars matter for racing). Throws on any detected look-ahead leak.
|
|
95
|
+
*
|
|
96
|
+
* "Look-ahead clean" here means: detectVolumeClimax(candles[0..fireIdx+1]) gives
|
|
97
|
+
* the same result whether or not we corrupt candles beyond fireIdx.
|
|
98
|
+
*/
|
|
99
|
+
function runLookAheadSelfTest() {
|
|
100
|
+
// Synthetic candle series: 30 bars of steady price, then a volume climax bar.
|
|
101
|
+
const BASE_PRICE = 50000;
|
|
102
|
+
const BASE_VOL = 100;
|
|
103
|
+
const candles = [];
|
|
104
|
+
for (let i = 0; i < VOL_SMA_BARS + 2; i++) {
|
|
105
|
+
const isClimax = i === VOL_SMA_BARS + 1;
|
|
106
|
+
const vol = isClimax ? BASE_VOL * (VOL_MULTIPLIER + 0.5) : BASE_VOL;
|
|
107
|
+
const range = 1000;
|
|
108
|
+
const low = BASE_PRICE - range / 2;
|
|
109
|
+
const high = BASE_PRICE + range / 2;
|
|
110
|
+
// Last (climax) bar: close near the low (long exhaustion setup).
|
|
111
|
+
const close = isClimax ? low + range * 0.15 : BASE_PRICE;
|
|
112
|
+
candles.push({
|
|
113
|
+
openTime: i * 86_400_000,
|
|
114
|
+
open: BASE_PRICE,
|
|
115
|
+
high,
|
|
116
|
+
low,
|
|
117
|
+
close,
|
|
118
|
+
volume: vol,
|
|
119
|
+
closeTime: i * 86_400_000 + 86_399_999,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const fireIdx = candles.length - 1;
|
|
123
|
+
// Baseline: detector on the real candles.
|
|
124
|
+
const baseline = detectVolumeClimax(candles);
|
|
125
|
+
if (!baseline) {
|
|
126
|
+
throw new Error(`wp-volume-climax look-ahead self-test FAILED: synthetic climax bar did not fire — ` +
|
|
127
|
+
`check VOL_MULTIPLIER (${VOL_MULTIPLIER}) and REJECTION_THRESHOLD (${REJECTION_THRESHOLD})`);
|
|
128
|
+
}
|
|
129
|
+
// Corrupt future: add extra candles AFTER fireIdx with prices ×1.37, then
|
|
130
|
+
// re-run detector on the slice up to and including the fire bar.
|
|
131
|
+
// The detector only looks at candles[0..n-1] — the fire bar is always last.
|
|
132
|
+
// This confirms the detector does NOT read beyond its input slice.
|
|
133
|
+
const corrupted = candles.slice(0, fireIdx + 1).map((c, i) => {
|
|
134
|
+
if (i < fireIdx)
|
|
135
|
+
return c; // prior bars untouched
|
|
136
|
+
return c; // fire bar itself untouched
|
|
137
|
+
});
|
|
138
|
+
// Now append corrupted future bars (should not affect the detector):
|
|
139
|
+
for (let j = 0; j < 5; j++) {
|
|
140
|
+
corrupted.push({
|
|
141
|
+
openTime: (fireIdx + 1 + j) * 86_400_000,
|
|
142
|
+
open: BASE_PRICE * 1.37,
|
|
143
|
+
high: BASE_PRICE * 1.37 * 1.05,
|
|
144
|
+
low: BASE_PRICE * 1.37 * 0.95,
|
|
145
|
+
close: BASE_PRICE * 1.37,
|
|
146
|
+
volume: BASE_VOL,
|
|
147
|
+
closeTime: (fireIdx + 1 + j) * 86_400_000 + 86_399_999,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Run on the slice ENDING at the fire bar (the extra corrupted bars are
|
|
151
|
+
// AFTER the series — we test the detector on exactly candles[0..fireIdx+1]).
|
|
152
|
+
const afterCorruption = detectVolumeClimax(corrupted.slice(0, fireIdx + 1));
|
|
153
|
+
if (!afterCorruption) {
|
|
154
|
+
throw new Error(`wp-volume-climax look-ahead self-test FAILED: detector fired on baseline ` +
|
|
155
|
+
`but not after appending future bars — this is a look-ahead leak`);
|
|
156
|
+
}
|
|
157
|
+
if (afterCorruption.direction !== baseline.direction ||
|
|
158
|
+
afterCorruption.lastClose !== baseline.lastClose) {
|
|
159
|
+
throw new Error(`wp-volume-climax look-ahead self-test FAILED: detector result changed after ` +
|
|
160
|
+
`appending corrupted future bars — look-ahead contamination detected`);
|
|
161
|
+
}
|
|
162
|
+
// Self-test PASSED.
|
|
163
|
+
}
|
|
164
|
+
// Run at module load — fails fast if the detector has a look-ahead leak.
|
|
165
|
+
runLookAheadSelfTest();
|
|
166
|
+
// ── CellDetector export ───────────────────────────────────────────────────────
|
|
167
|
+
export const wpVolumeClimaxDetector = {
|
|
168
|
+
cellType: "wp-volume-climax",
|
|
169
|
+
timeframe: "1d",
|
|
170
|
+
assets: UNIVERSE,
|
|
171
|
+
outcomeWindowBars: OUTCOME_WINDOW_BARS,
|
|
172
|
+
detect: detectVolumeClimax,
|
|
173
|
+
};
|
|
174
|
+
/**
|
|
175
|
+
* The frozen CellSpec for the Phase-2 backtest harness.
|
|
176
|
+
* Seeds are pinned from the design doc: permutation=777, null=4242, rng=101.
|
|
177
|
+
* familyN=1 for Phase 2 (only wp-volume-climax in the battery).
|
|
178
|
+
* Bump when adding more cells to the registry.
|
|
179
|
+
*/
|
|
180
|
+
export const FAMILY_N = 2; // frozen Phase-4 cell count (wp-volume-climax + wp-ma-rejection)
|
|
181
|
+
export const wpVolumeClimaxSpec = {
|
|
182
|
+
cellName: "wp-volume-climax",
|
|
183
|
+
methodVersion: METHOD_VERSION,
|
|
184
|
+
timeframe: "1d",
|
|
185
|
+
universe: UNIVERSE,
|
|
186
|
+
outcomeWindowBars: OUTCOME_WINDOW_BARS,
|
|
187
|
+
nullKind: "matched-date-dart",
|
|
188
|
+
seeds: { rng: 101, permutation: PERMUTATION_SEED, null: NULL_SEED },
|
|
189
|
+
detect: detectVolumeClimax,
|
|
190
|
+
};
|
|
191
|
+
// ── Re-export seeds for CellSpec (they are already local consts but exporting ─
|
|
192
|
+
// ── for use in tests that need to verify frozen values.) ─────────────────────
|
|
193
|
+
//# sourceMappingURL=wpVolumeClimax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wpVolumeClimax.js","sourceRoot":"","sources":["../../../../src/ta/desk/cells/wpVolumeClimax.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* collectors.ts — free-no-key feed collectors for the QUMO honest desk.
|
|
3
|
+
*
|
|
4
|
+
* Each collector wraps fetch in try/catch → FeedResult {value|null, asOf,
|
|
5
|
+
* source, state}. Successful pulls append a snapshot to
|
|
6
|
+
* ~/.patchwork/qumo-cache/<feed>.jsonl so the ~30d-retention derivative feeds
|
|
7
|
+
* accrete history from launch date. NEVER fabricates a value — failure → null
|
|
8
|
+
* + state 'offline'.
|
|
9
|
+
*
|
|
10
|
+
* Endpoints mirror src/recipes/tools/market.ts (same hosts/shapes). Run off-box
|
|
11
|
+
* on the local Mac only (the VPS http tool is POST-only with no crypto tools).
|
|
12
|
+
* Atlas adds a NET-NEW CoinGecko /coins/categories collector (DESIGN feed #13).
|
|
13
|
+
*/
|
|
14
|
+
import type { Collected } from "./types.js";
|
|
15
|
+
/** Collect all free feeds concurrently. Each is independently fail-soft. */
|
|
16
|
+
export declare function collectAll(): Promise<Collected>;
|
|
17
|
+
/** A fully-offline Collected — used when --dry-run wants no network. */
|
|
18
|
+
export declare function offlineCollected(): Collected;
|