@provos/ironcurtain 0.4.0 → 0.4.1

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.
Files changed (52) hide show
  1. package/dist/config/index.js +6 -0
  2. package/dist/config/index.js.map +1 -1
  3. package/dist/config/mcp-servers.json +3 -0
  4. package/dist/config/types.d.ts +2 -0
  5. package/dist/docker/adapters/claude-code.d.ts +4 -0
  6. package/dist/docker/adapters/claude-code.js +32 -29
  7. package/dist/docker/adapters/claude-code.js.map +1 -1
  8. package/dist/docker/agent-adapter.d.ts +4 -12
  9. package/dist/docker/code-mode-proxy.d.ts +34 -0
  10. package/dist/docker/code-mode-proxy.js +137 -0
  11. package/dist/docker/code-mode-proxy.js.map +1 -0
  12. package/dist/docker/docker-agent-session.d.ts +7 -6
  13. package/dist/docker/docker-agent-session.js +94 -40
  14. package/dist/docker/docker-agent-session.js.map +1 -1
  15. package/dist/docker/docker-manager.js +24 -0
  16. package/dist/docker/docker-manager.js.map +1 -1
  17. package/dist/docker/orientation.d.ts +3 -2
  18. package/dist/docker/orientation.js +3 -3
  19. package/dist/docker/orientation.js.map +1 -1
  20. package/dist/docker/types.d.ts +12 -2
  21. package/dist/sandbox/index.d.ts +25 -1
  22. package/dist/sandbox/index.js +78 -9
  23. package/dist/sandbox/index.js.map +1 -1
  24. package/dist/servers/fetch-server.d.ts +6 -1
  25. package/dist/servers/fetch-server.js +24 -12
  26. package/dist/servers/fetch-server.js.map +1 -1
  27. package/dist/session/agent-session.js +9 -5
  28. package/dist/session/agent-session.js.map +1 -1
  29. package/dist/session/index.js +3 -31
  30. package/dist/session/index.js.map +1 -1
  31. package/dist/session/preflight.js +6 -0
  32. package/dist/session/preflight.js.map +1 -1
  33. package/dist/session/prompts.d.ts +9 -3
  34. package/dist/session/prompts.js +28 -10
  35. package/dist/session/prompts.js.map +1 -1
  36. package/dist/trusted-process/mcp-proxy-server.d.ts +111 -1
  37. package/dist/trusted-process/mcp-proxy-server.js +307 -266
  38. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  39. package/dist/trusted-process/policy-engine.d.ts +3 -1
  40. package/dist/trusted-process/policy-engine.js +17 -6
  41. package/dist/trusted-process/policy-engine.js.map +1 -1
  42. package/dist/trusted-process/sandbox-integration.d.ts +11 -4
  43. package/dist/trusted-process/sandbox-integration.js +13 -7
  44. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  45. package/dist/types/argument-roles.d.ts +7 -0
  46. package/dist/types/argument-roles.js +12 -2
  47. package/dist/types/argument-roles.js.map +1 -1
  48. package/package.json +4 -2
  49. package/src/config/mcp-servers.json +3 -0
  50. package/dist/docker/managed-proxy.d.ts +0 -31
  51. package/dist/docker/managed-proxy.js +0 -265
  52. package/dist/docker/managed-proxy.js.map +0 -1
@@ -25,4 +25,114 @@
25
25
  * AUTO_APPROVE_API_KEY -- (optional) API key for the auto-approve model's provider
26
26
  * AUTO_APPROVE_LLM_LOG_PATH -- (optional) path to JSONL file for auto-approve LLM logging
27
27
  */
28
- export {};
28
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
29
+ import { PolicyEngine } from './policy-engine.js';
30
+ import { AuditLog } from './audit-log.js';
31
+ import { type ResolvedSandboxConfig } from './sandbox-integration.js';
32
+ import type { ToolCallRequest, PolicyDecision } from '../types/mcp.js';
33
+ import type { AuditEntry } from '../types/audit.js';
34
+ import { type McpRoot } from './mcp-client-manager.js';
35
+ import { CallCircuitBreaker } from './call-circuit-breaker.js';
36
+ import type { LanguageModelV3 } from '@ai-sdk/provider';
37
+ import type { MCPServerConfig, SandboxAvailabilityPolicy } from '../config/types.js';
38
+ export interface ProxiedTool {
39
+ serverName: string;
40
+ name: string;
41
+ description?: string;
42
+ inputSchema: Record<string, unknown>;
43
+ }
44
+ export interface ClientState {
45
+ client: Client;
46
+ roots: McpRoot[];
47
+ rootsRefreshed?: () => void;
48
+ }
49
+ /** Parsed environment configuration for the proxy server. */
50
+ export interface ProxyEnvConfig {
51
+ auditLogPath: string;
52
+ serversConfig: Record<string, MCPServerConfig>;
53
+ generatedDir: string;
54
+ protectedPaths: string[];
55
+ sessionLogPath: string | undefined;
56
+ allowedDirectory: string | undefined;
57
+ containerWorkspaceDir: string | undefined;
58
+ escalationDir: string | undefined;
59
+ serverCredentials: Record<string, string>;
60
+ sandboxPolicy: SandboxAvailabilityPolicy;
61
+ }
62
+ /** Result of sandbox availability validation. */
63
+ export interface SandboxValidationResult {
64
+ sandboxAvailable: boolean;
65
+ }
66
+ /** MCP tool call response shape returned by handleCallTool. */
67
+ export interface ToolCallResponse {
68
+ content: unknown;
69
+ isError?: boolean;
70
+ [key: string]: unknown;
71
+ }
72
+ /** Dependencies injected into handleCallTool for testability. */
73
+ export interface CallToolDeps {
74
+ toolMap: Map<string, ProxiedTool>;
75
+ policyEngine: PolicyEngine;
76
+ auditLog: AuditLog;
77
+ circuitBreaker: CallCircuitBreaker;
78
+ clientStates: Map<string, ClientState>;
79
+ resolvedSandboxConfigs: Map<string, ResolvedSandboxConfig>;
80
+ allowedDirectory: string | undefined;
81
+ containerWorkspaceDir: string | undefined;
82
+ escalationDir: string | undefined;
83
+ autoApproveModel: LanguageModelV3 | null;
84
+ }
85
+ /**
86
+ * Reads and validates proxy environment variables.
87
+ * Returns a typed config object or calls process.exit(1) on missing required vars.
88
+ */
89
+ export declare function parseProxyEnvConfig(): ProxyEnvConfig;
90
+ /**
91
+ * Validates sandbox availability against the configured policy.
92
+ * Logs warnings to session log. Throws when enforce mode is active
93
+ * but sandboxing is unavailable.
94
+ */
95
+ export declare function validateSandboxAvailability(sandboxPolicy: SandboxAvailabilityPolicy, sessionLogPath: string | undefined, platform: string): SandboxValidationResult;
96
+ /**
97
+ * Resolves per-server sandbox configurations and writes srt settings
98
+ * files for sandboxed servers. Returns the config map and the temp
99
+ * settings directory path.
100
+ */
101
+ export declare function resolveServerSandboxConfigs(serversConfig: Record<string, MCPServerConfig>, allowedDirectory: string | undefined, sandboxAvailable: boolean, sandboxPolicy: SandboxAvailabilityPolicy): {
102
+ resolvedSandboxConfigs: Map<string, ResolvedSandboxConfig>;
103
+ settingsDir: string;
104
+ serverCwdPaths: Map<string, string>;
105
+ };
106
+ /** Builds a lookup map from tool name to ProxiedTool for routing. */
107
+ export declare function buildToolMap(allTools: ProxiedTool[]): Map<string, ProxiedTool>;
108
+ /**
109
+ * Creates an audit entry and logs it. Extracted so the audit shape
110
+ * construction is testable independently.
111
+ */
112
+ export declare function buildAuditEntry(request: ToolCallRequest, argsForTransport: Record<string, unknown>, policyDecision: PolicyDecision, result: AuditEntry['result'], durationMs: number, options: {
113
+ escalationResult?: 'approved' | 'denied';
114
+ sandboxed?: boolean;
115
+ autoApproved?: boolean;
116
+ }): AuditEntry;
117
+ /**
118
+ * Handles a single tool call request: policy evaluation, escalation,
119
+ * circuit breaker check, and forwarding to the real MCP server.
120
+ *
121
+ * This is the core security logic extracted from the CallTool handler
122
+ * for independent unit testing.
123
+ */
124
+ export declare function handleCallTool(toolName: string, rawArgs: Record<string, unknown>, deps: CallToolDeps): Promise<ToolCallResponse>;
125
+ /**
126
+ * Selects and validates the proxy transport based on environment variables.
127
+ * Returns 'tcp', 'uds', or 'stdio' along with the transport options.
128
+ */
129
+ export declare function selectTransportConfig(): {
130
+ kind: 'tcp';
131
+ port: number;
132
+ portFilePath: string | undefined;
133
+ } | {
134
+ kind: 'uds';
135
+ socketPath: string;
136
+ } | {
137
+ kind: 'stdio';
138
+ };