patchwork-os 0.2.0-alpha.9 → 0.2.0-beta.0
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 +6 -0
- package/README.md +315 -35
- package/deploy/bootstrap-new-vps.sh +12 -12
- package/deploy/bootstrap-vps.sh +187 -0
- package/deploy/deploy-dashboard.sh +174 -0
- package/deploy/deploy-landing.sh +136 -0
- package/dist/activationMetrics.d.ts +67 -0
- package/dist/activationMetrics.js +255 -0
- package/dist/activationMetrics.js.map +1 -0
- package/dist/activityLog.d.ts +49 -0
- package/dist/activityLog.js +78 -0
- package/dist/activityLog.js.map +1 -1
- package/dist/approvalHttp.d.ts +49 -2
- package/dist/approvalHttp.js +217 -21
- package/dist/approvalHttp.js.map +1 -1
- package/dist/approvalInsights.d.ts +49 -0
- package/dist/approvalInsights.js +97 -0
- package/dist/approvalInsights.js.map +1 -0
- package/dist/approvalQueue.d.ts +27 -1
- package/dist/approvalQueue.js +123 -3
- package/dist/approvalQueue.js.map +1 -1
- package/dist/approvalSignals.d.ts +124 -0
- package/dist/approvalSignals.js +512 -0
- package/dist/approvalSignals.js.map +1 -0
- package/dist/automation.d.ts +57 -0
- package/dist/automation.js +156 -59
- package/dist/automation.js.map +1 -1
- package/dist/automationSuggestions.d.ts +79 -0
- package/dist/automationSuggestions.js +150 -0
- package/dist/automationSuggestions.js.map +1 -0
- package/dist/bridge.d.ts +3 -0
- package/dist/bridge.js +174 -143
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeToken.js +57 -19
- package/dist/bridgeToken.js.map +1 -1
- package/dist/ccPermissions.d.ts +15 -0
- package/dist/ccPermissions.js +21 -4
- package/dist/ccPermissions.js.map +1 -1
- package/dist/claudeDriver.js +74 -16
- package/dist/claudeDriver.js.map +1 -1
- package/dist/claudeOrchestrator.d.ts +1 -1
- package/dist/claudeOrchestrator.js +14 -8
- package/dist/claudeOrchestrator.js.map +1 -1
- package/dist/commands/dashboard.js +1 -1
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/launchd.d.ts +2 -0
- package/dist/commands/launchd.js +94 -0
- package/dist/commands/launchd.js.map +1 -0
- package/dist/commands/patchworkInit.d.ts +8 -0
- package/dist/commands/patchworkInit.js +77 -11
- package/dist/commands/patchworkInit.js.map +1 -1
- package/dist/commands/recipe.d.ts +289 -0
- package/dist/commands/recipe.js +1359 -0
- package/dist/commands/recipe.js.map +1 -0
- package/dist/commands/recipeInstall.d.ts +150 -0
- package/dist/commands/recipeInstall.js +647 -0
- package/dist/commands/recipeInstall.js.map +1 -0
- package/dist/commands/tracesExport.d.ts +83 -0
- package/dist/commands/tracesExport.js +269 -0
- package/dist/commands/tracesExport.js.map +1 -0
- package/dist/commands/tracesImport.d.ts +56 -0
- package/dist/commands/tracesImport.js +161 -0
- package/dist/commands/tracesImport.js.map +1 -0
- package/dist/config.d.ts +22 -1
- package/dist/config.js +108 -9
- package/dist/config.js.map +1 -1
- package/dist/connectorRoutes.d.ts +43 -0
- package/dist/connectorRoutes.js +1609 -0
- package/dist/connectorRoutes.js.map +1 -0
- package/dist/connectors/asana.d.ts +198 -0
- package/dist/connectors/asana.js +679 -0
- package/dist/connectors/asana.js.map +1 -0
- package/dist/connectors/baseConnector.d.ts +153 -0
- package/dist/connectors/baseConnector.js +336 -0
- package/dist/connectors/baseConnector.js.map +1 -0
- package/dist/connectors/confluence.d.ts +111 -0
- package/dist/connectors/confluence.js +406 -0
- package/dist/connectors/confluence.js.map +1 -0
- package/dist/connectors/datadog.d.ts +116 -0
- package/dist/connectors/datadog.js +385 -0
- package/dist/connectors/datadog.js.map +1 -0
- package/dist/connectors/discord.d.ts +150 -0
- package/dist/connectors/discord.js +543 -0
- package/dist/connectors/discord.js.map +1 -0
- package/dist/connectors/fixtureLibrary.d.ts +21 -0
- package/dist/connectors/fixtureLibrary.js +70 -0
- package/dist/connectors/fixtureLibrary.js.map +1 -0
- package/dist/connectors/fixtureRecorder.d.ts +1 -0
- package/dist/connectors/fixtureRecorder.js +35 -0
- package/dist/connectors/fixtureRecorder.js.map +1 -0
- package/dist/connectors/github.js +17 -18
- package/dist/connectors/github.js.map +1 -1
- package/dist/connectors/gitlab.d.ts +180 -0
- package/dist/connectors/gitlab.js +582 -0
- package/dist/connectors/gitlab.js.map +1 -0
- package/dist/connectors/gmail.d.ts +4 -1
- package/dist/connectors/gmail.js +149 -27
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleCalendar.d.ts +4 -1
- package/dist/connectors/googleCalendar.js +88 -25
- package/dist/connectors/googleCalendar.js.map +1 -1
- package/dist/connectors/googleDrive.d.ts +34 -0
- package/dist/connectors/googleDrive.js +321 -0
- package/dist/connectors/googleDrive.js.map +1 -0
- package/dist/connectors/htmlEscape.d.ts +5 -0
- package/dist/connectors/htmlEscape.js +13 -0
- package/dist/connectors/htmlEscape.js.map +1 -0
- package/dist/connectors/hubspot.d.ts +112 -0
- package/dist/connectors/hubspot.js +408 -0
- package/dist/connectors/hubspot.js.map +1 -0
- package/dist/connectors/intercom.d.ts +102 -0
- package/dist/connectors/intercom.js +402 -0
- package/dist/connectors/intercom.js.map +1 -0
- package/dist/connectors/jira.d.ts +98 -0
- package/dist/connectors/jira.js +379 -0
- package/dist/connectors/jira.js.map +1 -0
- package/dist/connectors/linear.js +30 -19
- package/dist/connectors/linear.js.map +1 -1
- package/dist/connectors/mcpOAuth.d.ts +3 -0
- package/dist/connectors/mcpOAuth.js +64 -10
- package/dist/connectors/mcpOAuth.js.map +1 -1
- package/dist/connectors/mockConnector.d.ts +28 -0
- package/dist/connectors/mockConnector.js +81 -0
- package/dist/connectors/mockConnector.js.map +1 -0
- package/dist/connectors/notion.d.ts +143 -0
- package/dist/connectors/notion.js +424 -0
- package/dist/connectors/notion.js.map +1 -0
- package/dist/connectors/oauthStateStore.d.ts +31 -0
- package/dist/connectors/oauthStateStore.js +52 -0
- package/dist/connectors/oauthStateStore.js.map +1 -0
- package/dist/connectors/pagerduty.d.ts +160 -0
- package/dist/connectors/pagerduty.js +464 -0
- package/dist/connectors/pagerduty.js.map +1 -0
- package/dist/connectors/sentry.js +5 -13
- package/dist/connectors/sentry.js.map +1 -1
- package/dist/connectors/slack.d.ts +16 -1
- package/dist/connectors/slack.js +155 -32
- package/dist/connectors/slack.js.map +1 -1
- package/dist/connectors/stripe.d.ts +116 -0
- package/dist/connectors/stripe.js +379 -0
- package/dist/connectors/stripe.js.map +1 -0
- package/dist/connectors/tokenStorage.d.ts +35 -0
- package/dist/connectors/tokenStorage.js +484 -0
- package/dist/connectors/tokenStorage.js.map +1 -0
- package/dist/connectors/zendesk.d.ts +104 -0
- package/dist/connectors/zendesk.js +442 -0
- package/dist/connectors/zendesk.js.map +1 -0
- package/dist/cors.d.ts +10 -0
- package/dist/cors.js +29 -0
- package/dist/cors.js.map +1 -0
- package/dist/decisionReplay.d.ts +72 -0
- package/dist/decisionReplay.js +92 -0
- package/dist/decisionReplay.js.map +1 -0
- package/dist/decisionTraceLog.d.ts +6 -0
- package/dist/decisionTraceLog.js +54 -2
- package/dist/decisionTraceLog.js.map +1 -1
- package/dist/drivers/gemini/index.d.ts +5 -1
- package/dist/drivers/gemini/index.js +39 -5
- package/dist/drivers/gemini/index.js.map +1 -1
- package/dist/drivers/index.d.ts +5 -0
- package/dist/drivers/index.js +1 -1
- package/dist/drivers/index.js.map +1 -1
- package/dist/featureFlags.d.ts +79 -0
- package/dist/featureFlags.js +208 -0
- package/dist/featureFlags.js.map +1 -0
- package/dist/fp/automationInterpreter.js +26 -21
- package/dist/fp/automationInterpreter.js.map +1 -1
- package/dist/fp/automationProgram.d.ts +1 -1
- package/dist/fp/automationProgram.js.map +1 -1
- package/dist/fp/automationState.js +4 -1
- package/dist/fp/automationState.js.map +1 -1
- package/dist/fp/policyParser.js +21 -1
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/inboxRoutes.d.ts +22 -0
- package/dist/inboxRoutes.js +114 -0
- package/dist/inboxRoutes.js.map +1 -0
- package/dist/index.js +1400 -201
- package/dist/index.js.map +1 -1
- package/dist/installGuard.d.ts +25 -0
- package/dist/installGuard.js +48 -0
- package/dist/installGuard.js.map +1 -0
- package/dist/mcpRoutes.d.ts +37 -0
- package/dist/mcpRoutes.js +76 -0
- package/dist/mcpRoutes.js.map +1 -0
- package/dist/oauth.d.ts +7 -1
- package/dist/oauth.js +201 -39
- package/dist/oauth.js.map +1 -1
- package/dist/oauthRoutes.d.ts +32 -0
- package/dist/oauthRoutes.js +124 -0
- package/dist/oauthRoutes.js.map +1 -0
- package/dist/orchestrator/orchestratorBridge.js +2 -2
- package/dist/orchestrator/orchestratorBridge.js.map +1 -1
- package/dist/patchworkConfig.d.ts +16 -0
- package/dist/patchworkConfig.js +1 -1
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/pluginLoader.d.ts +28 -0
- package/dist/pluginLoader.js +77 -11
- package/dist/pluginLoader.js.map +1 -1
- package/dist/pluginWatcher.js +8 -3
- package/dist/pluginWatcher.js.map +1 -1
- package/dist/preToolUseHook.d.ts +12 -0
- package/dist/preToolUseHook.js +23 -0
- package/dist/preToolUseHook.js.map +1 -1
- package/dist/recipeOrchestration.d.ts +121 -0
- package/dist/recipeOrchestration.js +955 -0
- package/dist/recipeOrchestration.js.map +1 -0
- package/dist/recipeRoutes.d.ts +180 -0
- package/dist/recipeRoutes.js +1345 -0
- package/dist/recipeRoutes.js.map +1 -0
- package/dist/recipes/RecipeOrchestrator.d.ts +40 -0
- package/dist/recipes/RecipeOrchestrator.js +51 -0
- package/dist/recipes/RecipeOrchestrator.js.map +1 -0
- package/dist/recipes/agentExecutor.d.ts +29 -0
- package/dist/recipes/agentExecutor.js +49 -0
- package/dist/recipes/agentExecutor.js.map +1 -0
- package/dist/recipes/chainedRunner.d.ts +191 -0
- package/dist/recipes/chainedRunner.js +759 -0
- package/dist/recipes/chainedRunner.js.map +1 -0
- package/dist/recipes/compiler.js +3 -3
- package/dist/recipes/compiler.js.map +1 -1
- package/dist/recipes/dependencyGraph.d.ts +39 -0
- package/dist/recipes/dependencyGraph.js +199 -0
- package/dist/recipes/dependencyGraph.js.map +1 -0
- package/dist/recipes/disabledMarkers.d.ts +48 -0
- package/dist/recipes/disabledMarkers.js +52 -0
- package/dist/recipes/disabledMarkers.js.map +1 -0
- package/dist/recipes/installer.js +3 -3
- package/dist/recipes/installer.js.map +1 -1
- package/dist/recipes/legacyRecipeCompat.d.ts +10 -0
- package/dist/recipes/legacyRecipeCompat.js +131 -0
- package/dist/recipes/legacyRecipeCompat.js.map +1 -0
- package/dist/recipes/manifest.d.ts +47 -0
- package/dist/recipes/manifest.js +156 -0
- package/dist/recipes/manifest.js.map +1 -0
- package/dist/recipes/migrationWarnings.d.ts +12 -0
- package/dist/recipes/migrationWarnings.js +44 -0
- package/dist/recipes/migrationWarnings.js.map +1 -0
- package/dist/recipes/migrations/index.d.ts +24 -0
- package/dist/recipes/migrations/index.js +55 -0
- package/dist/recipes/migrations/index.js.map +1 -0
- package/dist/recipes/migrations/types.d.ts +28 -0
- package/dist/recipes/migrations/types.js +2 -0
- package/dist/recipes/migrations/types.js.map +1 -0
- package/dist/recipes/migrations/v1.d.ts +11 -0
- package/dist/recipes/migrations/v1.js +18 -0
- package/dist/recipes/migrations/v1.js.map +1 -0
- package/dist/recipes/names.d.ts +40 -0
- package/dist/recipes/names.js +66 -0
- package/dist/recipes/names.js.map +1 -0
- package/dist/recipes/nestedRecipeStep.d.ts +58 -0
- package/dist/recipes/nestedRecipeStep.js +95 -0
- package/dist/recipes/nestedRecipeStep.js.map +1 -0
- package/dist/recipes/outputRegistry.d.ts +28 -0
- package/dist/recipes/outputRegistry.js +52 -0
- package/dist/recipes/outputRegistry.js.map +1 -0
- package/dist/recipes/parser.js +4 -1
- package/dist/recipes/parser.js.map +1 -1
- package/dist/recipes/replayRun.d.ts +62 -0
- package/dist/recipes/replayRun.js +97 -0
- package/dist/recipes/replayRun.js.map +1 -0
- package/dist/recipes/resolveRecipePath.d.ts +69 -0
- package/dist/recipes/resolveRecipePath.js +202 -0
- package/dist/recipes/resolveRecipePath.js.map +1 -0
- package/dist/recipes/scheduler.d.ts +23 -7
- package/dist/recipes/scheduler.js +225 -45
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schema.d.ts +17 -2
- package/dist/recipes/schemaGenerator.d.ts +28 -0
- package/dist/recipes/schemaGenerator.js +565 -0
- package/dist/recipes/schemaGenerator.js.map +1 -0
- package/dist/recipes/stepObservation.d.ts +44 -0
- package/dist/recipes/stepObservation.js +232 -0
- package/dist/recipes/stepObservation.js.map +1 -0
- package/dist/recipes/templateEngine.d.ts +62 -0
- package/dist/recipes/templateEngine.js +201 -0
- package/dist/recipes/templateEngine.js.map +1 -0
- package/dist/recipes/toolRegistry.d.ts +186 -0
- package/dist/recipes/toolRegistry.js +309 -0
- package/dist/recipes/toolRegistry.js.map +1 -0
- package/dist/recipes/tools/asana.d.ts +16 -0
- package/dist/recipes/tools/asana.js +524 -0
- package/dist/recipes/tools/asana.js.map +1 -0
- package/dist/recipes/tools/calendar.d.ts +6 -0
- package/dist/recipes/tools/calendar.js +61 -0
- package/dist/recipes/tools/calendar.js.map +1 -0
- package/dist/recipes/tools/confluence.d.ts +6 -0
- package/dist/recipes/tools/confluence.js +254 -0
- package/dist/recipes/tools/confluence.js.map +1 -0
- package/dist/recipes/tools/datadog.d.ts +6 -0
- package/dist/recipes/tools/datadog.js +239 -0
- package/dist/recipes/tools/datadog.js.map +1 -0
- package/dist/recipes/tools/diagnostics.d.ts +6 -0
- package/dist/recipes/tools/diagnostics.js +36 -0
- package/dist/recipes/tools/diagnostics.js.map +1 -0
- package/dist/recipes/tools/discord.d.ts +18 -0
- package/dist/recipes/tools/discord.js +254 -0
- package/dist/recipes/tools/discord.js.map +1 -0
- package/dist/recipes/tools/file.d.ts +12 -0
- package/dist/recipes/tools/file.js +174 -0
- package/dist/recipes/tools/file.js.map +1 -0
- package/dist/recipes/tools/git.d.ts +6 -0
- package/dist/recipes/tools/git.js +63 -0
- package/dist/recipes/tools/git.js.map +1 -0
- package/dist/recipes/tools/github.d.ts +6 -0
- package/dist/recipes/tools/github.js +116 -0
- package/dist/recipes/tools/github.js.map +1 -0
- package/dist/recipes/tools/gitlab.d.ts +11 -0
- package/dist/recipes/tools/gitlab.js +285 -0
- package/dist/recipes/tools/gitlab.js.map +1 -0
- package/dist/recipes/tools/gmail.d.ts +6 -0
- package/dist/recipes/tools/gmail.js +434 -0
- package/dist/recipes/tools/gmail.js.map +1 -0
- package/dist/recipes/tools/googleDrive.d.ts +1 -0
- package/dist/recipes/tools/googleDrive.js +55 -0
- package/dist/recipes/tools/googleDrive.js.map +1 -0
- package/dist/recipes/tools/hubspot.d.ts +6 -0
- package/dist/recipes/tools/hubspot.js +232 -0
- package/dist/recipes/tools/hubspot.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +30 -0
- package/dist/recipes/tools/index.js +33 -0
- package/dist/recipes/tools/index.js.map +1 -0
- package/dist/recipes/tools/intercom.d.ts +6 -0
- package/dist/recipes/tools/intercom.js +226 -0
- package/dist/recipes/tools/intercom.js.map +1 -0
- package/dist/recipes/tools/jira.d.ts +14 -0
- package/dist/recipes/tools/jira.js +369 -0
- package/dist/recipes/tools/jira.js.map +1 -0
- package/dist/recipes/tools/linear.d.ts +7 -0
- package/dist/recipes/tools/linear.js +307 -0
- package/dist/recipes/tools/linear.js.map +1 -0
- package/dist/recipes/tools/meetingNotes.d.ts +21 -0
- package/dist/recipes/tools/meetingNotes.js +701 -0
- package/dist/recipes/tools/meetingNotes.js.map +1 -0
- package/dist/recipes/tools/notion.d.ts +6 -0
- package/dist/recipes/tools/notion.js +278 -0
- package/dist/recipes/tools/notion.js.map +1 -0
- package/dist/recipes/tools/pagerduty.d.ts +15 -0
- package/dist/recipes/tools/pagerduty.js +451 -0
- package/dist/recipes/tools/pagerduty.js.map +1 -0
- package/dist/recipes/tools/sentry.d.ts +12 -0
- package/dist/recipes/tools/sentry.js +73 -0
- package/dist/recipes/tools/sentry.js.map +1 -0
- package/dist/recipes/tools/slack.d.ts +6 -0
- package/dist/recipes/tools/slack.js +82 -0
- package/dist/recipes/tools/slack.js.map +1 -0
- package/dist/recipes/tools/stripe.d.ts +6 -0
- package/dist/recipes/tools/stripe.js +265 -0
- package/dist/recipes/tools/stripe.js.map +1 -0
- package/dist/recipes/tools/zendesk.d.ts +6 -0
- package/dist/recipes/tools/zendesk.js +245 -0
- package/dist/recipes/tools/zendesk.js.map +1 -0
- package/dist/recipes/validation.d.ts +13 -0
- package/dist/recipes/validation.js +617 -0
- package/dist/recipes/validation.js.map +1 -0
- package/dist/recipes/yamlRunner.d.ts +116 -1
- package/dist/recipes/yamlRunner.js +1000 -401
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +137 -6
- package/dist/recipesHttp.js +941 -29
- package/dist/recipesHttp.js.map +1 -1
- package/dist/riskTier.js +7 -1
- package/dist/riskTier.js.map +1 -1
- package/dist/runLog.d.ts +100 -1
- package/dist/runLog.js +258 -5
- package/dist/runLog.js.map +1 -1
- package/dist/schemas/dry-run-plan.v1.json +139 -0
- package/dist/schemas/recipe.v1.json +684 -0
- package/dist/server.d.ts +121 -8
- package/dist/server.js +538 -735
- package/dist/server.js.map +1 -1
- package/dist/ssrfGuard.d.ts +54 -0
- package/dist/ssrfGuard.js +122 -0
- package/dist/ssrfGuard.js.map +1 -0
- package/dist/streamableHttp.d.ts +39 -1
- package/dist/streamableHttp.js +128 -17
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tokenUsageTracker.d.ts +33 -0
- package/dist/tokenUsageTracker.js +146 -0
- package/dist/tokenUsageTracker.js.map +1 -0
- package/dist/tools/activityLog.d.ts +2 -0
- package/dist/tools/addLinearComment.d.ts +1 -0
- package/dist/tools/addLinearComment.js +4 -2
- package/dist/tools/addLinearComment.js.map +1 -1
- package/dist/tools/batchLsp.d.ts +3 -0
- package/dist/tools/bridgeDoctor.d.ts +1 -0
- package/dist/tools/bridgeDoctor.js +2 -2
- package/dist/tools/bridgeDoctor.js.map +1 -1
- package/dist/tools/bridgeStatus.d.ts +1 -0
- package/dist/tools/cancelClaudeTask.d.ts +2 -0
- package/dist/tools/cancelClaudeTask.js +1 -0
- package/dist/tools/cancelClaudeTask.js.map +1 -1
- package/dist/tools/checkDocumentDirty.d.ts +1 -0
- package/dist/tools/clipboard.d.ts +2 -0
- package/dist/tools/closeTabs.d.ts +2 -0
- package/dist/tools/codeLens.d.ts +1 -0
- package/dist/tools/contextBundle.d.ts +1 -0
- package/dist/tools/createIssueFromAIComment.d.ts +1 -0
- package/dist/tools/createLinearIssue.d.ts +1 -0
- package/dist/tools/ctxGetTaskContext.d.ts +1 -0
- package/dist/tools/ctxQueryTraces.d.ts +1 -0
- 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/documentLinks.d.ts +1 -0
- package/dist/tools/editText.d.ts +1 -0
- package/dist/tools/enrichCommit.d.ts +1 -0
- package/dist/tools/enrichStackTrace.d.ts +1 -0
- package/dist/tools/explainDiagnostic.d.ts +1 -0
- package/dist/tools/explainSymbol.d.ts +1 -0
- package/dist/tools/fetchCalendarEvents.d.ts +1 -0
- package/dist/tools/fetchGithubIssue.d.ts +1 -0
- package/dist/tools/fetchGithubPR.d.ts +1 -0
- package/dist/tools/fetchLinearIssue.d.ts +1 -0
- package/dist/tools/fetchSentryIssue.d.ts +1 -0
- package/dist/tools/fetchSlackProfile.d.ts +1 -0
- package/dist/tools/fetchSlackProfile.js +4 -1
- package/dist/tools/fetchSlackProfile.js.map +1 -1
- package/dist/tools/fileOperations.d.ts +3 -0
- package/dist/tools/fileWatcher.d.ts +2 -0
- package/dist/tools/findFiles.d.ts +1 -0
- package/dist/tools/findRelatedTests.d.ts +1 -0
- package/dist/tools/fixAllLintErrors.d.ts +1 -0
- package/dist/tools/foldingRanges.d.ts +1 -0
- package/dist/tools/formatDocument.d.ts +1 -0
- package/dist/tools/generateTests.d.ts +1 -0
- package/dist/tools/getAIComments.d.ts +1 -0
- package/dist/tools/getAnalyticsReport.d.ts +1 -0
- package/dist/tools/getArchitectureContext.d.ts +1 -0
- package/dist/tools/getBufferContent.d.ts +1 -0
- package/dist/tools/getChangeImpact.d.ts +1 -0
- package/dist/tools/getClaudeTaskStatus.d.ts +2 -0
- package/dist/tools/getClaudeTaskStatus.js +1 -0
- package/dist/tools/getClaudeTaskStatus.js.map +1 -1
- package/dist/tools/getCodeCoverage.d.ts +1 -0
- package/dist/tools/getCommitsForIssue.d.ts +1 -0
- package/dist/tools/getConnectorStatus.d.ts +1 -0
- package/dist/tools/getCurrentSelection.d.ts +2 -0
- package/dist/tools/getDebugState.d.ts +1 -0
- package/dist/tools/getDependencyTree.d.ts +1 -0
- package/dist/tools/getDiagnostics.d.ts +1 -0
- package/dist/tools/getDiffFromHandoff.d.ts +1 -0
- package/dist/tools/getDocumentSymbols.d.ts +25 -0
- package/dist/tools/getDocumentSymbols.js +74 -8
- package/dist/tools/getDocumentSymbols.js.map +1 -1
- package/dist/tools/getFileTree.d.ts +1 -0
- package/dist/tools/getGitDiff.d.ts +1 -0
- package/dist/tools/getGitHotspots.d.ts +1 -0
- package/dist/tools/getGitLog.d.ts +1 -0
- package/dist/tools/getGitStatus.d.ts +1 -0
- package/dist/tools/getImportTree.d.ts +1 -0
- package/dist/tools/getImportedSignatures.d.ts +1 -0
- package/dist/tools/getOpenEditors.d.ts +1 -0
- package/dist/tools/getPRTemplate.d.ts +1 -0
- package/dist/tools/getProjectContext.d.ts +1 -0
- package/dist/tools/getProjectInfo.d.ts +1 -0
- package/dist/tools/getSecurityAdvisories.d.ts +1 -0
- package/dist/tools/getSecurityAdvisories.js +10 -1
- package/dist/tools/getSecurityAdvisories.js.map +1 -1
- package/dist/tools/getSessionUsage.d.ts +4 -0
- package/dist/tools/getSessionUsage.js +3 -0
- package/dist/tools/getSessionUsage.js.map +1 -1
- package/dist/tools/getSymbolHistory.d.ts +1 -0
- package/dist/tools/getToolCapabilities.d.ts +1 -0
- package/dist/tools/getTypeSignature.d.ts +1 -0
- package/dist/tools/getWorkspaceFolders.d.ts +1 -0
- package/dist/tools/getWorkspaceSettings.d.ts +1 -0
- package/dist/tools/gitHistory.d.ts +2 -0
- package/dist/tools/gitWrite.d.ts +11 -0
- package/dist/tools/github/actions.d.ts +2 -0
- package/dist/tools/github/actions.js +4 -2
- package/dist/tools/github/actions.js.map +1 -1
- package/dist/tools/github/composite.d.ts +342 -0
- package/dist/tools/github/composite.js +343 -0
- package/dist/tools/github/composite.js.map +1 -0
- package/dist/tools/github/index.d.ts +1 -0
- package/dist/tools/github/index.js +1 -0
- package/dist/tools/github/index.js.map +1 -1
- package/dist/tools/github/issues.d.ts +4 -0
- package/dist/tools/github/issues.js +8 -4
- package/dist/tools/github/issues.js.map +1 -1
- package/dist/tools/github/pr.d.ts +7 -0
- package/dist/tools/github/pr.js +50 -12
- package/dist/tools/github/pr.js.map +1 -1
- package/dist/tools/handoffNote.d.ts +4 -0
- package/dist/tools/handoffNote.js +2 -0
- package/dist/tools/handoffNote.js.map +1 -1
- package/dist/tools/hoverAtCursor.d.ts +1 -0
- package/dist/tools/httpClient.d.ts +2 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.js +47 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inlayHints.d.ts +1 -0
- package/dist/tools/launchQuickTask.d.ts +2 -0
- package/dist/tools/launchQuickTask.js +1 -0
- package/dist/tools/launchQuickTask.js.map +1 -1
- package/dist/tools/listClaudeTasks.d.ts +2 -0
- package/dist/tools/listClaudeTasks.js +1 -0
- package/dist/tools/listClaudeTasks.js.map +1 -1
- package/dist/tools/listTerminals.d.ts +1 -0
- package/dist/tools/lsp.d.ts +14 -0
- package/dist/tools/navigateToSymbolByName.d.ts +1 -0
- package/dist/tools/openDiff.d.ts +1 -0
- package/dist/tools/openFile.d.ts +1 -0
- package/dist/tools/openInBrowser.d.ts +1 -0
- package/dist/tools/organizeImports.d.ts +1 -0
- package/dist/tools/performanceReport.d.ts +1 -0
- package/dist/tools/planPersistence.d.ts +5 -0
- package/dist/tools/previewEdit.d.ts +1 -0
- package/dist/tools/refactorAnalyze.d.ts +1 -0
- package/dist/tools/refactorPreview.d.ts +2 -0
- package/dist/tools/refactorPreview.js +1 -0
- package/dist/tools/refactorPreview.js.map +1 -1
- package/dist/tools/replaceBlock.d.ts +1 -0
- package/dist/tools/resumeClaudeTask.d.ts +2 -0
- package/dist/tools/resumeClaudeTask.js +1 -0
- package/dist/tools/resumeClaudeTask.js.map +1 -1
- package/dist/tools/runClaudeTask.d.ts +2 -0
- package/dist/tools/runClaudeTask.js +1 -0
- package/dist/tools/runClaudeTask.js.map +1 -1
- package/dist/tools/runCommand.d.ts +1 -0
- package/dist/tools/runTests.d.ts +1 -0
- package/dist/tools/saveDocument.d.ts +1 -0
- package/dist/tools/screenshotAndAnnotate.d.ts +1 -0
- package/dist/tools/searchAndReplace.d.ts +1 -0
- package/dist/tools/searchTools.d.ts +1 -0
- package/dist/tools/searchTools.js +1 -1
- 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/setActiveWorkspaceFolder.d.ts +1 -0
- package/dist/tools/signatureHelp.d.ts +1 -0
- package/dist/tools/slackListChannels.d.ts +1 -0
- package/dist/tools/slackListChannels.js.map +1 -1
- package/dist/tools/slackPostMessage.d.ts +1 -0
- package/dist/tools/slackPostMessage.js +11 -6
- package/dist/tools/slackPostMessage.js.map +1 -1
- package/dist/tools/terminal.d.ts +6 -0
- package/dist/tools/testTraceToSource.d.ts +1 -0
- package/dist/tools/testTraceToSource.js +2 -2
- package/dist/tools/testTraceToSource.js.map +1 -1
- package/dist/tools/transaction.d.ts +23 -0
- package/dist/tools/transaction.js +29 -0
- package/dist/tools/transaction.js.map +1 -1
- package/dist/tools/typeHierarchy.d.ts +1 -0
- package/dist/tools/updateLinearIssue.d.ts +1 -0
- package/dist/tools/updateLinearIssue.js +20 -6
- package/dist/tools/updateLinearIssue.js.map +1 -1
- package/dist/tools/utils.d.ts +2 -0
- 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/traceEncryption.d.ts +46 -0
- package/dist/traceEncryption.js +124 -0
- package/dist/traceEncryption.js.map +1 -0
- package/dist/transport.d.ts +46 -1
- package/dist/transport.js +173 -19
- package/dist/transport.js.map +1 -1
- package/package.json +30 -8
- package/scripts/mcp-stdio-shim.cjs +19 -3
- package/scripts/start-all.sh +30 -1
- package/templates/automation-policies/recipe-authoring.json +25 -0
- package/templates/automation-policy.example.json +6 -0
- package/templates/co.patchwork-os.bridge.plist +34 -0
- package/templates/policies/README.md +72 -0
- package/templates/policies/conservative.json +14 -0
- package/templates/policies/developer.json +14 -0
- package/templates/policies/headless-ci.json +24 -0
- package/templates/policies/personal-assistant.json +15 -0
- package/templates/policies/regulated-industry.json +18 -0
- package/templates/recipes/lint-on-save.yaml +1 -2
- package/templates/recipes/morning-brief-slack.yaml +57 -0
- package/templates/recipes/morning-brief.yaml +2 -2
- package/templates/recipes/project-health-check.yaml +50 -0
- package/templates/recipes/webhook/README.md +70 -0
- package/templates/recipes/webhook/capture-thought.yaml +26 -0
- package/templates/recipes/webhook/customer-escalation.yaml +49 -0
- package/templates/recipes/webhook/incident-intake.yaml +46 -0
- package/templates/recipes/webhook/meeting-prep.yaml +48 -0
- package/templates/recipes/webhook/morning-brief.yaml +57 -0
package/dist/activityLog.d.ts
CHANGED
|
@@ -58,6 +58,55 @@ export declare class ActivityLog {
|
|
|
58
58
|
* need historical correlation should cross-reference by time bounds.
|
|
59
59
|
*/
|
|
60
60
|
querySessionTools(sessionId: string, limit?: number): ActivityEntry[];
|
|
61
|
+
/**
|
|
62
|
+
* Cross-session query for approval-decision lifecycle rows. Used by the
|
|
63
|
+
* passive risk personalization signals (`src/approvalSignals.ts`) to
|
|
64
|
+
* answer questions like "how many times has the user approved this tool
|
|
65
|
+
* before?" without paying the cost of `queryTimeline`'s combined-sort.
|
|
66
|
+
*
|
|
67
|
+
* Filters honored:
|
|
68
|
+
* - `toolName` — match `metadata.toolName` exactly
|
|
69
|
+
* - `decision` — match `metadata.decision` ("allow" | "deny")
|
|
70
|
+
* - `last` — return at most this many most-recent matches (cap 1000)
|
|
71
|
+
*
|
|
72
|
+
* Returns rows ordered oldest → newest (the natural append order of the
|
|
73
|
+
* lifecycle log) so callers can compute counts or "last decision" cheaply.
|
|
74
|
+
*/
|
|
75
|
+
queryApprovalDecisions(opts?: {
|
|
76
|
+
toolName?: string;
|
|
77
|
+
decision?: string;
|
|
78
|
+
last?: number;
|
|
79
|
+
}): LifecycleEntry[];
|
|
80
|
+
/**
|
|
81
|
+
* Return the most recent tool entry matching `toolName` exactly, or
|
|
82
|
+
* `null` if none. Used by personalization heuristic 5 ("last called T
|
|
83
|
+
* days ago") to compute the gap between now and the most recent prior
|
|
84
|
+
* call without scanning the whole buffer downstream.
|
|
85
|
+
*
|
|
86
|
+
* Walks the entries ring backwards (newest first) so the common case —
|
|
87
|
+
* a tool called recently — returns after one comparison.
|
|
88
|
+
*/
|
|
89
|
+
queryLastToolCall(toolName: string): ActivityEntry | null;
|
|
90
|
+
/**
|
|
91
|
+
* Cross-session query for tool entries by namespace prefix (e.g. "gmail"
|
|
92
|
+
* matches "gmail.fetch_unread", "gmail.send"). Used by personalization
|
|
93
|
+
* heuristic 3 ("first use of this connector") to detect whether the
|
|
94
|
+
* connector has been used before. Cap at 1000 most-recent matches.
|
|
95
|
+
*/
|
|
96
|
+
queryByNamespace(namespace: string, last?: number): ActivityEntry[];
|
|
97
|
+
/**
|
|
98
|
+
* Return all activity entries within a time window. Used by the
|
|
99
|
+
* automation-suggestions module (`src/automationSuggestions.ts`) to feed
|
|
100
|
+
* `computeCoOccurrence` and similar pattern-mining over a fresh slice of
|
|
101
|
+
* the activity ring without pulling the whole buffer.
|
|
102
|
+
*
|
|
103
|
+
* `sinceMs` is an absolute epoch ms — entries with `timestamp >= sinceMs`
|
|
104
|
+
* are returned. Set to `0` for "all".
|
|
105
|
+
*/
|
|
106
|
+
queryAll(opts?: {
|
|
107
|
+
sinceMs?: number;
|
|
108
|
+
last?: number;
|
|
109
|
+
}): ActivityEntry[];
|
|
61
110
|
queryTimeline(opts?: {
|
|
62
111
|
last?: number;
|
|
63
112
|
}): TimelineEntry[];
|
package/dist/activityLog.js
CHANGED
|
@@ -281,6 +281,84 @@ export class ActivityLog {
|
|
|
281
281
|
}
|
|
282
282
|
return matches.slice(-limit);
|
|
283
283
|
}
|
|
284
|
+
/**
|
|
285
|
+
* Cross-session query for approval-decision lifecycle rows. Used by the
|
|
286
|
+
* passive risk personalization signals (`src/approvalSignals.ts`) to
|
|
287
|
+
* answer questions like "how many times has the user approved this tool
|
|
288
|
+
* before?" without paying the cost of `queryTimeline`'s combined-sort.
|
|
289
|
+
*
|
|
290
|
+
* Filters honored:
|
|
291
|
+
* - `toolName` — match `metadata.toolName` exactly
|
|
292
|
+
* - `decision` — match `metadata.decision` ("allow" | "deny")
|
|
293
|
+
* - `last` — return at most this many most-recent matches (cap 1000)
|
|
294
|
+
*
|
|
295
|
+
* Returns rows ordered oldest → newest (the natural append order of the
|
|
296
|
+
* lifecycle log) so callers can compute counts or "last decision" cheaply.
|
|
297
|
+
*/
|
|
298
|
+
queryApprovalDecisions(opts) {
|
|
299
|
+
const matches = [];
|
|
300
|
+
for (const e of this.lifecycleEntries) {
|
|
301
|
+
if (e.event !== "approval_decision")
|
|
302
|
+
continue;
|
|
303
|
+
if (opts?.toolName && e.metadata?.toolName !== opts.toolName)
|
|
304
|
+
continue;
|
|
305
|
+
if (opts?.decision && e.metadata?.decision !== opts.decision)
|
|
306
|
+
continue;
|
|
307
|
+
matches.push(e);
|
|
308
|
+
}
|
|
309
|
+
const last = Math.min(opts?.last ?? 1000, 1000);
|
|
310
|
+
return matches.slice(-last);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Return the most recent tool entry matching `toolName` exactly, or
|
|
314
|
+
* `null` if none. Used by personalization heuristic 5 ("last called T
|
|
315
|
+
* days ago") to compute the gap between now and the most recent prior
|
|
316
|
+
* call without scanning the whole buffer downstream.
|
|
317
|
+
*
|
|
318
|
+
* Walks the entries ring backwards (newest first) so the common case —
|
|
319
|
+
* a tool called recently — returns after one comparison.
|
|
320
|
+
*/
|
|
321
|
+
queryLastToolCall(toolName) {
|
|
322
|
+
for (let i = this.entries.length - 1; i >= 0; i--) {
|
|
323
|
+
const e = this.entries[i];
|
|
324
|
+
if (e?.tool === toolName)
|
|
325
|
+
return e;
|
|
326
|
+
}
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Cross-session query for tool entries by namespace prefix (e.g. "gmail"
|
|
331
|
+
* matches "gmail.fetch_unread", "gmail.send"). Used by personalization
|
|
332
|
+
* heuristic 3 ("first use of this connector") to detect whether the
|
|
333
|
+
* connector has been used before. Cap at 1000 most-recent matches.
|
|
334
|
+
*/
|
|
335
|
+
queryByNamespace(namespace, last = 1000) {
|
|
336
|
+
const prefix = `${namespace}.`;
|
|
337
|
+
const matches = [];
|
|
338
|
+
for (const e of this.entries) {
|
|
339
|
+
if (e.tool?.startsWith(prefix))
|
|
340
|
+
matches.push(e);
|
|
341
|
+
}
|
|
342
|
+
const cap = Math.min(last, 1000);
|
|
343
|
+
return matches.slice(-cap);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Return all activity entries within a time window. Used by the
|
|
347
|
+
* automation-suggestions module (`src/automationSuggestions.ts`) to feed
|
|
348
|
+
* `computeCoOccurrence` and similar pattern-mining over a fresh slice of
|
|
349
|
+
* the activity ring without pulling the whole buffer.
|
|
350
|
+
*
|
|
351
|
+
* `sinceMs` is an absolute epoch ms — entries with `timestamp >= sinceMs`
|
|
352
|
+
* are returned. Set to `0` for "all".
|
|
353
|
+
*/
|
|
354
|
+
queryAll(opts) {
|
|
355
|
+
const since = opts?.sinceMs ?? 0;
|
|
356
|
+
const last = Math.min(opts?.last ?? 5000, 5000);
|
|
357
|
+
const filtered = since > 0
|
|
358
|
+
? this.entries.filter((e) => Date.parse(e.timestamp) >= since)
|
|
359
|
+
: this.entries;
|
|
360
|
+
return filtered.slice(-last);
|
|
361
|
+
}
|
|
284
362
|
queryTimeline(opts) {
|
|
285
363
|
const tools = this.entries.map((e) => ({
|
|
286
364
|
kind: "tool",
|
package/dist/activityLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activityLog.js","sourceRoot":"","sources":["../src/activityLog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"activityLog.js","sourceRoot":"","sources":["../src/activityLog.ts"],"names":[],"mappings":"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"}
|
package/dist/approvalHttp.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ import type { ApprovalQueue } from "./approvalQueue.js";
|
|
|
2
2
|
import { loadCcPermissions } from "./ccPermissions.js";
|
|
3
3
|
/**
|
|
4
4
|
* HTTP route handlers for the Patchwork approval surface. Pure functions —
|
|
5
|
-
* bridge HTTP server (src/
|
|
6
|
-
*
|
|
5
|
+
* bridge HTTP server (src/server.ts) mounts them at /approvals, /approve/:id,
|
|
6
|
+
* /reject/:id. Bearer auth is enforced by server.ts before reaching these
|
|
7
|
+
* handlers; approve/reject also accept x-approval-token for the phone path.
|
|
7
8
|
*
|
|
8
9
|
* Routes:
|
|
9
10
|
* GET /approvals → list pending
|
|
@@ -32,15 +33,61 @@ export interface ApprovalHttpDeps {
|
|
|
32
33
|
webhookUrl?: string;
|
|
33
34
|
/** Gate tier — "off" bypasses all queueing; "high" only queues high-tier tools; "all" queues everything. */
|
|
34
35
|
approvalGate?: "off" | "high" | "all";
|
|
36
|
+
/** Push relay service URL (https://). When set, approval tokens are generated and push notifications dispatched. */
|
|
37
|
+
pushServiceUrl?: string;
|
|
38
|
+
/** Bearer token for the push relay service. */
|
|
39
|
+
pushServiceToken?: string;
|
|
40
|
+
/** Public base URL of this bridge (e.g. https://mybridge.example.com). Embedded in push payload as callback base. */
|
|
41
|
+
pushServiceBaseUrl?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Optional ActivityLog used to compute passive risk personalization
|
|
44
|
+
* signals (`src/approvalSignals.ts`). When omitted, personalSignals are
|
|
45
|
+
* not computed and the queue entry has the `personalSignals` field
|
|
46
|
+
* absent entirely (distinguishable from `personalSignals: []` which means
|
|
47
|
+
* "wire is live, just no history yet") —
|
|
48
|
+
* the rest of the approval flow is unaffected. Tests that care only about
|
|
49
|
+
* the policy-engine path can leave this off.
|
|
50
|
+
*/
|
|
51
|
+
activityLog?: import("./activityLog.js").ActivityLog;
|
|
52
|
+
/**
|
|
53
|
+
* Optional recipe-run log used by the "recipe-step trust" heuristic
|
|
54
|
+
* (h6 in `src/approvalSignals.ts`). When omitted, h6 is silently
|
|
55
|
+
* skipped — the other 11 heuristics still compute over `activityLog`.
|
|
56
|
+
* Wired by bridge.ts when a recipe orchestrator is active.
|
|
57
|
+
*/
|
|
58
|
+
recipeRunLog?: import("./approvalSignals.js").RecipeRunQuerier;
|
|
59
|
+
/**
|
|
60
|
+
* Opt-in switch for personalSignals heuristic 10 (time-of-day
|
|
61
|
+
* anomaly). When true and `activityLog` is wired, h10 fires on calls
|
|
62
|
+
* outside the user's usual hours for that tool. Default false —
|
|
63
|
+
* catalog flags h10 as medium-FP for power users with irregular
|
|
64
|
+
* schedules.
|
|
65
|
+
*/
|
|
66
|
+
enableTimeOfDayAnomaly?: boolean;
|
|
35
67
|
}
|
|
36
68
|
export interface HttpRequest {
|
|
37
69
|
method: string;
|
|
38
70
|
path: string;
|
|
39
71
|
body?: Record<string, unknown>;
|
|
40
72
|
query?: URLSearchParams;
|
|
73
|
+
/** x-approval-token header value, if present — phone-path auth for approve/reject. */
|
|
74
|
+
approvalToken?: string;
|
|
41
75
|
}
|
|
42
76
|
export interface HttpResponse {
|
|
43
77
|
status: number;
|
|
44
78
|
body: unknown;
|
|
45
79
|
}
|
|
80
|
+
export interface SseWriter {
|
|
81
|
+
write(data: string): boolean;
|
|
82
|
+
writableEnded: boolean;
|
|
83
|
+
on(event: "close", fn: () => void): void;
|
|
84
|
+
writeHead(status: number, headers: Record<string, string>): void;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Mount SSE stream for live approval queue updates on `GET /approvals/stream`.
|
|
88
|
+
* Sends the full queue snapshot as a `snapshot` event on connect, then a
|
|
89
|
+
* `update` event whenever the queue changes (enqueue, approve, reject, expire).
|
|
90
|
+
* Heartbeat comment every 15s keeps the connection alive through proxies.
|
|
91
|
+
*/
|
|
92
|
+
export declare function handleApprovalsStream(res: SseWriter, deps: Pick<ApprovalHttpDeps, "queue">, sessionFilter?: string | null): void;
|
|
46
93
|
export declare function routeApprovalRequest(req: HttpRequest, deps: ApprovalHttpDeps): Promise<HttpResponse>;
|
package/dist/approvalHttp.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import * as dns from "node:dns/promises";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
+
import { recordApprovalCompleted, recordApprovalPrompted, } from "./activationMetrics.js";
|
|
4
|
+
import { computePersonalSignals } from "./approvalSignals.js";
|
|
3
5
|
import { evaluateRules, loadCcPermissions, loadCcPermissionsAttributed, } from "./ccPermissions.js";
|
|
6
|
+
import { captureForRunlog } from "./recipes/stepObservation.js";
|
|
4
7
|
import { classifyTool } from "./riskTier.js";
|
|
5
8
|
// Tools CC allows in plan mode (read-only — no filesystem or network writes).
|
|
6
9
|
const PLAN_MODE_READ_TOOLS = new Set([
|
|
@@ -11,6 +14,53 @@ const PLAN_MODE_READ_TOOLS = new Set([
|
|
|
11
14
|
"WebSearch",
|
|
12
15
|
"LS",
|
|
13
16
|
]);
|
|
17
|
+
/**
|
|
18
|
+
* Mount SSE stream for live approval queue updates on `GET /approvals/stream`.
|
|
19
|
+
* Sends the full queue snapshot as a `snapshot` event on connect, then a
|
|
20
|
+
* `update` event whenever the queue changes (enqueue, approve, reject, expire).
|
|
21
|
+
* Heartbeat comment every 15s keeps the connection alive through proxies.
|
|
22
|
+
*/
|
|
23
|
+
export function handleApprovalsStream(res, deps, sessionFilter) {
|
|
24
|
+
res.writeHead(200, {
|
|
25
|
+
"Content-Type": "text/event-stream",
|
|
26
|
+
"Cache-Control": "no-cache",
|
|
27
|
+
Connection: "keep-alive",
|
|
28
|
+
"X-Accel-Buffering": "no",
|
|
29
|
+
});
|
|
30
|
+
function sendSnapshot() {
|
|
31
|
+
if (res.writableEnded)
|
|
32
|
+
return;
|
|
33
|
+
const list = deps.queue.list();
|
|
34
|
+
const filtered = sessionFilter
|
|
35
|
+
? list.filter((a) => a.sessionId === sessionFilter)
|
|
36
|
+
: list;
|
|
37
|
+
res.write(`event: snapshot\ndata: ${JSON.stringify(filtered)}\n\n`);
|
|
38
|
+
}
|
|
39
|
+
sendSnapshot();
|
|
40
|
+
const unsubscribe = deps.queue.subscribe(() => {
|
|
41
|
+
if (res.writableEnded) {
|
|
42
|
+
unsubscribe();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const list = deps.queue.list();
|
|
46
|
+
const filtered = sessionFilter
|
|
47
|
+
? list.filter((a) => a.sessionId === sessionFilter)
|
|
48
|
+
: list;
|
|
49
|
+
res.write(`event: update\ndata: ${JSON.stringify(filtered)}\n\n`);
|
|
50
|
+
});
|
|
51
|
+
const heartbeat = setInterval(() => {
|
|
52
|
+
if (res.writableEnded) {
|
|
53
|
+
clearInterval(heartbeat);
|
|
54
|
+
unsubscribe();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
res.write(": heartbeat\n\n");
|
|
58
|
+
}, 15_000);
|
|
59
|
+
res.on("close", () => {
|
|
60
|
+
clearInterval(heartbeat);
|
|
61
|
+
unsubscribe();
|
|
62
|
+
});
|
|
63
|
+
}
|
|
14
64
|
export async function routeApprovalRequest(req, deps) {
|
|
15
65
|
const { method, path } = req;
|
|
16
66
|
if (method === "GET" && path === "/approvals") {
|
|
@@ -45,6 +95,16 @@ export async function routeApprovalRequest(req, deps) {
|
|
|
45
95
|
const approveMatch = /^\/approve\/([A-Za-z0-9-]+)$/.exec(path);
|
|
46
96
|
if (method === "POST" && approveMatch) {
|
|
47
97
|
const callId = approveMatch[1];
|
|
98
|
+
// Phone path: validate single-use approval token if bearer auth wasn't used
|
|
99
|
+
if (req.approvalToken !== undefined) {
|
|
100
|
+
const valid = deps.queue.validateToken(callId, req.approvalToken);
|
|
101
|
+
if (!valid) {
|
|
102
|
+
return {
|
|
103
|
+
status: 401,
|
|
104
|
+
body: { error: "invalid or expired approval token" },
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
48
108
|
const ok = deps.queue.approve(callId);
|
|
49
109
|
return {
|
|
50
110
|
status: ok ? 200 : 404,
|
|
@@ -54,6 +114,16 @@ export async function routeApprovalRequest(req, deps) {
|
|
|
54
114
|
const rejectMatch = /^\/reject\/([A-Za-z0-9-]+)$/.exec(path);
|
|
55
115
|
if (method === "POST" && rejectMatch) {
|
|
56
116
|
const callId = rejectMatch[1];
|
|
117
|
+
// Phone path: validate single-use approval token if bearer auth wasn't used
|
|
118
|
+
if (req.approvalToken !== undefined) {
|
|
119
|
+
const valid = deps.queue.validateToken(callId, req.approvalToken);
|
|
120
|
+
if (!valid) {
|
|
121
|
+
return {
|
|
122
|
+
status: 401,
|
|
123
|
+
body: { error: "invalid or expired approval token" },
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
57
127
|
const ok = deps.queue.reject(callId);
|
|
58
128
|
return {
|
|
59
129
|
status: ok ? 200 : 404,
|
|
@@ -133,7 +203,11 @@ async function dispatchApprovalWebhook(webhookUrl, payload) {
|
|
|
133
203
|
const res = await fetch(webhookUrl, {
|
|
134
204
|
method: "POST",
|
|
135
205
|
headers: { "Content-Type": "application/json" },
|
|
136
|
-
body: JSON.stringify(
|
|
206
|
+
body: JSON.stringify({
|
|
207
|
+
...payload,
|
|
208
|
+
requestedAt: new Date(payload.requestedAt).toISOString(),
|
|
209
|
+
expiresAt: new Date(payload.expiresAt).toISOString(),
|
|
210
|
+
}),
|
|
137
211
|
signal: controller.signal,
|
|
138
212
|
});
|
|
139
213
|
if (!res.ok) {
|
|
@@ -147,6 +221,61 @@ async function dispatchApprovalWebhook(webhookUrl, payload) {
|
|
|
147
221
|
clearTimeout(timer);
|
|
148
222
|
}
|
|
149
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Dispatch a push notification to the relay service when an approval is queued.
|
|
226
|
+
* Reuses the same SSRF guard as dispatchApprovalWebhook. Fire-and-forget — never throws.
|
|
227
|
+
*/
|
|
228
|
+
async function dispatchPushNotification(pushServiceUrl, pushServiceToken, payload) {
|
|
229
|
+
if (!pushServiceUrl.startsWith("https://")) {
|
|
230
|
+
console.warn(`[push] Rejected non-HTTPS push service URL`);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
let hostname;
|
|
234
|
+
try {
|
|
235
|
+
hostname = new URL(pushServiceUrl).hostname;
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
console.warn(`[push] Malformed push service URL — skipping`);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (hostname === "localhost") {
|
|
242
|
+
console.warn(`[push] Blocked loopback push service hostname`);
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
const resolved = await dns.lookup(hostname);
|
|
247
|
+
if (isBlockedIp(resolved.address)) {
|
|
248
|
+
console.warn(`[push] Blocked private/loopback IP for push service: ${resolved.address}`);
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
console.warn(`[push] DNS resolution failed for ${hostname}: ${err instanceof Error ? err.message : String(err)}`);
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const controller = new AbortController();
|
|
257
|
+
const timer = setTimeout(() => controller.abort(), 5_000);
|
|
258
|
+
try {
|
|
259
|
+
const res = await fetch(`${pushServiceUrl}/push`, {
|
|
260
|
+
method: "POST",
|
|
261
|
+
headers: {
|
|
262
|
+
"Content-Type": "application/json",
|
|
263
|
+
Authorization: `Bearer ${pushServiceToken}`,
|
|
264
|
+
},
|
|
265
|
+
body: JSON.stringify(payload),
|
|
266
|
+
signal: controller.signal,
|
|
267
|
+
});
|
|
268
|
+
if (!res.ok) {
|
|
269
|
+
console.warn(`[push] Non-2xx from push relay: ${res.status} ${res.statusText}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
console.warn(`[push] Dispatch failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
clearTimeout(timer);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
150
279
|
function computeRiskSignals(toolName, params, workspace) {
|
|
151
280
|
const signals = [];
|
|
152
281
|
// Destructive flags — Bash / runCommand
|
|
@@ -246,9 +375,25 @@ async function handleApprovalRequest(req, deps) {
|
|
|
246
375
|
const summary = typeof body.summary === "string" ? body.summary : undefined;
|
|
247
376
|
const permissionMode = typeof body.permissionMode === "string" ? body.permissionMode : undefined;
|
|
248
377
|
const sessionId = typeof body.sessionId === "string" ? body.sessionId : undefined;
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
378
|
+
if (!toolName) {
|
|
379
|
+
return { status: 400, body: { error: "toolName required" } };
|
|
380
|
+
}
|
|
381
|
+
// Capture the inputs the policy saw on EVERY decision path, not just the
|
|
382
|
+
// queue-awaiting path. A future "decision replay debugger" needs to be able
|
|
383
|
+
// to fold a new policy over historical inputs — that requires `params`,
|
|
384
|
+
// `tier`, and `riskSignals` on every approval_decision row, not just rows
|
|
385
|
+
// that hit a human dashboard.
|
|
386
|
+
//
|
|
387
|
+
// Cost: classifyTool is a table lookup; computeRiskSignals is regex + one
|
|
388
|
+
// path.resolve. Both cheap. captureForRunlog redacts known secret keys and
|
|
389
|
+
// caps the JSON envelope at 8 KB so a giant `params.command` won't bloat
|
|
390
|
+
// the lifecycle log.
|
|
391
|
+
//
|
|
392
|
+
// Older rows (pre-this-PR) lack these fields. Readers must treat them as
|
|
393
|
+
// optional. There is no backfill — the inputs simply weren't captured.
|
|
394
|
+
const tier = classifyTool(toolName);
|
|
395
|
+
const riskSignals = computeRiskSignals(toolName, params, deps.workspace);
|
|
396
|
+
const capturedParams = captureForRunlog(params);
|
|
252
397
|
const emit = (decision, reason, extras) => deps.onDecision?.("approval_decision", {
|
|
253
398
|
toolName,
|
|
254
399
|
specifier,
|
|
@@ -256,16 +401,17 @@ async function handleApprovalRequest(req, deps) {
|
|
|
256
401
|
reason,
|
|
257
402
|
permissionMode,
|
|
258
403
|
sessionId,
|
|
404
|
+
tier,
|
|
405
|
+
// Workspace path captured so heuristic 9 (workspace mismatch) can
|
|
406
|
+
// tell "this tool was approved in workspace A; the call coming in
|
|
407
|
+
// from workspace B is novel here." Older rows lack this field —
|
|
408
|
+
// h9 treats absent workspace as "no baseline", same as new tools.
|
|
409
|
+
workspace: deps.workspace,
|
|
410
|
+
...(capturedParams !== undefined && { params: capturedParams }),
|
|
411
|
+
...(riskSignals.length > 0 && { riskSignals }),
|
|
259
412
|
...(summary !== undefined && { summary }),
|
|
260
|
-
...(extras?.riskSignals &&
|
|
261
|
-
extras.riskSignals.length > 0 && {
|
|
262
|
-
riskSignals: extras.riskSignals,
|
|
263
|
-
}),
|
|
264
413
|
...(extras?.callId && { callId: extras.callId }),
|
|
265
414
|
});
|
|
266
|
-
if (!toolName) {
|
|
267
|
-
return { status: 400, body: { error: "toolName required" } };
|
|
268
|
-
}
|
|
269
415
|
// CC settings.json precedence
|
|
270
416
|
const rules = (deps.ccLoader ?? loadCcPermissions)(deps.workspace, {
|
|
271
417
|
managedPath: deps.managedSettingsPath,
|
|
@@ -319,8 +465,9 @@ async function handleApprovalRequest(req, deps) {
|
|
|
319
465
|
body: { decision: "deny", reason: "plan_mode_write" },
|
|
320
466
|
};
|
|
321
467
|
}
|
|
322
|
-
// Fall through to dashboard approval
|
|
323
|
-
|
|
468
|
+
// Fall through to dashboard approval. tier + riskSignals were already
|
|
469
|
+
// computed at the top of this function so emit() carries them on every
|
|
470
|
+
// decision path — see the comment block above the emit definition.
|
|
324
471
|
// Respect approvalGate setting — "off" bypasses, "high" only queues high-tier tools
|
|
325
472
|
const gate = deps.approvalGate ?? "off";
|
|
326
473
|
if (gate === "off") {
|
|
@@ -334,30 +481,79 @@ async function handleApprovalRequest(req, deps) {
|
|
|
334
481
|
body: { decision: "allow", reason: "gate_below_threshold" },
|
|
335
482
|
};
|
|
336
483
|
}
|
|
337
|
-
|
|
338
|
-
|
|
484
|
+
// Personal signals — passive risk personalization. Only computed when
|
|
485
|
+
// an ActivityLog is wired up; tests / minimal harnesses leave it
|
|
486
|
+
// undefined. See src/approvalSignals.ts for the catalog.
|
|
487
|
+
//
|
|
488
|
+
// Eagerly imported at the top of this file (was lazy via dynamic
|
|
489
|
+
// import in #137). The lazy form raced under full-suite CPU
|
|
490
|
+
// contention: the dynamic import could resolve after the
|
|
491
|
+
// approvalHttp.test.ts "propagates personalSignals onto queued
|
|
492
|
+
// PendingApproval" test's 10ms wait, leaving queue.list() empty when
|
|
493
|
+
// the assertion fired. The lazy-cost benefit (~150 LOC of dead code
|
|
494
|
+
// for users without an ActivityLog) was negligible — the module is
|
|
495
|
+
// already imported by the activity log path on first approval — so
|
|
496
|
+
// the eager import is the right tradeoff.
|
|
497
|
+
const personalSignals = deps.activityLog
|
|
498
|
+
? computePersonalSignals({
|
|
499
|
+
toolName,
|
|
500
|
+
activityLog: deps.activityLog,
|
|
501
|
+
currentTier: tier,
|
|
502
|
+
currentWorkspace: deps.workspace,
|
|
503
|
+
currentParams: params,
|
|
504
|
+
recipeRunLog: deps.recipeRunLog,
|
|
505
|
+
enableTimeOfDayAnomaly: deps.enableTimeOfDayAnomaly,
|
|
506
|
+
})
|
|
507
|
+
: undefined;
|
|
508
|
+
const now = Date.now();
|
|
509
|
+
const { callId, approvalToken, promise } = deps.queue.request({
|
|
339
510
|
toolName,
|
|
340
511
|
params,
|
|
341
512
|
tier,
|
|
342
513
|
summary,
|
|
343
514
|
sessionId,
|
|
344
515
|
riskSignals,
|
|
345
|
-
|
|
516
|
+
// Always include personalSignals when activityLog is wired, even
|
|
517
|
+
// if the array is empty. The presence of the key is the signal
|
|
518
|
+
// that the wire is live; conditionally omitting it made it
|
|
519
|
+
// impossible to distinguish "wire broken" from "no signals fired"
|
|
520
|
+
// during dogfooding (verified end-to-end on 2026-05-03 — first
|
|
521
|
+
// three test runs looked broken when they were just empty).
|
|
522
|
+
// When activityLog isn't wired (no signals computed at all), the
|
|
523
|
+
// field stays absent — that case still means "not configured."
|
|
524
|
+
...(personalSignals !== undefined && { personalSignals }),
|
|
525
|
+
}, { withToken: !!deps.pushServiceUrl });
|
|
526
|
+
recordApprovalPrompted();
|
|
346
527
|
// Fire webhook notification in the background — never block approval flow
|
|
347
528
|
if (deps.webhookUrl) {
|
|
348
529
|
dispatchApprovalWebhook(deps.webhookUrl, {
|
|
349
530
|
toolName,
|
|
350
531
|
tier,
|
|
351
532
|
callId,
|
|
352
|
-
requestedAt:
|
|
533
|
+
requestedAt: now,
|
|
534
|
+
expiresAt: now + 5 * 60_000,
|
|
535
|
+
summary,
|
|
536
|
+
}).catch(() => { });
|
|
537
|
+
}
|
|
538
|
+
// Fire push notification in the background — phone path
|
|
539
|
+
if (deps.pushServiceUrl && deps.pushServiceToken && approvalToken) {
|
|
540
|
+
dispatchPushNotification(deps.pushServiceUrl, deps.pushServiceToken, {
|
|
541
|
+
toolName,
|
|
542
|
+
tier,
|
|
543
|
+
callId,
|
|
544
|
+
requestedAt: now,
|
|
545
|
+
expiresAt: now + 5 * 60_000,
|
|
353
546
|
summary,
|
|
547
|
+
riskSignals,
|
|
548
|
+
approvalToken,
|
|
549
|
+
bridgeCallbackBase: deps.pushServiceBaseUrl ?? "",
|
|
354
550
|
}).catch(() => { });
|
|
355
551
|
}
|
|
356
552
|
const outcome = await promise;
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
});
|
|
553
|
+
if (outcome !== "expired") {
|
|
554
|
+
recordApprovalCompleted();
|
|
555
|
+
}
|
|
556
|
+
emit(outcome === "approved" ? "allow" : "deny", outcome, { callId });
|
|
361
557
|
return {
|
|
362
558
|
status: 200,
|
|
363
559
|
body: {
|