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/README.bridge.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://github.com/Oolab-labs/claude-ide-bridge/pkgs/container/claude-ide-bridge)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
|
-
**MCP bridge giving Claude Code IDE superpowers
|
|
8
|
+
**MCP bridge giving Claude Code IDE superpowers — 170+ tools for LSP, debugging, git, GitHub, terminals, and more (see [platform-docs](documents/platform-docs.md) for the full list).**
|
|
9
9
|
|
|
10
10
|
A WebSocket bridge between Claude Code CLI and your VS Code extension. Claude sees what your IDE sees — live diagnostics, go-to-definition, call hierarchies, hover types, breakpoints, debugger state — and can act on it: edit files, run tests, commit, open PRs, all without you copy-pasting anything.
|
|
11
11
|
|
|
@@ -21,11 +21,11 @@ https://github.com/user-attachments/assets/a81a8d11-2cc3-46f3-88ad-6a905a221a2c
|
|
|
21
21
|
|
|
22
22
|
## Quick Start
|
|
23
23
|
|
|
24
|
-
**Prerequisites:** [Claude Code CLI](https://claude.ai/code), Node.js ≥
|
|
24
|
+
**Prerequisites:** [Claude Code CLI](https://claude.ai/code), Node.js ≥ 22
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
# 1. Install the bridge
|
|
28
|
-
npm install -g
|
|
28
|
+
npm install -g patchwork-os
|
|
29
29
|
|
|
30
30
|
# 2. One-command setup (installs extension, writes CLAUDE.md, registers MCP server)
|
|
31
31
|
cd /your/project
|
|
@@ -38,7 +38,7 @@ claude-ide-bridge --watch
|
|
|
38
38
|
claude --ide
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
> **Updating?** Use `npm install -g
|
|
41
|
+
> **Updating?** Use `npm install -g patchwork-os@latest` — `npm update -g` may lag the registry cache after a new release.
|
|
42
42
|
|
|
43
43
|
> **macOS LaunchAgent users:** always install from the registry (`npm install -g patchwork-os`) or
|
|
44
44
|
> from a tarball (`npm pack && npm install -g patchwork-os-*.tgz`).
|
|
@@ -81,7 +81,7 @@ Or search **Claude IDE Bridge** in the VS Code / Cursor / Windsurf marketplace.
|
|
|
81
81
|
|
|
82
82
|
## Slim vs Full Mode
|
|
83
83
|
|
|
84
|
-
The bridge starts in **full mode** by default (changed in v2.43.0) — all
|
|
84
|
+
The bridge starts in **full mode** by default (changed in v2.43.0) — all 177 tools, covering LSP/debugger/refactoring plus git, GitHub, terminal, file tree, and orchestration.
|
|
85
85
|
|
|
86
86
|
Pass `--slim` to restrict to the ~60 IDE-exclusive tools (LSP, debugger, editor state only) — useful when you want Claude to use its native Read/Write/Bash tools for everything else:
|
|
87
87
|
|
|
@@ -144,7 +144,7 @@ Claude calls `refactorAnalyze` (checks blast radius and risk), `refactorPreview`
|
|
|
144
144
|
Standard setup. Extension connects automatically. Full LSP, debugger, and editor state available.
|
|
145
145
|
|
|
146
146
|
### Remote SSH
|
|
147
|
-
VS Code Remote-SSH and Cursor SSH load the extension on the VPS side (`extensionKind: ["workspace"]`). Start the bridge on the remote machine. All
|
|
147
|
+
VS Code Remote-SSH and Cursor SSH load the extension on the VPS side (`extensionKind: ["workspace"]`). Start the bridge on the remote machine. All 177 tools work over SSH.
|
|
148
148
|
|
|
149
149
|
```bash
|
|
150
150
|
# On the remote machine
|
|
@@ -192,7 +192,7 @@ claude-ide-bridge start-task "Refactor the auth module for clarity, keep behavio
|
|
|
192
192
|
claude-ide-bridge continue-handoff
|
|
193
193
|
```
|
|
194
194
|
|
|
195
|
-
Requires `--
|
|
195
|
+
Requires `--driver subprocess` on the running bridge. All three subcommands accept `--json`, `--port`, `--source`. Enforces a 5s bridge-global cooldown per preset (shared with the sidebar).
|
|
196
196
|
|
|
197
197
|
---
|
|
198
198
|
|
|
@@ -223,7 +223,7 @@ Event-driven hooks that trigger Claude tasks automatically — no polling, no ma
|
|
|
223
223
|
|
|
224
224
|
Start with:
|
|
225
225
|
```bash
|
|
226
|
-
claude-ide-bridge --watch --automation --automation-policy ./policy.json --
|
|
226
|
+
claude-ide-bridge --watch --automation --automation-policy ./policy.json --driver subprocess
|
|
227
227
|
```
|
|
228
228
|
|
|
229
229
|
**18 hook events:** `onFileSave`, `onFileChanged`, `onDiagnosticsError`, `onDiagnosticsCleared`, `onGitCommit`, `onGitPush`, `onGitPull`, `onBranchCheckout`, `onPullRequest`, `onTestRun`, `onTestPassAfterFailure`, `onPostCompact`, `onInstructionsLoaded`, `onTaskCreated`, `onTaskSuccess`, `onPermissionDenied`, `onCwdChanged`, `onDebugSessionEnd`
|
|
@@ -274,7 +274,7 @@ claude-ide-bridge install claude-mem
|
|
|
274
274
|
|---|---|
|
|
275
275
|
| `claude-ide-bridge init` | One-command setup: install extension + write CLAUDE.md + register MCP server |
|
|
276
276
|
| `claude-ide-bridge --watch` | Start bridge with auto-restart on crash (2s → 30s backoff) |
|
|
277
|
-
| `claude-ide-bridge --slim` | Restrict to ~60 IDE-exclusive tools (default:
|
|
277
|
+
| `claude-ide-bridge --slim` | Restrict to ~60 IDE-exclusive tools (default: 177 full tools) |
|
|
278
278
|
| `claude-ide-bridge install-extension` | Install companion VS Code extension |
|
|
279
279
|
| `claude-ide-bridge gen-claude-md --write` | Add bridge section to existing CLAUDE.md |
|
|
280
280
|
| `claude-ide-bridge print-token` | Print auth token from active lock file |
|
|
@@ -291,7 +291,7 @@ claude-ide-bridge install claude-mem
|
|
|
291
291
|
|
|
292
292
|
| Flag | Default | Description |
|
|
293
293
|
|---|---|---|
|
|
294
|
-
| `--slim` | off | Restrict to IDE-exclusive tools (default: full,
|
|
294
|
+
| `--slim` | off | Restrict to IDE-exclusive tools (default: full, 177 tools) |
|
|
295
295
|
| `--full` | on | No-op (retained for backward compat — full is the default since v2.43.0) |
|
|
296
296
|
| `--watch` | off | Auto-restart on crash |
|
|
297
297
|
| `--bind <host>` | `127.0.0.1` | Bind address (`0.0.0.0` for remote access) |
|
|
@@ -299,7 +299,7 @@ claude-ide-bridge install claude-mem
|
|
|
299
299
|
| `--fixed-token <uuid>` | — | Stable auth token across restarts |
|
|
300
300
|
| `--automation` | off | Enable automation hooks |
|
|
301
301
|
| `--automation-policy <path>` | — | Path to policy JSON |
|
|
302
|
-
| `--
|
|
302
|
+
| `--driver subprocess` | none | Enable Claude subprocess orchestration |
|
|
303
303
|
| `--plugin <path>` | — | Load a plugin (repeatable) |
|
|
304
304
|
| `--plugin-watch` | off | Hot-reload plugins on change |
|
|
305
305
|
| `--issuer-url <url>` | — | Activate OAuth 2.0 mode |
|
|
@@ -314,8 +314,8 @@ claude-ide-bridge install claude-mem
|
|
|
314
314
|
| File | Description |
|
|
315
315
|
|---|---|
|
|
316
316
|
| [ARCHITECTURE.md](ARCHITECTURE.md) | System topology, request lifecycle, component map, design decisions |
|
|
317
|
-
| [documents/platform-docs.md](documents/platform-docs.md) | Full tool reference — all
|
|
318
|
-
| [documents/prompts-reference.md](documents/prompts-reference.md) | All MCP prompts (
|
|
317
|
+
| [documents/platform-docs.md](documents/platform-docs.md) | Full tool reference — all 170+ tools with parameters and examples |
|
|
318
|
+
| [documents/prompts-reference.md](documents/prompts-reference.md) | All MCP prompts (36 prompts, 12 plugin skills, 4 subagents) |
|
|
319
319
|
| [docs/automation.md](docs/automation.md) | Automation hooks reference — all 18 events, policy schema, condition filters |
|
|
320
320
|
| [docs/troubleshooting.md](docs/troubleshooting.md) | Diagnostics, common errors, and fixes |
|
|
321
321
|
| [docs/remote-access.md](docs/remote-access.md) | VPS setup, OAuth 2.0, nginx/Caddy reverse proxy |
|
|
@@ -333,7 +333,7 @@ claude-ide-bridge install claude-mem
|
|
|
333
333
|
|
|
334
334
|
## Requirements
|
|
335
335
|
|
|
336
|
-
- **Node.js ≥
|
|
336
|
+
- **Node.js ≥ 22** (bridge)
|
|
337
337
|
- **VS Code, Cursor, or Windsurf** — optional. Headless mode covers git, terminals, GitHub, and LSP via `typescript-language-server`. Extension required for debugger, editor decorations, and live editor state.
|
|
338
338
|
- **Claude Code CLI** — for local use. Remote MCP clients (claude.ai, Codex CLI) work via Streamable HTTP transport with OAuth 2.0.
|
|
339
339
|
|
package/README.md
CHANGED
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
# Patchwork OS
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/patchwork-os)
|
|
4
|
+
[](https://github.com/Oolab-labs/patchwork-os/actions/workflows/ci.yml)
|
|
5
|
+
[](https://www.npmjs.com/package/patchwork-os)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
3
8
|
### Your personal AI runtime, local-first.
|
|
4
9
|
|
|
10
|
+
**You decide which model. You decide which actions need a human nod. You own the credentials, the logs, and the deployment.** Nothing phones home unless you [opt in to anonymous analytics](#telemetry).
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
5
14
|
> Patchwork OS is a local-first personal AI runtime: pluggable model providers, hot-reloadable tools, YAML recipes, a delegation policy with approval queue, and a durable trace memory — all running on your machine, all under your policy.
|
|
6
15
|
|
|
7
|
-
|
|
16
|
+
## Contents
|
|
17
|
+
|
|
18
|
+
- [Two ways to use it](#the-same-codebase-ships-two-ways-to-use-it)
|
|
19
|
+
- [Dashboard only — no editor required](#dashboard-only--no-code-editor-required)
|
|
20
|
+
- [Claude IDE Bridge — quick start](#-claude-ide-bridge--quick-start)
|
|
21
|
+
- [Windows](#windows)
|
|
22
|
+
- [Architecture](#architecture)
|
|
23
|
+
- [Telemetry](#telemetry)
|
|
24
|
+
- [Contributing & support](#support)
|
|
8
25
|
|
|
9
26
|
**Five primitives, one runtime:**
|
|
10
27
|
|
|
11
|
-
- **Tools** —
|
|
28
|
+
- **Tools** — 177 built-in (LSP, git, terminal, debugger, files) plus any plugin you write. Plugins hot-reload — Claude can author a tool mid-session and call it on the next turn. See [Live Toolsmithing](documents/live-toolsmithing.md).
|
|
12
29
|
- **Recipes** — YAML automations triggered by cron, file save, git commit, test run, or webhook. Anything that can POST a JSON payload can fire a recipe.
|
|
13
30
|
- **Delegation Policy** — three risk tiers, four-source precedence (managed → project-local → project → user). Auto-approve safe, require approval for risky, block dangerous.
|
|
14
31
|
- **Trace memory** — every approval, every recipe run, every enrichment is durable JSONL. Past decisions are surfaced into future sessions automatically. Bundle and back up with [`patchwork traces export`](src/commands/tracesExport.ts).
|
|
@@ -20,20 +37,45 @@ You decide which model. You decide which actions need a human nod. You own the c
|
|
|
20
37
|
|
|
21
38
|
---
|
|
22
39
|
|
|
23
|
-
The same codebase ships
|
|
40
|
+
## The same codebase ships two ways to use it
|
|
41
|
+
|
|
42
|
+
Pick the layer you need.
|
|
24
43
|
|
|
25
44
|
| | What you get | Install | Best for |
|
|
26
45
|
|---|---|---|---|
|
|
27
|
-
| **🔌 Claude IDE Bridge** | MCP bridge connecting Claude Code to your IDE.
|
|
28
|
-
| **🤖 Patchwork OS** | Everything in the bridge **plus** YAML recipes, approval queue, oversight dashboard, mobile push approvals, multi-model providers, JetBrains companion. | Same package, run `patchwork
|
|
46
|
+
| **🔌 Claude IDE Bridge** | MCP bridge connecting Claude Code to your IDE. 177 tools — diagnostics, LSP, debugger, terminal, git, GitHub, file ops. | `npm i -g patchwork-os` then run `claude-ide-bridge` | Anyone who wants Claude Code to see and act on their editor state |
|
|
47
|
+
| **🤖 Patchwork OS** | Everything in the bridge **plus** YAML recipes, approval queue, oversight dashboard, mobile push approvals, multi-model providers, JetBrains companion. | Same package, run `patchwork init` | Power users running automation, agent workflows, or background tasks |
|
|
29
48
|
|
|
30
49
|
Same codebase. Bridge is the foundation; Patchwork OS is the optional layer on top. **No vendor lock-in. Runs on your machine.**
|
|
31
50
|
|
|
32
51
|
---
|
|
33
52
|
|
|
53
|
+
## Dashboard Only — No Code Editor Required
|
|
54
|
+
|
|
55
|
+
> You do not need VS Code, Windsurf, Cursor, or Claude Code CLI to use the Patchwork dashboard.
|
|
56
|
+
|
|
57
|
+
The dashboard is a standalone Next.js app that communicates with the bridge over HTTP. No editor extension required.
|
|
58
|
+
|
|
59
|
+
**Prereqs:** [Node.js 22+](https://nodejs.org) · tmux on macOS/Linux (`brew install tmux` / `apt install tmux`) — auto-detected, falls back to background mode if absent. **Windows:** natively supported — no WSL required.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx patchwork-os@beta init # scaffolds ~/.patchwork and generates a dashboard login (no install needed)
|
|
63
|
+
patchwork start # launches bridge + dashboard (auto-detects tmux; falls back to background mode if absent)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Open **http://localhost:3200** — that's it. `npx patchwork-os@beta init` auto-generates a dashboard password and saves it to `~/.patchwork/.env` — it prints the password at the end of setup, save it for your first login.
|
|
67
|
+
|
|
68
|
+
**What you get:** run and schedule YAML recipes, connect external services (Gmail, Calendar, Slack), review AI drafts in the approval queue, read your AI inbox — all from the browser. No coding required.
|
|
69
|
+
|
|
70
|
+
> **Want IDE features too?** See [Claude IDE Bridge — Quick Start](#-claude-ide-bridge--quick-start) below to add LSP, debugger, and editor tools on top.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
34
74
|
## 🔌 Claude IDE Bridge — Quick Start
|
|
35
75
|
|
|
36
|
-
|
|
76
|
+
> Developers only — skip to [Dashboard Only](#dashboard-only--no-code-editor-required) above if you just want the web dashboard.
|
|
77
|
+
|
|
78
|
+
**Prerequisites:** a supported code editor — **VS Code, Cursor, Windsurf, or Google Antigravity** (or JetBrains via the [companion plugin](#jetbrains-plugin)) — plus Node.js 22+ and the [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code). The bridge's LSP, debugger, and editor-state tools run through the editor extension; without one you're limited to the headless CLI subset.
|
|
37
79
|
|
|
38
80
|
```bash
|
|
39
81
|
# 1. Install the npm package
|
|
@@ -47,10 +89,15 @@ claude-ide-bridge install-extension
|
|
|
47
89
|
claude-ide-bridge --workspace .
|
|
48
90
|
|
|
49
91
|
# 4. Connect Claude Code (in another terminal)
|
|
92
|
+
# The env var skips Claude Code's built-in IDE-detection check — the bridge
|
|
93
|
+
# manages this connection itself. Add `export CLAUDE_CODE_IDE_SKIP_VALID_CHECK=true`
|
|
94
|
+
# to your shell profile so `claude --ide` is all you need going forward.
|
|
50
95
|
CLAUDE_CODE_IDE_SKIP_VALID_CHECK=true claude --ide
|
|
51
96
|
```
|
|
52
97
|
|
|
53
|
-
Type `/ide` in Claude Code to confirm the connection. That's it — Claude now sees your diagnostics, open files, and editor state, and can call
|
|
98
|
+
Type `/ide` in Claude Code to confirm the connection. That's it — Claude now sees your diagnostics, open files, and editor state, and can call 177 tools to act on them.
|
|
99
|
+
|
|
100
|
+
> ⭐ If this saves you a config file or a debug session, drop a star — it's the only signal I get that it's helping.
|
|
54
101
|
|
|
55
102
|
**What the bridge gives Claude:**
|
|
56
103
|
|
|
@@ -72,23 +119,46 @@ The bridge runs without any flags. No recipes, no automation, no dashboard — j
|
|
|
72
119
|
|---|---|
|
|
73
120
|
| Claude Code CLI | WebSocket `ws://127.0.0.1:<port>` |
|
|
74
121
|
| Claude Desktop | stdio shim → WebSocket |
|
|
75
|
-
|
|
|
122
|
+
| Gemini CLI, Codex CLI, claude.ai | Streamable HTTP + Bearer token |
|
|
123
|
+
|
|
124
|
+
**Connecting Gemini CLI:**
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# Get the auth token from the bridge's lock file
|
|
128
|
+
patchwork-os print-token
|
|
129
|
+
|
|
130
|
+
# Add the bridge as an MCP server
|
|
131
|
+
gemini mcp add patchwork http://127.0.0.1:<port>/mcp \
|
|
132
|
+
--header "Authorization: Bearer <token>"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The bridge auto-responds to the GET probe Gemini sends before initializing, so it shows as **Connected** immediately.
|
|
76
136
|
|
|
77
137
|
**Tool modes:**
|
|
78
138
|
|
|
79
139
|
| Mode | Tools | When to use |
|
|
80
140
|
|---|---|---|
|
|
81
|
-
| Full _(default)_ |
|
|
141
|
+
| Full _(default)_ | 177 | All git, GitHub, terminal, file ops, orchestration |
|
|
82
142
|
| Slim (`--slim`) | ~60 | LSP + debugger + editor state only |
|
|
83
143
|
|
|
84
144
|
Bridge-only docs: [documents/platform-docs.md](documents/platform-docs.md)
|
|
85
145
|
|
|
86
146
|
---
|
|
87
147
|
|
|
148
|
+
## Windows
|
|
149
|
+
|
|
150
|
+
The bridge, VS Code extension, and orchestrator all run **natively on Windows — no WSL required**. Install the same way (`npm install -g patchwork-os`), then start the bridge with `npm run start:bridge` or the full stack with `npm run start-all:node` (cross-platform) / `npm run start-all:win` (PowerShell-native).
|
|
151
|
+
|
|
152
|
+
A few bash+tmux entry points (`patchwork start`, `npm run remote`) still need WSL2 or Git Bash. Credential storage uses Windows DPAPI.
|
|
153
|
+
|
|
154
|
+
**Full setup, the orchestrator flag reference, and the native-Windows limitations table:** [docs/windows.md](docs/windows.md).
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
88
158
|
## 🤖 Patchwork OS — Quick Start
|
|
89
159
|
|
|
90
160
|
```bash
|
|
91
|
-
npx patchwork-os@beta
|
|
161
|
+
npx patchwork-os@beta init
|
|
92
162
|
```
|
|
93
163
|
|
|
94
164
|
Sets up 5 local recipes, detects Ollama, and opens a terminal dashboard — under 90 seconds.
|
|
@@ -99,7 +169,7 @@ Get an AI digest of your Gmail, calendar, and tasks every morning — or on dema
|
|
|
99
169
|
|
|
100
170
|
```bash
|
|
101
171
|
# First-time setup (connect Gmail + Google Calendar)
|
|
102
|
-
patchwork-os
|
|
172
|
+
patchwork-os init
|
|
103
173
|
patchwork-os connections connect gmail
|
|
104
174
|
patchwork-os connections connect google-calendar
|
|
105
175
|
|
|
@@ -125,25 +195,63 @@ Think of it as a background agent that acts on your behalf — but asks before s
|
|
|
125
195
|
|
|
126
196
|
**Recipes** are plain YAML files. They declare a trigger (cron, file save, git commit, test run, webhook) and an action (run a prompt, write to inbox, call a connector). No code required. Share them like dotfiles.
|
|
127
197
|
|
|
128
|
-
**Models** are yours. Claude, GPT, Gemini, Grok, or local Ollama. Swap at any time. Nothing phones home.
|
|
198
|
+
**Models** are yours. Claude, GPT, Gemini, Grok, or local Ollama. Swap at any time. Nothing phones home unless you opt in (see [Telemetry](#telemetry)).
|
|
129
199
|
|
|
130
|
-
**Oversight** is non-negotiable. Every write or external action lands in `~/.patchwork/inbox/` for approval. The web UI at `http://localhost:3200` shows pending approvals, live sessions, recipe run history, and analytics.
|
|
200
|
+
**Oversight** is non-negotiable. Every write or external action lands in `~/.patchwork/inbox/` for approval. The web UI at `http://localhost:3200` shows pending approvals, live sessions, recipe run history, and local analytics (the dashboard's analytics panel is computed entirely from on-disk logs — it does not transmit anything).
|
|
131
201
|
|
|
132
202
|
### Patchwork commands
|
|
133
203
|
|
|
204
|
+
Grouped by what they do. Full list: `patchwork --help`.
|
|
205
|
+
|
|
206
|
+
**Setup**
|
|
207
|
+
|
|
134
208
|
```bash
|
|
135
|
-
#
|
|
136
|
-
patchwork
|
|
209
|
+
npx patchwork-os@beta init # one-command first-time setup (no install needed)
|
|
210
|
+
patchwork install-extension # install the VS Code / Cursor / Windsurf extension
|
|
211
|
+
patchwork gen-claude-md # generate a starter CLAUDE.md for this workspace
|
|
212
|
+
patchwork gen-plugin-stub ./my-plugin --name "org/name" --prefix "myPrefix"
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Runtime**
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
patchwork start # bridge + dashboard (auto-detects tmux)
|
|
219
|
+
patchwork start-all # bridge + extension watcher in tmux
|
|
220
|
+
patchwork dashboard # launch dashboard standalone
|
|
221
|
+
patchwork shim # stdio shim for Claude Desktop
|
|
222
|
+
patchwork status # one-shot health check
|
|
223
|
+
patchwork print-token # auth token from the active lock file
|
|
224
|
+
```
|
|
137
225
|
|
|
138
|
-
|
|
139
|
-
|
|
226
|
+
**Recipes & tasks**
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
patchwork recipe list # installed recipes
|
|
140
230
|
patchwork recipe run daily-status # run one now
|
|
141
|
-
patchwork recipe
|
|
142
|
-
patchwork
|
|
143
|
-
patchwork
|
|
231
|
+
patchwork recipe new my-recipe --interactive
|
|
232
|
+
patchwork start-task "<description>" # enqueue a free-form Claude task
|
|
233
|
+
patchwork quick-task fixErrors # context-aware preset task
|
|
234
|
+
patchwork continue-handoff # resume from stored handoff note
|
|
235
|
+
patchwork suggest # AI-suggest a recipe for a goal
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Ops & insight**
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
patchwork halts --window overnight # morning summary of recent recipe halts
|
|
242
|
+
patchwork judgments # review recent approval / decision traces
|
|
243
|
+
patchwork traces export # bundle durable trace memory for backup
|
|
244
|
+
patchwork launchd # macOS LaunchAgent management
|
|
245
|
+
patchwork notify <Event> # bridge ←→ Claude Code hook wiring
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Safety**
|
|
144
249
|
|
|
145
|
-
|
|
146
|
-
patchwork
|
|
250
|
+
```bash
|
|
251
|
+
patchwork kill-switch engage # stop all background automation immediately
|
|
252
|
+
patchwork kill-switch status # is the kill-switch active?
|
|
253
|
+
patchwork kill-switch release # resume automation
|
|
254
|
+
patchwork panic # alias for `kill-switch engage`
|
|
147
255
|
```
|
|
148
256
|
|
|
149
257
|
### Starter recipes
|
|
@@ -169,11 +277,11 @@ The package ships these in `templates/recipes/`. Recipes that need API keys are
|
|
|
169
277
|
|
|
170
278
|
**Delegation policy presets** ([`templates/policies/`](templates/policies/)): five persona starters — conservative, developer, headless-CI, regulated-industry, personal-assistant. Copy one into `~/.patchwork/config.json` and restart.
|
|
171
279
|
|
|
172
|
-
**Webhook recipe starters** ([`templates/recipes/webhook/`](templates/recipes/webhook/)):
|
|
280
|
+
**Webhook recipe starters** ([`templates/recipes/webhook/`](templates/recipes/webhook/)): six webhook-triggered recipes — capture-thought, morning-brief (on-demand), meeting-prep, incident-intake, customer-escalation, apple-watch-health-log. Anything that can POST HTTP can drive these — iPhone Shortcut, Stream Deck, Home Assistant, NFC tag, monitoring tool.
|
|
173
281
|
|
|
174
282
|
### Automation hooks
|
|
175
283
|
|
|
176
|
-
Event-driven hooks trigger Claude tasks automatically. Activate with `--automation --automation-policy <path.json> --
|
|
284
|
+
Event-driven hooks trigger Claude tasks automatically. Activate with `--automation --automation-policy <path.json> --driver subprocess`.
|
|
177
285
|
|
|
178
286
|
Key hooks:
|
|
179
287
|
|
|
@@ -193,13 +301,43 @@ All hooks support inline prompts, named prompt references, and a minimum 5s cool
|
|
|
193
301
|
|
|
194
302
|
---
|
|
195
303
|
|
|
304
|
+
## More features
|
|
305
|
+
|
|
306
|
+
### 🖥️ Cowork (computer-use handoff)
|
|
307
|
+
|
|
308
|
+
Hand a task off to Claude's computer-use sandbox without losing IDE context. Run `/mcp__bridge__cowork` in a regular Claude chat to snapshot editor state, then open Cowork — it reads the handoff note for instant continuity. Cowork runs in an isolated git worktree. See [docs/cowork.md](docs/cowork.md).
|
|
309
|
+
|
|
310
|
+
### 🔐 OAuth 2.0 — turn your runtime into a personal API
|
|
311
|
+
|
|
312
|
+
Start the bridge with `--issuer-url https://your-domain.com` to expose a full OAuth 2.0 surface: PKCE S256, dynamic client registration (RFC 7591), `/oauth/authorize` approval page, opaque 24h access tokens. Connect claude.ai, Codex CLI, or any MCP client over Streamable HTTP. See [docs/remote-access.md](docs/remote-access.md).
|
|
313
|
+
|
|
314
|
+
### 🛑 Kill-switch — stop everything, now
|
|
315
|
+
|
|
316
|
+
`patchwork kill-switch engage` (or the `patchwork panic` alias) halts all running automation, recipes, and orchestrator tasks immediately. `patchwork kill-switch status` reports state; `release` resumes. Designed for the moment you realise an agent is doing the wrong thing.
|
|
317
|
+
|
|
318
|
+
### 🪟 Native Windows support
|
|
319
|
+
|
|
320
|
+
Bridge, VS Code extension, smoke harness, and CI are all green on native Windows — no WSL required. See [Windows Quick Start](#-windows-quick-start) above.
|
|
321
|
+
|
|
322
|
+
### ☀️ Morning summary
|
|
323
|
+
|
|
324
|
+
`patchwork halts --window overnight` prints a one-screen digest of recipe halts (categorised, 5 most recent reasons). Pair with `patchwork judgments` to review what Claude decided overnight before approving anything.
|
|
325
|
+
|
|
326
|
+
### 🛒 Recipe marketplace — install + submit from the dashboard
|
|
327
|
+
|
|
328
|
+
Browse the curated registry at [github.com/patchworkos/recipes](https://github.com/patchworkos/recipes) at **`/marketplace`** in the dashboard. One-click install if the bridge is running, with risk + connector preview before fetch.
|
|
329
|
+
|
|
330
|
+
Contributing a recipe? **`/marketplace/submit`** is a full in-app submission flow: starter YAML presets (manual / scheduled / webhook), live `recipe.json` manifest preview, auto-save draft in `sessionStorage`, lint via the bridge before submit, and a "Submit to GitHub" button that opens a prefilled create-file PR on the registry repo. GitHub auto-forks for users without push access — no extra accounts needed.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
196
334
|
## Architecture
|
|
197
335
|
|
|
198
336
|
```
|
|
199
337
|
patchwork-os (npm package)
|
|
200
338
|
│
|
|
201
339
|
├── claude-ide-bridge ← run alone for bridge-only mode
|
|
202
|
-
│ ├── MCP server
|
|
340
|
+
│ ├── MCP server 177 tools over WebSocket / HTTP / stdio
|
|
203
341
|
│ ├── VS Code extension LSP, debugger, editor state, live diagnostics
|
|
204
342
|
│ ├── Git / GitHub gitCommit, gitPush, githubCreatePR, …
|
|
205
343
|
│ ├── Terminal runInTerminal, getTerminalOutput, …
|
|
@@ -225,13 +363,13 @@ Use whichever fits your mental model.
|
|
|
225
363
|
|
|
226
364
|
---
|
|
227
365
|
|
|
228
|
-
## Tool surface
|
|
366
|
+
## Tool surface
|
|
229
367
|
|
|
230
|
-
|
|
368
|
+
177 MCP tools across 15 categories. Highlights:
|
|
231
369
|
|
|
232
370
|
| Category | Tools |
|
|
233
371
|
|---|---|
|
|
234
|
-
| LSP / Code Intelligence | `getDiagnostics`, `goToDefinition`, `findReferences`, `getCallHierarchy`, `renameSymbol`, `refactorAnalyze`, `explainSymbol`, … (
|
|
372
|
+
| LSP / Code Intelligence | `getDiagnostics`, `goToDefinition`, `findReferences`, `getCallHierarchy`, `renameSymbol`, `refactorAnalyze`, `explainSymbol`, … (34 tools) |
|
|
235
373
|
| Git | `getGitStatus`, `getGitDiff`, `gitCommit`, `gitPush`, `gitCheckout`, `gitBlame`, … (16 tools) |
|
|
236
374
|
| GitHub | `githubCreatePR`, `githubListPRs`, `githubCreateIssue`, `githubPostPRReview`, … (13 tools) |
|
|
237
375
|
| Terminal | `runInTerminal`, `createTerminal`, `getTerminalOutput`, `waitForTerminalOutput` |
|
|
@@ -293,17 +431,17 @@ Systemd service and deploy scripts in [`deploy/`](deploy/). Full guide: [docs/re
|
|
|
293
431
|
|
|
294
432
|
| Feature | Status |
|
|
295
433
|
|---|---|
|
|
296
|
-
|
|
|
434
|
+
| 177 MCP tools (LSP, git, tests, debugger, diagnostics) | **shipped** |
|
|
297
435
|
| VS Code / Cursor / Windsurf / Antigravity extension | **shipped** |
|
|
298
436
|
| JetBrains plugin (49 handlers) | **shipped** |
|
|
299
|
-
| `patchwork
|
|
437
|
+
| `patchwork init` — one-command setup | **shipped** |
|
|
300
438
|
| Terminal dashboard | **shipped** |
|
|
301
439
|
| Web oversight UI (approvals, sessions, recipes) | **shipped** |
|
|
302
440
|
| Recipe runner (YAML, cron, manual, webhook) | **shipped** |
|
|
303
441
|
| Multi-provider LLM (Claude, Gemini, OpenAI, Grok, Ollama) | **shipped** |
|
|
304
442
|
| Connectors: Linear, Sentry, Slack, Google Calendar, Intercom, HubSpot, Datadog, Stripe | **shipped** |
|
|
305
443
|
| Cross-session memory (traces, handoff notes) | **shipped** |
|
|
306
|
-
| Mobile oversight PWA (push approvals) | **shipped
|
|
444
|
+
| Mobile oversight PWA (push approvals) | **shipped** |
|
|
307
445
|
| Community recipe bundles (`patchwork recipe install github:<org>/<repo>`) | **shipped** |
|
|
308
446
|
| Community recipe registry / discovery UI | TBD |
|
|
309
447
|
|
|
@@ -320,17 +458,38 @@ npm install && npm run build
|
|
|
320
458
|
# Symlink installs break the macOS LaunchAgent (EPERM at startup)
|
|
321
459
|
npm pack
|
|
322
460
|
npm install -g patchwork-os-*.tgz
|
|
323
|
-
patchwork
|
|
461
|
+
patchwork init
|
|
324
462
|
```
|
|
325
463
|
|
|
326
464
|
---
|
|
327
465
|
|
|
466
|
+
## Telemetry
|
|
467
|
+
|
|
468
|
+
Patchwork ships an **opt-in** anonymous usage summary. It is **disabled by default** — the bridge sends nothing unless you explicitly turn it on.
|
|
469
|
+
|
|
470
|
+
**If you opt in**, on bridge shutdown an aggregate summary is POSTed to `https://analytics.claude-ide-bridge.dev/v1/usage`:
|
|
471
|
+
|
|
472
|
+
- Total session count and total tool-call count (no per-call payloads)
|
|
473
|
+
- Tool name → call count + median/p95 latency, capped at the top-N tools
|
|
474
|
+
- Bridge version, Node version, OS family (`darwin` / `linux` / `win32`)
|
|
475
|
+
- A per-install random salt (regenerated at any time by deleting `~/.claude/ide/analytics-salt`) used to coalesce repeated installs from the same machine without sending machine identifiers
|
|
476
|
+
|
|
477
|
+
**What is never sent:** workspace paths, file contents, prompts, tool arguments, tool output, project names, git history, credentials, IPs (transport-level only, dropped server-side), or anything from `~/.patchwork/`.
|
|
478
|
+
|
|
479
|
+
**How to opt in:** set `analyticsEnabled: true` in the dashboard's Settings panel, or write `{"enabled": true, "decidedAt": "<iso>"}` to `~/.claude/ide/analytics.json` (mode 0600).
|
|
480
|
+
|
|
481
|
+
**How to opt out / stay out:** do nothing. Default state is `null` (no preference) which behaves as opt-out. To explicitly opt out and silence future prompts, write `{"enabled": false, ...}` to the same file.
|
|
482
|
+
|
|
483
|
+
**Source:** [src/analyticsSend.ts](src/analyticsSend.ts), [src/analyticsAggregator.ts](src/analyticsAggregator.ts), [src/analyticsPrefs.ts](src/analyticsPrefs.ts) — endpoint is hardcoded (not runtime-configurable, by design, to prevent redirect attacks).
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
328
487
|
## Documentation
|
|
329
488
|
|
|
330
489
|
| Doc | Contents |
|
|
331
490
|
|---|---|
|
|
332
|
-
| [documents/platform-docs.md](documents/platform-docs.md) | Full tool reference (
|
|
333
|
-
| [documents/prompts-reference.md](documents/prompts-reference.md) | All
|
|
491
|
+
| [documents/platform-docs.md](documents/platform-docs.md) | Full tool reference (177 tools), automation hooks, connectors |
|
|
492
|
+
| [documents/prompts-reference.md](documents/prompts-reference.md) | All 36 MCP prompts |
|
|
334
493
|
| [documents/styleguide.md](documents/styleguide.md) | Code conventions, UI patterns |
|
|
335
494
|
| [documents/roadmap.md](documents/roadmap.md) | Development direction |
|
|
336
495
|
| [documents/data-reference.md](documents/data-reference.md) | Data flows, state management, protocol details |
|
|
@@ -345,6 +504,14 @@ patchwork patchwork-init
|
|
|
345
504
|
|
|
346
505
|
---
|
|
347
506
|
|
|
507
|
+
## Support
|
|
508
|
+
|
|
509
|
+
- **Bugs & feature requests:** [GitHub Issues](https://github.com/Oolab-labs/patchwork-os/issues)
|
|
510
|
+
- **Questions & community:** [GitHub Discussions](https://github.com/Oolab-labs/patchwork-os/discussions)
|
|
511
|
+
- **Contributing:** see [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
348
515
|
## License
|
|
349
516
|
|
|
350
517
|
MIT © Oolab Labs
|
package/deploy/README.md
CHANGED
|
@@ -31,7 +31,7 @@ DOMAIN=bridge.example.com bash deploy/bootstrap-new-vps.sh
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
The bootstrap script handles everything end-to-end:
|
|
34
|
-
1. Installs Node.js
|
|
34
|
+
1. Installs Node.js 22, nginx, certbot
|
|
35
35
|
2. Creates a dedicated `claude-bridge` system user (non-root)
|
|
36
36
|
3. Clones the repo to `/opt/claude-ide-bridge`
|
|
37
37
|
4. Runs `npm ci && npm run build`
|
package/deploy/bootstrap-vps.sh
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# deploy/bootstrap-vps.sh
|
|
3
|
-
# Full VPS bootstrap for
|
|
4
|
-
# Run as root on a fresh Ubuntu 24.04 VPS
|
|
5
|
-
# Usage: bash bootstrap-vps.sh
|
|
3
|
+
# Full VPS bootstrap for a single Patchwork OS bridge.
|
|
4
|
+
# Run as root on a fresh Ubuntu 24.04 VPS.
|
|
5
|
+
# Usage: PATCHWORK_DOMAIN=your.tld PATCHWORK_ACME_EMAIL=you@your.tld bash bootstrap-vps.sh
|
|
6
6
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
# Domain + ACME contact are deployment-specific — supply them via the
|
|
10
|
+
# environment so no real domain/email is committed to version control.
|
|
11
|
+
DOMAIN="${PATCHWORK_DOMAIN:?set PATCHWORK_DOMAIN, e.g. your.tld}"
|
|
12
|
+
EMAIL="${PATCHWORK_ACME_EMAIL:?set PATCHWORK_ACME_EMAIL, e.g. you@your.tld}"
|
|
11
13
|
BRIDGE_PORT=3284
|
|
12
14
|
BRIDGE_USER="patchwork"
|
|
13
15
|
BRIDGE_HOME="/opt/patchwork"
|
|
@@ -81,7 +83,6 @@ ExecStart=${BRIDGE_BIN} \\
|
|
|
81
83
|
--vps \\
|
|
82
84
|
--issuer-url https://${DOMAIN} \\
|
|
83
85
|
--cors-origin https://claude.ai \\
|
|
84
|
-
--cors-origin https://app.patchworkos.com \\
|
|
85
86
|
--fixed-token ${FIXED_TOKEN}
|
|
86
87
|
|
|
87
88
|
Restart=always
|
|
@@ -117,11 +118,11 @@ ufw status
|
|
|
117
118
|
|
|
118
119
|
# ── 8. Nginx config — HTTP only first (certbot needs nginx up to issue cert) ──
|
|
119
120
|
info "Writing nginx config (HTTP only)..."
|
|
120
|
-
cat > /etc/nginx/sites-available/
|
|
121
|
+
cat > /etc/nginx/sites-available/patchwork <<'NGINX'
|
|
121
122
|
server {
|
|
122
123
|
listen 80;
|
|
123
124
|
listen [::]:80;
|
|
124
|
-
server_name
|
|
125
|
+
server_name __DOMAIN__ www.__DOMAIN__;
|
|
125
126
|
|
|
126
127
|
location /.well-known/acme-challenge/ { root /var/www/html; }
|
|
127
128
|
|
|
@@ -140,7 +141,11 @@ server {
|
|
|
140
141
|
}
|
|
141
142
|
NGINX
|
|
142
143
|
|
|
143
|
-
|
|
144
|
+
# Substitute the deployment domain into the just-written config (the heredoc
|
|
145
|
+
# is quoted so nginx's own $variables survive un-expanded).
|
|
146
|
+
sed -i "s/__DOMAIN__/${DOMAIN}/g" /etc/nginx/sites-available/patchwork
|
|
147
|
+
|
|
148
|
+
ln -sf /etc/nginx/sites-available/patchwork /etc/nginx/sites-enabled/patchwork
|
|
144
149
|
rm -f /etc/nginx/sites-enabled/default
|
|
145
150
|
|
|
146
151
|
nginx -t
|
|
@@ -39,9 +39,17 @@ echo "==> Copying tarball to VPS..."
|
|
|
39
39
|
scp "$TARBALL" "$VPS:/tmp/patchwork-dashboard.tar.gz"
|
|
40
40
|
|
|
41
41
|
echo "==> Deploying on VPS..."
|
|
42
|
+
# Pass secrets as positional args (NOT inside the heredoc body) so the
|
|
43
|
+
# single-quoted heredoc still preserves remote-shell `$X` references but
|
|
44
|
+
# the operator's local env reaches the VPS. Without this, the previous
|
|
45
|
+
# `${PATCHWORK_BRIDGE_TOKEN:-REPLACE_ME}` inside the heredoc evaluated on
|
|
46
|
+
# the remote, where the var doesn't exist, and always wrote REPLACE_ME.
|
|
42
47
|
# shellcheck disable=SC2087
|
|
43
|
-
ssh "$VPS" bash <<'REMOTE'
|
|
48
|
+
ssh "$VPS" bash -s -- "${PATCHWORK_BRIDGE_TOKEN:-REPLACE_ME}" "${DASHBOARD_PASSWORD:-}" <<'REMOTE'
|
|
44
49
|
set -euo pipefail
|
|
50
|
+
# `${N:-}` so an empty/missing positional arg doesn't trip `set -u`.
|
|
51
|
+
PATCHWORK_BRIDGE_TOKEN="${1:-REPLACE_ME}"
|
|
52
|
+
DASHBOARD_PASSWORD="${2:-}"
|
|
45
53
|
REMOTE_DIR="/opt/patchwork-dashboard"
|
|
46
54
|
PM2_NAME="patchwork-dashboard"
|
|
47
55
|
PORT=3200
|
|
@@ -52,10 +60,26 @@ if pm2 list | grep -q "$PM2_NAME"; then
|
|
|
52
60
|
pm2 delete "$PM2_NAME" || true
|
|
53
61
|
fi
|
|
54
62
|
|
|
63
|
+
# Preserve .env.local across the deploy. Without this stash/restore, the
|
|
64
|
+
# `rm -rf "$REMOTE_DIR"` below blows away every secret the operator pasted
|
|
65
|
+
# (VAPID, PATCHWORK_PUSH_TOKEN, custom DASHBOARD_PASSWORD), and the "if
|
|
66
|
+
# already exists, preserve" branch later in this script never fires —
|
|
67
|
+
# the file no longer exists by then.
|
|
68
|
+
ENV_BACKUP=""
|
|
69
|
+
if [ -f "$REMOTE_DIR/.env.local" ]; then
|
|
70
|
+
ENV_BACKUP="$(mktemp /tmp/patchwork-env.XXXXXX)"
|
|
71
|
+
cp -p "$REMOTE_DIR/.env.local" "$ENV_BACKUP"
|
|
72
|
+
fi
|
|
73
|
+
|
|
55
74
|
# Wipe and recreate deploy dir
|
|
56
75
|
rm -rf "$REMOTE_DIR"
|
|
57
76
|
mkdir -p "$REMOTE_DIR"
|
|
58
77
|
|
|
78
|
+
if [ -n "$ENV_BACKUP" ] && [ -f "$ENV_BACKUP" ]; then
|
|
79
|
+
cp -p "$ENV_BACKUP" "$REMOTE_DIR/.env.local"
|
|
80
|
+
rm -f "$ENV_BACKUP"
|
|
81
|
+
fi
|
|
82
|
+
|
|
59
83
|
# Extract
|
|
60
84
|
tar -xzf /tmp/patchwork-dashboard.tar.gz -C "$REMOTE_DIR"
|
|
61
85
|
rm /tmp/patchwork-dashboard.tar.gz
|