patchwork-os 0.2.0-alpha.2 → 0.2.0-alpha.22
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 +40 -15
- package/deploy/bootstrap-vps.sh +184 -0
- package/dist/approvalHttp.d.ts +11 -2
- package/dist/approvalHttp.js +98 -10
- package/dist/approvalHttp.js.map +1 -1
- package/dist/approvalQueue.d.ts +12 -1
- package/dist/approvalQueue.js +25 -3
- package/dist/approvalQueue.js.map +1 -1
- package/dist/automation.d.ts +20 -0
- package/dist/automation.js +35 -0
- package/dist/automation.js.map +1 -1
- package/dist/bridge.js +145 -23
- package/dist/bridge.js.map +1 -1
- package/dist/bridgeToken.js +57 -19
- package/dist/bridgeToken.js.map +1 -1
- package/dist/claudeDriver.d.ts +3 -1
- package/dist/claudeDriver.js +48 -0
- 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/launchd.d.ts +2 -0
- package/dist/commands/launchd.js +94 -0
- package/dist/commands/launchd.js.map +1 -0
- package/dist/commands/recipe.d.ts +256 -0
- package/dist/commands/recipe.js +1313 -0
- package/dist/commands/recipe.js.map +1 -0
- package/dist/config.d.ts +15 -2
- package/dist/config.js +94 -8
- package/dist/config.js.map +1 -1
- package/dist/connectors/baseConnector.d.ts +117 -0
- package/dist/connectors/baseConnector.js +213 -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/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.d.ts +58 -8
- package/dist/connectors/github.js +312 -84
- package/dist/connectors/github.js.map +1 -1
- package/dist/connectors/gmail.d.ts +4 -1
- package/dist/connectors/gmail.js +93 -16
- package/dist/connectors/gmail.js.map +1 -1
- package/dist/connectors/googleCalendar.d.ts +60 -0
- package/dist/connectors/googleCalendar.js +345 -0
- package/dist/connectors/googleCalendar.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.d.ts +117 -0
- package/dist/connectors/linear.js +239 -0
- package/dist/connectors/linear.js.map +1 -0
- package/dist/connectors/mcpClient.d.ts +56 -0
- package/dist/connectors/mcpClient.js +189 -0
- package/dist/connectors/mcpClient.js.map +1 -0
- package/dist/connectors/mcpOAuth.d.ts +84 -0
- package/dist/connectors/mcpOAuth.js +389 -0
- package/dist/connectors/mcpOAuth.js.map +1 -0
- 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/sentry.d.ts +43 -0
- package/dist/connectors/sentry.js +188 -0
- package/dist/connectors/sentry.js.map +1 -0
- package/dist/connectors/slack.d.ts +50 -0
- package/dist/connectors/slack.js +324 -0
- package/dist/connectors/slack.js.map +1 -0
- package/dist/connectors/tokenStorage.d.ts +35 -0
- package/dist/connectors/tokenStorage.js +394 -0
- package/dist/connectors/tokenStorage.js.map +1 -0
- package/dist/connectors/zendesk.d.ts +104 -0
- package/dist/connectors/zendesk.js +424 -0
- package/dist/connectors/zendesk.js.map +1 -0
- package/dist/drivers/claude/api.d.ts +11 -0
- package/dist/drivers/claude/api.js +54 -0
- package/dist/drivers/claude/api.js.map +1 -0
- package/dist/drivers/claude/envSanitizer.d.ts +7 -0
- package/dist/drivers/claude/envSanitizer.js +18 -0
- package/dist/drivers/claude/envSanitizer.js.map +1 -0
- package/dist/drivers/claude/streamParser.d.ts +38 -0
- package/dist/drivers/claude/streamParser.js +34 -0
- package/dist/drivers/claude/streamParser.js.map +1 -0
- package/dist/drivers/claude/subprocess.d.ts +19 -0
- package/dist/drivers/claude/subprocess.js +216 -0
- package/dist/drivers/claude/subprocess.js.map +1 -0
- package/dist/drivers/claude/subprocessSettings.d.ts +9 -0
- package/dist/drivers/claude/subprocessSettings.js +55 -0
- package/dist/drivers/claude/subprocessSettings.js.map +1 -0
- package/dist/drivers/gemini/index.d.ts +18 -0
- package/dist/drivers/gemini/index.js +210 -0
- package/dist/drivers/gemini/index.js.map +1 -0
- package/dist/drivers/grok/index.d.ts +11 -0
- package/dist/drivers/grok/index.js +22 -0
- package/dist/drivers/grok/index.js.map +1 -0
- package/dist/drivers/index.d.ts +23 -0
- package/dist/drivers/index.js +31 -0
- package/dist/drivers/index.js.map +1 -0
- package/dist/drivers/openai/index.d.ts +24 -0
- package/dist/drivers/openai/index.js +110 -0
- package/dist/drivers/openai/index.js.map +1 -0
- package/dist/drivers/types.d.ts +72 -0
- package/dist/drivers/types.js +30 -0
- package/dist/drivers/types.js.map +1 -0
- package/dist/featureFlags.d.ts +73 -0
- package/dist/featureFlags.js +203 -0
- package/dist/featureFlags.js.map +1 -0
- package/dist/fp/automationInterpreter.js +1 -0
- 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/policyParser.js +17 -0
- package/dist/fp/policyParser.js.map +1 -1
- package/dist/index.js +543 -37
- 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/oauth.d.ts +4 -1
- package/dist/oauth.js +50 -14
- package/dist/oauth.js.map +1 -1
- package/dist/patchworkConfig.d.ts +9 -0
- package/dist/patchworkConfig.js.map +1 -1
- package/dist/recipes/chainedRunner.d.ts +104 -0
- package/dist/recipes/chainedRunner.js +359 -0
- package/dist/recipes/chainedRunner.js.map +1 -0
- 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/legacyRecipeCompat.d.ts +1 -0
- package/dist/recipes/legacyRecipeCompat.js +97 -0
- package/dist/recipes/legacyRecipeCompat.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/scheduler.d.ts +23 -7
- package/dist/recipes/scheduler.js +135 -41
- package/dist/recipes/scheduler.js.map +1 -1
- package/dist/recipes/schemaGenerator.d.ts +28 -0
- package/dist/recipes/schemaGenerator.js +484 -0
- package/dist/recipes/schemaGenerator.js.map +1 -0
- package/dist/recipes/templateEngine.d.ts +62 -0
- package/dist/recipes/templateEngine.js +182 -0
- package/dist/recipes/templateEngine.js.map +1 -0
- package/dist/recipes/toolRegistry.d.ts +181 -0
- package/dist/recipes/toolRegistry.js +300 -0
- package/dist/recipes/toolRegistry.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/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/file.d.ts +6 -0
- package/dist/recipes/tools/file.js +170 -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 +91 -0
- package/dist/recipes/tools/github.js.map +1 -0
- package/dist/recipes/tools/gmail.d.ts +6 -0
- package/dist/recipes/tools/gmail.js +210 -0
- package/dist/recipes/tools/gmail.js.map +1 -0
- package/dist/recipes/tools/index.d.ts +18 -0
- package/dist/recipes/tools/index.js +21 -0
- package/dist/recipes/tools/index.js.map +1 -0
- package/dist/recipes/tools/linear.d.ts +6 -0
- package/dist/recipes/tools/linear.js +83 -0
- package/dist/recipes/tools/linear.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/slack.d.ts +6 -0
- package/dist/recipes/tools/slack.js +72 -0
- package/dist/recipes/tools/slack.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/yamlRunner.d.ts +79 -0
- package/dist/recipes/yamlRunner.js +612 -346
- package/dist/recipes/yamlRunner.js.map +1 -1
- package/dist/recipesHttp.d.ts +14 -1
- package/dist/recipesHttp.js +21 -4
- package/dist/recipesHttp.js.map +1 -1
- package/dist/riskTier.js +1 -0
- package/dist/riskTier.js.map +1 -1
- package/dist/runLog.d.ts +23 -0
- package/dist/runLog.js +56 -1
- package/dist/runLog.js.map +1 -1
- package/dist/server.d.ts +19 -1
- package/dist/server.js +682 -31
- package/dist/server.js.map +1 -1
- package/dist/streamableHttp.js +2 -0
- package/dist/streamableHttp.js.map +1 -1
- package/dist/tools/addLinearComment.d.ts +55 -0
- package/dist/tools/addLinearComment.js +72 -0
- package/dist/tools/addLinearComment.js.map +1 -0
- package/dist/tools/bridgeDoctor.js +2 -2
- package/dist/tools/bridgeDoctor.js.map +1 -1
- package/dist/tools/createLinearIssue.d.ts +84 -0
- package/dist/tools/createLinearIssue.js +146 -0
- package/dist/tools/createLinearIssue.js.map +1 -0
- package/dist/tools/ctxGetTaskContext.d.ts +4 -1
- package/dist/tools/ctxGetTaskContext.js +45 -2
- package/dist/tools/ctxGetTaskContext.js.map +1 -1
- package/dist/tools/fetchCalendarEvents.d.ts +94 -0
- package/dist/tools/fetchCalendarEvents.js +97 -0
- package/dist/tools/fetchCalendarEvents.js.map +1 -0
- package/dist/tools/fetchGithubIssue.d.ts +80 -0
- package/dist/tools/fetchGithubIssue.js +84 -0
- package/dist/tools/fetchGithubIssue.js.map +1 -0
- package/dist/tools/fetchGithubPR.d.ts +89 -0
- package/dist/tools/fetchGithubPR.js +96 -0
- package/dist/tools/fetchGithubPR.js.map +1 -0
- package/dist/tools/fetchLinearIssue.d.ts +112 -0
- package/dist/tools/fetchLinearIssue.js +129 -0
- package/dist/tools/fetchLinearIssue.js.map +1 -0
- package/dist/tools/fetchSentryIssue.d.ts +143 -0
- package/dist/tools/fetchSentryIssue.js +150 -0
- package/dist/tools/fetchSentryIssue.js.map +1 -0
- package/dist/tools/fetchSlackProfile.d.ts +43 -0
- package/dist/tools/fetchSlackProfile.js +46 -0
- package/dist/tools/fetchSlackProfile.js.map +1 -0
- package/dist/tools/getConnectorStatus.d.ts +58 -0
- package/dist/tools/getConnectorStatus.js +56 -0
- package/dist/tools/getConnectorStatus.js.map +1 -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 +339 -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 +2 -1
- package/dist/tools/github/index.js +2 -1
- package/dist/tools/github/index.js.map +1 -1
- package/dist/tools/github/issues.js +8 -4
- package/dist/tools/github/issues.js.map +1 -1
- package/dist/tools/github/pr.d.ts +122 -0
- package/dist/tools/github/pr.js +195 -5
- package/dist/tools/github/pr.js.map +1 -1
- package/dist/tools/index.js +36 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/searchTools.js +1 -1
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/tools/slackListChannels.d.ts +65 -0
- package/dist/tools/slackListChannels.js +70 -0
- package/dist/tools/slackListChannels.js.map +1 -0
- package/dist/tools/slackPostMessage.d.ts +57 -0
- package/dist/tools/slackPostMessage.js +77 -0
- package/dist/tools/slackPostMessage.js.map +1 -0
- package/dist/tools/updateLinearIssue.d.ts +89 -0
- package/dist/tools/updateLinearIssue.js +117 -0
- package/dist/tools/updateLinearIssue.js.map +1 -0
- package/dist/transport.d.ts +7 -1
- package/dist/transport.js +85 -11
- package/dist/transport.js.map +1 -1
- package/package.json +4 -2
- package/scripts/start-all.sh +56 -19
- 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/recipes/ctx-loop-test.yaml +75 -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 +21 -5
- package/templates/recipes/sentry-to-linear.yaml +77 -0
package/README.bridge.md
CHANGED
|
@@ -40,6 +40,12 @@ claude --ide
|
|
|
40
40
|
|
|
41
41
|
> **Updating?** Use `npm install -g claude-ide-bridge@latest` — `npm update -g` may lag the registry cache after a new release.
|
|
42
42
|
|
|
43
|
+
> **macOS LaunchAgent users:** always install from the registry (`npm install -g patchwork-os`) or
|
|
44
|
+
> from a tarball (`npm pack && npm install -g patchwork-os-*.tgz`).
|
|
45
|
+
> Running `npm install -g .` from a repo checkout creates a symlink — the macOS sandbox
|
|
46
|
+
> cannot follow it, causing EPERM when launchctl starts the bridge.
|
|
47
|
+
> `patchwork-os launchd install` will refuse to proceed and print fix instructions.
|
|
48
|
+
|
|
43
49
|
After `init`, type `/mcp` in Claude Code to confirm the bridge is connected. Type `/ide` to see open files, diagnostics, and editor state.
|
|
44
50
|
|
|
45
51
|
> **One bridge per workspace.** Each project runs its own bridge instance on its own port. Start a separate `claude-ide-bridge --watch` in each directory.
|
package/README.md
CHANGED
|
@@ -25,14 +25,16 @@ Patchwork OS watches for things that matter, acts, and asks before anything risk
|
|
|
25
25
|
## After init
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
patchwork-os recipe list
|
|
29
|
-
patchwork-os recipe run daily-status
|
|
30
|
-
patchwork-os
|
|
28
|
+
patchwork-os recipe list # see installed recipes
|
|
29
|
+
patchwork-os recipe run daily-status # run one now
|
|
30
|
+
patchwork-os recipe run morning-brief --local # run with local LLM
|
|
31
|
+
patchwork-os tools list # browse all 140+ tools
|
|
32
|
+
patchwork-os # open terminal dashboard
|
|
31
33
|
```
|
|
32
34
|
|
|
33
|
-
The oversight web UI runs at `http://localhost:3100` when the bridge is active.
|
|
35
|
+
The oversight web UI runs at `http://localhost:3100` when the bridge is active. The dashboard shows live sessions, pending approvals, recent recipe runs, and analytics.
|
|
34
36
|
|
|
35
|
-
##
|
|
37
|
+
## Starter recipes (no external API keys needed)
|
|
36
38
|
|
|
37
39
|
| Recipe | Trigger | What it does |
|
|
38
40
|
|---|---|---|
|
|
@@ -41,25 +43,48 @@ The oversight web UI runs at `http://localhost:3100` when the bridge is active.
|
|
|
41
43
|
| `watch-failing-tests` | test run | drops triage note to inbox on failure |
|
|
42
44
|
| `lint-on-save` | file save | surfaces new TS/JS diagnostics to inbox |
|
|
43
45
|
| `stale-branches` | cron weekly | lists branches older than 30 days |
|
|
46
|
+
| `morning-brief` | cron 08:00 | commits + Linear issues + Calendar events |
|
|
47
|
+
| `sentry-to-linear` | manual | Sentry issue → Linear ticket (one-shot) |
|
|
44
48
|
|
|
45
|
-
|
|
49
|
+
Local recipes write to `~/.patchwork/inbox/` only. Connectors (Linear, Sentry, etc.) require API keys and approval-gated writes.
|
|
46
50
|
|
|
47
|
-
##
|
|
51
|
+
## What's working today
|
|
48
52
|
|
|
49
|
-
|
|
|
53
|
+
| Feature | Status |
|
|
50
54
|
|---|---|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
| `patchwork-init` — one-command setup | **shipped** |
|
|
56
|
+
| Terminal dashboard (`patchwork-os`) | **shipped** |
|
|
57
|
+
| Web oversight UI (approvals, sessions, recipes) | **shipped** |
|
|
58
|
+
| Recipe runner (YAML, cron, manual, webhook) | **shipped** |
|
|
59
|
+
| Multi-provider LLM (Claude, Gemini, OpenAI, Grok, Ollama) | **shipped** |
|
|
60
|
+
| Linear connector (read + approval-gated write) | **shipped** |
|
|
61
|
+
| Sentry connector (fetch issues, stack traces) | **shipped** |
|
|
62
|
+
| Google Calendar connector (read-only) | **shipped** |
|
|
63
|
+
| Slack connector (post messages, list channels) | **shipped** |
|
|
64
|
+
| 140+ MCP tools (LSP, git, tests, diagnostics) | **shipped** |
|
|
65
|
+
| Cross-session memory (traces, handoff notes) | **shipped** |
|
|
66
|
+
| Gmail connector | W2 |
|
|
67
|
+
| Mobile oversight PWA | W3 |
|
|
68
|
+
| Community recipe marketplace | Q3 |
|
|
69
|
+
|
|
70
|
+
## Install
|
|
71
|
+
|
|
72
|
+
**From the registry (recommended):**
|
|
73
|
+
```bash
|
|
74
|
+
npm install -g patchwork-os
|
|
75
|
+
patchwork-os patchwork-init
|
|
76
|
+
```
|
|
57
77
|
|
|
78
|
+
**From a local build (development / CI):**
|
|
58
79
|
```bash
|
|
59
80
|
git clone https://github.com/Oolab-labs/patchwork-os
|
|
60
81
|
cd patchwork-os
|
|
61
82
|
npm install && npm run build
|
|
62
|
-
|
|
83
|
+
# Use npm pack to create a real copy — do NOT use `npm install -g .`
|
|
84
|
+
# That creates a symlink which breaks the macOS LaunchAgent (EPERM at startup).
|
|
85
|
+
npm pack
|
|
86
|
+
npm install -g patchwork-os-*.tgz
|
|
87
|
+
patchwork-os patchwork-init
|
|
63
88
|
```
|
|
64
89
|
|
|
65
90
|
## License
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# deploy/bootstrap-vps.sh
|
|
3
|
+
# Full VPS bootstrap for patchworkos.com
|
|
4
|
+
# Run as root on a fresh Ubuntu 24.04 VPS
|
|
5
|
+
# Usage: bash bootstrap-vps.sh
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
DOMAIN="patchworkos.com"
|
|
10
|
+
EMAIL="support@gigsecure.co.ke"
|
|
11
|
+
BRIDGE_PORT=3284
|
|
12
|
+
BRIDGE_USER="patchwork"
|
|
13
|
+
BRIDGE_HOME="/opt/patchwork"
|
|
14
|
+
NODE_VERSION="22"
|
|
15
|
+
|
|
16
|
+
# ── Colours ──────────────────────────────────────────────────────────────────
|
|
17
|
+
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
|
18
|
+
info() { echo -e "${GREEN}[bootstrap]${NC} $*"; }
|
|
19
|
+
warn() { echo -e "${YELLOW}[bootstrap]${NC} $*"; }
|
|
20
|
+
error() { echo -e "${RED}[bootstrap]${NC} $*"; exit 1; }
|
|
21
|
+
|
|
22
|
+
# ── 1. System updates ─────────────────────────────────────────────────────────
|
|
23
|
+
info "Updating system packages..."
|
|
24
|
+
apt-get update -qq
|
|
25
|
+
apt-get upgrade -y -qq
|
|
26
|
+
apt-get install -y -qq curl wget gnupg2 ca-certificates lsb-release \
|
|
27
|
+
nginx certbot python3-certbot-nginx ufw git jq unzip
|
|
28
|
+
|
|
29
|
+
# ── 2. Node.js ────────────────────────────────────────────────────────────────
|
|
30
|
+
info "Installing Node.js ${NODE_VERSION}..."
|
|
31
|
+
curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - >/dev/null
|
|
32
|
+
apt-get install -y -qq nodejs
|
|
33
|
+
node --version
|
|
34
|
+
npm --version
|
|
35
|
+
|
|
36
|
+
# ── 3. Service user ───────────────────────────────────────────────────────────
|
|
37
|
+
info "Creating service user '${BRIDGE_USER}'..."
|
|
38
|
+
id "${BRIDGE_USER}" &>/dev/null || useradd -r -m -d "${BRIDGE_HOME}" -s /bin/bash "${BRIDGE_USER}"
|
|
39
|
+
mkdir -p "${BRIDGE_HOME}"
|
|
40
|
+
chown "${BRIDGE_USER}:${BRIDGE_USER}" "${BRIDGE_HOME}"
|
|
41
|
+
|
|
42
|
+
# ── 4. Install bridge globally ────────────────────────────────────────────────
|
|
43
|
+
info "Installing claude-ide-bridge from npm..."
|
|
44
|
+
npm install -g claude-ide-bridge 2>&1 | tail -5
|
|
45
|
+
BRIDGE_BIN="$(which claude-ide-bridge)"
|
|
46
|
+
info "Bridge binary: ${BRIDGE_BIN}"
|
|
47
|
+
|
|
48
|
+
# ── 5. Generate fixed token ───────────────────────────────────────────────────
|
|
49
|
+
FIXED_TOKEN="$(openssl rand -hex 32)"
|
|
50
|
+
info "Generated bridge token (save this!): ${FIXED_TOKEN}"
|
|
51
|
+
|
|
52
|
+
# Persist token to a file readable only by root + patchwork user
|
|
53
|
+
TOKEN_FILE="/etc/patchwork/bridge-token"
|
|
54
|
+
mkdir -p /etc/patchwork
|
|
55
|
+
echo "${FIXED_TOKEN}" > "${TOKEN_FILE}"
|
|
56
|
+
chown root:"${BRIDGE_USER}" "${TOKEN_FILE}"
|
|
57
|
+
chmod 640 "${TOKEN_FILE}"
|
|
58
|
+
|
|
59
|
+
# ── 6. Systemd service ────────────────────────────────────────────────────────
|
|
60
|
+
info "Writing systemd service..."
|
|
61
|
+
cat > /etc/systemd/system/patchwork-bridge.service <<EOF
|
|
62
|
+
[Unit]
|
|
63
|
+
Description=Patchwork OS — Claude IDE Bridge
|
|
64
|
+
After=network-online.target
|
|
65
|
+
Wants=network-online.target
|
|
66
|
+
|
|
67
|
+
[Service]
|
|
68
|
+
Type=simple
|
|
69
|
+
User=${BRIDGE_USER}
|
|
70
|
+
Group=${BRIDGE_USER}
|
|
71
|
+
WorkingDirectory=${BRIDGE_HOME}
|
|
72
|
+
Environment=NODE_ENV=production
|
|
73
|
+
Environment=HOME=${BRIDGE_HOME}
|
|
74
|
+
|
|
75
|
+
ExecStart=${BRIDGE_BIN} \\
|
|
76
|
+
--bind 0.0.0.0 \\
|
|
77
|
+
--port ${BRIDGE_PORT} \\
|
|
78
|
+
--vps \\
|
|
79
|
+
--issuer-url https://${DOMAIN} \\
|
|
80
|
+
--cors-origin https://claude.ai \\
|
|
81
|
+
--cors-origin https://app.patchworkos.com \\
|
|
82
|
+
--fixed-token ${FIXED_TOKEN}
|
|
83
|
+
|
|
84
|
+
Restart=always
|
|
85
|
+
RestartSec=5
|
|
86
|
+
StandardOutput=journal
|
|
87
|
+
StandardError=journal
|
|
88
|
+
SyslogIdentifier=patchwork-bridge
|
|
89
|
+
|
|
90
|
+
# Hardening
|
|
91
|
+
NoNewPrivileges=true
|
|
92
|
+
ProtectSystem=strict
|
|
93
|
+
ProtectHome=read-only
|
|
94
|
+
ReadWritePaths=${BRIDGE_HOME}
|
|
95
|
+
PrivateTmp=true
|
|
96
|
+
|
|
97
|
+
[Install]
|
|
98
|
+
WantedBy=multi-user.target
|
|
99
|
+
EOF
|
|
100
|
+
|
|
101
|
+
systemctl daemon-reload
|
|
102
|
+
systemctl enable patchwork-bridge
|
|
103
|
+
|
|
104
|
+
# ── 7. UFW firewall ───────────────────────────────────────────────────────────
|
|
105
|
+
info "Configuring firewall..."
|
|
106
|
+
ufw --force reset >/dev/null
|
|
107
|
+
ufw default deny incoming >/dev/null
|
|
108
|
+
ufw default allow outgoing >/dev/null
|
|
109
|
+
ufw allow ssh >/dev/null
|
|
110
|
+
ufw allow http >/dev/null
|
|
111
|
+
ufw allow https >/dev/null
|
|
112
|
+
ufw --force enable >/dev/null
|
|
113
|
+
ufw status
|
|
114
|
+
|
|
115
|
+
# ── 8. Nginx config — HTTP only first (certbot needs nginx up to issue cert) ──
|
|
116
|
+
info "Writing nginx config (HTTP only)..."
|
|
117
|
+
cat > /etc/nginx/sites-available/patchworkos <<'NGINX'
|
|
118
|
+
server {
|
|
119
|
+
listen 80;
|
|
120
|
+
listen [::]:80;
|
|
121
|
+
server_name patchworkos.com www.patchworkos.com;
|
|
122
|
+
|
|
123
|
+
location /.well-known/acme-challenge/ { root /var/www/html; }
|
|
124
|
+
|
|
125
|
+
location / {
|
|
126
|
+
proxy_pass http://127.0.0.1:3284;
|
|
127
|
+
proxy_http_version 1.1;
|
|
128
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
129
|
+
proxy_set_header Connection "upgrade";
|
|
130
|
+
proxy_set_header Host $host;
|
|
131
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
132
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
133
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
134
|
+
proxy_read_timeout 3600s;
|
|
135
|
+
proxy_send_timeout 3600s;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
NGINX
|
|
139
|
+
|
|
140
|
+
ln -sf /etc/nginx/sites-available/patchworkos /etc/nginx/sites-enabled/patchworkos
|
|
141
|
+
rm -f /etc/nginx/sites-enabled/default
|
|
142
|
+
|
|
143
|
+
nginx -t
|
|
144
|
+
systemctl reload nginx
|
|
145
|
+
|
|
146
|
+
# ── 9. TLS certificate ────────────────────────────────────────────────────────
|
|
147
|
+
info "Issuing Let's Encrypt certificate for ${DOMAIN}..."
|
|
148
|
+
certbot --nginx \
|
|
149
|
+
-d "${DOMAIN}" \
|
|
150
|
+
-d "www.${DOMAIN}" \
|
|
151
|
+
--non-interactive \
|
|
152
|
+
--agree-tos \
|
|
153
|
+
--email "${EMAIL}" \
|
|
154
|
+
--redirect
|
|
155
|
+
|
|
156
|
+
# Certbot rewrites the nginx config with SSL — reload to apply
|
|
157
|
+
systemctl reload nginx
|
|
158
|
+
|
|
159
|
+
# ── 10. Start bridge ──────────────────────────────────────────────────────────
|
|
160
|
+
info "Starting bridge service..."
|
|
161
|
+
systemctl start patchwork-bridge
|
|
162
|
+
sleep 3
|
|
163
|
+
systemctl is-active patchwork-bridge && info "Bridge is running." || warn "Bridge may have failed — check: journalctl -u patchwork-bridge -n 50"
|
|
164
|
+
|
|
165
|
+
# ── 11. Print summary ─────────────────────────────────────────────────────────
|
|
166
|
+
echo ""
|
|
167
|
+
echo -e "${GREEN}═══════════════════════════════════════════════════${NC}"
|
|
168
|
+
echo -e "${GREEN} Patchwork OS — VPS bootstrap complete${NC}"
|
|
169
|
+
echo -e "${GREEN}═══════════════════════════════════════════════════${NC}"
|
|
170
|
+
echo ""
|
|
171
|
+
echo " Domain: https://${DOMAIN}"
|
|
172
|
+
echo " Bridge port: ${BRIDGE_PORT} (internal, nginx proxied)"
|
|
173
|
+
echo " Token file: ${TOKEN_FILE}"
|
|
174
|
+
echo " Token: ${FIXED_TOKEN}"
|
|
175
|
+
echo ""
|
|
176
|
+
echo " Service: systemctl status patchwork-bridge"
|
|
177
|
+
echo " Logs: journalctl -u patchwork-bridge -f"
|
|
178
|
+
echo " Nginx logs: tail -f /var/log/nginx/access.log"
|
|
179
|
+
echo ""
|
|
180
|
+
echo -e "${YELLOW} Save the token above — you'll need it to connect Claude Code.${NC}"
|
|
181
|
+
echo ""
|
|
182
|
+
echo " To connect Claude Code remotely:"
|
|
183
|
+
echo " claude mcp add patchwork https://${DOMAIN}/mcp --token ${FIXED_TOKEN}"
|
|
184
|
+
echo ""
|
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,12 +33,20 @@ 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;
|
|
35
42
|
}
|
|
36
43
|
export interface HttpRequest {
|
|
37
44
|
method: string;
|
|
38
45
|
path: string;
|
|
39
46
|
body?: Record<string, unknown>;
|
|
40
47
|
query?: URLSearchParams;
|
|
48
|
+
/** x-approval-token header value, if present — phone-path auth for approve/reject. */
|
|
49
|
+
approvalToken?: string;
|
|
41
50
|
}
|
|
42
51
|
export interface HttpResponse {
|
|
43
52
|
status: number;
|
package/dist/approvalHttp.js
CHANGED
|
@@ -45,6 +45,16 @@ export async function routeApprovalRequest(req, deps) {
|
|
|
45
45
|
const approveMatch = /^\/approve\/([A-Za-z0-9-]+)$/.exec(path);
|
|
46
46
|
if (method === "POST" && approveMatch) {
|
|
47
47
|
const callId = approveMatch[1];
|
|
48
|
+
// Phone path: validate single-use approval token if bearer auth wasn't used
|
|
49
|
+
if (req.approvalToken !== undefined) {
|
|
50
|
+
const valid = deps.queue.validateToken(callId, req.approvalToken);
|
|
51
|
+
if (!valid) {
|
|
52
|
+
return {
|
|
53
|
+
status: 401,
|
|
54
|
+
body: { error: "invalid or expired approval token" },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
48
58
|
const ok = deps.queue.approve(callId);
|
|
49
59
|
return {
|
|
50
60
|
status: ok ? 200 : 404,
|
|
@@ -54,6 +64,16 @@ export async function routeApprovalRequest(req, deps) {
|
|
|
54
64
|
const rejectMatch = /^\/reject\/([A-Za-z0-9-]+)$/.exec(path);
|
|
55
65
|
if (method === "POST" && rejectMatch) {
|
|
56
66
|
const callId = rejectMatch[1];
|
|
67
|
+
// Phone path: validate single-use approval token if bearer auth wasn't used
|
|
68
|
+
if (req.approvalToken !== undefined) {
|
|
69
|
+
const valid = deps.queue.validateToken(callId, req.approvalToken);
|
|
70
|
+
if (!valid) {
|
|
71
|
+
return {
|
|
72
|
+
status: 401,
|
|
73
|
+
body: { error: "invalid or expired approval token" },
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
57
77
|
const ok = deps.queue.reject(callId);
|
|
58
78
|
return {
|
|
59
79
|
status: ok ? 200 : 404,
|
|
@@ -133,7 +153,11 @@ async function dispatchApprovalWebhook(webhookUrl, payload) {
|
|
|
133
153
|
const res = await fetch(webhookUrl, {
|
|
134
154
|
method: "POST",
|
|
135
155
|
headers: { "Content-Type": "application/json" },
|
|
136
|
-
body: JSON.stringify(
|
|
156
|
+
body: JSON.stringify({
|
|
157
|
+
...payload,
|
|
158
|
+
requestedAt: new Date(payload.requestedAt).toISOString(),
|
|
159
|
+
expiresAt: new Date(payload.expiresAt).toISOString(),
|
|
160
|
+
}),
|
|
137
161
|
signal: controller.signal,
|
|
138
162
|
});
|
|
139
163
|
if (!res.ok) {
|
|
@@ -147,6 +171,61 @@ async function dispatchApprovalWebhook(webhookUrl, payload) {
|
|
|
147
171
|
clearTimeout(timer);
|
|
148
172
|
}
|
|
149
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Dispatch a push notification to the relay service when an approval is queued.
|
|
176
|
+
* Reuses the same SSRF guard as dispatchApprovalWebhook. Fire-and-forget — never throws.
|
|
177
|
+
*/
|
|
178
|
+
async function dispatchPushNotification(pushServiceUrl, pushServiceToken, payload) {
|
|
179
|
+
if (!pushServiceUrl.startsWith("https://")) {
|
|
180
|
+
console.warn(`[push] Rejected non-HTTPS push service URL`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
let hostname;
|
|
184
|
+
try {
|
|
185
|
+
hostname = new URL(pushServiceUrl).hostname;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
console.warn(`[push] Malformed push service URL — skipping`);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (hostname === "localhost") {
|
|
192
|
+
console.warn(`[push] Blocked loopback push service hostname`);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
const resolved = await dns.lookup(hostname);
|
|
197
|
+
if (isBlockedIp(resolved.address)) {
|
|
198
|
+
console.warn(`[push] Blocked private/loopback IP for push service: ${resolved.address}`);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
console.warn(`[push] DNS resolution failed for ${hostname}: ${err instanceof Error ? err.message : String(err)}`);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const controller = new AbortController();
|
|
207
|
+
const timer = setTimeout(() => controller.abort(), 5_000);
|
|
208
|
+
try {
|
|
209
|
+
const res = await fetch(`${pushServiceUrl}/push`, {
|
|
210
|
+
method: "POST",
|
|
211
|
+
headers: {
|
|
212
|
+
"Content-Type": "application/json",
|
|
213
|
+
Authorization: `Bearer ${pushServiceToken}`,
|
|
214
|
+
},
|
|
215
|
+
body: JSON.stringify(payload),
|
|
216
|
+
signal: controller.signal,
|
|
217
|
+
});
|
|
218
|
+
if (!res.ok) {
|
|
219
|
+
console.warn(`[push] Non-2xx from push relay: ${res.status} ${res.statusText}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
console.warn(`[push] Dispatch failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
clearTimeout(timer);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
150
229
|
function computeRiskSignals(toolName, params, workspace) {
|
|
151
230
|
const signals = [];
|
|
152
231
|
// Destructive flags — Bash / runCommand
|
|
@@ -335,22 +414,31 @@ async function handleApprovalRequest(req, deps) {
|
|
|
335
414
|
};
|
|
336
415
|
}
|
|
337
416
|
const riskSignals = computeRiskSignals(toolName, params, deps.workspace);
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
params,
|
|
341
|
-
tier,
|
|
342
|
-
summary,
|
|
343
|
-
sessionId,
|
|
344
|
-
riskSignals,
|
|
345
|
-
});
|
|
417
|
+
const now = Date.now();
|
|
418
|
+
const { callId, approvalToken, promise } = deps.queue.request({ toolName, params, tier, summary, sessionId, riskSignals }, { withToken: !!deps.pushServiceUrl });
|
|
346
419
|
// Fire webhook notification in the background — never block approval flow
|
|
347
420
|
if (deps.webhookUrl) {
|
|
348
421
|
dispatchApprovalWebhook(deps.webhookUrl, {
|
|
349
422
|
toolName,
|
|
350
423
|
tier,
|
|
351
424
|
callId,
|
|
352
|
-
requestedAt:
|
|
425
|
+
requestedAt: now,
|
|
426
|
+
expiresAt: now + 5 * 60_000,
|
|
427
|
+
summary,
|
|
428
|
+
}).catch(() => { });
|
|
429
|
+
}
|
|
430
|
+
// Fire push notification in the background — phone path
|
|
431
|
+
if (deps.pushServiceUrl && deps.pushServiceToken && approvalToken) {
|
|
432
|
+
dispatchPushNotification(deps.pushServiceUrl, deps.pushServiceToken, {
|
|
433
|
+
toolName,
|
|
434
|
+
tier,
|
|
435
|
+
callId,
|
|
436
|
+
requestedAt: now,
|
|
437
|
+
expiresAt: now + 5 * 60_000,
|
|
353
438
|
summary,
|
|
439
|
+
riskSignals,
|
|
440
|
+
approvalToken,
|
|
441
|
+
bridgeCallbackBase: deps.pushServiceBaseUrl ?? "",
|
|
354
442
|
}).catch(() => { });
|
|
355
443
|
}
|
|
356
444
|
const outcome = await promise;
|
package/dist/approvalHttp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvalHttp.js","sourceRoot":"","sources":["../src/approvalHttp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"approvalHttp.js","sourceRoot":"","sources":["../src/approvalHttp.ts"],"names":[],"mappings":"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"}
|
package/dist/approvalQueue.d.ts
CHANGED
|
@@ -24,6 +24,8 @@ export interface PendingApproval {
|
|
|
24
24
|
sessionId?: string;
|
|
25
25
|
summary?: string;
|
|
26
26
|
riskSignals?: RiskSignal[];
|
|
27
|
+
/** 256-bit hex token for phone-path approve/reject. Only present when push is configured. */
|
|
28
|
+
approvalToken?: string;
|
|
27
29
|
}
|
|
28
30
|
export type ApprovalDecision = "approved" | "rejected" | "expired";
|
|
29
31
|
export declare class ApprovalQueue {
|
|
@@ -32,10 +34,19 @@ export declare class ApprovalQueue {
|
|
|
32
34
|
constructor(opts?: {
|
|
33
35
|
ttlMs?: number;
|
|
34
36
|
});
|
|
35
|
-
request(input: Omit<PendingApproval, "callId" | "requestedAt"
|
|
37
|
+
request(input: Omit<PendingApproval, "callId" | "requestedAt">, opts?: {
|
|
38
|
+
withToken?: boolean;
|
|
39
|
+
}): {
|
|
36
40
|
callId: string;
|
|
41
|
+
approvalToken?: string;
|
|
37
42
|
promise: Promise<ApprovalDecision>;
|
|
38
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Validate a phone-path approval token for the given callId.
|
|
46
|
+
* Tokens are single-use: deleted from the entry after first check regardless of outcome.
|
|
47
|
+
* Returns true only if the token matches. Uses timing-safe comparison.
|
|
48
|
+
*/
|
|
49
|
+
validateToken(callId: string, token: string): boolean;
|
|
39
50
|
approve(callId: string): boolean;
|
|
40
51
|
reject(callId: string): boolean;
|
|
41
52
|
list(): PendingApproval[];
|
package/dist/approvalQueue.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
1
|
+
import { randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
|
|
2
2
|
export class ApprovalQueue {
|
|
3
3
|
entries = new Map();
|
|
4
4
|
ttlMs;
|
|
5
5
|
constructor(opts = {}) {
|
|
6
6
|
this.ttlMs = opts.ttlMs ?? 5 * 60_000;
|
|
7
7
|
}
|
|
8
|
-
request(input) {
|
|
8
|
+
request(input, opts = {}) {
|
|
9
9
|
const callId = randomUUID();
|
|
10
10
|
const requestedAt = Date.now();
|
|
11
|
+
const approvalToken = opts.withToken
|
|
12
|
+
? randomBytes(32).toString("hex")
|
|
13
|
+
: undefined;
|
|
11
14
|
let resolveFn;
|
|
12
15
|
const promise = new Promise((res) => {
|
|
13
16
|
resolveFn = res;
|
|
@@ -26,9 +29,27 @@ export class ApprovalQueue {
|
|
|
26
29
|
requestedAt,
|
|
27
30
|
resolve: resolveFn,
|
|
28
31
|
timer,
|
|
32
|
+
approvalToken,
|
|
29
33
|
...input,
|
|
30
34
|
});
|
|
31
|
-
return { callId, promise };
|
|
35
|
+
return { callId, approvalToken, promise };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Validate a phone-path approval token for the given callId.
|
|
39
|
+
* Tokens are single-use: deleted from the entry after first check regardless of outcome.
|
|
40
|
+
* Returns true only if the token matches. Uses timing-safe comparison.
|
|
41
|
+
*/
|
|
42
|
+
validateToken(callId, token) {
|
|
43
|
+
const entry = this.entries.get(callId);
|
|
44
|
+
if (!entry?.approvalToken)
|
|
45
|
+
return false;
|
|
46
|
+
const expected = Buffer.from(entry.approvalToken, "utf8");
|
|
47
|
+
const provided = Buffer.from(token, "utf8");
|
|
48
|
+
// Clear token immediately — single-use regardless of outcome
|
|
49
|
+
entry.approvalToken = undefined;
|
|
50
|
+
if (expected.length !== provided.length)
|
|
51
|
+
return false;
|
|
52
|
+
return timingSafeEqual(expected, provided);
|
|
32
53
|
}
|
|
33
54
|
approve(callId) {
|
|
34
55
|
return this.resolveEntry(callId, "approved");
|
|
@@ -46,6 +67,7 @@ export class ApprovalQueue {
|
|
|
46
67
|
sessionId: e.sessionId,
|
|
47
68
|
summary: e.summary,
|
|
48
69
|
riskSignals: e.riskSignals,
|
|
70
|
+
// approvalToken intentionally omitted from list — never expose to untrusted callers
|
|
49
71
|
}));
|
|
50
72
|
}
|
|
51
73
|
size() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvalQueue.js","sourceRoot":"","sources":["../src/approvalQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"approvalQueue.js","sourceRoot":"","sources":["../src/approvalQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyCvE,MAAM,OAAO,aAAa;IACP,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACnC,KAAK,CAAS;IAE/B,YAAY,OAA2B,EAAE;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC;IACxC,CAAC;IAED,OAAO,CACL,KAAsD,EACtD,OAAgC,EAAE;QAMlC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS;YAClC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YACjC,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,SAAyC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAmB,CAAC,GAAG,EAAE,EAAE;YACpD,SAAS,GAAG,GAAG,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAEjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;YACvB,MAAM;YACN,WAAW;YACX,OAAO,EAAE,SAAS;YAClB,KAAK;YACL,aAAa;YACb,GAAG,KAAK;SACT,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAc,EAAE,KAAa;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,aAAa;YAAE,OAAO,KAAK,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,6DAA6D;QAC7D,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACtD,OAAO,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,oFAAoF;SACrF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,sEAAsE;IACtE,KAAK;QACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,QAA0B;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,mEAAmE;AACnE,IAAI,SAAoC,CAAC;AACzC,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sBAAsB;AACtB,MAAM,UAAU,0BAA0B;IACxC,SAAS,EAAE,KAAK,EAAE,CAAC;IACnB,SAAS,GAAG,SAAS,CAAC;AACxB,CAAC"}
|