@provos/ironcurtain 0.7.2 → 0.8.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 +29 -100
- package/dist/config/first-start.js +4 -1
- package/dist/config/first-start.js.map +1 -1
- package/dist/config/mcp-servers.json +8 -2
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.js +8 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/user-config.d.ts +27 -0
- package/dist/config/user-config.js +28 -0
- package/dist/config/user-config.js.map +1 -1
- package/dist/cron/constitution-generator.d.ts +2 -1
- package/dist/cron/constitution-generator.js +35 -36
- package/dist/cron/constitution-generator.js.map +1 -1
- package/dist/daemon/ironcurtain-daemon.js +1 -0
- package/dist/daemon/ironcurtain-daemon.js.map +1 -1
- package/dist/docker/adapters/claude-code.js +32 -5
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/agent-adapter.d.ts +40 -0
- package/dist/docker/claude-md-seed.d.ts +27 -0
- package/dist/docker/claude-md-seed.js +42 -0
- package/dist/docker/claude-md-seed.js.map +1 -0
- package/dist/docker/docker-agent-session.js +2 -0
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +15 -1
- package/dist/docker/docker-infrastructure.js +72 -1
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/mitm-proxy.d.ts +15 -0
- package/dist/docker/mitm-proxy.js +75 -7
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/package-types.d.ts +127 -0
- package/dist/docker/package-types.js +8 -0
- package/dist/docker/package-types.js.map +1 -0
- package/dist/docker/package-validator.d.ts +41 -0
- package/dist/docker/package-validator.js +90 -0
- package/dist/docker/package-validator.js.map +1 -0
- package/dist/docker/pty-session.d.ts +15 -0
- package/dist/docker/pty-session.js +205 -44
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/docker/pty-types.d.ts +24 -0
- package/dist/docker/pty-types.js +2 -0
- package/dist/docker/pty-types.js.map +1 -1
- package/dist/docker/registry-proxy.d.ts +142 -0
- package/dist/docker/registry-proxy.js +856 -0
- package/dist/docker/registry-proxy.js.map +1 -0
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/memory/memory-annotations.d.ts +47 -0
- package/dist/memory/memory-annotations.js +87 -0
- package/dist/memory/memory-annotations.js.map +1 -0
- package/dist/memory/memory-prompt.d.ts +12 -0
- package/dist/memory/memory-prompt.js +20 -0
- package/dist/memory/memory-prompt.js.map +1 -0
- package/dist/memory/resolve-memory-path.d.ts +20 -0
- package/dist/memory/resolve-memory-path.js +30 -0
- package/dist/memory/resolve-memory-path.js.map +1 -0
- package/dist/mux/mux-app.js +78 -10
- package/dist/mux/mux-app.js.map +1 -1
- package/dist/mux/mux-input-handler.d.ts +28 -2
- package/dist/mux/mux-input-handler.js +164 -7
- package/dist/mux/mux-input-handler.js.map +1 -1
- package/dist/mux/mux-renderer.d.ts +3 -1
- package/dist/mux/mux-renderer.js +181 -7
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/persona-scanner.d.ts +19 -0
- package/dist/mux/persona-scanner.js +53 -0
- package/dist/mux/persona-scanner.js.map +1 -0
- package/dist/mux/pty-bridge.d.ts +4 -0
- package/dist/mux/pty-bridge.js +6 -0
- package/dist/mux/pty-bridge.js.map +1 -1
- package/dist/mux/session-scanner.d.ts +18 -0
- package/dist/mux/session-scanner.js +65 -0
- package/dist/mux/session-scanner.js.map +1 -0
- package/dist/mux/types.d.ts +13 -1
- package/dist/mux/types.js +5 -1
- package/dist/mux/types.js.map +1 -1
- package/dist/persona/persona-command.js +130 -88
- package/dist/persona/persona-command.js.map +1 -1
- package/dist/persona/persona-prompt.d.ts +7 -7
- package/dist/persona/persona-prompt.js +14 -29
- package/dist/persona/persona-prompt.js.map +1 -1
- package/dist/persona/resolve.js +5 -2
- package/dist/persona/resolve.js.map +1 -1
- package/dist/sandbox/index.d.ts +26 -10
- package/dist/sandbox/index.js +131 -40
- package/dist/sandbox/index.js.map +1 -1
- package/dist/session/agent-session.d.ts +2 -1
- package/dist/session/agent-session.js +4 -1
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/index.d.ts +25 -1
- package/dist/session/index.js +57 -8
- package/dist/session/index.js.map +1 -1
- package/dist/session/prompts.js +8 -8
- package/dist/session/types.d.ts +5 -0
- package/dist/session/workspace-validation.js +37 -6
- package/dist/session/workspace-validation.js.map +1 -1
- package/dist/trusted-process/index.js +23 -29
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.d.ts +9 -0
- package/dist/trusted-process/mcp-proxy-server.js +91 -37
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/policy-engine.d.ts +4 -1
- package/dist/trusted-process/policy-engine.js +15 -1
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/docker/Dockerfile.base +22 -0
- package/docker/Dockerfile.base.arm64 +44 -4
- package/docker/entrypoint-claude-code.sh +9 -1
- package/package.json +7 -2
- package/src/config/mcp-servers.json +8 -2
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry proxy: URL parsing, metadata filtering, and tarball backstop
|
|
3
|
+
* for npm and PyPI package registries.
|
|
4
|
+
*
|
|
5
|
+
* This module provides:
|
|
6
|
+
* - URL parsers that extract PackageIdentity from HTTP request paths
|
|
7
|
+
* - Metadata filtering functions that remove disallowed versions
|
|
8
|
+
* - Tarball backstop logic that blocks direct tarball URL access
|
|
9
|
+
* - Built-in registry configurations for npm and PyPI
|
|
10
|
+
*/
|
|
11
|
+
import * as http from 'node:http';
|
|
12
|
+
import type { PackageIdentity, PackageValidator, AllowedVersionCache, RegistryConfig } from './package-types.js';
|
|
13
|
+
export declare const npmRegistry: RegistryConfig;
|
|
14
|
+
export declare const pypiRegistry: RegistryConfig;
|
|
15
|
+
export declare const debianRegistry: RegistryConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Parses an npm registry URL path into a PackageIdentity.
|
|
18
|
+
* Returns undefined if the path doesn't match a known pattern.
|
|
19
|
+
*
|
|
20
|
+
* Patterns:
|
|
21
|
+
* GET /@scope/name -> metadata (scope + name)
|
|
22
|
+
* GET /@scope%2fname -> metadata (URL-encoded scope)
|
|
23
|
+
* GET /name -> metadata (unscoped)
|
|
24
|
+
* GET /name/-/name-1.0.0.tgz -> tarball (unscoped)
|
|
25
|
+
* GET /@scope/name/-/name-1.0.0.tgz -> tarball (scoped)
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseNpmUrl(path: string): PackageIdentity | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Parses a PyPI Simple Repository URL path into a PackageIdentity.
|
|
30
|
+
* Returns undefined if the path doesn't match.
|
|
31
|
+
*
|
|
32
|
+
* Pattern: GET /simple/{name}/
|
|
33
|
+
*/
|
|
34
|
+
export declare function parsePypiSimpleUrl(path: string): PackageIdentity | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Parses a PyPI tarball URL path into a PackageIdentity.
|
|
37
|
+
* Returns undefined if the path doesn't match.
|
|
38
|
+
*
|
|
39
|
+
* Tarball URLs on files.pythonhosted.org:
|
|
40
|
+
* /packages/.../numpy-1.26.0.tar.gz
|
|
41
|
+
* /packages/.../numpy-1.26.0-cp312-cp312-manylinux_2_17_x86_64.whl
|
|
42
|
+
*/
|
|
43
|
+
export declare function parsePypiTarballUrl(path: string): PackageIdentity | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Extracts package name and version from a PyPI distribution filename.
|
|
46
|
+
*
|
|
47
|
+
* Handles both sdist and wheel formats:
|
|
48
|
+
* numpy-1.26.0.tar.gz -> { name: 'numpy', version: '1.26.0' }
|
|
49
|
+
* numpy-1.26.0-cp312-*.whl -> { name: 'numpy', version: '1.26.0' }
|
|
50
|
+
*/
|
|
51
|
+
export declare function extractPypiPackageFromFilename(filename: string): PackageIdentity | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Normalizes a PyPI package name to lowercase with hyphens.
|
|
54
|
+
* PEP 503: package names are case-insensitive and treat
|
|
55
|
+
* hyphens, underscores, and dots as equivalent.
|
|
56
|
+
*/
|
|
57
|
+
export declare function normalizePypiName(name: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Extracts package name and version from a Debian `.deb` filename.
|
|
60
|
+
*
|
|
61
|
+
* Format: {name}_{version}_{arch}.deb
|
|
62
|
+
* Examples:
|
|
63
|
+
* libssl3_3.0.11-1~deb12u2_arm64.deb -> name='libssl3', version='3.0.11-1~deb12u2'
|
|
64
|
+
* gcc-14-base_14.2.0-19_arm64.deb -> name='gcc-14-base', version='14.2.0-19'
|
|
65
|
+
*
|
|
66
|
+
* Epoch versions (e.g., 1:2.3-4) use %3a URL-encoding for the colon.
|
|
67
|
+
*/
|
|
68
|
+
export declare function extractDebianPackageFromFilename(filename: string): PackageIdentity | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Parses a Debian repository URL path into a PackageIdentity.
|
|
71
|
+
* Returns undefined for non-.deb paths (metadata, Release files, etc.).
|
|
72
|
+
*
|
|
73
|
+
* Matches any URL whose last path segment ends with `.deb` — not restricted
|
|
74
|
+
* to `/pool/` paths, since mirrors and security repos may use different layouts.
|
|
75
|
+
* Non-.deb paths (Release, Packages.gz, GPG keys) return undefined for pass-through.
|
|
76
|
+
*/
|
|
77
|
+
export declare function parseDebianPackageUrl(path: string): PackageIdentity | undefined;
|
|
78
|
+
/** Returns true if the URL path is an npm metadata request (no /-/ segment). */
|
|
79
|
+
export declare function isNpmMetadataRequest(path: string): boolean;
|
|
80
|
+
/** Returns true if the URL path is an npm tarball download. */
|
|
81
|
+
export declare function isNpmTarballRequest(path: string): boolean;
|
|
82
|
+
/** Returns true if the URL path is a PyPI Simple Repository request. */
|
|
83
|
+
export declare function isPypiSimpleRequest(path: string): boolean;
|
|
84
|
+
/** Minimal npm packument structure for filtering. */
|
|
85
|
+
export interface NpmPackument {
|
|
86
|
+
readonly name: string;
|
|
87
|
+
readonly versions: Record<string, unknown>;
|
|
88
|
+
readonly 'dist-tags'?: Record<string, string>;
|
|
89
|
+
readonly time?: Record<string, string>;
|
|
90
|
+
readonly [key: string]: unknown;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Filters an npm packument to remove disallowed versions.
|
|
94
|
+
*
|
|
95
|
+
* The filtered packument has:
|
|
96
|
+
* - Disallowed versions removed from `versions` and `time`
|
|
97
|
+
* - `dist-tags.latest` updated to point to the newest remaining version
|
|
98
|
+
* - `created` and `modified` timestamps preserved in `time`
|
|
99
|
+
*/
|
|
100
|
+
export declare function filterNpmPackument(packument: NpmPackument, validator: PackageValidator, packageName: string, scope?: string): {
|
|
101
|
+
filtered: NpmPackument;
|
|
102
|
+
denied: Array<{
|
|
103
|
+
version: string;
|
|
104
|
+
reason: string;
|
|
105
|
+
}>;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Filters a PyPI Simple Repository HTML page to remove disallowed versions.
|
|
109
|
+
*
|
|
110
|
+
* The HTML contains <a> elements with hrefs pointing to tarballs/wheels.
|
|
111
|
+
* Version is extracted from the filename in each href.
|
|
112
|
+
*
|
|
113
|
+
* Returns the filtered HTML, denied version list, and the set of allowed
|
|
114
|
+
* versions (collected during filtering to avoid re-parsing the HTML).
|
|
115
|
+
*/
|
|
116
|
+
export declare function filterPypiIndex(html: string, validator: PackageValidator, packageName: string, versionTimestamps: Map<string, Date>): {
|
|
117
|
+
filtered: string;
|
|
118
|
+
denied: Array<{
|
|
119
|
+
version: string;
|
|
120
|
+
reason: string;
|
|
121
|
+
}>;
|
|
122
|
+
allowedVersions: Set<string>;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Gets allowed versions from cache, returning undefined on miss or expiry.
|
|
126
|
+
*/
|
|
127
|
+
export declare function getCachedVersions(cache: AllowedVersionCache, pkg: PackageIdentity): ReadonlySet<string> | undefined;
|
|
128
|
+
/**
|
|
129
|
+
* Stores allowed versions in the cache.
|
|
130
|
+
*/
|
|
131
|
+
export declare function setCachedVersions(cache: AllowedVersionCache, pkg: PackageIdentity, versions: ReadonlySet<string>): void;
|
|
132
|
+
/** Options for the registry request handler. */
|
|
133
|
+
export interface RegistryHandlerOptions {
|
|
134
|
+
readonly validator: PackageValidator;
|
|
135
|
+
readonly cache: AllowedVersionCache;
|
|
136
|
+
readonly auditLogPath?: string;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Handles an HTTP request routed to a registry host.
|
|
140
|
+
* Dispatches to metadata filtering or tarball backstop based on URL pattern.
|
|
141
|
+
*/
|
|
142
|
+
export declare function handleRegistryRequest(registry: RegistryConfig, clientReq: http.IncomingMessage, clientRes: http.ServerResponse, host: string, port: number, options: RegistryHandlerOptions): Promise<void>;
|