patchwork-os 0.2.0-beta.1 → 0.2.0-beta.10.canary.95
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 +14 -14
- package/README.md +201 -34
- package/deploy/README.md +1 -1
- package/deploy/bootstrap-vps.sh +14 -9
- package/deploy/deploy-dashboard.sh +25 -1
- package/deploy/macos/README.md +153 -0
- package/deploy/macos/com.patchwork.bridge.plist.template +54 -0
- package/deploy/macos/com.patchwork.tunnel.plist.template +76 -0
- package/deploy/macos/install-mac-bridge.sh +244 -0
- package/deploy/macos/uninstall-mac-bridge.sh +22 -0
- package/dist/activityLog.d.ts +6 -0
- package/dist/activityLog.js +63 -26
- package/dist/activityLog.js.map +1 -1
- package/dist/adapters/claude.js +22 -16
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/gemini.js +15 -11
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/openai.js +9 -9
- package/dist/adapters/openai.js.map +1 -1
- package/dist/ajv2020.d.ts +25 -0
- package/dist/ajv2020.js +33 -0
- package/dist/ajv2020.js.map +1 -0
- package/dist/analyticsAggregator.js +1 -1
- package/dist/analyticsAggregator.js.map +1 -1
- package/dist/analyticsConfig.d.ts +29 -0
- package/dist/analyticsConfig.js +102 -0
- package/dist/analyticsConfig.js.map +1 -0
- package/dist/analyticsPrefs.d.ts +38 -2
- package/dist/analyticsPrefs.js +148 -23
- package/dist/analyticsPrefs.js.map +1 -1
- package/dist/analyticsSend.d.ts +17 -1
- package/dist/analyticsSend.js +67 -5
- package/dist/analyticsSend.js.map +1 -1
- package/dist/approvalHttp.d.ts +14 -0
- package/dist/approvalHttp.js +212 -9
- package/dist/approvalHttp.js.map +1 -1
- package/dist/approvalInsights.js +13 -5
- package/dist/approvalInsights.js.map +1 -1
- package/dist/approvalQueue.d.ts +97 -3
- package/dist/approvalQueue.js +193 -19
- package/dist/approvalQueue.js.map +1 -1
- package/dist/approvalSignals.js +19 -11
- package/dist/approvalSignals.js.map +1 -1
- package/dist/automation.d.ts +35 -10
- package/dist/automation.js +133 -37
- package/dist/automation.js.map +1 -1
- package/dist/automationSuggestions.js +10 -8
- package/dist/automationSuggestions.js.map +1 -1
- package/dist/bridge.d.ts +2 -0
- package/dist/bridge.js +202 -25
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeLockDiscovery.d.ts +27 -1
- package/dist/bridgeLockDiscovery.js +38 -11
- package/dist/bridgeLockDiscovery.js.map +1 -1
- package/dist/bridgeToken.js +3 -2
- package/dist/bridgeToken.js.map +1 -1
- package/dist/claudeDriver.js +23 -8
- package/dist/claudeDriver.js.map +1 -1
- package/dist/claudeOrchestrator.d.ts +1 -1
- package/dist/claudeOrchestrator.js +87 -44
- package/dist/claudeOrchestrator.js.map +1 -1
- package/dist/commands/analytics.d.ts +8 -0
- package/dist/commands/analytics.js +134 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/auditEnv.d.ts +36 -0
- package/dist/commands/auditEnv.js +202 -0
- package/dist/commands/auditEnv.js.map +1 -0
- package/dist/commands/dashboard.js +8 -1
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/doctor.d.ts +35 -0
- package/dist/commands/doctor.js +51 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/install.js +3 -0
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/launchd.js +15 -16
- package/dist/commands/launchd.js.map +1 -1
- package/dist/commands/patchworkInit.d.ts +5 -0
- package/dist/commands/patchworkInit.js +89 -7
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +110 -0
- package/dist/commands/recipe.js +512 -9
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipeInstall.js +11 -4
- package/dist/commands/recipeInstall.js.map +1 -1
- package/dist/commands/shadowScan.d.ts +34 -0
- package/dist/commands/shadowScan.js +142 -0
- package/dist/commands/shadowScan.js.map +1 -0
- package/dist/commands/task.js +2 -2
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/tools.d.ts +20 -1
- package/dist/commands/tools.js +112 -3
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/tracesImport.js +21 -4
- package/dist/commands/tracesImport.js.map +1 -1
- package/dist/commitIssueLinkLog.d.ts +16 -0
- package/dist/commitIssueLinkLog.js +110 -24
- package/dist/commitIssueLinkLog.js.map +1 -1
- package/dist/companions/registry.js +15 -7
- package/dist/companions/registry.js.map +1 -1
- package/dist/config.d.ts +47 -3
- package/dist/config.js +111 -21
- package/dist/config.js.map +1 -1
- package/dist/connectorRoutes.js +866 -57
- package/dist/connectorRoutes.js.map +1 -1
- package/dist/connectors/airtable.d.ts +230 -0
- package/dist/connectors/airtable.js +700 -0
- package/dist/connectors/airtable.js.map +1 -0
- package/dist/connectors/asana.js +13 -9
- package/dist/connectors/asana.js.map +1 -1
- package/dist/connectors/baseConnector.js +25 -3
- package/dist/connectors/baseConnector.js.map +1 -1
- package/dist/connectors/caldiy.d.ts +137 -0
- package/dist/connectors/caldiy.js +424 -0
- package/dist/connectors/caldiy.js.map +1 -0
- package/dist/connectors/circleci.d.ts +162 -0
- package/dist/connectors/circleci.js +576 -0
- package/dist/connectors/circleci.js.map +1 -0
- package/dist/connectors/cloudflare.d.ts +132 -0
- package/dist/connectors/cloudflare.js +622 -0
- package/dist/connectors/cloudflare.js.map +1 -0
- package/dist/connectors/confluence.js +35 -0
- package/dist/connectors/confluence.js.map +1 -1
- package/dist/connectors/connectorRedirectUri.d.ts +30 -0
- package/dist/connectors/connectorRedirectUri.js +38 -0
- package/dist/connectors/connectorRedirectUri.js.map +1 -0
- package/dist/connectors/connectorRegistry.d.ts +63 -0
- package/dist/connectors/connectorRegistry.js +354 -0
- package/dist/connectors/connectorRegistry.js.map +1 -0
- package/dist/connectors/datadog.js +33 -4
- package/dist/connectors/datadog.js.map +1 -1
- package/dist/connectors/discord.js +14 -10
- package/dist/connectors/discord.js.map +1 -1
- package/dist/connectors/elasticsearch.d.ts +141 -0
- package/dist/connectors/elasticsearch.js +601 -0
- package/dist/connectors/elasticsearch.js.map +1 -0
- package/dist/connectors/figma.d.ts +130 -0
- package/dist/connectors/figma.js +387 -0
- package/dist/connectors/figma.js.map +1 -0
- package/dist/connectors/github.d.ts +17 -0
- package/dist/connectors/github.js +53 -2
- package/dist/connectors/github.js.map +1 -1
- package/dist/connectors/gitlab.js +12 -6
- package/dist/connectors/gitlab.js.map +1 -1
- package/dist/connectors/gmail.js +72 -21
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleCalendar.js +8 -8
- package/dist/connectors/googleCalendar.js.map +1 -1
- package/dist/connectors/googleDocs.d.ts +103 -0
- package/dist/connectors/googleDocs.js +409 -0
- package/dist/connectors/googleDocs.js.map +1 -0
- package/dist/connectors/googleDrive.d.ts +12 -0
- package/dist/connectors/googleDrive.js +35 -8
- package/dist/connectors/googleDrive.js.map +1 -1
- package/dist/connectors/grafana.d.ts +133 -0
- package/dist/connectors/grafana.js +478 -0
- package/dist/connectors/grafana.js.map +1 -0
- package/dist/connectors/jira.d.ts +25 -0
- package/dist/connectors/jira.js +227 -1
- package/dist/connectors/jira.js.map +1 -1
- package/dist/connectors/linear.js +1 -1
- package/dist/connectors/linear.js.map +1 -1
- package/dist/connectors/mcpOAuth.js +78 -16
- package/dist/connectors/mcpOAuth.js.map +1 -1
- package/dist/connectors/monday.d.ts +217 -0
- package/dist/connectors/monday.js +655 -0
- package/dist/connectors/monday.js.map +1 -0
- package/dist/connectors/mongodb.d.ts +139 -0
- package/dist/connectors/mongodb.js +455 -0
- package/dist/connectors/mongodb.js.map +1 -0
- package/dist/connectors/oauthStateStore.d.ts +20 -0
- package/dist/connectors/oauthStateStore.js +94 -4
- package/dist/connectors/oauthStateStore.js.map +1 -1
- package/dist/connectors/obsidian.d.ts +83 -0
- package/dist/connectors/obsidian.js +441 -0
- package/dist/connectors/obsidian.js.map +1 -0
- package/dist/connectors/paystack.d.ts +159 -0
- package/dist/connectors/paystack.js +607 -0
- package/dist/connectors/paystack.js.map +1 -0
- package/dist/connectors/pipedrive.d.ts +189 -0
- package/dist/connectors/pipedrive.js +559 -0
- package/dist/connectors/pipedrive.js.map +1 -0
- package/dist/connectors/postgres.d.ts +127 -0
- package/dist/connectors/postgres.js +512 -0
- package/dist/connectors/postgres.js.map +1 -0
- package/dist/connectors/posthog.d.ts +119 -0
- package/dist/connectors/posthog.js +479 -0
- package/dist/connectors/posthog.js.map +1 -0
- package/dist/connectors/redis.d.ts +140 -0
- package/dist/connectors/redis.js +571 -0
- package/dist/connectors/redis.js.map +1 -0
- package/dist/connectors/resend.d.ts +131 -0
- package/dist/connectors/resend.js +529 -0
- package/dist/connectors/resend.js.map +1 -0
- package/dist/connectors/salesforce.d.ts +136 -0
- package/dist/connectors/salesforce.js +603 -0
- package/dist/connectors/salesforce.js.map +1 -0
- package/dist/connectors/secrets.d.ts +51 -0
- package/dist/connectors/secrets.js +102 -0
- package/dist/connectors/secrets.js.map +1 -0
- package/dist/connectors/sendgrid.d.ts +102 -0
- package/dist/connectors/sendgrid.js +423 -0
- package/dist/connectors/sendgrid.js.map +1 -0
- package/dist/connectors/shopify.d.ts +145 -0
- package/dist/connectors/shopify.js +502 -0
- package/dist/connectors/shopify.js.map +1 -0
- package/dist/connectors/slack.d.ts +1 -1
- package/dist/connectors/slack.js +61 -9
- package/dist/connectors/slack.js.map +1 -1
- package/dist/connectors/snowflake.d.ts +119 -0
- package/dist/connectors/snowflake.js +615 -0
- package/dist/connectors/snowflake.js.map +1 -0
- package/dist/connectors/supabase.d.ts +92 -0
- package/dist/connectors/supabase.js +630 -0
- package/dist/connectors/supabase.js.map +1 -0
- package/dist/connectors/todoist.d.ts +117 -0
- package/dist/connectors/todoist.js +485 -0
- package/dist/connectors/todoist.js.map +1 -0
- package/dist/connectors/tokenStorage.js +56 -14
- package/dist/connectors/tokenStorage.js.map +1 -1
- package/dist/connectors/twilio.d.ts +118 -0
- package/dist/connectors/twilio.js +475 -0
- package/dist/connectors/twilio.js.map +1 -0
- package/dist/connectors/vercel.d.ts +110 -0
- package/dist/connectors/vercel.js +479 -0
- package/dist/connectors/vercel.js.map +1 -0
- package/dist/connectors/webflow.d.ts +118 -0
- package/dist/connectors/webflow.js +393 -0
- package/dist/connectors/webflow.js.map +1 -0
- package/dist/connectors/woocommerce.d.ts +220 -0
- package/dist/connectors/woocommerce.js +464 -0
- package/dist/connectors/woocommerce.js.map +1 -0
- package/dist/crypto.js +7 -2
- package/dist/crypto.js.map +1 -1
- package/dist/decisionReplay.js +15 -6
- package/dist/decisionReplay.js.map +1 -1
- package/dist/decisionTraceLog.d.ts +28 -0
- package/dist/decisionTraceLog.js +156 -29
- package/dist/decisionTraceLog.js.map +1 -1
- package/dist/drivers/claude/api.js +5 -4
- package/dist/drivers/claude/api.js.map +1 -1
- package/dist/drivers/claude/envSanitizer.d.ts +0 -6
- package/dist/drivers/claude/envSanitizer.js +17 -2
- package/dist/drivers/claude/envSanitizer.js.map +1 -1
- package/dist/drivers/claude/streamParser.js +5 -4
- package/dist/drivers/claude/streamParser.js.map +1 -1
- package/dist/drivers/claude/subprocess.js +22 -3
- package/dist/drivers/claude/subprocess.js.map +1 -1
- package/dist/drivers/gemini/index.d.ts +22 -0
- package/dist/drivers/gemini/index.js +256 -129
- package/dist/drivers/gemini/index.js.map +1 -1
- package/dist/drivers/local/index.d.ts +17 -0
- package/dist/drivers/local/index.js +99 -0
- package/dist/drivers/local/index.js.map +1 -1
- package/dist/drivers/openai/index.js +30 -2
- package/dist/drivers/openai/index.js.map +1 -1
- package/dist/extensionClient.d.ts +37 -4
- package/dist/extensionClient.js +58 -16
- package/dist/extensionClient.js.map +1 -1
- package/dist/featureFlags.d.ts +91 -0
- package/dist/featureFlags.js +174 -3
- package/dist/featureFlags.js.map +1 -1
- package/dist/fileLock.js +21 -12
- package/dist/fileLock.js.map +1 -1
- package/dist/fileLockSync.d.ts +67 -0
- package/dist/fileLockSync.js +126 -0
- package/dist/fileLockSync.js.map +1 -0
- package/dist/fp/activityAnalytics.js +26 -12
- package/dist/fp/activityAnalytics.js.map +1 -1
- package/dist/fp/automationInterpreter.d.ts +15 -1
- package/dist/fp/automationInterpreter.js +217 -82
- package/dist/fp/automationInterpreter.js.map +1 -1
- package/dist/fp/automationProgram.d.ts +30 -0
- package/dist/fp/automationProgram.js.map +1 -1
- package/dist/fp/automationState.d.ts +24 -5
- package/dist/fp/automationState.js +56 -9
- package/dist/fp/automationState.js.map +1 -1
- package/dist/fp/automationUtils.js +1 -1
- package/dist/fp/automationUtils.js.map +1 -1
- package/dist/fp/commandDescription.js +7 -1
- package/dist/fp/commandDescription.js.map +1 -1
- package/dist/fp/extensionSnapshot.js +8 -2
- package/dist/fp/extensionSnapshot.js.map +1 -1
- package/dist/fp/interpreterContext.d.ts +66 -1
- package/dist/fp/interpreterContext.js +91 -1
- package/dist/fp/interpreterContext.js.map +1 -1
- package/dist/fp/policyParser.js +29 -1
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/fsWatchWithFallback.d.ts +36 -0
- package/dist/fsWatchWithFallback.js +128 -0
- package/dist/fsWatchWithFallback.js.map +1 -0
- package/dist/haltPushDispatch.d.ts +33 -0
- package/dist/haltPushDispatch.js +103 -0
- package/dist/haltPushDispatch.js.map +1 -0
- package/dist/httpBodyValidation.d.ts +41 -0
- package/dist/httpBodyValidation.js +45 -0
- package/dist/httpBodyValidation.js.map +1 -0
- package/dist/inboxRoutes.d.ts +22 -0
- package/dist/inboxRoutes.js +61 -1
- package/dist/inboxRoutes.js.map +1 -1
- package/dist/index.js +1053 -76
- package/dist/index.js.map +1 -1
- package/dist/installGuard.js +6 -2
- package/dist/installGuard.js.map +1 -1
- package/dist/lockfile.js +31 -4
- package/dist/lockfile.js.map +1 -1
- package/dist/oauth.d.ts +9 -0
- package/dist/oauth.js +33 -0
- package/dist/oauth.js.map +1 -1
- package/dist/oauthRoutes.d.ts +1 -1
- package/dist/oauthRoutes.js +5 -3
- package/dist/oauthRoutes.js.map +1 -1
- package/dist/orchestrator/childBridgeRegistry.js +29 -11
- package/dist/orchestrator/childBridgeRegistry.js.map +1 -1
- package/dist/patchworkConfig.d.ts +44 -1
- package/dist/patchworkConfig.js +28 -3
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/pluginLoader.js +10 -1
- package/dist/pluginLoader.js.map +1 -1
- package/dist/pluginWatcher.js +12 -14
- package/dist/pluginWatcher.js.map +1 -1
- package/dist/preToolUseHook.js +3 -2
- package/dist/preToolUseHook.js.map +1 -1
- package/dist/processTree.d.ts +34 -0
- package/dist/processTree.js +105 -0
- package/dist/processTree.js.map +1 -0
- package/dist/prompts.js +3 -3
- package/dist/prompts.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +9 -0
- package/dist/recipeOrchestration.js +341 -24
- package/dist/recipeOrchestration.js.map +1 -1
- package/dist/recipeRoutes.d.ts +58 -2
- package/dist/recipeRoutes.js +744 -115
- package/dist/recipeRoutes.js.map +1 -1
- package/dist/recipes/RecipeOrchestrator.d.ts +2 -0
- package/dist/recipes/RecipeOrchestrator.js +6 -1
- package/dist/recipes/RecipeOrchestrator.js.map +1 -1
- package/dist/recipes/agentExecutor.d.ts +25 -5
- package/dist/recipes/agentExecutor.js.map +1 -1
- package/dist/recipes/chainedRunner.d.ts +2 -0
- package/dist/recipes/chainedRunner.js +142 -5
- package/dist/recipes/chainedRunner.js.map +1 -1
- package/dist/recipes/connectorPreflight.d.ts +66 -0
- package/dist/recipes/connectorPreflight.js +169 -0
- package/dist/recipes/connectorPreflight.js.map +1 -0
- package/dist/recipes/dependencyGraph.js +13 -5
- package/dist/recipes/dependencyGraph.js.map +1 -1
- package/dist/recipes/githubInstallSource.d.ts +128 -0
- package/dist/recipes/githubInstallSource.js +206 -0
- package/dist/recipes/githubInstallSource.js.map +1 -0
- package/dist/recipes/haltCategory.d.ts +119 -0
- package/dist/recipes/haltCategory.js +188 -0
- package/dist/recipes/haltCategory.js.map +1 -0
- package/dist/recipes/idempotencyKey.d.ts +134 -0
- package/dist/recipes/idempotencyKey.js +322 -0
- package/dist/recipes/idempotencyKey.js.map +1 -0
- package/dist/recipes/installer.js +48 -2
- package/dist/recipes/installer.js.map +1 -1
- package/dist/recipes/judgeSummary.d.ts +50 -0
- package/dist/recipes/judgeSummary.js +47 -0
- package/dist/recipes/judgeSummary.js.map +1 -0
- package/dist/recipes/judgeVerdict.d.ts +48 -0
- package/dist/recipes/judgeVerdict.js +174 -0
- package/dist/recipes/judgeVerdict.js.map +1 -0
- package/dist/recipes/migrations/index.d.ts +9 -0
- package/dist/recipes/migrations/index.js +133 -0
- package/dist/recipes/migrations/index.js.map +1 -1
- package/dist/recipes/names.d.ts +20 -0
- package/dist/recipes/names.js +25 -0
- package/dist/recipes/names.js.map +1 -1
- package/dist/recipes/parser.js +88 -5
- package/dist/recipes/parser.js.map +1 -1
- package/dist/recipes/replayRun.js +1 -1
- package/dist/recipes/replayRun.js.map +1 -1
- package/dist/recipes/runBudget.d.ts +70 -0
- package/dist/recipes/runBudget.js +109 -0
- package/dist/recipes/runBudget.js.map +1 -0
- package/dist/recipes/scheduler.d.ts +30 -0
- package/dist/recipes/scheduler.js +69 -19
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schema.d.ts +36 -0
- package/dist/recipes/schemaGenerator.js +103 -5
- package/dist/recipes/schemaGenerator.js.map +1 -1
- package/dist/recipes/stepObservation.js +9 -0
- package/dist/recipes/stepObservation.js.map +1 -1
- package/dist/recipes/toolRegistry.js +20 -3
- package/dist/recipes/toolRegistry.js.map +1 -1
- package/dist/recipes/tools/fanOut.d.ts +20 -0
- package/dist/recipes/tools/fanOut.js +199 -0
- package/dist/recipes/tools/fanOut.js.map +1 -0
- package/dist/recipes/tools/file.js +5 -2
- package/dist/recipes/tools/file.js.map +1 -1
- package/dist/recipes/tools/github.d.ts +1 -1
- package/dist/recipes/tools/github.js +75 -1
- package/dist/recipes/tools/github.js.map +1 -1
- package/dist/recipes/tools/gmail.js +27 -5
- package/dist/recipes/tools/gmail.js.map +1 -1
- package/dist/recipes/tools/googleDrive.js +64 -0
- package/dist/recipes/tools/googleDrive.js.map +1 -1
- package/dist/recipes/tools/http.d.ts +10 -0
- package/dist/recipes/tools/http.js +176 -0
- package/dist/recipes/tools/http.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +2 -0
- package/dist/recipes/tools/index.js +2 -0
- package/dist/recipes/tools/index.js.map +1 -1
- package/dist/recipes/tools/slack.js +1 -1
- package/dist/recipes/validation.d.ts +17 -0
- package/dist/recipes/validation.js +29 -11
- package/dist/recipes/validation.js.map +1 -1
- package/dist/recipes/workspaceRoot.d.ts +37 -0
- package/dist/recipes/workspaceRoot.js +73 -0
- package/dist/recipes/workspaceRoot.js.map +1 -0
- package/dist/recipes/yamlPositions.d.ts +56 -0
- package/dist/recipes/yamlPositions.js +183 -0
- package/dist/recipes/yamlPositions.js.map +1 -0
- package/dist/recipes/yamlRunner.d.ts +182 -8
- package/dist/recipes/yamlRunner.js +877 -217
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +19 -3
- package/dist/recipesHttp.js +67 -11
- package/dist/recipesHttp.js.map +1 -1
- package/dist/resources.js +21 -13
- package/dist/resources.js.map +1 -1
- package/dist/runLog.d.ts +58 -5
- package/dist/runLog.js +98 -21
- package/dist/runLog.js.map +1 -1
- package/dist/sanitizeParsedJson.d.ts +39 -0
- package/dist/sanitizeParsedJson.js +55 -0
- package/dist/sanitizeParsedJson.js.map +1 -0
- package/dist/schemas/recipe.v1.json +885 -196
- package/dist/server.d.ts +160 -3
- package/dist/server.js +1099 -122
- package/dist/server.js.map +1 -1
- package/dist/sessionCheckpoint.d.ts +8 -0
- package/dist/sessionCheckpoint.js +33 -3
- package/dist/sessionCheckpoint.js.map +1 -1
- package/dist/ssrfGuard.d.ts +16 -0
- package/dist/ssrfGuard.js +87 -4
- package/dist/ssrfGuard.js.map +1 -1
- package/dist/streamableHttp.d.ts +9 -4
- package/dist/streamableHttp.js +76 -20
- package/dist/streamableHttp.js.map +1 -1
- package/dist/telemetry.js +19 -12
- package/dist/telemetry.js.map +1 -1
- package/dist/testing/shadowRun.d.ts +52 -0
- package/dist/testing/shadowRun.js +71 -0
- package/dist/testing/shadowRun.js.map +1 -0
- package/dist/tools/batchLsp.d.ts +3 -0
- package/dist/tools/bridgeDoctor.d.ts +11 -0
- package/dist/tools/bridgeDoctor.js +48 -2
- package/dist/tools/bridgeDoctor.js.map +1 -1
- package/dist/tools/bridgeStatus.d.ts +0 -12
- package/dist/tools/bridgeStatus.js +2 -28
- package/dist/tools/bridgeStatus.js.map +1 -1
- package/dist/tools/cancelClaudeTask.d.ts +1 -0
- package/dist/tools/clipboard.d.ts +2 -0
- package/dist/tools/closeTabs.d.ts +1 -0
- package/dist/tools/codeLens.d.ts +1 -0
- package/dist/tools/createIssueFromAIComment.d.ts +1 -0
- package/dist/tools/ctxGetTaskContext.d.ts +9 -0
- package/dist/tools/ctxGetTaskContext.js +50 -2
- package/dist/tools/ctxGetTaskContext.js.map +1 -1
- package/dist/tools/ctxQueryTraces.js +32 -24
- package/dist/tools/ctxQueryTraces.js.map +1 -1
- package/dist/tools/ctxSaveTrace.d.ts +1 -0
- package/dist/tools/debug.d.ts +4 -0
- package/dist/tools/decorations.d.ts +2 -0
- package/dist/tools/detectUnusedCode.js +9 -7
- package/dist/tools/detectUnusedCode.js.map +1 -1
- package/dist/tools/documentLinks.d.ts +1 -0
- package/dist/tools/editText.d.ts +1 -0
- package/dist/tools/editText.js +2 -1
- package/dist/tools/editText.js.map +1 -1
- package/dist/tools/enrichCommit.d.ts +1 -0
- package/dist/tools/enrichStackTrace.js +11 -5
- package/dist/tools/enrichStackTrace.js.map +1 -1
- package/dist/tools/explainDiagnostic.d.ts +1 -0
- package/dist/tools/explainSymbol.d.ts +1 -0
- package/dist/tools/fileOperations.d.ts +3 -0
- package/dist/tools/fileOperations.js +2 -1
- package/dist/tools/fileOperations.js.map +1 -1
- package/dist/tools/fileWatcher.d.ts +2 -0
- package/dist/tools/fileWatcher.js +8 -2
- package/dist/tools/fileWatcher.js.map +1 -1
- package/dist/tools/findFiles.d.ts +1 -0
- package/dist/tools/fixAllLintErrors.d.ts +1 -0
- package/dist/tools/fixAllLintErrors.js +10 -5
- package/dist/tools/fixAllLintErrors.js.map +1 -1
- package/dist/tools/foldingRanges.d.ts +1 -0
- package/dist/tools/formatDocument.d.ts +1 -0
- package/dist/tools/formatDocument.js +10 -5
- package/dist/tools/formatDocument.js.map +1 -1
- package/dist/tools/generateTests.d.ts +1 -0
- package/dist/tools/getAIComments.d.ts +1 -0
- package/dist/tools/getAnalyticsReport.js +5 -1
- package/dist/tools/getAnalyticsReport.js.map +1 -1
- package/dist/tools/getBufferContent.d.ts +1 -0
- package/dist/tools/getChangeImpact.d.ts +1 -0
- package/dist/tools/getChangeImpact.js +23 -14
- package/dist/tools/getChangeImpact.js.map +1 -1
- package/dist/tools/getClaudeTaskStatus.d.ts +1 -0
- package/dist/tools/getCodeCoverage.d.ts +1 -0
- package/dist/tools/getCodeCoverage.js +32 -14
- package/dist/tools/getCodeCoverage.js.map +1 -1
- package/dist/tools/getCommitsForIssue.d.ts +1 -0
- package/dist/tools/getDebugState.d.ts +1 -0
- package/dist/tools/getDiagnostics.js +32 -29
- package/dist/tools/getDiagnostics.js.map +1 -1
- package/dist/tools/getDiffFromHandoff.js +8 -2
- package/dist/tools/getDiffFromHandoff.js.map +1 -1
- package/dist/tools/getDocumentSymbols.d.ts +1 -0
- package/dist/tools/getGitHotspots.d.ts +1 -0
- package/dist/tools/getImportedSignatures.d.ts +1 -0
- package/dist/tools/getImportedSignatures.js +18 -14
- package/dist/tools/getImportedSignatures.js.map +1 -1
- package/dist/tools/getPRTemplate.d.ts +1 -0
- package/dist/tools/getProjectContext.js +23 -10
- package/dist/tools/getProjectContext.js.map +1 -1
- package/dist/tools/getSymbolHistory.d.ts +1 -0
- package/dist/tools/getToolCapabilities.d.ts +10 -5
- package/dist/tools/getToolCapabilities.js +79 -202
- package/dist/tools/getToolCapabilities.js.map +1 -1
- package/dist/tools/getTypeSignature.d.ts +1 -0
- package/dist/tools/getWorkspaceSettings.d.ts +1 -0
- package/dist/tools/gitWrite.d.ts +11 -0
- package/dist/tools/github/actions.d.ts +2 -0
- package/dist/tools/github/composite.d.ts +3 -0
- package/dist/tools/github/issues.d.ts +4 -0
- package/dist/tools/github/pr.d.ts +7 -0
- package/dist/tools/handoffNote.d.ts +1 -0
- package/dist/tools/handoffNote.js +2 -1
- package/dist/tools/handoffNote.js.map +1 -1
- package/dist/tools/headless/lspClient.js +3 -0
- package/dist/tools/headless/lspClient.js.map +1 -1
- package/dist/tools/hoverAtCursor.d.ts +1 -0
- package/dist/tools/httpClient.d.ts +2 -0
- package/dist/tools/httpClient.js +38 -71
- package/dist/tools/httpClient.js.map +1 -1
- package/dist/tools/inlayHints.d.ts +1 -0
- package/dist/tools/launchQuickTask.d.ts +1 -0
- package/dist/tools/listClaudeTasks.d.ts +1 -0
- package/dist/tools/listClaudeTasks.js +10 -8
- package/dist/tools/listClaudeTasks.js.map +1 -1
- package/dist/tools/listTerminals.d.ts +1 -0
- package/dist/tools/lsp.d.ts +15 -0
- package/dist/tools/lsp.js +17 -0
- package/dist/tools/lsp.js.map +1 -1
- package/dist/tools/navigateToSymbolByName.d.ts +1 -0
- package/dist/tools/openDiff.d.ts +1 -0
- package/dist/tools/openDiff.js +4 -1
- package/dist/tools/openDiff.js.map +1 -1
- package/dist/tools/openFile.d.ts +1 -0
- package/dist/tools/openFile.js +4 -1
- package/dist/tools/openFile.js.map +1 -1
- package/dist/tools/openInBrowser.js +6 -1
- package/dist/tools/openInBrowser.js.map +1 -1
- package/dist/tools/organizeImports.d.ts +1 -0
- package/dist/tools/organizeImports.js +5 -3
- package/dist/tools/organizeImports.js.map +1 -1
- package/dist/tools/performanceReport.js +5 -3
- package/dist/tools/performanceReport.js.map +1 -1
- package/dist/tools/planPersistence.d.ts +3 -0
- package/dist/tools/planPersistence.js +4 -1
- package/dist/tools/planPersistence.js.map +1 -1
- package/dist/tools/previewEdit.d.ts +1 -0
- package/dist/tools/previewEdit.js +15 -4
- package/dist/tools/previewEdit.js.map +1 -1
- package/dist/tools/recentTracesDigest.js +54 -11
- package/dist/tools/recentTracesDigest.js.map +1 -1
- package/dist/tools/refactorAnalyze.d.ts +1 -0
- package/dist/tools/refactorExtractFunction.js +4 -1
- package/dist/tools/refactorExtractFunction.js.map +1 -1
- package/dist/tools/refactorPreview.d.ts +1 -0
- package/dist/tools/refactorPreview.js +10 -2
- package/dist/tools/refactorPreview.js.map +1 -1
- package/dist/tools/replaceBlock.d.ts +1 -0
- package/dist/tools/replaceBlock.js +2 -1
- package/dist/tools/replaceBlock.js.map +1 -1
- package/dist/tools/resumeClaudeTask.d.ts +1 -0
- package/dist/tools/runClaudeTask.d.ts +1 -0
- package/dist/tools/runTests.js +15 -4
- package/dist/tools/runTests.js.map +1 -1
- package/dist/tools/screenshot.d.ts +1 -0
- package/dist/tools/screenshotAndAnnotate.js +6 -2
- package/dist/tools/screenshotAndAnnotate.js.map +1 -1
- package/dist/tools/searchAndReplace.d.ts +1 -0
- package/dist/tools/searchAndReplace.js +17 -7
- package/dist/tools/searchAndReplace.js.map +1 -1
- package/dist/tools/searchTools.js +20 -19
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/tools/searchWorkspace.d.ts +1 -0
- package/dist/tools/selectionRanges.d.ts +1 -0
- package/dist/tools/semanticTokens.d.ts +1 -0
- package/dist/tools/signatureHelp.d.ts +1 -0
- package/dist/tools/spawnWorkspace.js +15 -7
- package/dist/tools/spawnWorkspace.js.map +1 -1
- package/dist/tools/terminal.d.ts +6 -0
- package/dist/tools/testRunners/pytest.js +6 -2
- package/dist/tools/testRunners/pytest.js.map +1 -1
- package/dist/tools/testRunners/vitestJest.js +3 -1
- package/dist/tools/testRunners/vitestJest.js.map +1 -1
- package/dist/tools/testTraceToSource.d.ts +1 -0
- package/dist/tools/transaction.d.ts +4 -0
- package/dist/tools/transaction.js +4 -1
- package/dist/tools/transaction.js.map +1 -1
- package/dist/tools/typeHierarchy.d.ts +1 -0
- package/dist/tools/utils.d.ts +18 -0
- package/dist/tools/utils.js +103 -18
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/vscodeCommands.d.ts +2 -0
- package/dist/tools/vscodeTasks.d.ts +2 -0
- package/dist/tools/workspaceSettings.d.ts +1 -0
- package/dist/transport.d.ts +3 -1
- package/dist/transport.js +103 -52
- package/dist/transport.js.map +1 -1
- package/dist/winShim.d.ts +34 -0
- package/dist/winShim.js +94 -0
- package/dist/winShim.js.map +1 -0
- package/dist/wireHaltPushDispatch.d.ts +38 -0
- package/dist/wireHaltPushDispatch.js +71 -0
- package/dist/wireHaltPushDispatch.js.map +1 -0
- package/dist/writeFileAtomic.d.ts +23 -0
- package/dist/writeFileAtomic.js +121 -0
- package/dist/writeFileAtomic.js.map +1 -0
- package/package.json +23 -7
- package/scripts/postinstall.mjs +42 -2
- package/scripts/smoke/run-all.mjs +213 -0
- package/scripts/start-all.mjs +572 -0
- package/scripts/start-all.ps1 +209 -0
- package/scripts/start-all.sh +73 -17
- package/scripts/start-orchestrator.ps1 +158 -0
- package/scripts/start-remote.mjs +122 -0
- package/templates/automation-policies/recipe-authoring.json +1 -1
- package/templates/automation-policies/security-first.json +1 -1
- package/templates/automation-policies/strict-lint.json +1 -1
- package/templates/automation-policies/test-driven.json +1 -1
- package/templates/automation-policy.example.json +1 -1
- package/templates/co.patchwork-os.bridge.plist +2 -2
- package/templates/recipes/approval-queue-ui-test.yaml +1 -1
- package/templates/recipes/ctx-loop-test.yaml +1 -1
- package/templates/recipes/fix-errors-on-save.yaml +71 -0
- package/templates/recipes/morning-brief.yaml +5 -2
- package/templates/recipes/project-health-check.yaml +4 -1
- package/templates/recipes/sentry-to-linear.yaml +72 -38
- package/templates/recipes/webhook/apple-watch-health-log.yaml +145 -0
- package/templates/recipes/webhook/customer-escalation.yaml +8 -9
- package/templates/recipes/webhook/meeting-prep.yaml +11 -5
- package/dist/commands/marketplace.d.ts +0 -16
- package/dist/commands/marketplace.js +0 -32
- package/dist/commands/marketplace.js.map +0 -1
- package/dist/recipes/legacyRecipeCompat.d.ts +0 -10
- package/dist/recipes/legacyRecipeCompat.js +0 -131
- package/dist/recipes/legacyRecipeCompat.js.map +0 -1
package/dist/server.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { WebSocket } from "ws";
|
|
|
4
4
|
import type { ActivityListener } from "./activityTypes.js";
|
|
5
5
|
import type { Logger } from "./logger.js";
|
|
6
6
|
import type { OAuthServer } from "./oauth.js";
|
|
7
|
+
import type { LintIssue } from "./recipes/validation.js";
|
|
7
8
|
import type { RecipeDraft } from "./recipesHttp.js";
|
|
8
9
|
interface ServerEvents {
|
|
9
10
|
connection: [ws: WebSocket];
|
|
@@ -24,6 +25,7 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
24
25
|
private logger;
|
|
25
26
|
private extraCorsOrigins;
|
|
26
27
|
private pingIntervalMs;
|
|
28
|
+
private trustedProxies;
|
|
27
29
|
private httpServer;
|
|
28
30
|
private wss;
|
|
29
31
|
private pingInterval;
|
|
@@ -34,9 +36,23 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
34
36
|
private oauthServer;
|
|
35
37
|
private oauthIssuerUrl;
|
|
36
38
|
private sseSubscriberCount;
|
|
39
|
+
/**
|
|
40
|
+
* Registered SSE subscribers on `/stream`, oldest-first by insertion
|
|
41
|
+
* order. Used as a defense-in-depth backstop: if a subscriber's peer is
|
|
42
|
+
* a dead-but-not-erroring socket (e.g. an orphaned proxy connection),
|
|
43
|
+
* the ping-write cleanup can fail to fire and the subscriber leaks. To
|
|
44
|
+
* guarantee a leak can never *permanently* brick `/stream`, a new
|
|
45
|
+
* request arriving at the cap evicts the oldest subscriber instead of
|
|
46
|
+
* returning 503 — mirroring the HTTP-session eviction in ADR-0005.
|
|
47
|
+
* The real cure for the known leak is the dashboard proxy aborting its
|
|
48
|
+
* upstream fetch on client disconnect; this is the backstop.
|
|
49
|
+
*/
|
|
50
|
+
private sseSubscribers;
|
|
37
51
|
/** Cache for CC permission rules (30s TTL) to avoid filesystem walks on each dashboard poll */
|
|
38
52
|
private _explainRulesCache;
|
|
39
53
|
private static readonly MAX_SSE_SUBSCRIBERS;
|
|
54
|
+
/** Number of currently-registered `/stream` SSE subscribers. Read-only. */
|
|
55
|
+
get sseSubscribers_count(): number;
|
|
40
56
|
/** Set by bridge to provide health data */
|
|
41
57
|
healthDataFn: (() => Record<string, unknown>) | null;
|
|
42
58
|
/** Set by bridge to provide Prometheus metrics */
|
|
@@ -70,6 +86,24 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
70
86
|
error?: string;
|
|
71
87
|
unavailable?: boolean;
|
|
72
88
|
}>) | null;
|
|
89
|
+
/**
|
|
90
|
+
* Patchwork Phase 2A: repair a broken recipe YAML given the current
|
|
91
|
+
* content + structured LintIssue[] context. Driven by the same
|
|
92
|
+
* Claude-orchestrator infrastructure as `generateRecipeFn` (system
|
|
93
|
+
* prompt + sanitized user-tag wrapper + post-lint), but the user
|
|
94
|
+
* input is the user's CURRENT recipe rather than free-text — gated
|
|
95
|
+
* behind the `recipe.repair-ai` feature flag.
|
|
96
|
+
*/
|
|
97
|
+
repairRecipeFn: ((args: {
|
|
98
|
+
currentYaml: string;
|
|
99
|
+
lintIssues: LintIssue[];
|
|
100
|
+
}) => Promise<{
|
|
101
|
+
ok: boolean;
|
|
102
|
+
yaml?: string;
|
|
103
|
+
warnings?: string[];
|
|
104
|
+
error?: string;
|
|
105
|
+
unavailable?: boolean;
|
|
106
|
+
}>) | null;
|
|
73
107
|
/** Patchwork: set by bridge to list installed recipes for the dashboard. */
|
|
74
108
|
recipesFn: (() => Record<string, unknown>) | null;
|
|
75
109
|
/** Patchwork: set by bridge to load raw recipe source content by name. */
|
|
@@ -115,8 +149,8 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
115
149
|
/** Patchwork: set by bridge to lint raw recipe content without saving. */
|
|
116
150
|
lintRecipeContentFn: ((content: string) => {
|
|
117
151
|
ok: boolean;
|
|
118
|
-
errors:
|
|
119
|
-
warnings:
|
|
152
|
+
errors: LintIssue[];
|
|
153
|
+
warnings: LintIssue[];
|
|
120
154
|
}) | null;
|
|
121
155
|
/** Patchwork: set by bridge to save a new recipe draft to disk. */
|
|
122
156
|
saveRecipeFn: ((draft: RecipeDraft) => {
|
|
@@ -131,9 +165,22 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
131
165
|
status?: string;
|
|
132
166
|
recipe?: string;
|
|
133
167
|
after?: number;
|
|
168
|
+
manualRunId?: string;
|
|
134
169
|
}) => Record<string, unknown>[]) | null;
|
|
135
170
|
/** Patchwork: set by bridge to fetch a single run by seq for the detail page. */
|
|
136
171
|
runDetailFn: ((seq: number) => Record<string, unknown> | null) | null;
|
|
172
|
+
/** Patchwork (PR1c): aggregate halt-reason categories across recent runs. */
|
|
173
|
+
haltSummaryFn: ((opts?: {
|
|
174
|
+
sinceMs?: number;
|
|
175
|
+
limit?: number;
|
|
176
|
+
recipe?: string;
|
|
177
|
+
}) => import("./recipes/haltCategory.js").HaltSummary) | null;
|
|
178
|
+
/** Patchwork (PR3b): aggregate judge-step verdicts across recent runs. */
|
|
179
|
+
judgeSummaryFn: ((opts?: {
|
|
180
|
+
sinceMs?: number;
|
|
181
|
+
limit?: number;
|
|
182
|
+
recipe?: string;
|
|
183
|
+
}) => import("./recipes/judgeSummary.js").JudgeSummary) | null;
|
|
137
184
|
/** Patchwork: set by bridge to generate a dry-run plan for a recipe by name. */
|
|
138
185
|
runPlanFn: ((recipeName: string) => Promise<Record<string, unknown>>) | null;
|
|
139
186
|
/** Patchwork (VD-4): mocked replay of an existing run. Returns the new
|
|
@@ -150,10 +197,25 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
150
197
|
taskId?: string;
|
|
151
198
|
error?: string;
|
|
152
199
|
}>) | null;
|
|
200
|
+
/**
|
|
201
|
+
* Patchwork: set by bridge to re-prime the recipe scheduler when the
|
|
202
|
+
* on-disk recipe set changes (install / save / delete). Lets cron-
|
|
203
|
+
* triggered recipes start firing without a bridge restart. Optional —
|
|
204
|
+
* tests + headless tooling leave it null; the install handler treats
|
|
205
|
+
* the callback as best-effort fire-and-forget.
|
|
206
|
+
*/
|
|
207
|
+
onRecipesChangedFn: (() => void) | null;
|
|
153
208
|
/** Patchwork: admin-controlled managed settings path (highest rule precedence). */
|
|
154
209
|
managedSettingsPath: string | undefined;
|
|
155
210
|
/** Effective bridge config path to update when dashboard saves driver changes. */
|
|
156
211
|
bridgeConfigPath: string | undefined;
|
|
212
|
+
/**
|
|
213
|
+
* Shared secret for HMAC-SHA256 verification of POST /hooks/* requests
|
|
214
|
+
* carrying `X-Hub-Signature-256`. When null (default), HMAC auth is
|
|
215
|
+
* disabled and /hooks/* requires the bridge bearer token like every
|
|
216
|
+
* other route. Set by Bridge constructor from `config.webhookSecret`.
|
|
217
|
+
*/
|
|
218
|
+
webhookSecret: string | null;
|
|
157
219
|
/** Patchwork: live approval gate level — mutated by POST /settings, read by bridge per-session setup. */
|
|
158
220
|
approvalGate: "off" | "high" | "all";
|
|
159
221
|
/** Patchwork: outbound webhook URL for approval notifications (from dashboard.webhookUrl in config). */
|
|
@@ -164,6 +226,10 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
164
226
|
pushServiceToken: string | undefined;
|
|
165
227
|
/** Patchwork: public base URL of this bridge, embedded in push payloads as callback base. */
|
|
166
228
|
pushServiceBaseUrl: string | undefined;
|
|
229
|
+
/** Patchwork: ntfy.sh topic for direct phone-path approvals via action buttons. */
|
|
230
|
+
ntfyTopic: string | undefined;
|
|
231
|
+
/** Patchwork: ntfy server (default https://ntfy.sh; override for self-hosted). */
|
|
232
|
+
ntfyServer: string | undefined;
|
|
167
233
|
/** Patchwork: approval decision audit callback wired to activityLog.recordEvent. */
|
|
168
234
|
onApprovalDecision: ((event: string, meta: Record<string, unknown>) => void) | undefined;
|
|
169
235
|
/**
|
|
@@ -186,6 +252,37 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
186
252
|
* the user's preference.
|
|
187
253
|
*/
|
|
188
254
|
enableTimeOfDayAnomaly: boolean;
|
|
255
|
+
/**
|
|
256
|
+
* Patchwork: set by bridge to record a kill-switch audit trace.
|
|
257
|
+
* `/kill-switch` POST emits one entry on every state transition (no-op
|
|
258
|
+
* toggles do not emit). When unset, the handler logs via this.logger
|
|
259
|
+
* instead — see step 5 of issue #422.
|
|
260
|
+
*
|
|
261
|
+
* Trace encoding (v2-I6 from #422): we encode kill-switch events via
|
|
262
|
+
* the existing `DecisionTrace` schema rather than extending its
|
|
263
|
+
* `traceType` union, to keep schema migration off the kill-switch
|
|
264
|
+
* critical path. Fields used:
|
|
265
|
+
* ref = "kill-switch.writes"
|
|
266
|
+
* problem = "<short reason>" or "engage" / "release" if no reason
|
|
267
|
+
* solution = "ENGAGED at <ts>" or "RELEASED at <ts>"
|
|
268
|
+
* tags = ["kill-switch", "engage" | "release", "actor:http"]
|
|
269
|
+
*
|
|
270
|
+
* `ctxQueryTraces({tag: "kill-switch"})` returns the full audit
|
|
271
|
+
* history; pair with `tag: "engage"` / `tag: "release"` to filter
|
|
272
|
+
* direction.
|
|
273
|
+
*/
|
|
274
|
+
recordKillSwitchTraceFn: ((event: {
|
|
275
|
+
engaged: boolean;
|
|
276
|
+
reason: string | undefined;
|
|
277
|
+
ts: number;
|
|
278
|
+
}) => void) | null;
|
|
279
|
+
/**
|
|
280
|
+
* Set by bridge to broadcast a `kind: "kill-switch"` SSE event from
|
|
281
|
+
* `/stream` when the kill-switch state changes (issue #422 v2, pitfall I8).
|
|
282
|
+
* Bridge wires this to `activityLog.broadcastKillSwitch()` or an equivalent
|
|
283
|
+
* that notifies all active SSE listeners so the dashboard updates in <1s.
|
|
284
|
+
*/
|
|
285
|
+
broadcastKillSwitchEventFn: ((engaged: boolean, reason?: string) => void) | null;
|
|
189
286
|
/** Patchwork: set by bridge to match + fire webhook-triggered recipes. */
|
|
190
287
|
webhookFn: ((path: string, payload: unknown) => Promise<{
|
|
191
288
|
ok: boolean;
|
|
@@ -210,6 +307,36 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
210
307
|
recipeName?: string;
|
|
211
308
|
}[]>;
|
|
212
309
|
static readonly MAX_WEBHOOK_PAYLOADS = 5;
|
|
310
|
+
/**
|
|
311
|
+
* Per-list FIFO bounds the per-recipe payload count, but the Map itself
|
|
312
|
+
* needs a key cap so a recipe-rename loop or a scanner hitting many
|
|
313
|
+
* distinct legitimate hookPaths can't grow `webhookPayloads.size`
|
|
314
|
+
* without bound. 1000 is generous for any realistic operator deployment
|
|
315
|
+
* (5 payloads × 1000 recipes = ~5000 entries × ~10 KB each = 50 MB).
|
|
316
|
+
* On overflow, evict the oldest *recipe* (Map iteration order is
|
|
317
|
+
* insertion order in JS), not the largest list.
|
|
318
|
+
*/
|
|
319
|
+
static readonly MAX_WEBHOOK_RECIPES = 1000;
|
|
320
|
+
/**
|
|
321
|
+
* Per-IP rate limit on the unauthenticated phone-path approval endpoints
|
|
322
|
+
* (`POST /approve/:callId` and `POST /reject/:callId` when
|
|
323
|
+
* `x-approval-token` is present). The auth gate intentionally bypasses
|
|
324
|
+
* bearer auth for those paths so a phone can dispatch without a bridge
|
|
325
|
+
* token; without rate limiting, an attacker who learns a callId (via
|
|
326
|
+
* webhook target leak, bearer-authed `/approvals` reader, etc.) can
|
|
327
|
+
* spray garbage tokens to DoS the legitimate approver. PR #380 bumped
|
|
328
|
+
* the per-callId failure cap to 1000 (memory bound, not security
|
|
329
|
+
* bound); this is the HTTP-layer spray defense flagged as the proper
|
|
330
|
+
* fix in that commit.
|
|
331
|
+
*
|
|
332
|
+
* 60 attempts per IP per minute is generous for legitimate retries
|
|
333
|
+
* (phone re-tap, network flake) and tight enough to bound brute-force
|
|
334
|
+
* attempts during the 5-minute approval TTL to 300 — well within the
|
|
335
|
+
* per-callId cap, so no legit retry budget is consumed by sprayers.
|
|
336
|
+
*/
|
|
337
|
+
private readonly approvalIpCounts;
|
|
338
|
+
static readonly APPROVAL_IP_MAX = 60;
|
|
339
|
+
static readonly APPROVAL_IP_WINDOW_MS = 60000;
|
|
213
340
|
/** Set by bridge to handle MCP Streamable HTTP sessions (POST/GET/DELETE /mcp) */
|
|
214
341
|
httpMcpHandler: ((req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>) | null;
|
|
215
342
|
/** Set by bridge to subscribe a caller to real-time activity events. Returns unsubscribe fn. */
|
|
@@ -261,6 +388,26 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
261
388
|
ok: boolean;
|
|
262
389
|
error?: string;
|
|
263
390
|
}) | null;
|
|
391
|
+
/** Set by bridge to check if restart is safe (no in-flight tool calls). */
|
|
392
|
+
restartCheckFn: (() => {
|
|
393
|
+
totalSessions: number;
|
|
394
|
+
inFlightCalls: number;
|
|
395
|
+
busySessions: string[];
|
|
396
|
+
}) | null;
|
|
397
|
+
/**
|
|
398
|
+
* Called when /restart decides it is safe to shut down. Defaults to
|
|
399
|
+
* `process.kill(process.pid, 'SIGTERM')`. Override in tests to a no-op so
|
|
400
|
+
* the Vitest runner process is not actually killed.
|
|
401
|
+
*/
|
|
402
|
+
restartKillFn: () => void;
|
|
403
|
+
/**
|
|
404
|
+
* Called when /shutdown decides it is safe to exit. Defaults to
|
|
405
|
+
* `process.kill(process.pid, 'SIGTERM')`. Bridge overrides this to run its
|
|
406
|
+
* internal shutdown sequence directly — necessary on Windows where
|
|
407
|
+
* `process.kill(pid, 'SIGTERM')` is TerminateProcess and cleanup handlers
|
|
408
|
+
* never fire.
|
|
409
|
+
*/
|
|
410
|
+
shutdownFn: () => void;
|
|
264
411
|
/**
|
|
265
412
|
* Attach an OAuth 2.0 Authorization Server.
|
|
266
413
|
* When set, the bridge exposes:
|
|
@@ -274,7 +421,17 @@ export declare class Server extends EventEmitter<ServerEvents> {
|
|
|
274
421
|
setOAuthServer(oauth: OAuthServer, issuerUrl: string): void;
|
|
275
422
|
/** Hosts accepted in the WebSocket upgrade Host header (DNS-rebinding guard). */
|
|
276
423
|
private readonly allowedHosts;
|
|
277
|
-
constructor(authToken: string, logger: Logger, extraCorsOrigins?: string[], pingIntervalMs?: number);
|
|
424
|
+
constructor(authToken: string, logger: Logger, extraCorsOrigins?: string[], pingIntervalMs?: number, trustedProxies?: string[]);
|
|
425
|
+
/**
|
|
426
|
+
* Resolve the client IP for rate-limit bucketing on the phone-path
|
|
427
|
+
* approval bypass. Default: the direct socket peer. When trustedProxies
|
|
428
|
+
* is set AND the socket peer is one of them, the rightmost X-Forwarded-For
|
|
429
|
+
* entry not in the trusted list is the real client. XFF from an untrusted
|
|
430
|
+
* peer is ignored — that header is spoofable by anyone who can reach the
|
|
431
|
+
* server directly. Returns null when no IP can be determined; the caller
|
|
432
|
+
* should fail closed.
|
|
433
|
+
*/
|
|
434
|
+
private getClientIp;
|
|
278
435
|
listen(port: number, bindAddress?: string): Promise<number>;
|
|
279
436
|
findAndListen(preferredPort: number | null, bindAddress?: string): Promise<number>;
|
|
280
437
|
close(): Promise<void>;
|