@provos/ironcurtain 0.4.1 → 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/mcp-servers.json +10 -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 +8 -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.js +64 -8
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +18 -1
- package/dist/docker/docker-agent-session.d.ts +15 -8
- package/dist/docker/docker-agent-session.js +61 -88
- 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 +3 -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.js +1 -1
- 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 +6 -0
- 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.js +12 -3
- package/dist/sandbox/index.js.map +1 -1
- package/dist/servers/fetch-server.js +2 -2
- 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 -78
- 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 +39 -18
- package/dist/session/preflight.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 +4 -0
- package/dist/trusted-process/mcp-proxy-server.js +14 -4
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/sandbox-integration.d.ts +5 -0
- package/dist/trusted-process/sandbox-integration.js +1 -1
- 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 +5 -2
- package/dist/types/argument-roles.js +25 -2
- 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 +16 -8
- 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 +10 -0
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* invariant applies in the policy engine:
|
|
11
11
|
* - path: filesystem path containment checks
|
|
12
12
|
* - url: domain allowlist checks
|
|
13
|
+
* - identifier: case-insensitive allowlist checks (e.g., GitHub owner)
|
|
13
14
|
* - opaque: no structural invariant (semantic meaning only)
|
|
14
15
|
*/
|
|
15
16
|
import { realpathSync } from 'node:fs';
|
|
@@ -74,6 +75,10 @@ export function resolveRealPath(filePath) {
|
|
|
74
75
|
function identity(value) {
|
|
75
76
|
return value;
|
|
76
77
|
}
|
|
78
|
+
/** Lowercases the value for case-insensitive matching. */
|
|
79
|
+
function lowercase(value) {
|
|
80
|
+
return value.toLowerCase();
|
|
81
|
+
}
|
|
77
82
|
// ---------------------------------------------------------------------------
|
|
78
83
|
// Registry
|
|
79
84
|
// ---------------------------------------------------------------------------
|
|
@@ -164,6 +169,18 @@ const registryEntries = [
|
|
|
164
169
|
serverNames: ['git'],
|
|
165
170
|
},
|
|
166
171
|
],
|
|
172
|
+
[
|
|
173
|
+
'github-owner',
|
|
174
|
+
{
|
|
175
|
+
description: 'GitHub user or organization name that owns the target resource',
|
|
176
|
+
isResourceIdentifier: true,
|
|
177
|
+
category: 'identifier',
|
|
178
|
+
canonicalize: lowercase,
|
|
179
|
+
annotationGuidance: 'Assign to arguments that identify a GitHub user or organization that owns the target resource. ' +
|
|
180
|
+
'Typically the "owner" or "org" parameter on GitHub API tools.',
|
|
181
|
+
serverNames: ['github'],
|
|
182
|
+
},
|
|
183
|
+
],
|
|
167
184
|
[
|
|
168
185
|
'branch-name',
|
|
169
186
|
{
|
|
@@ -172,8 +189,9 @@ const registryEntries = [
|
|
|
172
189
|
category: 'opaque',
|
|
173
190
|
canonicalize: identity,
|
|
174
191
|
annotationGuidance: 'Assign to arguments that are git branch names. ' +
|
|
175
|
-
'Typically applies to git server tools like git_branch, git_checkout, git_merge, git_push
|
|
176
|
-
|
|
192
|
+
'Typically applies to git server tools like git_branch, git_checkout, git_merge, git_push, ' +
|
|
193
|
+
'and GitHub tools like create_pull_request (head/base branch arguments).',
|
|
194
|
+
serverNames: ['git', 'github'],
|
|
177
195
|
},
|
|
178
196
|
],
|
|
179
197
|
[
|
|
@@ -212,6 +230,7 @@ const _ROLE_COMPLETENESS_CHECK = {
|
|
|
212
230
|
'delete-history': true,
|
|
213
231
|
'fetch-url': true,
|
|
214
232
|
'git-remote-url': true,
|
|
233
|
+
'github-owner': true,
|
|
215
234
|
'branch-name': true,
|
|
216
235
|
'commit-message': true,
|
|
217
236
|
none: true,
|
|
@@ -264,6 +283,10 @@ export function getPathRoles() {
|
|
|
264
283
|
export function getUrlRoles() {
|
|
265
284
|
return getRolesByCategory('url');
|
|
266
285
|
}
|
|
286
|
+
/** Returns identifier-category roles only. Used by owner allowlist check. */
|
|
287
|
+
export function getIdentifierRoles() {
|
|
288
|
+
return getRolesByCategory('identifier');
|
|
289
|
+
}
|
|
267
290
|
/**
|
|
268
291
|
* Path roles that filesystem sandbox containment is allowed to auto-resolve.
|
|
269
292
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argument-roles.js","sourceRoot":"","sources":["../../src/types/argument-roles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"argument-roles.js","sourceRoot":"","sources":["../../src/types/argument-roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,8 +11,13 @@ RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
|
11
11
|
|
|
12
12
|
USER codespace
|
|
13
13
|
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
-
|
|
14
|
+
# Pre-seed Claude Code config so it skips interactive prompts:
|
|
15
|
+
# - .claude.json: marks onboarding complete (skips login flow)
|
|
16
|
+
# - .claude/settings.json: accepts bypass-permissions mode (skips confirmation dialog)
|
|
17
|
+
RUN mkdir -p /home/codespace/.claude && \
|
|
18
|
+
echo '{"hasCompletedOnboarding":true,"numStartups":1,"projects":{"/workspace":{"allowedTools":[],"hasTrustDialogAccepted":true}}}' \
|
|
19
|
+
> /home/codespace/.claude.json && \
|
|
20
|
+
echo '{"permissions":{"allow":[],"deny":[]},"skipDangerousModePermissionPrompt":true}' \
|
|
21
|
+
> /home/codespace/.claude/settings.json
|
|
17
22
|
|
|
18
23
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Copies runtime-injected MCP config from the orientation mount
|
|
3
|
-
# into Claude Code's expected config location, then
|
|
4
|
-
#
|
|
3
|
+
# into Claude Code's expected config location, then hands off to CMD.
|
|
4
|
+
# Non-PTY mode: CMD is "sleep infinity" (agent commands arrive via docker exec).
|
|
5
|
+
# PTY mode: CMD is the socat PTY command from buildPtyCommand().
|
|
5
6
|
|
|
6
7
|
# Bridge UDS to local TCP so HTTPS_PROXY works
|
|
7
8
|
MITM_SOCK="/run/ironcurtain/mitm-proxy.sock"
|
|
@@ -10,5 +11,64 @@ if [ -S "$MITM_SOCK" ]; then
|
|
|
10
11
|
socat TCP-LISTEN:$PROXY_PORT,fork,reuseaddr UNIX-CONNECT:$MITM_SOCK &
|
|
11
12
|
fi
|
|
12
13
|
|
|
13
|
-
#
|
|
14
|
-
|
|
14
|
+
# Pre-seed .claude.json so Claude Code skips onboarding, trusts /workspace,
|
|
15
|
+
# and doesn't prompt for API key approval.
|
|
16
|
+
cat > "$HOME/.claude.json" <<'EOJSON'
|
|
17
|
+
{
|
|
18
|
+
"hasCompletedOnboarding": true,
|
|
19
|
+
"numStartups": 1,
|
|
20
|
+
"projects": {
|
|
21
|
+
"/workspace": {
|
|
22
|
+
"allowedTools": [],
|
|
23
|
+
"hasTrustDialogAccepted": true
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
EOJSON
|
|
28
|
+
|
|
29
|
+
# Configure settings.json:
|
|
30
|
+
# - skipDangerousModePermissionPrompt: suppresses the bypass-permissions warning
|
|
31
|
+
# Auth mode determines how Claude Code gets its API credentials:
|
|
32
|
+
# - OAuth mode (CLAUDE_CODE_OAUTH_TOKEN set): Claude Code reads the token from
|
|
33
|
+
# this env var directly -- no apiKeyHelper needed.
|
|
34
|
+
# - API key mode: apiKeyHelper echoes the fake key so Claude Code skips the
|
|
35
|
+
# custom API key approval dialog entirely.
|
|
36
|
+
mkdir -p "$HOME/.claude"
|
|
37
|
+
|
|
38
|
+
if [ -n "$CLAUDE_CODE_OAUTH_TOKEN" ]; then
|
|
39
|
+
# OAuth mode: Claude Code reads the token from env var directly.
|
|
40
|
+
cat > "$HOME/.claude/settings.json" <<'EOSETTINGS'
|
|
41
|
+
{
|
|
42
|
+
"permissions": {
|
|
43
|
+
"allow": [],
|
|
44
|
+
"deny": [],
|
|
45
|
+
"additionalDirectories": [],
|
|
46
|
+
"defaultMode": "bypassPermissions"
|
|
47
|
+
},
|
|
48
|
+
"skipDangerousModePermissionPrompt": true
|
|
49
|
+
}
|
|
50
|
+
EOSETTINGS
|
|
51
|
+
else
|
|
52
|
+
# API key mode: apiKeyHelper echoes the fake key at runtime.
|
|
53
|
+
cat > "$HOME/.claude/settings.json" <<'EOSETTINGS'
|
|
54
|
+
{
|
|
55
|
+
"permissions": {
|
|
56
|
+
"allow": [],
|
|
57
|
+
"deny": [],
|
|
58
|
+
"additionalDirectories": [],
|
|
59
|
+
"defaultMode": "bypassPermissions"
|
|
60
|
+
},
|
|
61
|
+
"apiKeyHelper": "echo $IRONCURTAIN_API_KEY",
|
|
62
|
+
"skipDangerousModePermissionPrompt": true
|
|
63
|
+
}
|
|
64
|
+
EOSETTINGS
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Load system prompt into env var so socat/bash -c doesn't have quoting issues
|
|
68
|
+
if [ -f /etc/ironcurtain/system-prompt.txt ]; then
|
|
69
|
+
export IRONCURTAIN_SYSTEM_PROMPT
|
|
70
|
+
IRONCURTAIN_SYSTEM_PROMPT=$(cat /etc/ironcurtain/system-prompt.txt)
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Hand off to CMD (sleep infinity for non-PTY, socat PTY command for PTY mode)
|
|
74
|
+
exec "$@"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@provos/ironcurtain",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Secure agent runtime with trusted process mediation",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -59,20 +59,21 @@
|
|
|
59
59
|
"lint": "eslint src/ test/",
|
|
60
60
|
"format": "prettier --log-level=warn --write 'src/**/*.ts' 'test/**/*.ts'",
|
|
61
61
|
"format:check": "prettier --check 'src/**/*.ts' 'test/**/*.ts'",
|
|
62
|
+
"pre-commit": "lint-staged",
|
|
62
63
|
"setup-hooks": "cp .hooks/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit && echo 'Pre-commit hook installed.'"
|
|
63
64
|
},
|
|
64
65
|
"dependencies": {
|
|
65
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
66
|
-
"@ai-sdk/google": "^3.0.
|
|
67
|
-
"@ai-sdk/openai": "^3.0.
|
|
68
|
-
"@anthropic-ai/sandbox-runtime": "^0.0.
|
|
66
|
+
"@ai-sdk/anthropic": "^3.0.49",
|
|
67
|
+
"@ai-sdk/google": "^3.0.33",
|
|
68
|
+
"@ai-sdk/openai": "^3.0.36",
|
|
69
|
+
"@anthropic-ai/sandbox-runtime": "^0.0.39",
|
|
69
70
|
"@clack/prompts": "^1.0.1",
|
|
70
71
|
"@cyanheads/git-mcp-server": "^2.8.4",
|
|
71
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
72
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
72
73
|
"@mozilla/readability": "^0.6.0",
|
|
73
74
|
"@utcp/code-mode": "^1.2.11",
|
|
74
75
|
"@utcp/mcp": "^1.1.1",
|
|
75
|
-
"ai": "^6.0.
|
|
76
|
+
"ai": "^6.0.104",
|
|
76
77
|
"chalk": "^5.6.2",
|
|
77
78
|
"cli-highlight": "^2.1.11",
|
|
78
79
|
"dotenv": "^17.3.1",
|
|
@@ -89,9 +90,15 @@
|
|
|
89
90
|
"overrides": {
|
|
90
91
|
"minimatch": "^10.2.1"
|
|
91
92
|
},
|
|
93
|
+
"lint-staged": {
|
|
94
|
+
"*.ts": [
|
|
95
|
+
"prettier --check",
|
|
96
|
+
"eslint"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
92
99
|
"devDependencies": {
|
|
93
100
|
"@eslint/js": "^10.0.1",
|
|
94
|
-
"@types/jsdom": "^
|
|
101
|
+
"@types/jsdom": "^28.0.0",
|
|
95
102
|
"@types/node": "^25.3.0",
|
|
96
103
|
"@types/node-forge": "^1.3.14",
|
|
97
104
|
"@types/shell-quote": "^1.7.5",
|
|
@@ -100,6 +107,7 @@
|
|
|
100
107
|
"@vitest/coverage-v8": "^4.0.18",
|
|
101
108
|
"eslint": "^10.0.1",
|
|
102
109
|
"eslint-config-prettier": "^10.1.8",
|
|
110
|
+
"lint-staged": "^16.2.7",
|
|
103
111
|
"prettier": "^3.8.1",
|
|
104
112
|
"tsx": "^4.19.0",
|
|
105
113
|
"typescript": "^5.7.0",
|
|
@@ -9,3 +9,5 @@
|
|
|
9
9
|
- The agent may fetch web content from popular news sites.
|
|
10
10
|
- The agent may perform web searches to find information
|
|
11
11
|
- The agent may fetch web content from popular development sites.
|
|
12
|
+
- The agent may freely list, search, and read GitHub resources (issues, pull requests, repositories, code, comments, reviews) without human approval.
|
|
13
|
+
- Creating, updating, closing, or deleting GitHub resources (issues, PRs, comments, reviews, branches, files, repositories) requires human approval.
|