@provos/ironcurtain 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -66
- package/dist/cli.js +9 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/types.d.ts +6 -0
- package/dist/docker/adapters/claude-code.js +1 -1
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/docker-infrastructure.js +10 -3
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/mitm-proxy.d.ts +5 -2
- package/dist/docker/mitm-proxy.js +169 -46
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/oauth-credentials.d.ts +15 -2
- package/dist/docker/oauth-credentials.js +92 -8
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/oauth-token-manager.d.ts +80 -0
- package/dist/docker/oauth-token-manager.js +133 -0
- package/dist/docker/oauth-token-manager.js.map +1 -0
- package/dist/docker/pty-session.d.ts +2 -0
- package/dist/docker/pty-session.js +10 -4
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/escalation/escalation-watcher.js +2 -0
- package/dist/escalation/escalation-watcher.js.map +1 -1
- package/dist/escalation/listener-command.js +9 -58
- package/dist/escalation/listener-command.js.map +1 -1
- package/dist/escalation/listener-lock.d.ts +20 -0
- package/dist/escalation/listener-lock.js +69 -0
- package/dist/escalation/listener-lock.js.map +1 -0
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/dist/mux/mux-app.d.ts +24 -0
- package/dist/mux/mux-app.js +445 -0
- package/dist/mux/mux-app.js.map +1 -0
- package/dist/mux/mux-command.d.ts +7 -0
- package/dist/mux/mux-command.js +93 -0
- package/dist/mux/mux-command.js.map +1 -0
- package/dist/mux/mux-escalation-manager.d.ts +48 -0
- package/dist/mux/mux-escalation-manager.js +162 -0
- package/dist/mux/mux-escalation-manager.js.map +1 -0
- package/dist/mux/mux-input-handler.d.ts +49 -0
- package/dist/mux/mux-input-handler.js +457 -0
- package/dist/mux/mux-input-handler.js.map +1 -0
- package/dist/mux/mux-renderer.d.ts +86 -0
- package/dist/mux/mux-renderer.js +758 -0
- package/dist/mux/mux-renderer.js.map +1 -0
- package/dist/mux/mux-splash.d.ts +17 -0
- package/dist/mux/mux-splash.js +322 -0
- package/dist/mux/mux-splash.js.map +1 -0
- package/dist/mux/pty-bridge.d.ts +79 -0
- package/dist/mux/pty-bridge.js +151 -0
- package/dist/mux/pty-bridge.js.map +1 -0
- package/dist/mux/trusted-input.d.ts +27 -0
- package/dist/mux/trusted-input.js +27 -0
- package/dist/mux/trusted-input.js.map +1 -0
- package/dist/mux/types.d.ts +92 -0
- package/dist/mux/types.js +45 -0
- package/dist/mux/types.js.map +1 -0
- package/dist/sandbox/index.js +4 -0
- package/dist/sandbox/index.js.map +1 -1
- package/dist/session/agent-session.js +3 -0
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/index.js +14 -7
- package/dist/session/index.js.map +1 -1
- package/dist/session/types.d.ts +6 -0
- package/dist/session/workspace-validation.d.ts +17 -0
- package/dist/session/workspace-validation.js +65 -0
- package/dist/session/workspace-validation.js.map +1 -0
- package/dist/trusted-process/auto-approver.d.ts +13 -4
- package/dist/trusted-process/auto-approver.js +12 -5
- package/dist/trusted-process/auto-approver.js.map +1 -1
- package/dist/trusted-process/escalation.js +5 -0
- package/dist/trusted-process/escalation.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.js +39 -16
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -9,8 +9,17 @@
|
|
|
9
9
|
|
|
10
10
|
_\*When someone writes "secure," you should immediately be skeptical. [What do we mean by secure?](https://ironcurtain.dev)_
|
|
11
11
|
|
|
12
|
+
> [!WARNING]
|
|
12
13
|
> **Research Prototype.** IronCurtain is an early-stage research project exploring how to make AI agents safe enough to be genuinely useful. APIs, configuration formats, and architecture may change. Contributions and feedback are welcome.
|
|
13
14
|
|
|
15
|
+
## Demo
|
|
16
|
+
|
|
17
|
+
<p align="center">
|
|
18
|
+
<img src="demo.gif" alt="IronCurtain mux demo: trusted input from command mode enables auto-approval of git clone and git push" width="800">
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
The agent is asked to clone a repository and push changes. Both `git_clone` and `git_push` are escalated by the policy engine, but the [auto-approver](#auto-approve-escalations) approves them automatically — the user's trusted input from command mode (Ctrl-A) provided clear intent, so no manual `/approve` was needed.
|
|
22
|
+
|
|
14
23
|
## The Problem
|
|
15
24
|
|
|
16
25
|
Autonomous AI agents can manage files, run git commands, send messages, and interact with APIs on your behalf. But today's agent frameworks give the agent the same privileges as the user such as full access to the filesystem, credentials, and network. Security researchers call this **ambient authority**, and it means a single prompt injection or multi-turn drift can cause an agent to delete files, exfiltrate data, or push malicious code.
|
|
@@ -30,14 +39,6 @@ The key ideas:
|
|
|
30
39
|
- **Semantic interposition.** Instead of giving the agent raw system access, all interactions go through [MCP](https://modelcontextprotocol.io/) servers (filesystem, git, etc.). Every tool call passes through a policy engine that can **allow**, **deny**, or **escalate** to the user for approval.
|
|
31
40
|
- **Defense in depth.** Agent code runs in a V8 isolate with no direct access to the host. The only way out is through semantically meaningful MCP tool calls and every one is checked against policy.
|
|
32
41
|
|
|
33
|
-
## Demo
|
|
34
|
-
|
|
35
|
-
<p align="center">
|
|
36
|
-
<img src="demo.gif" alt="IronCurtain demo: agent clones a repo, policy escalates git_clone for approval, user approves, then auto-approve handles git push" width="800">
|
|
37
|
-
</p>
|
|
38
|
-
|
|
39
|
-
The agent clones a repository and edits a file. The policy engine escalates `git_clone` for human approval. After the user types `/approve`, the agent completes the task. On the second request ("ok. git push to origin please"), [auto-approve](#auto-approve-escalations) recognizes the explicit intent and approves `git_push` automatically — no interruption needed.
|
|
40
|
-
|
|
41
42
|
## Architecture
|
|
42
43
|
|
|
43
44
|
IronCurtain supports two session modes with different trust models:
|
|
@@ -82,7 +83,7 @@ npm install
|
|
|
82
83
|
export ANTHROPIC_API_KEY=sk-ant-...
|
|
83
84
|
```
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
You can also place keys in a `.env` file in the project root (loaded automatically via `dotenv`), or add them to `~/.ironcurtain/config.json` via `ironcurtain config`. Environment variables take precedence over config file values. Supported: `ANTHROPIC_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, `OPENAI_API_KEY`.
|
|
86
87
|
|
|
87
88
|
**2. Run the first-start wizard** (runs automatically on first `ironcurtain start`, or explicitly):
|
|
88
89
|
|
|
@@ -128,6 +129,17 @@ Send one task and exit when the agent finishes:
|
|
|
128
129
|
ironcurtain start "Summarize the files in the current directory"
|
|
129
130
|
```
|
|
130
131
|
|
|
132
|
+
### Workspace mode
|
|
133
|
+
|
|
134
|
+
Point the agent at an existing directory instead of a fresh sandbox:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
ironcurtain start -w ./my-project "Fix the failing tests"
|
|
138
|
+
ironcurtain start --workspace /home/user/repos/my-app
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The workspace replaces the session sandbox as the agent's working area. All session infrastructure (logs, escalations, audit) still lives under `~/.ironcurtain/sessions/`. The path is validated to prevent use of sensitive directories (root, home, `~/.ironcurtain/`, or paths overlapping with protected paths).
|
|
142
|
+
|
|
131
143
|
### Session resume
|
|
132
144
|
|
|
133
145
|
Resume a previous session's conversation history:
|
|
@@ -138,15 +150,26 @@ ironcurtain start --resume <session-id>
|
|
|
138
150
|
|
|
139
151
|
Session IDs are printed on session start and stored under `~/.ironcurtain/sessions/`.
|
|
140
152
|
|
|
141
|
-
###
|
|
153
|
+
### Terminal multiplexer (recommended for Docker Agent Mode)
|
|
142
154
|
|
|
143
|
-
|
|
155
|
+
The terminal multiplexer is the recommended way to use IronCurtain with Docker Agent Mode. It gives you the full power of Claude Code's interactive TUI — spinners, diffs, file previews, slash commands — while IronCurtain mediates every tool call through its policy engine. All in a single terminal.
|
|
144
156
|
|
|
145
157
|
```bash
|
|
146
|
-
ironcurtain
|
|
158
|
+
ironcurtain mux
|
|
147
159
|
```
|
|
148
160
|
|
|
149
|
-
**
|
|
161
|
+
**Key capabilities:**
|
|
162
|
+
|
|
163
|
+
- **Full agent TUI** — Claude Code runs in a PTY inside a Docker container with no network access. You interact with it exactly as if it were running locally.
|
|
164
|
+
- **Inline escalation handling** — When a tool call needs approval, an escalation panel overlays the viewport. No separate terminal needed — press Ctrl-A to enter command mode, `/approve N` or `/deny N`, and return.
|
|
165
|
+
- **Trusted user input** — Text typed in command mode (Ctrl-A) is captured on the host side before entering the container. This creates a verified intent signal that the [auto-approver](#auto-approve-escalations) can use — e.g., typing "push my changes to origin" will auto-approve a subsequent `git_push` escalation.
|
|
166
|
+
- **Tab management** — Spawn multiple concurrent sessions (`/new`), switch between them (`/tab N`, Alt-1..9), close them (`/close`).
|
|
167
|
+
|
|
168
|
+
See [DEVELOPER_GUIDE.md](DEVELOPER_GUIDE.md) for the full walkthrough: input modes, trusted input security model, escalation workflow, and keyboard reference.
|
|
169
|
+
|
|
170
|
+
### PTY mode with a separate escalation listener
|
|
171
|
+
|
|
172
|
+
An alternative to the mux — run a raw PTY session in one terminal and handle escalations in another:
|
|
150
173
|
|
|
151
174
|
```bash
|
|
152
175
|
# Terminal 1 — interactive Claude Code session
|
|
@@ -156,33 +179,9 @@ ironcurtain start --pty
|
|
|
156
179
|
ironcurtain escalation-listener
|
|
157
180
|
```
|
|
158
181
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
1. When `--pty` starts, it writes a registration file to `~/.ironcurtain/pty-registry/session-<id>.json` containing the session ID, escalation directory path, display label, and process PID.
|
|
162
|
-
2. The escalation listener polls `pty-registry/` every second. It discovers new sessions, attaches an escalation watcher to each one, and detaches watchers when sessions end. Stale registrations (process PID no longer alive) are removed automatically, so a crashed PTY session doesn't leave phantom entries.
|
|
163
|
-
|
|
164
|
-
**The escalation flow:**
|
|
165
|
-
|
|
166
|
-
When a tool call is escalated, the PTY session emits a **BEL character** (`\x07`) — your terminal bell or visual flash signals that attention is needed. Switch to the listener terminal. The listener TUI re-renders in place: active sessions are listed with sequential display numbers, and each pending escalation shows the tool name, arguments, and the policy reason for the escalation.
|
|
167
|
-
|
|
168
|
-
**Listener commands:**
|
|
169
|
-
|
|
170
|
-
| Command | Description |
|
|
171
|
-
| -------------- | ----------------------------------------- |
|
|
172
|
-
| `/approve N` | Approve escalation #N |
|
|
173
|
-
| `/deny N` | Deny escalation #N |
|
|
174
|
-
| `/approve all` | Approve all pending escalations |
|
|
175
|
-
| `/deny all` | Deny all pending escalations |
|
|
176
|
-
| `/sessions` | Show detailed session information |
|
|
177
|
-
| `/quit` | Exit the listener |
|
|
178
|
-
|
|
179
|
-
Escalation numbers are sequential across all sessions. If you have two active PTY sessions, their escalations share a single numbered list in the dashboard — escalation #3 might be from session [1] and #4 from session [2]. Use the number shown in the dashboard to resolve them.
|
|
180
|
-
|
|
181
|
-
**Multiple concurrent sessions:** The listener aggregates escalations from all active PTY sessions in one dashboard. Each session is assigned a display number (e.g., `Claude Code [1]`, `Claude Code [2]`) when it first appears.
|
|
182
|
-
|
|
183
|
-
**Single-instance lock:** Only one escalation listener may run at a time, enforced via a PID-checked lock file at `~/.ironcurtain/escalation-listener.lock`. A stale lock from a crashed process is cleaned up automatically on the next start.
|
|
182
|
+
This workflow does not support trusted input or auto-approval for PTY sessions. The mux is recommended instead.
|
|
184
183
|
|
|
185
|
-
**Emergency exit and terminal recovery:** Press `Ctrl-\` to trigger a graceful shutdown of the PTY session
|
|
184
|
+
**Emergency exit and terminal recovery:** Press `Ctrl-\` to trigger a graceful shutdown of the PTY session. If the process is killed ungracefully, run `reset` in that terminal to restore normal terminal mode.
|
|
186
185
|
|
|
187
186
|
### Signal messaging transport
|
|
188
187
|
|
|
@@ -199,15 +198,15 @@ See [TRANSPORT.md](TRANSPORT.md) for setup instructions, architecture details, a
|
|
|
199
198
|
|
|
200
199
|
Commands available during an **interactive** or **single-shot** session:
|
|
201
200
|
|
|
202
|
-
| Command | Description
|
|
203
|
-
| ---------- |
|
|
204
|
-
| `/approve` | Approve the pending escalation
|
|
205
|
-
| `/deny` | Deny the pending escalation
|
|
206
|
-
| `/budget` | Show resource consumption (tokens, steps, cost)
|
|
207
|
-
| `/logs` | Display diagnostic events
|
|
208
|
-
| `/quit` | End the session
|
|
201
|
+
| Command | Description |
|
|
202
|
+
| ---------- | ----------------------------------------------- |
|
|
203
|
+
| `/approve` | Approve the pending escalation |
|
|
204
|
+
| `/deny` | Deny the pending escalation |
|
|
205
|
+
| `/budget` | Show resource consumption (tokens, steps, cost) |
|
|
206
|
+
| `/logs` | Display diagnostic events |
|
|
207
|
+
| `/quit` | End the session |
|
|
209
208
|
|
|
210
|
-
In **PTY mode**, use the
|
|
209
|
+
In **PTY mode**, use the [terminal multiplexer](#terminal-multiplexer-recommended-for-docker-agent-mode) (`ironcurtain mux`) for inline escalation handling and trusted input support.
|
|
211
210
|
|
|
212
211
|
## Policy: Constitution → Enforcement
|
|
213
212
|
|
|
@@ -242,9 +241,9 @@ compiles to:
|
|
|
242
241
|
|
|
243
242
|
```json
|
|
244
243
|
[
|
|
245
|
-
{ "tool": "git_status", "decision": "allow",
|
|
246
|
-
{ "tool": "git_diff",
|
|
247
|
-
{ "tool": "git_push",
|
|
244
|
+
{ "tool": "git_status", "decision": "allow", "condition": { "directory": { "within": "$SANDBOX" } } },
|
|
245
|
+
{ "tool": "git_diff", "decision": "allow", "condition": { "directory": { "within": "$SANDBOX" } } },
|
|
246
|
+
{ "tool": "git_push", "decision": "escalate", "reason": "Remote-contacting git operations require human approval" }
|
|
248
247
|
]
|
|
249
248
|
```
|
|
250
249
|
|
|
@@ -376,11 +375,11 @@ After compilation, review the updated `tool-annotations.json` and `compiled-poli
|
|
|
376
375
|
|
|
377
376
|
IronCurtain ships with four pre-configured MCP servers. All tool calls are governed by your compiled policy.
|
|
378
377
|
|
|
379
|
-
| Server | Tools | Key capabilities
|
|
380
|
-
| -------------- | ----- |
|
|
381
|
-
| **Filesystem** | 14 | Read, write, edit, search files; directory tree; move; diff calculation
|
|
382
|
-
| **Git** | 27 | Full git workflow: status, diff, log, commit, branch, push/pull/fetch, clone, stash, blame
|
|
383
|
-
| **Fetch** | 2 | HTTP GET with HTML-to-markdown conversion; `web_search` (see [Web Search](#web-search))
|
|
378
|
+
| Server | Tools | Key capabilities |
|
|
379
|
+
| -------------- | ----- | ----------------------------------------------------------------------------------------------------------------- |
|
|
380
|
+
| **Filesystem** | 14 | Read, write, edit, search files; directory tree; move; diff calculation |
|
|
381
|
+
| **Git** | 27 | Full git workflow: status, diff, log, commit, branch, push/pull/fetch, clone, stash, blame |
|
|
382
|
+
| **Fetch** | 2 | HTTP GET with HTML-to-markdown conversion; `web_search` (see [Web Search](#web-search)) |
|
|
384
383
|
| **GitHub** | 41 | Issues, PRs, code search, reviews via `ghcr.io/github/github-mcp-server`; requires a GitHub personal access token |
|
|
385
384
|
|
|
386
385
|
Read-only operations are allowed by default policy; mutations (writes, pushes, PR creation) escalate for human approval.
|
|
@@ -411,17 +410,17 @@ See [docs/SECURITY_CONCERNS.md](docs/SECURITY_CONCERNS.md) for a detailed threat
|
|
|
411
410
|
|
|
412
411
|
## Troubleshooting
|
|
413
412
|
|
|
414
|
-
| Issue
|
|
415
|
-
|
|
|
416
|
-
| **Missing API key**
|
|
417
|
-
| **Sandbox unavailable**
|
|
418
|
-
| **Budget exhausted**
|
|
419
|
-
| **Node version errors**
|
|
420
|
-
| **Policy doesn't match intent**
|
|
421
|
-
| **Auto-approve not triggering**
|
|
422
|
-
| **PTY terminal garbled after exit**
|
|
423
|
-
| **
|
|
424
|
-
| **Signal bot not responding**
|
|
413
|
+
| Issue | Guidance |
|
|
414
|
+
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
415
|
+
| **Missing API key** | Set the environment variable (`ANTHROPIC_API_KEY`, `GOOGLE_GENERATIVE_AI_API_KEY`, or `OPENAI_API_KEY`) or add the corresponding key to `~/.ironcurtain/config.json`. |
|
|
416
|
+
| **Sandbox unavailable** | OS-level sandboxing requires `bubblewrap` and `socat`. Install both, or set `"sandboxPolicy": "warn"` in your MCP server config for development. |
|
|
417
|
+
| **Budget exhausted** | Adjust limits in `~/.ironcurtain/config.json` under `resourceBudget`. Set any individual limit to `null` to disable it. |
|
|
418
|
+
| **Node version errors** | Node.js 22+ is required (`isolated-vm` needs `>=22.0.0`). Maximum supported is Node 25 (`<26`). |
|
|
419
|
+
| **Policy doesn't match intent** | Review `compiled-policy.json` to see the generated rules. Run `ironcurtain customize-policy` to refine your constitution, then `ironcurtain compile-policy` to recompile. Specific wording produces better rules — vague phrasing leads to vague policy. |
|
|
420
|
+
| **Auto-approve not triggering** | The auto-approver only approves when the user's message explicitly authorizes the action (e.g., "push to origin" for `git_push`). Vague messages always escalate to human review. Verify `autoApprove.enabled` is `true` in `config.json`. |
|
|
421
|
+
| **PTY/mux terminal garbled after exit** | Run `reset` in that terminal to restore normal mode. This is needed when the process is killed ungracefully and raw mode is not restored. |
|
|
422
|
+
| **Mux/listener: "already running"** | Only one mux or escalation-listener can run at a time. The lock at `~/.ironcurtain/escalation-listener.lock` is auto-cleared if the previous process is dead. If it persists, check the PID in the lock file. |
|
|
423
|
+
| **Signal bot not responding** | Verify the signal-cli container is running (`docker ps \| grep ironcurtain-signal`). Check that Signal is configured (`ironcurtain setup-signal`). See [TRANSPORT.md](TRANSPORT.md) for detailed troubleshooting. |
|
|
425
424
|
|
|
426
425
|
## Development
|
|
427
426
|
|
|
@@ -450,6 +449,7 @@ src/
|
|
|
450
449
|
├── trusted-process/ # Policy engine, MCP proxy, audit log, escalation handler
|
|
451
450
|
├── pipeline/ # Constitution → policy compilation pipeline
|
|
452
451
|
├── escalation/ # Escalation listener: session registry, TUI dashboard, state
|
|
452
|
+
├── mux/ # Terminal multiplexer: PTY bridge, renderer, trusted input
|
|
453
453
|
├── signal/ # Signal messaging transport (bot daemon, setup, formatting)
|
|
454
454
|
├── docker/ # Docker agent mode, PTY session, MITM proxy, adapters
|
|
455
455
|
├── servers/ # Built-in MCP servers (fetch, web search providers)
|
package/dist/cli.js
CHANGED
|
@@ -20,6 +20,7 @@ Usage:
|
|
|
20
20
|
|
|
21
21
|
Commands:
|
|
22
22
|
start [task] Run the agent (interactive or single-shot)
|
|
23
|
+
mux Terminal multiplexer for PTY sessions (requires node-pty)
|
|
23
24
|
escalation-listener Aggregate escalation notifications from PTY sessions
|
|
24
25
|
bot Run the Signal messaging transport daemon
|
|
25
26
|
setup Run the first-start wizard (always runs)
|
|
@@ -37,6 +38,8 @@ Options:
|
|
|
37
38
|
-v, --version Show version number
|
|
38
39
|
-a, --agent <name> Agent mode: builtin or claude-code (Docker)
|
|
39
40
|
Auto-detects if omitted: Docker if available, else builtin
|
|
41
|
+
-w, --workspace <path> Use an existing directory as the agent's workspace
|
|
42
|
+
instead of creating a fresh sandbox
|
|
40
43
|
--pty Attach terminal directly to agent PTY (Docker mode only)
|
|
41
44
|
Ctrl-\\ is the emergency exit; run 'reset' to recover
|
|
42
45
|
the terminal if killed ungracefully
|
|
@@ -47,6 +50,7 @@ Examples:
|
|
|
47
50
|
ironcurtain start # Interactive session
|
|
48
51
|
ironcurtain start "Summarize files in ." # Single-shot task
|
|
49
52
|
ironcurtain start --resume <session-id> # Resume a session
|
|
53
|
+
ironcurtain start -w ./my-project "Fix bugs" # Work in existing directory
|
|
50
54
|
ironcurtain start --agent claude-code "task" # Docker: Claude Code
|
|
51
55
|
ironcurtain start --pty # PTY mode: interactive Docker terminal
|
|
52
56
|
ironcurtain start --list-agents # List available agents
|
|
@@ -118,6 +122,11 @@ switch (subcommand) {
|
|
|
118
122
|
await runBot({ agent: agentName });
|
|
119
123
|
break;
|
|
120
124
|
}
|
|
125
|
+
case 'mux': {
|
|
126
|
+
const { main: muxMain } = await import('./mux/mux-command.js');
|
|
127
|
+
await muxMain(process.argv.slice(3));
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
121
130
|
case 'escalation-listener': {
|
|
122
131
|
const { main: listenerMain } = await import('./escalation/listener-command.js');
|
|
123
132
|
await listenerMain();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,SAAS,UAAU;IACjB,oFAAoF;IACpF,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAwB,CAAC;IACtF,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,KAAK,CACX
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -98,4 +98,10 @@ export interface IronCurtainConfig {
|
|
|
98
98
|
dockerAuth?: {
|
|
99
99
|
readonly kind: 'oauth' | 'apikey';
|
|
100
100
|
};
|
|
101
|
+
/**
|
|
102
|
+
* Whether this is a PTY session. When true, the proxy requires
|
|
103
|
+
* trusted input source ("mux-trusted-input") for auto-approval.
|
|
104
|
+
* Set by PTY session orchestration code.
|
|
105
|
+
*/
|
|
106
|
+
isPtySession?: boolean;
|
|
101
107
|
}
|
|
@@ -208,7 +208,7 @@ stty -F "$PTS" size 2>/dev/null || echo "0 0"
|
|
|
208
208
|
// Interactive mode: claude runs via a wrapper script that reads the system
|
|
209
209
|
// prompt from an env var set by the entrypoint. This avoids shell quoting
|
|
210
210
|
// issues that occur when embedding large prompts in socat EXEC: strings.
|
|
211
|
-
return ['socat', listenArg, 'EXEC:/etc/ironcurtain/start-claude.sh,pty,setsid,ctty,stderr'];
|
|
211
|
+
return ['socat', listenArg, 'EXEC:/etc/ironcurtain/start-claude.sh,pty,setsid,ctty,stderr,rawer'];
|
|
212
212
|
},
|
|
213
213
|
};
|
|
214
214
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/docker/adapters/claude-code.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/docker/adapters/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ import { existsSync, readdirSync, readFileSync, copyFileSync, mkdtempSync, rmSyn
|
|
|
11
11
|
import { arch, tmpdir } from 'node:os';
|
|
12
12
|
import { createHash } from 'node:crypto';
|
|
13
13
|
import * as logger from '../logger.js';
|
|
14
|
+
/** Hosts that use Anthropic OAuth credentials when available. */
|
|
15
|
+
const ANTHROPIC_HOSTS = new Set(['api.anthropic.com', 'platform.claude.com']);
|
|
14
16
|
/**
|
|
15
17
|
* Prepares all Docker infrastructure needed to run a session.
|
|
16
18
|
*
|
|
@@ -32,6 +34,7 @@ export async function prepareDockerInfrastructure(config, mode, sessionDir, sand
|
|
|
32
34
|
const { prepareSession } = await import('./orientation.js');
|
|
33
35
|
const { mkdirSync } = await import('node:fs');
|
|
34
36
|
const { detectAuthMethod } = await import('./oauth-credentials.js');
|
|
37
|
+
const { OAuthTokenManager } = await import('./oauth-token-manager.js');
|
|
35
38
|
await registerBuiltinAdapters();
|
|
36
39
|
const adapter = getAgent(mode.agent);
|
|
37
40
|
const useTcp = useTcpTransport();
|
|
@@ -65,6 +68,9 @@ export async function prepareDockerInfrastructure(config, mode, sessionDir, sand
|
|
|
65
68
|
// Providers sharing the same fakeKeyPrefix (and thus the same real credential)
|
|
66
69
|
// reuse the same fake key so a single container token authenticates against all hosts.
|
|
67
70
|
const oauthAccessToken = authMethod.kind === 'oauth' ? authMethod.credentials.accessToken : undefined;
|
|
71
|
+
const tokenManager = authMethod.kind === 'oauth'
|
|
72
|
+
? new OAuthTokenManager(authMethod.credentials, { canRefresh: authMethod.source === 'file' })
|
|
73
|
+
: undefined;
|
|
68
74
|
const providers = adapter.getProviders(authKind);
|
|
69
75
|
const fakeKeys = new Map();
|
|
70
76
|
const providerMappings = [];
|
|
@@ -77,7 +83,9 @@ export async function prepareDockerInfrastructure(config, mode, sessionDir, sand
|
|
|
77
83
|
}
|
|
78
84
|
fakeKeys.set(providerConfig.host, fakeKey);
|
|
79
85
|
const realKey = resolveRealKey(providerConfig.host, config, oauthAccessToken);
|
|
80
|
-
|
|
86
|
+
// Attach the token manager only to Anthropic hosts (the ones using OAuth)
|
|
87
|
+
const hostTokenManager = tokenManager && ANTHROPIC_HOSTS.has(providerConfig.host) ? tokenManager : undefined;
|
|
88
|
+
providerMappings.push({ config: providerConfig, fakeKey, realKey, tokenManager: hostTokenManager });
|
|
81
89
|
}
|
|
82
90
|
const mitmProxy = useTcp
|
|
83
91
|
? createMitmProxy({
|
|
@@ -156,8 +164,7 @@ export async function prepareDockerInfrastructure(config, mode, sessionDir, sand
|
|
|
156
164
|
* For all other cases, falls back to the API key from config.
|
|
157
165
|
*/
|
|
158
166
|
function resolveRealKey(host, config, oauthAccessToken) {
|
|
159
|
-
|
|
160
|
-
if (oauthAccessToken && (host === 'api.anthropic.com' || host === 'platform.claude.com')) {
|
|
167
|
+
if (oauthAccessToken && ANTHROPIC_HOSTS.has(host)) {
|
|
161
168
|
return oauthAccessToken;
|
|
162
169
|
}
|
|
163
170
|
let key;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker-infrastructure.js","sourceRoot":"","sources":["../../src/docker/docker-infrastructure.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AASzC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AA0BvC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAyB,EACzB,IAAsC,EACtC,UAAkB,EAClB,UAAkB,EAClB,aAAqB,EACrB,YAAoB,EACpB,SAAiB;IAEjB,6EAA6E;IAC7E,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAClF,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACrE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC5D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACpE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAClE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"docker-infrastructure.js","sourceRoot":"","sources":["../../src/docker/docker-infrastructure.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { type CertificateAuthority } from './ca.js';
|
|
16
16
|
import { type ProviderConfig } from './provider-config.js';
|
|
17
|
+
import type { OAuthTokenManager } from './oauth-token-manager.js';
|
|
17
18
|
export interface MitmProxy {
|
|
18
19
|
/** Start listening on the UDS or TCP port. Pre-warms cert cache for all providers. */
|
|
19
20
|
start(): Promise<{
|
|
@@ -40,7 +41,9 @@ export interface ProviderKeyMapping {
|
|
|
40
41
|
readonly config: ProviderConfig;
|
|
41
42
|
/** The fake sentinel key given to the container. */
|
|
42
43
|
readonly fakeKey: string;
|
|
43
|
-
/** The real API key to inject in upstream requests. */
|
|
44
|
-
|
|
44
|
+
/** The real API key to inject in upstream requests. Mutable for token refresh. */
|
|
45
|
+
realKey: string;
|
|
46
|
+
/** Optional token manager for OAuth providers — enables proactive refresh and 401 retry. */
|
|
47
|
+
readonly tokenManager?: OAuthTokenManager;
|
|
45
48
|
}
|
|
46
49
|
export declare function createMitmProxy(options: MitmProxyOptions): MitmProxy;
|