@provos/ironcurtain 0.4.0 → 0.5.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 +219 -248
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/config-command.js +144 -6
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/constitution-user-base.md +2 -0
- package/dist/config/first-start.js +77 -12
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/generated/compiled-policy.json +199 -72
- package/dist/config/generated/tool-annotations.json +1018 -36
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +13 -0
- package/dist/config/paths.d.ts +31 -0
- package/dist/config/paths.js +52 -2
- package/dist/config/paths.js.map +1 -1
- package/dist/config/types.d.ts +10 -0
- package/dist/config/user-config.d.ts +21 -3
- package/dist/config/user-config.js +34 -3
- package/dist/config/user-config.js.map +1 -1
- package/dist/docker/adapters/claude-code.d.ts +4 -0
- package/dist/docker/adapters/claude-code.js +96 -37
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +22 -13
- package/dist/docker/code-mode-proxy.d.ts +34 -0
- package/dist/docker/code-mode-proxy.js +137 -0
- package/dist/docker/code-mode-proxy.js.map +1 -0
- package/dist/docker/docker-agent-session.d.ts +22 -14
- package/dist/docker/docker-agent-session.js +144 -117
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +51 -0
- package/dist/docker/docker-infrastructure.js +261 -0
- package/dist/docker/docker-infrastructure.js.map +1 -0
- package/dist/docker/docker-manager.js +27 -0
- package/dist/docker/docker-manager.js.map +1 -1
- package/dist/docker/mitm-proxy.js +4 -0
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/oauth-credentials.d.ts +81 -0
- package/dist/docker/oauth-credentials.js +178 -0
- package/dist/docker/oauth-credentials.js.map +1 -0
- package/dist/docker/orientation.d.ts +3 -2
- package/dist/docker/orientation.js +4 -4
- package/dist/docker/orientation.js.map +1 -1
- package/dist/docker/provider-config.d.ts +3 -0
- package/dist/docker/provider-config.js +28 -0
- package/dist/docker/provider-config.js.map +1 -1
- package/dist/docker/pty-session.d.ts +27 -0
- package/dist/docker/pty-session.js +420 -0
- package/dist/docker/pty-session.js.map +1 -0
- package/dist/docker/pty-types.d.ts +24 -0
- package/dist/docker/pty-types.js +12 -0
- package/dist/docker/pty-types.js.map +1 -0
- package/dist/docker/types.d.ts +18 -2
- package/dist/escalation/escalation-watcher.d.ts +44 -0
- package/dist/escalation/escalation-watcher.js +92 -0
- package/dist/escalation/escalation-watcher.js.map +1 -0
- package/dist/escalation/listener-command.d.ts +10 -0
- package/dist/escalation/listener-command.js +407 -0
- package/dist/escalation/listener-command.js.map +1 -0
- package/dist/escalation/listener-state.d.ts +49 -0
- package/dist/escalation/listener-state.js +104 -0
- package/dist/escalation/listener-state.js.map +1 -0
- package/dist/escalation/session-registry.d.ts +17 -0
- package/dist/escalation/session-registry.js +98 -0
- package/dist/escalation/session-registry.js.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.js +2 -3
- package/dist/logger.js.map +1 -1
- package/dist/pipeline/annotate.js +35 -15
- package/dist/pipeline/annotate.js.map +1 -1
- package/dist/pipeline/constitution-customizer.d.ts +2 -1
- package/dist/pipeline/constitution-customizer.js +36 -3
- package/dist/pipeline/constitution-customizer.js.map +1 -1
- package/dist/pipeline/github-identity.d.ts +38 -0
- package/dist/pipeline/github-identity.js +64 -0
- package/dist/pipeline/github-identity.js.map +1 -0
- package/dist/pipeline/handwritten-scenarios.js +34 -0
- package/dist/pipeline/handwritten-scenarios.js.map +1 -1
- package/dist/sandbox/index.d.ts +25 -1
- package/dist/sandbox/index.js +90 -12
- package/dist/sandbox/index.js.map +1 -1
- package/dist/servers/fetch-server.d.ts +6 -1
- package/dist/servers/fetch-server.js +26 -14
- package/dist/servers/fetch-server.js.map +1 -1
- package/dist/session/agent-session.js +9 -5
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/base-transport.d.ts +19 -0
- package/dist/session/base-transport.js +36 -0
- package/dist/session/base-transport.js.map +1 -0
- package/dist/session/cli-transport.d.ts +3 -3
- package/dist/session/cli-transport.js +7 -4
- package/dist/session/cli-transport.js.map +1 -1
- package/dist/session/index.js +24 -106
- package/dist/session/index.js.map +1 -1
- package/dist/session/interaction-log.d.ts +13 -0
- package/dist/session/interaction-log.js +28 -0
- package/dist/session/interaction-log.js.map +1 -0
- package/dist/session/preflight.d.ts +3 -0
- package/dist/session/preflight.js +45 -18
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +9 -3
- package/dist/session/prompts.js +28 -10
- package/dist/session/prompts.js.map +1 -1
- package/dist/session/types.d.ts +2 -0
- package/dist/signal/bot-command.js +5 -0
- package/dist/signal/bot-command.js.map +1 -1
- package/dist/signal/format.d.ts +21 -1
- package/dist/signal/format.js +41 -3
- package/dist/signal/format.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +53 -18
- package/dist/signal/signal-bot-daemon.js +344 -106
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-config.d.ts +4 -0
- package/dist/signal/signal-config.js +2 -0
- package/dist/signal/signal-config.js.map +1 -1
- package/dist/signal/signal-transport.d.ts +13 -7
- package/dist/signal/signal-transport.js +36 -12
- package/dist/signal/signal-transport.js.map +1 -1
- package/dist/trusted-process/audit-log.d.ts +6 -1
- package/dist/trusted-process/audit-log.js +22 -2
- package/dist/trusted-process/audit-log.js.map +1 -1
- package/dist/trusted-process/audit-redactor.d.ts +25 -0
- package/dist/trusted-process/audit-redactor.js +121 -0
- package/dist/trusted-process/audit-redactor.js.map +1 -0
- package/dist/trusted-process/escalation.d.ts +1 -1
- package/dist/trusted-process/escalation.js +6 -1
- package/dist/trusted-process/escalation.js.map +1 -1
- package/dist/trusted-process/index.d.ts +2 -1
- package/dist/trusted-process/index.js +24 -6
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/mcp-client-manager.js +14 -2
- package/dist/trusted-process/mcp-client-manager.js.map +1 -1
- package/dist/trusted-process/mcp-error-utils.d.ts +11 -0
- package/dist/trusted-process/mcp-error-utils.js +50 -0
- package/dist/trusted-process/mcp-error-utils.js.map +1 -0
- package/dist/trusted-process/mcp-proxy-server.d.ts +115 -1
- package/dist/trusted-process/mcp-proxy-server.js +318 -267
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +3 -1
- package/dist/trusted-process/policy-engine.js +17 -6
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +16 -4
- package/dist/trusted-process/sandbox-integration.js +14 -8
- package/dist/trusted-process/sandbox-integration.js.map +1 -1
- package/dist/trusted-process/server-context.d.ts +21 -0
- package/dist/trusted-process/server-context.js +42 -0
- package/dist/trusted-process/server-context.js.map +1 -0
- package/dist/types/argument-roles.d.ts +12 -2
- package/dist/types/argument-roles.js +37 -4
- package/dist/types/argument-roles.js.map +1 -1
- package/docker/Dockerfile.claude-code +8 -3
- package/docker/entrypoint-claude-code.sh +64 -4
- package/package.json +19 -9
- package/src/config/constitution-user-base.md +2 -0
- package/src/config/generated/compiled-policy.json +199 -72
- package/src/config/generated/tool-annotations.json +1018 -36
- package/src/config/mcp-servers.json +13 -0
- package/dist/docker/managed-proxy.d.ts +0 -31
- package/dist/docker/managed-proxy.js +0 -265
- package/dist/docker/managed-proxy.js.map +0 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth credential detection for Docker agent sessions.
|
|
3
|
+
*
|
|
4
|
+
* Detects whether the host user has OAuth credentials from Claude Code
|
|
5
|
+
* and provides them for the fake-key-swap pattern. Real credentials
|
|
6
|
+
* never enter the container -- the MITM proxy swaps fake tokens for
|
|
7
|
+
* real ones on the host side.
|
|
8
|
+
*
|
|
9
|
+
* Detection order (prefer OAuth):
|
|
10
|
+
* 1. ~/.claude/.credentials.json (claudeAiOauth)
|
|
11
|
+
* 2. macOS Keychain (if credentials file missing)
|
|
12
|
+
* 3. Fall back to API key from config
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
15
|
+
import { homedir, platform, userInfo } from 'node:os';
|
|
16
|
+
import { resolve } from 'node:path';
|
|
17
|
+
import { execFileSync } from 'node:child_process';
|
|
18
|
+
import * as logger from '../logger.js';
|
|
19
|
+
/** Minimum remaining token lifetime (5 minutes) to consider a token usable. */
|
|
20
|
+
const TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000;
|
|
21
|
+
/** Service names used by Claude Code in macOS Keychain. */
|
|
22
|
+
const KEYCHAIN_SERVICE_NAMES = ['Claude Code-credentials', 'Claude Code'];
|
|
23
|
+
/**
|
|
24
|
+
* Returns the path to Claude Code's credentials file.
|
|
25
|
+
* Exposed for testing.
|
|
26
|
+
*/
|
|
27
|
+
export function getCredentialsFilePath() {
|
|
28
|
+
return resolve(homedir(), '.claude', '.credentials.json');
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Checks whether an OAuth token is expired or too close to expiry.
|
|
32
|
+
* Returns true if the token has fewer than 5 minutes of validity remaining.
|
|
33
|
+
*/
|
|
34
|
+
export function isTokenExpired(credentials) {
|
|
35
|
+
return Date.now() + TOKEN_EXPIRY_BUFFER_MS >= credentials.expiresAt;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Loads OAuth credentials from ~/.claude/.credentials.json.
|
|
39
|
+
* Returns null if the file is missing, unreadable, or lacks valid credentials.
|
|
40
|
+
*/
|
|
41
|
+
export function loadOAuthCredentials() {
|
|
42
|
+
const credPath = getCredentialsFilePath();
|
|
43
|
+
return loadCredentialsFromFile(credPath);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parses credentials from a file path. Extracted for testability.
|
|
47
|
+
*/
|
|
48
|
+
export function loadCredentialsFromFile(filePath) {
|
|
49
|
+
if (!existsSync(filePath))
|
|
50
|
+
return null;
|
|
51
|
+
try {
|
|
52
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
53
|
+
return parseCredentialsJson(raw);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
logger.warn(`Failed to read OAuth credentials from ${filePath}`);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parses the claudeAiOauth section from a credentials JSON string.
|
|
62
|
+
* Returns null if parsing fails or required fields are missing.
|
|
63
|
+
*/
|
|
64
|
+
export function parseCredentialsJson(json) {
|
|
65
|
+
try {
|
|
66
|
+
const parsed = JSON.parse(json);
|
|
67
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
68
|
+
return null;
|
|
69
|
+
const obj = parsed;
|
|
70
|
+
const oauth = obj.claudeAiOauth;
|
|
71
|
+
if (typeof oauth !== 'object' || oauth === null)
|
|
72
|
+
return null;
|
|
73
|
+
const creds = oauth;
|
|
74
|
+
if (typeof creds.accessToken !== 'string' || !creds.accessToken)
|
|
75
|
+
return null;
|
|
76
|
+
if (typeof creds.refreshToken !== 'string' || !creds.refreshToken)
|
|
77
|
+
return null;
|
|
78
|
+
if (typeof creds.expiresAt !== 'number' || !Number.isFinite(creds.expiresAt) || creds.expiresAt <= 0)
|
|
79
|
+
return null;
|
|
80
|
+
return {
|
|
81
|
+
accessToken: creds.accessToken,
|
|
82
|
+
refreshToken: creds.refreshToken,
|
|
83
|
+
expiresAt: creds.expiresAt,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Attempts to extract OAuth credentials from the macOS Keychain.
|
|
92
|
+
* Returns null on non-macOS platforms, Keychain access failure, or
|
|
93
|
+
* when no valid credentials are found.
|
|
94
|
+
*
|
|
95
|
+
* Tries both service names because Claude Code has a known bug where
|
|
96
|
+
* the write and read service names differ.
|
|
97
|
+
*/
|
|
98
|
+
export function extractFromKeychain() {
|
|
99
|
+
if (platform() !== 'darwin')
|
|
100
|
+
return null;
|
|
101
|
+
const account = userInfo().username;
|
|
102
|
+
for (const service of KEYCHAIN_SERVICE_NAMES) {
|
|
103
|
+
try {
|
|
104
|
+
const result = execFileSync('security', ['find-generic-password', '-s', service, '-a', account, '-w'], {
|
|
105
|
+
encoding: 'utf8',
|
|
106
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
107
|
+
timeout: 10_000,
|
|
108
|
+
});
|
|
109
|
+
const credentials = parseCredentialsJson(result.trim());
|
|
110
|
+
if (credentials) {
|
|
111
|
+
logger.info(`Found OAuth credentials in macOS Keychain (service: "${service}")`);
|
|
112
|
+
return credentials;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Not found or keychain locked -- try next service name
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
const defaultSources = {
|
|
123
|
+
loadFromFile: loadOAuthCredentials,
|
|
124
|
+
loadFromKeychain: extractFromKeychain,
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Detects the best authentication method available on the host.
|
|
128
|
+
*
|
|
129
|
+
* Priority:
|
|
130
|
+
* 1. IRONCURTAIN_DOCKER_AUTH=apikey env var forces API key mode
|
|
131
|
+
* 2. OAuth credentials from ~/.claude/.credentials.json (if not expired)
|
|
132
|
+
* 3. OAuth credentials from macOS Keychain (if credentials file missing)
|
|
133
|
+
* 4. API key from config
|
|
134
|
+
* 5. None
|
|
135
|
+
*
|
|
136
|
+
* @param sources - Injectable credential loaders (for testing)
|
|
137
|
+
*/
|
|
138
|
+
export function detectAuthMethod(config, sources) {
|
|
139
|
+
const { loadFromFile, loadFromKeychain } = sources ?? defaultSources;
|
|
140
|
+
// Allow explicit override to force API key mode
|
|
141
|
+
if (process.env.IRONCURTAIN_DOCKER_AUTH === 'apikey') {
|
|
142
|
+
logger.info('Docker auth override: forced API key mode via IRONCURTAIN_DOCKER_AUTH');
|
|
143
|
+
return resolveApiKeyAuth(config);
|
|
144
|
+
}
|
|
145
|
+
// Try OAuth from credentials file
|
|
146
|
+
const fileCreds = loadFromFile();
|
|
147
|
+
if (fileCreds) {
|
|
148
|
+
if (!isTokenExpired(fileCreds)) {
|
|
149
|
+
logger.info('Detected OAuth credentials from ~/.claude/.credentials.json');
|
|
150
|
+
return { kind: 'oauth', credentials: fileCreds };
|
|
151
|
+
}
|
|
152
|
+
logger.warn('OAuth token from credentials file is expired');
|
|
153
|
+
}
|
|
154
|
+
// Try macOS Keychain if credentials file was not found
|
|
155
|
+
if (!fileCreds) {
|
|
156
|
+
const keychainCreds = loadFromKeychain();
|
|
157
|
+
if (keychainCreds) {
|
|
158
|
+
if (!isTokenExpired(keychainCreds)) {
|
|
159
|
+
return { kind: 'oauth', credentials: keychainCreds };
|
|
160
|
+
}
|
|
161
|
+
logger.warn('OAuth token from macOS Keychain is expired');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Fall back to API key
|
|
165
|
+
return resolveApiKeyAuth(config);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Resolves API key authentication from config.
|
|
169
|
+
*/
|
|
170
|
+
function resolveApiKeyAuth(config) {
|
|
171
|
+
const key = config.userConfig.anthropicApiKey;
|
|
172
|
+
if (key) {
|
|
173
|
+
logger.info('Using API key authentication for Docker session');
|
|
174
|
+
return { kind: 'apikey', key };
|
|
175
|
+
}
|
|
176
|
+
return { kind: 'none' };
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=oauth-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-credentials.js","sourceRoot":"","sources":["../../src/docker/oauth-credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAevC,+EAA+E;AAC/E,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAE7C,2DAA2D;AAC3D,MAAM,sBAAsB,GAAG,CAAC,yBAAyB,EAAE,aAAa,CAAU,CAAC;AAEnF;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAA6B;IAC1D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,sBAAsB,IAAI,WAAW,CAAC,SAAS,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,yCAAyC,QAAQ,EAAE,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAE/D,MAAM,GAAG,GAAG,MAAiC,CAAC;QAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAE7D,MAAM,KAAK,GAAG,KAAgC,CAAC;QAC/C,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAC7E,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC/E,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAElH,OAAO;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,QAAQ,EAAE,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC,uBAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;gBACrG,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,wDAAwD,OAAO,IAAI,CAAC,CAAC;gBACjF,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;YACxD,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,cAAc,GAAsB;IACxC,YAAY,EAAE,oBAAoB;IAClC,gBAAgB,EAAE,mBAAmB;CACtC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAyB,EAAE,OAA2B;IACrF,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,IAAI,cAAc,CAAC;IAErE,gDAAgD;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;gBACnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;YACvD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAyB;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC;IAC9C,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* agent container. Written to the orientation directory which is
|
|
6
6
|
* bind-mounted read-only into the container.
|
|
7
7
|
*/
|
|
8
|
-
import type { AgentAdapter
|
|
8
|
+
import type { AgentAdapter } from './agent-adapter.js';
|
|
9
9
|
import type { IronCurtainConfig } from '../config/types.js';
|
|
10
|
+
import type { ServerListing } from '../session/prompts.js';
|
|
10
11
|
/**
|
|
11
12
|
* Extracts allowed domains from MCP server configurations.
|
|
12
13
|
* Used to inform the agent about which domains it can access via MCP tools.
|
|
@@ -18,6 +19,6 @@ export declare function extractAllowedDomains(config: IronCurtainConfig): string
|
|
|
18
19
|
* 1. Generates MCP client config via adapter (written to orientation dir)
|
|
19
20
|
* 2. Builds the system prompt via adapter (returned for per-turn injection)
|
|
20
21
|
*/
|
|
21
|
-
export declare function prepareSession(adapter: AgentAdapter,
|
|
22
|
+
export declare function prepareSession(adapter: AgentAdapter, serverListings: ServerListing[], sessionDir: string, config: IronCurtainConfig, hostSandboxDir: string, proxyAddress?: string): {
|
|
22
23
|
systemPrompt: string;
|
|
23
24
|
};
|
|
@@ -34,7 +34,7 @@ function writeConfigFiles(baseDir, files) {
|
|
|
34
34
|
for (const file of files) {
|
|
35
35
|
const targetPath = resolve(baseDir, file.path);
|
|
36
36
|
mkdirSync(dirname(targetPath), { recursive: true });
|
|
37
|
-
writeFileSync(targetPath, file.content);
|
|
37
|
+
writeFileSync(targetPath, file.content, { mode: file.mode });
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
@@ -43,19 +43,19 @@ function writeConfigFiles(baseDir, files) {
|
|
|
43
43
|
* 1. Generates MCP client config via adapter (written to orientation dir)
|
|
44
44
|
* 2. Builds the system prompt via adapter (returned for per-turn injection)
|
|
45
45
|
*/
|
|
46
|
-
export function prepareSession(adapter,
|
|
46
|
+
export function prepareSession(adapter, serverListings, sessionDir, config, hostSandboxDir, proxyAddress) {
|
|
47
47
|
const orientationDir = resolve(sessionDir, 'orientation');
|
|
48
48
|
mkdirSync(orientationDir, { recursive: true });
|
|
49
49
|
const context = {
|
|
50
50
|
workspaceDir: '/workspace',
|
|
51
51
|
hostSandboxDir,
|
|
52
|
-
|
|
52
|
+
serverListings,
|
|
53
53
|
allowedDomains: extractAllowedDomains(config),
|
|
54
54
|
networkMode: proxyAddress ? 'bridge' : 'none',
|
|
55
55
|
};
|
|
56
56
|
// proxyAddress is either a TCP host:port (macOS) or defaults to the UDS path (Linux)
|
|
57
57
|
const address = proxyAddress ?? '/run/ironcurtain/proxy.sock';
|
|
58
|
-
writeConfigFiles(orientationDir, adapter.generateMcpConfig(address
|
|
58
|
+
writeConfigFiles(orientationDir, adapter.generateMcpConfig(address));
|
|
59
59
|
writeConfigFiles(orientationDir, adapter.generateOrientationFiles(context));
|
|
60
60
|
const systemPrompt = adapter.buildSystemPrompt(context);
|
|
61
61
|
return { systemPrompt };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orientation.js","sourceRoot":"","sources":["../../src/docker/orientation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"orientation.js","sourceRoot":"","sources":["../../src/docker/orientation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAK7C;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAyB;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,SAAS;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,SAAS;QACtD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,OAAe,EAAE,KAAwB;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAqB,EACrB,cAA+B,EAC/B,UAAkB,EAClB,MAAyB,EACzB,cAAsB,EACtB,YAAqB;IAErB,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC1D,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAuB;QAClC,YAAY,EAAE,YAAY;QAC1B,cAAc;QACd,cAAc;QACd,cAAc,EAAE,qBAAqB,CAAC,MAAM,CAAC;QAC7C,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;KAC9C,CAAC;IAEF,qFAAqF;IACrF,MAAM,OAAO,GAAG,YAAY,IAAI,6BAA6B,CAAC;IAC9D,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5E,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -93,5 +93,8 @@ export declare function stripServerSideTools(body: Record<string, unknown>): Rew
|
|
|
93
93
|
*/
|
|
94
94
|
export declare function shouldRewriteBody(config: ProviderConfig, method: string | undefined, path: string | undefined): boolean;
|
|
95
95
|
export declare const anthropicProvider: ProviderConfig;
|
|
96
|
+
export declare const claudePlatformProvider: ProviderConfig;
|
|
96
97
|
export declare const openaiProvider: ProviderConfig;
|
|
98
|
+
export declare const anthropicOAuthProvider: ProviderConfig;
|
|
99
|
+
export declare const claudePlatformOAuthProvider: ProviderConfig;
|
|
97
100
|
export declare const googleProvider: ProviderConfig;
|
|
@@ -96,6 +96,7 @@ export const anthropicProvider = {
|
|
|
96
96
|
{ method: 'POST', path: '/v1/messages' },
|
|
97
97
|
{ method: 'POST', path: '/v1/messages/count_tokens' },
|
|
98
98
|
// Claude Code internal endpoints
|
|
99
|
+
{ method: 'GET', path: '/api/hello' },
|
|
99
100
|
{ method: 'GET', path: '/api/claude_code/settings' },
|
|
100
101
|
{ method: 'GET', path: '/api/claude_code/policy_limits' },
|
|
101
102
|
{ method: 'GET', path: '/api/claude_code/organizations/metrics_enabled' },
|
|
@@ -109,6 +110,13 @@ export const anthropicProvider = {
|
|
|
109
110
|
requestRewriter: stripServerSideTools,
|
|
110
111
|
rewriteEndpoints: ['/v1/messages'],
|
|
111
112
|
};
|
|
113
|
+
export const claudePlatformProvider = {
|
|
114
|
+
host: 'platform.claude.com',
|
|
115
|
+
displayName: 'Claude Platform',
|
|
116
|
+
allowedEndpoints: [{ method: 'GET', path: '/v1/oauth/hello' }],
|
|
117
|
+
keyInjection: { type: 'header', headerName: 'x-api-key' },
|
|
118
|
+
fakeKeyPrefix: 'sk-ant-api03-ironcurtain-',
|
|
119
|
+
};
|
|
112
120
|
export const openaiProvider = {
|
|
113
121
|
host: 'api.openai.com',
|
|
114
122
|
displayName: 'OpenAI',
|
|
@@ -119,6 +127,26 @@ export const openaiProvider = {
|
|
|
119
127
|
keyInjection: { type: 'bearer' },
|
|
120
128
|
fakeKeyPrefix: 'sk-ironcurtain-',
|
|
121
129
|
};
|
|
130
|
+
export const anthropicOAuthProvider = {
|
|
131
|
+
host: 'api.anthropic.com',
|
|
132
|
+
displayName: 'Anthropic (OAuth)',
|
|
133
|
+
allowedEndpoints: [
|
|
134
|
+
...anthropicProvider.allowedEndpoints,
|
|
135
|
+
// OAuth-only: usage data requires an OAuth session
|
|
136
|
+
{ method: 'GET', path: '/api/oauth/usage' },
|
|
137
|
+
],
|
|
138
|
+
keyInjection: { type: 'bearer' },
|
|
139
|
+
fakeKeyPrefix: 'sk-ant-oat01-ironcurtain-',
|
|
140
|
+
requestRewriter: stripServerSideTools,
|
|
141
|
+
rewriteEndpoints: ['/v1/messages'],
|
|
142
|
+
};
|
|
143
|
+
export const claudePlatformOAuthProvider = {
|
|
144
|
+
host: 'platform.claude.com',
|
|
145
|
+
displayName: 'Claude Platform (OAuth)',
|
|
146
|
+
allowedEndpoints: claudePlatformProvider.allowedEndpoints,
|
|
147
|
+
keyInjection: { type: 'bearer' },
|
|
148
|
+
fakeKeyPrefix: 'sk-ant-oat01-ironcurtain-',
|
|
149
|
+
};
|
|
122
150
|
export const googleProvider = {
|
|
123
151
|
host: 'generativelanguage.googleapis.com',
|
|
124
152
|
displayName: 'Google',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../../src/docker/provider-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../../src/docker/provider-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PTY session module -- orchestrates a Docker session where the user's
|
|
3
|
+
* terminal is attached directly to Claude Code's PTY inside the container.
|
|
4
|
+
*
|
|
5
|
+
* Instead of the batch-oriented DockerAgentSession (docker exec per turn),
|
|
6
|
+
* this module provides a native interactive experience by bridging the
|
|
7
|
+
* terminal via a Node.js PTY proxy to a socat-managed PTY inside the container.
|
|
8
|
+
*
|
|
9
|
+
* Architecture:
|
|
10
|
+
* User terminal -> Node.js PTY proxy -> UDS/TCP -> socat (container)
|
|
11
|
+
* -> Claude Code (interactive, with PTY)
|
|
12
|
+
* -> Code Mode Proxy (MCP)
|
|
13
|
+
* -> mcp-proxy-server (PolicyEngine + Audit)
|
|
14
|
+
*/
|
|
15
|
+
import type { IronCurtainConfig } from '../config/types.js';
|
|
16
|
+
import type { SessionMode } from '../session/types.js';
|
|
17
|
+
export interface PtySessionOptions {
|
|
18
|
+
readonly config: IronCurtainConfig;
|
|
19
|
+
readonly mode: SessionMode & {
|
|
20
|
+
kind: 'docker';
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Runs a PTY session: starts proxies, launches container with PTY-enabled
|
|
25
|
+
* Claude Code, attaches the terminal, and blocks until the session ends.
|
|
26
|
+
*/
|
|
27
|
+
export declare function runPtySession(options: PtySessionOptions): Promise<void>;
|