patchwork-os 0.2.0-beta.9.canary.93 → 1.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic intent parser for the copilot chat pane (Overview deck's
|
|
3
|
+
* "7:copilot", docs/plans/dashboard-terminal-copilot-plan-2026-07-03.md).
|
|
4
|
+
*
|
|
5
|
+
* Tier 1 only: a small, explicit set of safe "lever" intents (pause/enable/
|
|
6
|
+
* run a recipe by name, explain a recent halt, read-only status Q&A).
|
|
7
|
+
* Deliberately NOT an LLM call — every phrasing this recognizes is
|
|
8
|
+
* enumerable and unit-testable, and an unrecognized message always falls
|
|
9
|
+
* back to a canned reply rather than guessing. Recipe/worker AI-creation
|
|
10
|
+
* (the mockup's tiers 2/3) are out of scope here; see the plan doc's risk
|
|
11
|
+
* register for why those need a generation endpoint + lint/preflight
|
|
12
|
+
* wiring + much more safety review before they can ship.
|
|
13
|
+
*/
|
|
14
|
+
export interface CopilotRecipeRef {
|
|
15
|
+
name: string;
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export type CopilotIntent = {
|
|
19
|
+
kind: "pause_recipe";
|
|
20
|
+
recipe: CopilotRecipeRef;
|
|
21
|
+
} | {
|
|
22
|
+
kind: "enable_recipe";
|
|
23
|
+
recipe: CopilotRecipeRef;
|
|
24
|
+
} | {
|
|
25
|
+
kind: "run_recipe";
|
|
26
|
+
recipe: CopilotRecipeRef;
|
|
27
|
+
} | {
|
|
28
|
+
kind: "explain_halt";
|
|
29
|
+
recipe?: CopilotRecipeRef;
|
|
30
|
+
} | {
|
|
31
|
+
kind: "ambiguous_recipe";
|
|
32
|
+
candidates: CopilotRecipeRef[];
|
|
33
|
+
} | {
|
|
34
|
+
kind: "approvals_status";
|
|
35
|
+
} | {
|
|
36
|
+
kind: "kill_switch_status";
|
|
37
|
+
} | {
|
|
38
|
+
kind: "unrecognized";
|
|
39
|
+
text: string;
|
|
40
|
+
};
|
|
41
|
+
export declare function parseCopilotIntent(text: string, recipes: CopilotRecipeRef[]): CopilotIntent;
|
|
42
|
+
export interface CopilotReplyResult {
|
|
43
|
+
reply: string;
|
|
44
|
+
action?: {
|
|
45
|
+
kind: "pause_recipe" | "enable_recipe" | "run_recipe";
|
|
46
|
+
recipeName: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Given a parsed intent (plus read-only status context the route
|
|
50
|
+
* handler already has on hand — halt reason, approvals count,
|
|
51
|
+
* kill-switch state), produce the chat reply + optional proposed
|
|
52
|
+
* action card. Never executes anything — matches the mockup's "chat
|
|
53
|
+
* proposes, buttons dispose" rule verbatim. */
|
|
54
|
+
export declare function buildCopilotReply(intent: CopilotIntent, opts?: {
|
|
55
|
+
haltReason?: string | null;
|
|
56
|
+
approvalsPending?: number;
|
|
57
|
+
killSwitchEngaged?: boolean;
|
|
58
|
+
}): CopilotReplyResult;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic intent parser for the copilot chat pane (Overview deck's
|
|
3
|
+
* "7:copilot", docs/plans/dashboard-terminal-copilot-plan-2026-07-03.md).
|
|
4
|
+
*
|
|
5
|
+
* Tier 1 only: a small, explicit set of safe "lever" intents (pause/enable/
|
|
6
|
+
* run a recipe by name, explain a recent halt, read-only status Q&A).
|
|
7
|
+
* Deliberately NOT an LLM call — every phrasing this recognizes is
|
|
8
|
+
* enumerable and unit-testable, and an unrecognized message always falls
|
|
9
|
+
* back to a canned reply rather than guessing. Recipe/worker AI-creation
|
|
10
|
+
* (the mockup's tiers 2/3) are out of scope here; see the plan doc's risk
|
|
11
|
+
* register for why those need a generation endpoint + lint/preflight
|
|
12
|
+
* wiring + much more safety review before they can ship.
|
|
13
|
+
*/
|
|
14
|
+
/** "nightly-review" / "nightly review" / "NIGHTLY_REVIEW" all match a
|
|
15
|
+
* recipe named "nightly-review" — recipe names are typically kebab-case
|
|
16
|
+
* slugs, so normalize both sides to a common form before comparing. */
|
|
17
|
+
function normalizeSlug(s) {
|
|
18
|
+
return s.toLowerCase().replace(/[-_]+/g, " ").trim();
|
|
19
|
+
}
|
|
20
|
+
/** Finds every recipe whose (normalized) name is tied for the longest
|
|
21
|
+
* match found as a substring of the (normalized) input text. A single
|
|
22
|
+
* result means an unambiguous match (longest wins over shorter
|
|
23
|
+
* unrelated matches, e.g. "outcome-ingester" over a shorter false
|
|
24
|
+
* positive); more than one result means the text is genuinely
|
|
25
|
+
* ambiguous — two distinct recipes both plausibly match — and the
|
|
26
|
+
* caller must not silently guess which one the user meant. */
|
|
27
|
+
function findMentionedRecipes(text, recipes) {
|
|
28
|
+
const normalizedText = normalizeSlug(text);
|
|
29
|
+
let bestLen = 0;
|
|
30
|
+
let candidates = [];
|
|
31
|
+
for (const r of recipes) {
|
|
32
|
+
const normalizedName = normalizeSlug(r.name);
|
|
33
|
+
if (normalizedName.length === 0)
|
|
34
|
+
continue;
|
|
35
|
+
if (!normalizedText.includes(normalizedName))
|
|
36
|
+
continue;
|
|
37
|
+
if (normalizedName.length > bestLen) {
|
|
38
|
+
bestLen = normalizedName.length;
|
|
39
|
+
candidates = [r];
|
|
40
|
+
}
|
|
41
|
+
else if (normalizedName.length === bestLen &&
|
|
42
|
+
!candidates.some((c) => c.name === r.name)) {
|
|
43
|
+
candidates.push(r);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return candidates;
|
|
47
|
+
}
|
|
48
|
+
const HALT_PATTERN = /\b(why|explain)\b.*\bhalt(ed|ing)?\b|\bhalt(ed|ing)?\b.*\bwhy\b/i;
|
|
49
|
+
const PAUSE_PATTERN = /\b(pause|disable|stop|turn off|kill)\b/i;
|
|
50
|
+
const ENABLE_PATTERN = /\b(enable|resume|unpause|re-?enable|turn on)\b/i;
|
|
51
|
+
const RUN_PATTERN = /\b(run|start|trigger|kick off|fire)\b/i;
|
|
52
|
+
const APPROVALS_PATTERN = /\bapprovals?\b/i;
|
|
53
|
+
const KILL_SWITCH_PATTERN = /\bkill.?switch\b/i;
|
|
54
|
+
export function parseCopilotIntent(text, recipes) {
|
|
55
|
+
const trimmed = text.trim();
|
|
56
|
+
if (!trimmed)
|
|
57
|
+
return { kind: "unrecognized", text };
|
|
58
|
+
// Read-only status Q&A — independent of recipe matching, checked first
|
|
59
|
+
// since these questions never name a recipe.
|
|
60
|
+
if (KILL_SWITCH_PATTERN.test(trimmed))
|
|
61
|
+
return { kind: "kill_switch_status" };
|
|
62
|
+
if (APPROVALS_PATTERN.test(trimmed))
|
|
63
|
+
return { kind: "approvals_status" };
|
|
64
|
+
const matches = findMentionedRecipes(trimmed, recipes);
|
|
65
|
+
if (matches.length > 1)
|
|
66
|
+
return { kind: "ambiguous_recipe", candidates: matches };
|
|
67
|
+
const mentioned = matches[0];
|
|
68
|
+
// Halt explanation is checked next — "why did X halt" would otherwise
|
|
69
|
+
// also match nothing else, but a phrase like "why is X stopped" could
|
|
70
|
+
// collide with the pause pattern's "stop" if checked in the wrong order.
|
|
71
|
+
if (HALT_PATTERN.test(trimmed)) {
|
|
72
|
+
return mentioned
|
|
73
|
+
? { kind: "explain_halt", recipe: mentioned }
|
|
74
|
+
: { kind: "explain_halt" };
|
|
75
|
+
}
|
|
76
|
+
if (mentioned) {
|
|
77
|
+
if (PAUSE_PATTERN.test(trimmed))
|
|
78
|
+
return { kind: "pause_recipe", recipe: mentioned };
|
|
79
|
+
if (ENABLE_PATTERN.test(trimmed))
|
|
80
|
+
return { kind: "enable_recipe", recipe: mentioned };
|
|
81
|
+
if (RUN_PATTERN.test(trimmed))
|
|
82
|
+
return { kind: "run_recipe", recipe: mentioned };
|
|
83
|
+
}
|
|
84
|
+
return { kind: "unrecognized", text };
|
|
85
|
+
}
|
|
86
|
+
const CAN_DO_HINT = 'I can pause, enable, or run a recipe by name, explain a recent halt, or answer "approvals pending"/"kill switch status" — try "pause nightly-review" or "why did outcome-ingester halt".';
|
|
87
|
+
const CREATION_HINT = "Creating recipes or workers from a goal isn't wired up yet — for now, use Marketplace → Install or `recipe new` for those.";
|
|
88
|
+
const CREATION_KEYWORDS = /\b(create|build|make|generate|scaffold)\b.*\b(recipe|worker)\b/i;
|
|
89
|
+
/** Given a parsed intent (plus read-only status context the route
|
|
90
|
+
* handler already has on hand — halt reason, approvals count,
|
|
91
|
+
* kill-switch state), produce the chat reply + optional proposed
|
|
92
|
+
* action card. Never executes anything — matches the mockup's "chat
|
|
93
|
+
* proposes, buttons dispose" rule verbatim. */
|
|
94
|
+
export function buildCopilotReply(intent, opts = {}) {
|
|
95
|
+
switch (intent.kind) {
|
|
96
|
+
case "pause_recipe":
|
|
97
|
+
return {
|
|
98
|
+
reply: `That's a lever action — review the card below to disable "${intent.recipe.name}".`,
|
|
99
|
+
action: { kind: "pause_recipe", recipeName: intent.recipe.name },
|
|
100
|
+
};
|
|
101
|
+
case "enable_recipe":
|
|
102
|
+
return {
|
|
103
|
+
reply: `Review the card below to re-enable "${intent.recipe.name}".`,
|
|
104
|
+
action: { kind: "enable_recipe", recipeName: intent.recipe.name },
|
|
105
|
+
};
|
|
106
|
+
case "run_recipe":
|
|
107
|
+
return {
|
|
108
|
+
reply: `Review the card below to run "${intent.recipe.name}" now.`,
|
|
109
|
+
action: { kind: "run_recipe", recipeName: intent.recipe.name },
|
|
110
|
+
};
|
|
111
|
+
case "explain_halt":
|
|
112
|
+
if (!intent.recipe) {
|
|
113
|
+
return {
|
|
114
|
+
reply: opts.haltReason
|
|
115
|
+
? `Most recent halt: ${opts.haltReason}`
|
|
116
|
+
: "No recent halts I can see — check 0:attention for the current state.",
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
reply: opts.haltReason
|
|
121
|
+
? `"${intent.recipe.name}" last halted: ${opts.haltReason}`
|
|
122
|
+
: `I don't see a recent halt for "${intent.recipe.name}".`,
|
|
123
|
+
};
|
|
124
|
+
case "ambiguous_recipe": {
|
|
125
|
+
const names = intent.candidates.map((c) => `"${c.name}"`).join(", ");
|
|
126
|
+
return {
|
|
127
|
+
reply: `That matches more than one recipe: ${names}. Try naming one more specifically.`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
case "approvals_status": {
|
|
131
|
+
const n = opts.approvalsPending ?? 0;
|
|
132
|
+
return {
|
|
133
|
+
reply: n === 0
|
|
134
|
+
? "No approvals pending."
|
|
135
|
+
: `${n} approval${n === 1 ? "" : "s"} pending — see 0:attention or /approvals.`,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
case "kill_switch_status":
|
|
139
|
+
return {
|
|
140
|
+
reply: `Kill switch is ${opts.killSwitchEngaged ? "engaged (writes blocked)" : "released"}.`,
|
|
141
|
+
};
|
|
142
|
+
case "unrecognized":
|
|
143
|
+
if (CREATION_KEYWORDS.test(intent.text)) {
|
|
144
|
+
return { reply: CREATION_HINT };
|
|
145
|
+
}
|
|
146
|
+
return { reply: CAN_DO_HINT };
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=parseIntent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIntent.js","sourceRoot":"","sources":["../../src/copilot/parseIntent.ts"],"names":[],"mappings":"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"}
|
package/dist/decisionReplay.d.ts
CHANGED
|
@@ -32,10 +32,10 @@ export interface ReplayRow {
|
|
|
32
32
|
/** True when original === replay. */
|
|
33
33
|
unchanged: boolean;
|
|
34
34
|
/**
|
|
35
|
-
* Direction of change for changed rows:
|
|
36
|
-
* "now_allowed" —
|
|
37
|
-
* "now_denied" —
|
|
38
|
-
* "now_asked" —
|
|
35
|
+
* Direction of change for changed rows, keyed off the NEW (replay) outcome:
|
|
36
|
+
* "now_allowed" — would now be allow (was deny/ask/none)
|
|
37
|
+
* "now_denied" — would now be deny or none/blocked (was allow/ask/none)
|
|
38
|
+
* "now_asked" — would now be ask (was allow/deny/none)
|
|
39
39
|
*/
|
|
40
40
|
changeKind?: "now_allowed" | "now_denied" | "now_asked";
|
|
41
41
|
/**
|
|
@@ -54,10 +54,12 @@ export interface DecisionReplayResult {
|
|
|
54
54
|
totalRows: number;
|
|
55
55
|
/** Rows where the decision would have changed. */
|
|
56
56
|
changedCount: number;
|
|
57
|
-
/** Rows that would flip
|
|
57
|
+
/** Rows that would flip to allow under current policy. */
|
|
58
58
|
nowAllowedCount: number;
|
|
59
|
-
/** Rows that would flip
|
|
59
|
+
/** Rows that would flip to deny/none (effectively blocked) under current policy. */
|
|
60
60
|
nowDeniedCount: number;
|
|
61
|
+
/** Rows that would flip to ask under current policy. */
|
|
62
|
+
nowAskedCount: number;
|
|
61
63
|
/** Workspace path used to load current rules. */
|
|
62
64
|
workspace: string;
|
|
63
65
|
}
|
package/dist/decisionReplay.js
CHANGED
|
@@ -17,14 +17,37 @@
|
|
|
17
17
|
* the rule match is tool-name-only. Noted in the result via `incomplete`.
|
|
18
18
|
*/
|
|
19
19
|
import { evaluateRules, loadCcPermissions } from "./ccPermissions.js";
|
|
20
|
+
/**
|
|
21
|
+
* Decide whether two decisions are equivalent for replay purposes.
|
|
22
|
+
*
|
|
23
|
+
* A `replay` of "none" (no current rule matched) is treated as unchanged when
|
|
24
|
+
* the original was "allow" or "deny" — absence of an explicit rule defaults to
|
|
25
|
+
* the same effective outcome the user already saw, so it is not a real flip.
|
|
26
|
+
*/
|
|
27
|
+
function isUnchanged(original, replay) {
|
|
28
|
+
return (replay === original ||
|
|
29
|
+
(replay === "none" && original === "allow") ||
|
|
30
|
+
(replay === "none" && original === "deny"));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Bucket a CHANGED row by its NEW (replay) outcome. Keyed purely off the replay
|
|
34
|
+
* direction so every changed row maps to exactly one bucket and the three
|
|
35
|
+
* bucket counts always sum to changedCount:
|
|
36
|
+
* - replay "allow" → now_allowed
|
|
37
|
+
* - replay "ask" → now_asked
|
|
38
|
+
* - replay "deny"/"none" → now_denied (effectively blocked)
|
|
39
|
+
*
|
|
40
|
+
* Returns undefined for unchanged rows (no bucket).
|
|
41
|
+
*/
|
|
20
42
|
function changeKind(original, replay) {
|
|
21
|
-
if (
|
|
43
|
+
if (isUnchanged(original, replay))
|
|
44
|
+
return undefined;
|
|
45
|
+
if (replay === "allow")
|
|
22
46
|
return "now_allowed";
|
|
23
|
-
if (
|
|
24
|
-
return "now_denied";
|
|
25
|
-
if (replay === "ask" && original !== "ask")
|
|
47
|
+
if (replay === "ask")
|
|
26
48
|
return "now_asked";
|
|
27
|
-
|
|
49
|
+
// A changed row whose replay is "deny" or "none" is effectively now blocked.
|
|
50
|
+
return "now_denied";
|
|
28
51
|
}
|
|
29
52
|
export function computeDecisionReplay(activityLog, opts) {
|
|
30
53
|
const { workspace, sinceMs = 0, limit = 500 } = opts;
|
|
@@ -60,9 +83,8 @@ export function computeDecisionReplay(activityLog, opts) {
|
|
|
60
83
|
}
|
|
61
84
|
const incomplete = specifier === undefined;
|
|
62
85
|
const replay = evaluateRules(toolName, specifier, rules);
|
|
63
|
-
const unchanged =
|
|
64
|
-
|
|
65
|
-
(replay === "none" && originalDecision === "deny");
|
|
86
|
+
const unchanged = isUnchanged(originalDecision, replay);
|
|
87
|
+
const kind = changeKind(originalDecision, replay);
|
|
66
88
|
rows.push({
|
|
67
89
|
timestamp: entry.timestamp,
|
|
68
90
|
toolName,
|
|
@@ -70,15 +92,14 @@ export function computeDecisionReplay(activityLog, opts) {
|
|
|
70
92
|
originalDecision,
|
|
71
93
|
replayDecision: replay,
|
|
72
94
|
unchanged,
|
|
73
|
-
...(
|
|
74
|
-
changeKind: changeKind(originalDecision, replay),
|
|
75
|
-
}),
|
|
95
|
+
...(kind !== undefined && { changeKind: kind }),
|
|
76
96
|
...(incomplete && { incomplete: true }),
|
|
77
97
|
});
|
|
78
98
|
}
|
|
79
99
|
let changedCount = 0;
|
|
80
100
|
let nowAllowedCount = 0;
|
|
81
101
|
let nowDeniedCount = 0;
|
|
102
|
+
let nowAskedCount = 0;
|
|
82
103
|
for (const r of rows) {
|
|
83
104
|
if (r.unchanged)
|
|
84
105
|
continue;
|
|
@@ -87,6 +108,8 @@ export function computeDecisionReplay(activityLog, opts) {
|
|
|
87
108
|
nowAllowedCount++;
|
|
88
109
|
else if (r.changeKind === "now_denied")
|
|
89
110
|
nowDeniedCount++;
|
|
111
|
+
else if (r.changeKind === "now_asked")
|
|
112
|
+
nowAskedCount++;
|
|
90
113
|
}
|
|
91
114
|
return {
|
|
92
115
|
rows,
|
|
@@ -95,6 +118,7 @@ export function computeDecisionReplay(activityLog, opts) {
|
|
|
95
118
|
changedCount,
|
|
96
119
|
nowAllowedCount,
|
|
97
120
|
nowDeniedCount,
|
|
121
|
+
nowAskedCount,
|
|
98
122
|
workspace,
|
|
99
123
|
};
|
|
100
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decisionReplay.js","sourceRoot":"","sources":["../src/decisionReplay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"decisionReplay.js","sourceRoot":"","sources":["../src/decisionReplay.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,14 @@ export interface DecisionTrace {
|
|
|
30
30
|
tags?: string[];
|
|
31
31
|
/** Optional session id so we can attribute traces back to a run. */
|
|
32
32
|
sessionId?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Optional free-form label for who/what recorded the trace (e.g.
|
|
35
|
+
* "ctxSaveTrace", "http", "copilot"). Additive field — existing JSONL
|
|
36
|
+
* rows written before this field existed simply omit it; readers must
|
|
37
|
+
* treat it as optional. Not validated beyond length (see
|
|
38
|
+
* MAX_SOURCE_LEN) — callers own the taxonomy.
|
|
39
|
+
*/
|
|
40
|
+
source?: string;
|
|
33
41
|
}
|
|
34
42
|
export interface DecisionTraceLogOptions {
|
|
35
43
|
dir: string;
|
|
@@ -55,6 +63,7 @@ export interface RecordDecisionInput {
|
|
|
55
63
|
workspace: string;
|
|
56
64
|
tags?: string[];
|
|
57
65
|
sessionId?: string;
|
|
66
|
+
source?: string;
|
|
58
67
|
}
|
|
59
68
|
export declare class DecisionTraceLog {
|
|
60
69
|
private readonly opts;
|
package/dist/decisionTraceLog.js
CHANGED
|
@@ -13,6 +13,7 @@ const MAX_PROBLEM_LEN = 500;
|
|
|
13
13
|
const MAX_SOLUTION_LEN = 500;
|
|
14
14
|
const MAX_TAGS = 10;
|
|
15
15
|
const MAX_TAG_LEN = 32;
|
|
16
|
+
const MAX_SOURCE_LEN = 64;
|
|
16
17
|
export class DecisionTraceLog {
|
|
17
18
|
opts;
|
|
18
19
|
traces = [];
|
|
@@ -68,6 +69,10 @@ export class DecisionTraceLog {
|
|
|
68
69
|
.map((t) => t.trim())
|
|
69
70
|
.filter((t) => t.length > 0 && t.length <= MAX_TAG_LEN)
|
|
70
71
|
.slice(0, MAX_TAGS);
|
|
72
|
+
const source = input.source?.trim();
|
|
73
|
+
if (source && source.length > MAX_SOURCE_LEN) {
|
|
74
|
+
throw new Error(`source exceeds ${MAX_SOURCE_LEN} chars`);
|
|
75
|
+
}
|
|
71
76
|
this.seq += 1;
|
|
72
77
|
const trace = {
|
|
73
78
|
seq: this.seq,
|
|
@@ -78,6 +83,7 @@ export class DecisionTraceLog {
|
|
|
78
83
|
workspace: input.workspace,
|
|
79
84
|
...(tags.length > 0 && { tags }),
|
|
80
85
|
...(input.sessionId && { sessionId: input.sessionId }),
|
|
86
|
+
...(source && { source }),
|
|
81
87
|
};
|
|
82
88
|
this.traces.push(trace);
|
|
83
89
|
if (this.traces.length > this.memoryCap) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decisionTraceLog.js","sourceRoot":"","sources":["../src/decisionTraceLog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"decisionTraceLog.js","sourceRoot":"","sources":["../src/decisionTraceLog.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA6CrD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAC9C,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,cAAc,GAAG,EAAE,CAAC;AA+B1B,MAAM,OAAO,gBAAgB;IAiBE;IAhBrB,MAAM,GAAoB,EAAE,CAAC;IAC7B,GAAG,GAAG,CAAC,CAAC;IACC,IAAI,CAAS;IACb,SAAS,CAAS;IAClB,GAAG,CAAe;IACnC;;;;;;;;OAQG;IACK,cAAc,GAAG,CAAC,CAAC;IAE3B,YAA6B,IAA6B;QAA7B,SAAI,GAAJ,IAAI,CAAyB;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QAChC,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACjB,iCAAiC,IAAI,CAAC,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACjG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAA0B;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACvD,IAAI,OAAO,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,mBAAmB,eAAe,QAAQ,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,oBAAoB,gBAAgB,QAAQ,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC;aACtD,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEtB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QACpC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,kBAAkB,cAAc,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACd,MAAM,KAAK,GAAkB;YAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG;YACH,OAAO;YACP,QAAQ;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;YACtD,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;SAC1B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAmB,EAAE;QACzB,oEAAoE;QACpE,oEAAoE;QACpE,qEAAqE;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QAClB,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAC9B,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;QAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACtB,MAAM,GAAG,GAAoB,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAAE,SAAS;YAC7D,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;gBAAE,SAAS;YACvD,IAAI,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,SAAS;YACrD,IAAI,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;gBAAE,SAAS;YACrD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK;gBAAE,SAAS;YACpD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,GAAG,KAAK;gBAAE,SAAS;YACzD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,KAAoB;QACjC,IAAI,CAAC;YACH,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,EAAE,CAAC,IAAI,GAAG,iBAAiB;oBAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;gBACjD,IAAI,IAAI,KAAK,QAAQ;oBAAE,MAAM,GAAG,CAAC;YACnC,CAAC;YACD,iEAAiE;YACjE,iEAAiE;YACjE,4DAA4D;YAC5D,0DAA0D;YAC1D,8DAA8D;YAC9D,iEAAiE;YACjE,wDAAwD;YACxD,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC/B,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE;oBACtD,IAAI,EAAE,KAAK;iBACZ,CAAC,CAAC;gBACH,iEAAiE;gBACjE,iEAAiE;gBACjE,2DAA2D;gBAC3D,yBAAyB;gBACzB,IAAI,CAAC;oBACH,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBACjD,CAAC;gBAAC,MAAM,CAAC;oBACP;;oEAEgD;gBAClD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,UAAU;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;gBACrC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,iBAAiB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YACD,qEAAqE;YACrE,sEAAsE;YACtE,qEAAqE;YACrE,qEAAqE;YACrE,uDAAuD;YACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,iBAAiB,EAAE,CAAC;gBAChE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,gDAAgD,MAAM,CAAC,MAAM,YAAY,iBAAiB,OAAO,CAClG,CAAC;gBACF,KAAK,GAAG,EAAE,CAAC;gBACX,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;YACD,+DAA+D;YAC/D,kEAAkE;YAClE,+DAA+D;YAC/D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC;YAC/B,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzD,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,qFAAqF;YACrF,IAAI,CAAC;gBACH,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,IACE,OAAO,CAAC,QAAQ,KAAK,OAAO;oBAC3B,SAAmC,CAAC,IAAI,KAAK,QAAQ,EACtD,CAAC;oBACD,IAAI,CAAC;wBACH,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,iBAAiB;oBACnB,CAAC;oBACD,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;YACtD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAChF,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,QAAQ;QACd,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;YAC9C,OAAO;QACT,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,cAAc;YAAE,OAAO;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/B,kEAAkE;YAClE,2DAA2D;YAC3D,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,2BAA2B;QAC3B,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;gBACvC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACjD,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACtB,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACrF,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACK,eAAe,CAAC,GAAW;QACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;gBACjD,IACE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;oBAC9B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;oBAC9B,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;oBAClC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EACnC,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;oBAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { truncateUtf8Bytes } from "../outputCap.js";
|
|
1
2
|
const OUTPUT_CAP = 50 * 1024;
|
|
2
3
|
/**
|
|
3
4
|
* ApiDriver — uses @anthropic-ai/sdk directly.
|
|
@@ -32,23 +33,64 @@ export class ApiDriver {
|
|
|
32
33
|
.join("\n")}\n--- END CONTEXT FILE LIST ---`
|
|
33
34
|
: "";
|
|
34
35
|
this.log("[ApiDriver] sending request to Anthropic API");
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
// ProviderDriver contract (types.ts): run() must resolve, never reject —
|
|
37
|
+
// swallow auth/429/network/abort errors into the result. messages.create
|
|
38
|
+
// rejects on all of these, so wrap it and translate into an errorMessage
|
|
39
|
+
// (or wasAborted for an abort/cancellation), mirroring OpenAIApiDriver.run.
|
|
40
|
+
let message;
|
|
41
|
+
try {
|
|
42
|
+
message = await client.messages.create({
|
|
43
|
+
model: input.model ?? "claude-haiku-4-5-20251001",
|
|
44
|
+
max_tokens: 4096,
|
|
45
|
+
// Forward the system prompt as Claude's top-level `system` param.
|
|
46
|
+
// Omit the key entirely when unset so the request shape is unchanged
|
|
47
|
+
// for callers that don't supply one (drivers-orch-2). OpenAIApiDriver
|
|
48
|
+
// forwards systemPrompt as a system message; this is the Anthropic
|
|
49
|
+
// equivalent.
|
|
50
|
+
...(input.systemPrompt ? { system: input.systemPrompt } : {}),
|
|
51
|
+
messages: [{ role: "user", content: input.prompt + contextNote }],
|
|
52
|
+
}, { signal: input.signal });
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
const isAbort = (err instanceof Error && err.name === "AbortError") ||
|
|
56
|
+
input.signal.aborted;
|
|
57
|
+
if (isAbort) {
|
|
58
|
+
return {
|
|
59
|
+
text: "",
|
|
60
|
+
durationMs: Date.now() - start,
|
|
61
|
+
wasAborted: true,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
text: "",
|
|
66
|
+
durationMs: Date.now() - start,
|
|
67
|
+
errorMessage: err instanceof Error ? err.message : String(err),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
40
70
|
// biome-ignore lint/suspicious/noExplicitAny: message is from dynamically imported optional dep
|
|
41
|
-
const
|
|
71
|
+
const msg = message;
|
|
72
|
+
const content = msg.content;
|
|
42
73
|
let text = "";
|
|
43
74
|
for (const b of content) {
|
|
44
75
|
if (b.type === "text")
|
|
45
76
|
text += b.text ?? "";
|
|
46
77
|
}
|
|
47
78
|
input.onChunk?.(text);
|
|
79
|
+
// The SDK returns usage on every message; forward it so RunBudget can
|
|
80
|
+
// enforce a real token/USD budget. Both fields together or neither.
|
|
81
|
+
const inputTokens = msg.usage?.input_tokens;
|
|
82
|
+
const outputTokens = msg.usage?.output_tokens;
|
|
83
|
+
const model = typeof msg.model === "string" ? msg.model : input.model;
|
|
48
84
|
return {
|
|
49
|
-
text: text
|
|
85
|
+
text: truncateUtf8Bytes(text, OUTPUT_CAP),
|
|
50
86
|
exitCode: 0,
|
|
51
87
|
durationMs: Date.now() - start,
|
|
88
|
+
providerMeta: {
|
|
89
|
+
...(model !== undefined ? { model } : {}),
|
|
90
|
+
...(typeof inputTokens === "number" && typeof outputTokens === "number"
|
|
91
|
+
? { inputTokens, outputTokens }
|
|
92
|
+
: {}),
|
|
93
|
+
},
|
|
52
94
|
};
|
|
53
95
|
}
|
|
54
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/drivers/claude/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/drivers/claude/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,9 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface SanitizeEnvOptions {
|
|
2
|
+
/**
|
|
3
|
+
* Provider-credential env keys to KEEP even though they would otherwise be
|
|
4
|
+
* stripped as cross-provider secrets. Used by a driver to retain its own
|
|
5
|
+
* provider's credentials (e.g. the Gemini driver preserves GEMINI_API_KEY).
|
|
6
|
+
*/
|
|
7
|
+
preserve?: Iterable<string>;
|
|
8
|
+
}
|
|
9
|
+
export declare function sanitizeEnv(env: NodeJS.ProcessEnv, opts?: SanitizeEnvOptions): NodeJS.ProcessEnv;
|
|
@@ -17,14 +17,52 @@
|
|
|
17
17
|
* (see chore(release) commit aa89d0de touching this file). Re-applied here.
|
|
18
18
|
*/
|
|
19
19
|
const PRESERVE = new Set(["CLAUDE_CODE_OAUTH_TOKEN"]);
|
|
20
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Cross-provider LLM credentials (Tier-0 #3, audit 2026-06-22).
|
|
22
|
+
*
|
|
23
|
+
* A bridge-spawned subprocess agent authenticates as exactly ONE provider.
|
|
24
|
+
* Every OTHER provider's API key sitting in its environment is pure
|
|
25
|
+
* exfiltration surface — a prompt-injected agent can read it with `printenv`
|
|
26
|
+
* and ship it out with a single `curl`. The sanitizer previously stripped only
|
|
27
|
+
* Anthropic/MCP vars, so OPENAI/XAI/GEMINI/etc. keys leaked into both the
|
|
28
|
+
* Claude and Gemini subprocess drivers.
|
|
29
|
+
*
|
|
30
|
+
* These are stripped by default. A driver that legitimately needs one of them
|
|
31
|
+
* (e.g. the Gemini driver needs GEMINI_API_KEY / GOOGLE_*) passes the keys it
|
|
32
|
+
* needs via the `preserve` option so only the OTHER providers' keys are removed.
|
|
33
|
+
*/
|
|
34
|
+
const CROSS_PROVIDER_SECRETS = new Set([
|
|
35
|
+
"OPENAI_API_KEY",
|
|
36
|
+
"OPENAI_ORG_ID",
|
|
37
|
+
"XAI_API_KEY",
|
|
38
|
+
"GROK_API_KEY",
|
|
39
|
+
"GEMINI_API_KEY",
|
|
40
|
+
"GOOGLE_API_KEY",
|
|
41
|
+
"GOOGLE_GENAI_API_KEY",
|
|
42
|
+
"GOOGLE_APPLICATION_CREDENTIALS",
|
|
43
|
+
"MISTRAL_API_KEY",
|
|
44
|
+
"GROQ_API_KEY",
|
|
45
|
+
"COHERE_API_KEY",
|
|
46
|
+
"DEEPSEEK_API_KEY",
|
|
47
|
+
"PERPLEXITY_API_KEY",
|
|
48
|
+
"TOGETHER_API_KEY",
|
|
49
|
+
"OPENROUTER_API_KEY",
|
|
50
|
+
"FIREWORKS_API_KEY",
|
|
51
|
+
"REPLICATE_API_TOKEN",
|
|
52
|
+
]);
|
|
53
|
+
export function sanitizeEnv(env, opts) {
|
|
54
|
+
const preserve = new Set(PRESERVE);
|
|
55
|
+
for (const key of opts?.preserve ?? [])
|
|
56
|
+
preserve.add(key);
|
|
21
57
|
const clean = { ...env };
|
|
22
58
|
for (const key of Object.keys(clean)) {
|
|
23
|
-
if (
|
|
59
|
+
if (preserve.has(key))
|
|
24
60
|
continue;
|
|
25
61
|
if (key === "CLAUDECODE" ||
|
|
62
|
+
key === "ANTHROPIC_API_KEY" ||
|
|
26
63
|
key.startsWith("CLAUDE_CODE_") ||
|
|
27
|
-
key.startsWith("MCP_")
|
|
64
|
+
key.startsWith("MCP_") ||
|
|
65
|
+
CROSS_PROVIDER_SECRETS.has(key)) {
|
|
28
66
|
delete clean[key];
|
|
29
67
|
}
|
|
30
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envSanitizer.js","sourceRoot":"","sources":["../../../src/drivers/claude/envSanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAEtD,MAAM,UAAU,WAAW,
|
|
1
|
+
{"version":3,"file":"envSanitizer.js","sourceRoot":"","sources":["../../../src/drivers/claude/envSanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAEtD;;;;;;;;;;;;;GAaG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACrC,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,gCAAgC;IAChC,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,qBAAqB;CACtB,CAAC,CAAC;AAWH,MAAM,UAAU,WAAW,CACzB,GAAsB,EACtB,IAAyB;IAEzB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,QAAQ,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAsB,EAAE,GAAG,GAAG,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,IACE,GAAG,KAAK,YAAY;YACpB,GAAG,KAAK,mBAAmB;YAC3B,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC;YAC9B,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;YACtB,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,EAC/B,CAAC;YACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -15,6 +15,19 @@ export interface StreamJsonEvent {
|
|
|
15
15
|
is_error?: boolean;
|
|
16
16
|
/** Present on type === "system" — session identifier. */
|
|
17
17
|
session_id?: string;
|
|
18
|
+
/** Present on type === "result" — token usage for the run. */
|
|
19
|
+
usage?: {
|
|
20
|
+
input_tokens?: number;
|
|
21
|
+
output_tokens?: number;
|
|
22
|
+
cache_creation_input_tokens?: number;
|
|
23
|
+
cache_read_input_tokens?: number;
|
|
24
|
+
};
|
|
25
|
+
/** Present on type === "result" — total billed cost in USD (0 under subscription auth). */
|
|
26
|
+
total_cost_usd?: number;
|
|
27
|
+
/** Present on type === "result" — number of agent turns. */
|
|
28
|
+
num_turns?: number;
|
|
29
|
+
/** Present on type === "result" — wall-clock duration in ms. */
|
|
30
|
+
duration_ms?: number;
|
|
18
31
|
}
|
|
19
32
|
export interface ParsedLine {
|
|
20
33
|
kind: "event";
|