@provos/ironcurtain 0.6.0 → 0.7.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.
- package/README.md +29 -86
- package/dist/cli-help.d.ts +63 -0
- package/dist/cli-help.js +102 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli.js +79 -56
- package/dist/cli.js.map +1 -1
- package/dist/config/config-command.js +136 -2
- package/dist/config/config-command.js.map +1 -1
- package/dist/config/constitution-readonly.md +21 -0
- package/dist/config/generated/tool-annotations.json +487 -338
- package/dist/config/generated-readonly/compiled-policy.json +468 -0
- package/dist/config/index.d.ts +21 -1
- package/dist/config/index.js +12 -4
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-servers.json +2 -8
- package/dist/config/paths.d.ts +47 -0
- package/dist/config/paths.js +81 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/tool-description-hints.json +15 -0
- package/dist/config/types.d.ts +7 -0
- package/dist/config/user-config.d.ts +21 -0
- package/dist/config/user-config.js +8 -0
- package/dist/config/user-config.js.map +1 -1
- package/dist/cron/compile-task-policy.d.ts +17 -0
- package/dist/cron/compile-task-policy.js +39 -0
- package/dist/cron/compile-task-policy.js.map +1 -0
- package/dist/cron/constitution-generator.d.ts +60 -0
- package/dist/cron/constitution-generator.js +217 -0
- package/dist/cron/constitution-generator.js.map +1 -0
- package/dist/cron/cron-scheduler.d.ts +65 -0
- package/dist/cron/cron-scheduler.js +184 -0
- package/dist/cron/cron-scheduler.js.map +1 -0
- package/dist/cron/file-lock.d.ts +41 -0
- package/dist/cron/file-lock.js +156 -0
- package/dist/cron/file-lock.js.map +1 -0
- package/dist/cron/format-utils.d.ts +18 -0
- package/dist/cron/format-utils.js +145 -0
- package/dist/cron/format-utils.js.map +1 -0
- package/dist/cron/git-sync.d.ts +22 -0
- package/dist/cron/git-sync.js +121 -0
- package/dist/cron/git-sync.js.map +1 -0
- package/dist/cron/headless-transport.d.ts +27 -0
- package/dist/cron/headless-transport.js +43 -0
- package/dist/cron/headless-transport.js.map +1 -0
- package/dist/cron/job-commands.d.ts +39 -0
- package/dist/cron/job-commands.js +585 -0
- package/dist/cron/job-commands.js.map +1 -0
- package/dist/cron/job-customizer.d.ts +22 -0
- package/dist/cron/job-customizer.js +47 -0
- package/dist/cron/job-customizer.js.map +1 -0
- package/dist/cron/job-store.d.ts +35 -0
- package/dist/cron/job-store.js +111 -0
- package/dist/cron/job-store.js.map +1 -0
- package/dist/cron/types.d.ts +135 -0
- package/dist/cron/types.js +22 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/daemon/control-socket.d.ts +127 -0
- package/dist/daemon/control-socket.js +261 -0
- package/dist/daemon/control-socket.js.map +1 -0
- package/dist/daemon/daemon-command.d.ts +13 -0
- package/dist/daemon/daemon-command.js +230 -0
- package/dist/daemon/daemon-command.js.map +1 -0
- package/dist/daemon/ironcurtain-daemon.d.ts +90 -0
- package/dist/daemon/ironcurtain-daemon.js +550 -0
- package/dist/daemon/ironcurtain-daemon.js.map +1 -0
- package/dist/docker/adapters/claude-code.js +7 -47
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/adapters/goose.d.ts +58 -0
- package/dist/docker/adapters/goose.js +250 -0
- package/dist/docker/adapters/goose.js.map +1 -0
- package/dist/docker/adapters/shared-scripts.d.ts +29 -0
- package/dist/docker/adapters/shared-scripts.js +80 -0
- package/dist/docker/adapters/shared-scripts.js.map +1 -0
- package/dist/docker/agent-adapter.d.ts +12 -0
- package/dist/docker/agent-adapter.js.map +1 -1
- package/dist/docker/agent-registry.d.ts +6 -1
- package/dist/docker/agent-registry.js +10 -1
- package/dist/docker/agent-registry.js.map +1 -1
- package/dist/docker/docker-agent-session.d.ts +2 -25
- package/dist/docker/docker-agent-session.js +7 -106
- package/dist/docker/docker-agent-session.js.map +1 -1
- package/dist/docker/docker-infrastructure.d.ts +8 -0
- package/dist/docker/docker-infrastructure.js +12 -11
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/mitm-proxy.js +10 -5
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/oauth-credentials.js +2 -2
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/pty-session.js +146 -39
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/escalation/escalation-watcher.d.ts +2 -0
- package/dist/escalation/escalation-watcher.js +3 -0
- package/dist/escalation/escalation-watcher.js.map +1 -1
- package/dist/escalation/session-registry.js +1 -14
- package/dist/escalation/session-registry.js.map +1 -1
- package/dist/index.js +43 -5
- package/dist/index.js.map +1 -1
- package/dist/mux/mux-app.js +11 -6
- package/dist/mux/mux-app.js.map +1 -1
- package/dist/mux/mux-command.js +49 -10
- package/dist/mux/mux-command.js.map +1 -1
- package/dist/mux/mux-input-handler.d.ts +5 -0
- package/dist/mux/mux-input-handler.js +64 -9
- package/dist/mux/mux-input-handler.js.map +1 -1
- package/dist/mux/mux-renderer.d.ts +20 -0
- package/dist/mux/mux-renderer.js +127 -35
- package/dist/mux/mux-renderer.js.map +1 -1
- package/dist/mux/mux-splash.js +2 -1
- package/dist/mux/mux-splash.js.map +1 -1
- package/dist/mux/paste-interceptor.d.ts +22 -0
- package/dist/mux/paste-interceptor.js +143 -0
- package/dist/mux/paste-interceptor.js.map +1 -0
- package/dist/mux/pty-bridge.js +1 -1
- package/dist/mux/pty-bridge.js.map +1 -1
- package/dist/mux/types.d.ts +8 -1
- package/dist/mux/types.js +17 -5
- package/dist/mux/types.js.map +1 -1
- package/dist/persona/compile-persona-policy.d.ts +21 -0
- package/dist/persona/compile-persona-policy.js +50 -0
- package/dist/persona/compile-persona-policy.js.map +1 -0
- package/dist/persona/persona-command.d.ts +9 -0
- package/dist/persona/persona-command.js +479 -0
- package/dist/persona/persona-command.js.map +1 -0
- package/dist/persona/persona-customizer.d.ts +23 -0
- package/dist/persona/persona-customizer.js +52 -0
- package/dist/persona/persona-customizer.js.map +1 -0
- package/dist/persona/persona-prompt.d.ts +19 -0
- package/dist/persona/persona-prompt.js +42 -0
- package/dist/persona/persona-prompt.js.map +1 -0
- package/dist/persona/resolve.d.ts +46 -0
- package/dist/persona/resolve.js +108 -0
- package/dist/persona/resolve.js.map +1 -0
- package/dist/persona/types.d.ts +40 -0
- package/dist/persona/types.js +20 -0
- package/dist/persona/types.js.map +1 -0
- package/dist/pipeline/annotate.js +10 -4
- package/dist/pipeline/annotate.js.map +1 -1
- package/dist/pipeline/compile.d.ts +14 -31
- package/dist/pipeline/compile.js +50 -563
- package/dist/pipeline/compile.js.map +1 -1
- package/dist/pipeline/constitution-compiler.d.ts +6 -0
- package/dist/pipeline/constitution-compiler.js +42 -6
- package/dist/pipeline/constitution-compiler.js.map +1 -1
- package/dist/pipeline/constitution-customizer.d.ts +3 -0
- package/dist/pipeline/constitution-customizer.js +19 -5
- package/dist/pipeline/constitution-customizer.js.map +1 -1
- package/dist/pipeline/customizer-loop.d.ts +34 -0
- package/dist/pipeline/customizer-loop.js +167 -0
- package/dist/pipeline/customizer-loop.js.map +1 -0
- package/dist/pipeline/mcp-connections.d.ts +16 -0
- package/dist/pipeline/mcp-connections.js +61 -0
- package/dist/pipeline/mcp-connections.js.map +1 -0
- package/dist/pipeline/pipeline-runner.d.ts +86 -0
- package/dist/pipeline/pipeline-runner.js +547 -0
- package/dist/pipeline/pipeline-runner.js.map +1 -0
- package/dist/pipeline/pipeline-shared.d.ts +37 -3
- package/dist/pipeline/pipeline-shared.js +77 -16
- package/dist/pipeline/pipeline-shared.js.map +1 -1
- package/dist/pipeline/refresh-lists.js +38 -12
- package/dist/pipeline/refresh-lists.js.map +1 -1
- package/dist/pipeline/scenario-generator.js +2 -1
- package/dist/pipeline/scenario-generator.js.map +1 -1
- package/dist/pipeline/tool-annotator.d.ts +3 -3
- package/dist/pipeline/tool-annotator.js +114 -4
- package/dist/pipeline/tool-annotator.js.map +1 -1
- package/dist/pipeline/types.d.ts +52 -0
- package/dist/sandbox/index.js +36 -1
- package/dist/sandbox/index.js.map +1 -1
- package/dist/session/agent-session.d.ts +3 -0
- package/dist/session/agent-session.js +10 -1
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/index.d.ts +10 -0
- package/dist/session/index.js +134 -12
- package/dist/session/index.js.map +1 -1
- package/dist/session/preflight.js +26 -6
- package/dist/session/preflight.js.map +1 -1
- package/dist/session/prompts.d.ts +14 -0
- package/dist/session/prompts.js +39 -2
- package/dist/session/prompts.js.map +1 -1
- package/dist/session/session-manager.d.ts +105 -0
- package/dist/session/session-manager.js +134 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/session-metadata.d.ts +18 -0
- package/dist/session/session-metadata.js +34 -0
- package/dist/session/session-metadata.js.map +1 -0
- package/dist/session/types.d.ts +47 -0
- package/dist/session/workspace-validation.d.ts +2 -0
- package/dist/session/workspace-validation.js +6 -5
- package/dist/session/workspace-validation.js.map +1 -1
- package/dist/signal/bot-command.d.ts +2 -0
- package/dist/signal/bot-command.js +8 -0
- package/dist/signal/bot-command.js.map +1 -1
- package/dist/signal/format.d.ts +27 -0
- package/dist/signal/format.js +59 -0
- package/dist/signal/format.js.map +1 -1
- package/dist/signal/signal-bot-daemon.d.ts +27 -25
- package/dist/signal/signal-bot-daemon.js +153 -135
- package/dist/signal/signal-bot-daemon.js.map +1 -1
- package/dist/signal/signal-container.js +63 -19
- package/dist/signal/signal-container.js.map +1 -1
- package/dist/signal/signal-transport.js +3 -8
- package/dist/signal/signal-transport.js.map +1 -1
- package/dist/trusted-process/domain-utils.d.ts +37 -4
- package/dist/trusted-process/domain-utils.js +130 -11
- package/dist/trusted-process/domain-utils.js.map +1 -1
- package/dist/trusted-process/index.js +6 -2
- package/dist/trusted-process/index.js.map +1 -1
- package/dist/trusted-process/mcp-client-manager.js +11 -5
- package/dist/trusted-process/mcp-client-manager.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.d.ts +21 -0
- package/dist/trusted-process/mcp-proxy-server.js +91 -28
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/dist/trusted-process/permissive-output-validator.d.ts +23 -0
- package/dist/trusted-process/permissive-output-validator.js +10 -0
- package/dist/trusted-process/permissive-output-validator.js.map +1 -0
- package/dist/trusted-process/policy-engine.d.ts +29 -7
- package/dist/trusted-process/policy-engine.js +149 -92
- package/dist/trusted-process/policy-engine.js.map +1 -1
- package/dist/trusted-process/tool-description-hints.d.ts +19 -0
- package/dist/trusted-process/tool-description-hints.js +53 -0
- package/dist/trusted-process/tool-description-hints.js.map +1 -0
- package/dist/types/argument-roles.d.ts +33 -1
- package/dist/types/argument-roles.js +129 -1
- package/dist/types/argument-roles.js.map +1 -1
- package/dist/types/slug.d.ts +7 -0
- package/dist/types/slug.js +14 -0
- package/dist/types/slug.js.map +1 -0
- package/dist/utils/editor.d.ts +24 -0
- package/dist/utils/editor.js +66 -0
- package/dist/utils/editor.js.map +1 -0
- package/docker/Dockerfile.goose +34 -0
- package/docker/entrypoint-goose.sh +30 -0
- package/package.json +1 -1
- package/src/config/generated/tool-annotations.json +487 -338
- package/src/config/mcp-servers.json +2 -8
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ See [SANDBOXING.md](SANDBOXING.md) for the full architecture with diagrams, laye
|
|
|
56
56
|
### Prerequisites
|
|
57
57
|
|
|
58
58
|
- Node.js 22+ (required by `isolated-vm`; maximum Node 25)
|
|
59
|
-
- Docker
|
|
59
|
+
- Docker — not required but **strongly recommended** for Docker Agent Mode, which provides the strongest isolation
|
|
60
60
|
- An API key for at least one LLM provider (Anthropic, Google, or OpenAI)
|
|
61
61
|
|
|
62
62
|
### Install
|
|
@@ -93,66 +93,13 @@ ironcurtain setup
|
|
|
93
93
|
|
|
94
94
|
Walks you through GitHub token setup, web search provider, model selection, and other settings. Creates `~/.ironcurtain/config.json` with your choices.
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
## Running IronCurtain
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
ironcurtain customize-policy
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
An LLM-assisted conversation that generates a constitution tailored to your workflow, saved to `~/.ironcurtain/constitution-user.md`. You can also edit this file directly.
|
|
103
|
-
|
|
104
|
-
**4. Compile the policy:**
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
ironcurtain compile-policy
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
Translates your constitution into deterministic rules, generates test scenarios, and verifies them. Compiled artifacts go to `~/.ironcurtain/generated/`. The package ships with pre-compiled defaults — skip this step until you customize.
|
|
98
|
+
IronCurtain ships with a default policy geared towards the developer experience — read-only operations are allowed, mutations (writes, pushes, PR creation) escalate for human approval. You can start using it immediately after setup.
|
|
111
99
|
|
|
112
|
-
|
|
100
|
+
### Terminal multiplexer (recommended)
|
|
113
101
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
A multi-turn session where you type tasks and the agent responds:
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
ironcurtain start
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Escalated tool calls pause the agent and prompt you with `/approve` or `/deny`.
|
|
123
|
-
|
|
124
|
-
### Single-shot mode
|
|
125
|
-
|
|
126
|
-
Send one task and exit when the agent finishes:
|
|
127
|
-
|
|
128
|
-
```bash
|
|
129
|
-
ironcurtain start "Summarize the files in the current directory"
|
|
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
|
-
|
|
143
|
-
### Session resume
|
|
144
|
-
|
|
145
|
-
Resume a previous session's conversation history:
|
|
146
|
-
|
|
147
|
-
```bash
|
|
148
|
-
ironcurtain start --resume <session-id>
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Session IDs are printed on session start and stored under `~/.ironcurtain/sessions/`.
|
|
152
|
-
|
|
153
|
-
### Terminal multiplexer (recommended for Docker Agent Mode)
|
|
154
|
-
|
|
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.
|
|
102
|
+
The recommended way to use IronCurtain. It gives you the full power of your agent's interactive TUI (Claude Code or Goose) while IronCurtain mediates every tool call through its policy engine — all in a single terminal.
|
|
156
103
|
|
|
157
104
|
```bash
|
|
158
105
|
ironcurtain mux
|
|
@@ -160,53 +107,46 @@ ironcurtain mux
|
|
|
160
107
|
|
|
161
108
|
**Key capabilities:**
|
|
162
109
|
|
|
163
|
-
- **Full agent TUI** —
|
|
164
|
-
- **Inline escalation handling** — When a tool call needs approval, an escalation panel overlays the viewport.
|
|
110
|
+
- **Full agent TUI** — The agent runs in a PTY inside a Docker container with no network access. You interact with it exactly as if it were running locally.
|
|
111
|
+
- **Inline escalation handling** — When a tool call needs approval, an escalation panel overlays the viewport. Press Ctrl-A to enter command mode, `/approve N` or `/deny N`, and return.
|
|
165
112
|
- **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
113
|
- **Tab management** — Spawn multiple concurrent sessions (`/new`), switch between them (`/tab N`, Alt-1..9), close them (`/close`).
|
|
167
114
|
|
|
168
115
|
See [DEVELOPER_GUIDE.md](DEVELOPER_GUIDE.md) for the full walkthrough: input modes, trusted input security model, escalation workflow, and keyboard reference.
|
|
169
116
|
|
|
170
|
-
###
|
|
117
|
+
### Builtin agent (no Docker required)
|
|
171
118
|
|
|
172
|
-
|
|
119
|
+
For quick tasks or environments without Docker, IronCurtain's builtin agent runs entirely locally in a V8 sandbox:
|
|
173
120
|
|
|
174
121
|
```bash
|
|
175
|
-
#
|
|
176
|
-
ironcurtain start
|
|
177
|
-
|
|
178
|
-
# Terminal 2 — approve or deny escalations from all active PTY sessions
|
|
179
|
-
ironcurtain escalation-listener
|
|
122
|
+
ironcurtain start # Interactive multi-turn session
|
|
123
|
+
ironcurtain start "Summarize the files in ./src" # Single-shot mode
|
|
124
|
+
ironcurtain start -w ./my-project "Fix the tests" # Workspace mode
|
|
180
125
|
```
|
|
181
126
|
|
|
182
|
-
|
|
127
|
+
### Other running modes
|
|
183
128
|
|
|
184
|
-
|
|
129
|
+
IronCurtain also supports PTY mode with a separate escalation listener, a Signal messaging transport for mobile approval, and a daemon mode for scheduled cron jobs. See [RUNNING_MODES.md](RUNNING_MODES.md) for details.
|
|
185
130
|
|
|
186
|
-
|
|
131
|
+
## Customizing Your Policy
|
|
187
132
|
|
|
188
|
-
|
|
133
|
+
The default policy works well for general development, but you can tailor it to your workflow:
|
|
134
|
+
|
|
135
|
+
**1. Customize your constitution** (optional but recommended):
|
|
189
136
|
|
|
190
137
|
```bash
|
|
191
|
-
ironcurtain
|
|
192
|
-
ironcurtain bot # Start the Signal bot daemon
|
|
138
|
+
ironcurtain customize-policy
|
|
193
139
|
```
|
|
194
140
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
## Session Commands
|
|
141
|
+
An LLM-assisted conversation that generates a constitution tailored to your workflow, saved to `~/.ironcurtain/constitution-user.md`. You can also edit this file directly.
|
|
198
142
|
|
|
199
|
-
|
|
143
|
+
**2. Compile the policy:**
|
|
200
144
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
| `/deny` | Deny the pending escalation |
|
|
205
|
-
| `/budget` | Show resource consumption (tokens, steps, cost) |
|
|
206
|
-
| `/logs` | Display diagnostic events |
|
|
207
|
-
| `/quit` | End the session |
|
|
145
|
+
```bash
|
|
146
|
+
ironcurtain compile-policy
|
|
147
|
+
```
|
|
208
148
|
|
|
209
|
-
|
|
149
|
+
Translates your constitution into deterministic rules, generates test scenarios, and verifies them. Compiled artifacts go to `~/.ironcurtain/generated/`.
|
|
210
150
|
|
|
211
151
|
## Policy: Constitution → Enforcement
|
|
212
152
|
|
|
@@ -260,7 +200,7 @@ Review the generated `~/.ironcurtain/generated/compiled-policy.json` — these a
|
|
|
260
200
|
|
|
261
201
|
## Web Search
|
|
262
202
|
|
|
263
|
-
IronCurtain's fetch server includes a `web_search` tool backed by your choice of provider. Configure via `ironcurtain config`
|
|
203
|
+
IronCurtain's fetch server includes a `web_search` tool backed by your choice of provider. Configure via `ironcurtain config` or directly in `~/.ironcurtain/config.json`:
|
|
264
204
|
|
|
265
205
|
```json
|
|
266
206
|
{
|
|
@@ -291,6 +231,7 @@ IronCurtain stores configuration and session data in `~/.ironcurtain/`:
|
|
|
291
231
|
├── generated/ # User-compiled policy artifacts (overrides package defaults)
|
|
292
232
|
├── signal-data/ # Signal transport persistent data (registration keys)
|
|
293
233
|
├── pty-registry/ # Active PTY session registrations (auto-managed)
|
|
234
|
+
├── jobs/ # Cron job definitions, workspaces, and run records
|
|
294
235
|
├── sessions/
|
|
295
236
|
│ └── {sessionId}/
|
|
296
237
|
│ ├── sandbox/ # Per-session filesystem sandbox
|
|
@@ -451,6 +392,8 @@ src/
|
|
|
451
392
|
├── escalation/ # Escalation listener: session registry, TUI dashboard, state
|
|
452
393
|
├── mux/ # Terminal multiplexer: PTY bridge, renderer, trusted input
|
|
453
394
|
├── signal/ # Signal messaging transport (bot daemon, setup, formatting)
|
|
395
|
+
├── daemon/ # Unified daemon (Signal + cron scheduler, control socket)
|
|
396
|
+
├── cron/ # Cron job management (scheduler, job store, git sync, policy)
|
|
454
397
|
├── docker/ # Docker agent mode, PTY session, MITM proxy, adapters
|
|
455
398
|
├── servers/ # Built-in MCP servers (fetch, web search providers)
|
|
456
399
|
└── types/ # Shared type definitions
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared CLI help formatting module.
|
|
3
|
+
*
|
|
4
|
+
* Provides a declarative CommandSpec interface and formatting utilities
|
|
5
|
+
* so every subcommand produces consistent, aligned help output.
|
|
6
|
+
*/
|
|
7
|
+
export interface CommandOption {
|
|
8
|
+
/** The long flag name, without dashes (e.g., 'agent'). */
|
|
9
|
+
readonly flag: string;
|
|
10
|
+
/** Optional single-character short alias (e.g., 'a'). */
|
|
11
|
+
readonly short?: string;
|
|
12
|
+
/** Human-readable description. */
|
|
13
|
+
readonly description: string;
|
|
14
|
+
/** Placeholder for the value (e.g., '<name>'). Omit for boolean flags. */
|
|
15
|
+
readonly placeholder?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface CommandSpec {
|
|
18
|
+
/** The full command name as invoked (e.g., 'ironcurtain daemon'). */
|
|
19
|
+
readonly name: string;
|
|
20
|
+
/** One-line summary of what the command does. */
|
|
21
|
+
readonly description: string;
|
|
22
|
+
/** Usage lines shown at the top. Each string is a separate line. */
|
|
23
|
+
readonly usage: readonly string[];
|
|
24
|
+
/** Named subcommands, displayed in a table after the usage block. */
|
|
25
|
+
readonly subcommands?: readonly {
|
|
26
|
+
readonly name: string;
|
|
27
|
+
readonly description: string;
|
|
28
|
+
}[];
|
|
29
|
+
/** Command-line options, displayed in a table after subcommands. */
|
|
30
|
+
readonly options?: readonly CommandOption[];
|
|
31
|
+
/** Example invocations shown at the bottom. */
|
|
32
|
+
readonly examples?: readonly string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Formats a CommandSpec into a complete help string.
|
|
36
|
+
*
|
|
37
|
+
* Layout:
|
|
38
|
+
* <name> - <description>
|
|
39
|
+
*
|
|
40
|
+
* Usage:
|
|
41
|
+
* <usage lines>
|
|
42
|
+
*
|
|
43
|
+
* Subcommands: (if any)
|
|
44
|
+
* <table>
|
|
45
|
+
*
|
|
46
|
+
* Options: (if any)
|
|
47
|
+
* <table>
|
|
48
|
+
*
|
|
49
|
+
* Examples: (if any)
|
|
50
|
+
* <lines>
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatHelp(spec: CommandSpec): string;
|
|
53
|
+
/**
|
|
54
|
+
* Prints formatted help to stderr.
|
|
55
|
+
*/
|
|
56
|
+
export declare function printHelp(spec: CommandSpec): void;
|
|
57
|
+
/**
|
|
58
|
+
* Convenience: if `values.help` is truthy, prints help and returns true.
|
|
59
|
+
* Callers can use: `if (checkHelp(values, spec)) return;`
|
|
60
|
+
*/
|
|
61
|
+
export declare function checkHelp(values: {
|
|
62
|
+
help?: boolean;
|
|
63
|
+
}, spec: CommandSpec): boolean;
|
package/dist/cli-help.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared CLI help formatting module.
|
|
3
|
+
*
|
|
4
|
+
* Provides a declarative CommandSpec interface and formatting utilities
|
|
5
|
+
* so every subcommand produces consistent, aligned help output.
|
|
6
|
+
*/
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Formatting
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
/** Pads `text` with spaces on the right to reach at least `width` characters. */
|
|
11
|
+
function pad(text, width) {
|
|
12
|
+
return text.length >= width ? text : text + ' '.repeat(width - text.length);
|
|
13
|
+
}
|
|
14
|
+
/** Formats a single option into its flag string (e.g., '-a, --agent <name>'). */
|
|
15
|
+
function formatOptionFlag(opt) {
|
|
16
|
+
const parts = [];
|
|
17
|
+
if (opt.short) {
|
|
18
|
+
parts.push(`-${opt.short},`);
|
|
19
|
+
}
|
|
20
|
+
let longFlag = `--${opt.flag}`;
|
|
21
|
+
if (opt.placeholder) {
|
|
22
|
+
longFlag += ` ${opt.placeholder}`;
|
|
23
|
+
}
|
|
24
|
+
if (opt.short) {
|
|
25
|
+
parts.push(longFlag);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Indent to align with flags that have a short alias.
|
|
29
|
+
// "-X, " is 4 chars, so we add 4 spaces of leading indent.
|
|
30
|
+
parts.push(` ${longFlag}`);
|
|
31
|
+
}
|
|
32
|
+
return parts.join(' ');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Renders a two-column table (label + description) with consistent alignment.
|
|
36
|
+
* Each row is indented by 2 spaces.
|
|
37
|
+
*/
|
|
38
|
+
function formatTable(rows) {
|
|
39
|
+
const maxLabel = rows.reduce((max, r) => Math.max(max, r.label.length), 0);
|
|
40
|
+
const colWidth = maxLabel + 2; // 2 spaces between columns
|
|
41
|
+
return rows.map((r) => ` ${pad(r.label, colWidth)}${r.description}`).join('\n');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Formats a CommandSpec into a complete help string.
|
|
45
|
+
*
|
|
46
|
+
* Layout:
|
|
47
|
+
* <name> - <description>
|
|
48
|
+
*
|
|
49
|
+
* Usage:
|
|
50
|
+
* <usage lines>
|
|
51
|
+
*
|
|
52
|
+
* Subcommands: (if any)
|
|
53
|
+
* <table>
|
|
54
|
+
*
|
|
55
|
+
* Options: (if any)
|
|
56
|
+
* <table>
|
|
57
|
+
*
|
|
58
|
+
* Examples: (if any)
|
|
59
|
+
* <lines>
|
|
60
|
+
*/
|
|
61
|
+
export function formatHelp(spec) {
|
|
62
|
+
const sections = [];
|
|
63
|
+
// Header
|
|
64
|
+
sections.push(`${spec.name} - ${spec.description}`);
|
|
65
|
+
// Usage
|
|
66
|
+
sections.push('Usage:\n' + spec.usage.map((u) => ` ${u}`).join('\n'));
|
|
67
|
+
// Subcommands
|
|
68
|
+
if (spec.subcommands && spec.subcommands.length > 0) {
|
|
69
|
+
const rows = spec.subcommands.map((s) => ({ label: s.name, description: s.description }));
|
|
70
|
+
sections.push('Subcommands:\n' + formatTable(rows));
|
|
71
|
+
}
|
|
72
|
+
// Options
|
|
73
|
+
if (spec.options && spec.options.length > 0) {
|
|
74
|
+
const rows = spec.options.map((o) => ({
|
|
75
|
+
label: formatOptionFlag(o),
|
|
76
|
+
description: o.description,
|
|
77
|
+
}));
|
|
78
|
+
sections.push('Options:\n' + formatTable(rows));
|
|
79
|
+
}
|
|
80
|
+
// Examples
|
|
81
|
+
if (spec.examples && spec.examples.length > 0) {
|
|
82
|
+
sections.push('Examples:\n' + spec.examples.map((e) => ` ${e}`).join('\n'));
|
|
83
|
+
}
|
|
84
|
+
return sections.join('\n\n');
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Prints formatted help to stderr.
|
|
88
|
+
*/
|
|
89
|
+
export function printHelp(spec) {
|
|
90
|
+
console.error(formatHelp(spec));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Convenience: if `values.help` is truthy, prints help and returns true.
|
|
94
|
+
* Callers can use: `if (checkHelp(values, spec)) return;`
|
|
95
|
+
*/
|
|
96
|
+
export function checkHelp(values, spec) {
|
|
97
|
+
if (!values.help)
|
|
98
|
+
return false;
|
|
99
|
+
printHelp(spec);
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=cli-help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-help.js","sourceRoot":"","sources":["../src/cli-help.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ import { readFileSync } from 'node:fs';
|
|
|
4
4
|
import { dirname, resolve } from 'node:path';
|
|
5
5
|
import { fileURLToPath } from 'node:url';
|
|
6
6
|
import { parseArgs } from 'node:util';
|
|
7
|
+
import { checkHelp, printHelp as printSpecHelp } from './cli-help.js';
|
|
7
8
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
9
|
function getVersion() {
|
|
9
10
|
// Works from both dist/ and src/ since package.json is one level up in either case.
|
|
@@ -11,57 +12,49 @@ function getVersion() {
|
|
|
11
12
|
const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
12
13
|
return pkg.version;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
ironcurtain annotate-tools # Classify tool arguments
|
|
58
|
-
ironcurtain compile-policy # Compile policy from constitution
|
|
59
|
-
ironcurtain refresh-lists # Refresh all dynamic lists
|
|
60
|
-
ironcurtain refresh-lists --list major-news # Refresh a single list
|
|
61
|
-
ironcurtain refresh-lists --with-mcp # Include MCP-backed lists
|
|
62
|
-
ironcurtain customize-policy # Customize policy interactively
|
|
63
|
-
`.trim());
|
|
64
|
-
}
|
|
15
|
+
const topLevelSpec = {
|
|
16
|
+
name: 'ironcurtain',
|
|
17
|
+
description: 'Secure agent runtime with policy-driven tool mediation',
|
|
18
|
+
usage: ['ironcurtain <command> [options]'],
|
|
19
|
+
subcommands: [
|
|
20
|
+
{ name: 'start [task]', description: 'Run the agent (interactive or single-shot)' },
|
|
21
|
+
{ name: 'daemon', description: 'Unified Signal + cron daemon' },
|
|
22
|
+
{ name: 'mux', description: 'Terminal multiplexer for PTY sessions (requires node-pty)' },
|
|
23
|
+
{ name: 'escalation-listener', description: 'Aggregate escalation notifications from PTY sessions' },
|
|
24
|
+
{ name: 'bot', description: "Alias for 'daemon' (backward compatible)" },
|
|
25
|
+
{ name: 'persona', description: 'Manage personas (named policy profiles)' },
|
|
26
|
+
{ name: 'setup', description: 'Run the first-start wizard (always runs)' },
|
|
27
|
+
{ name: 'setup-signal', description: 'Interactive Signal transport onboarding' },
|
|
28
|
+
{ name: 'annotate-tools', description: 'Classify MCP tool arguments via LLM' },
|
|
29
|
+
{ name: 'compile-policy', description: 'Compile constitution into enforceable policy rules' },
|
|
30
|
+
{ name: 'refresh-lists', description: 'Re-resolve dynamic lists without full recompilation' },
|
|
31
|
+
{ name: 'customize-policy', description: 'Customize your policy via LLM-assisted conversation' },
|
|
32
|
+
{ name: 'config', description: 'Edit configuration interactively' },
|
|
33
|
+
{ name: 'help', description: 'Show this help message' },
|
|
34
|
+
],
|
|
35
|
+
options: [
|
|
36
|
+
{ flag: 'help', short: 'h', description: 'Show this help message' },
|
|
37
|
+
{ flag: 'version', short: 'v', description: 'Show version number' },
|
|
38
|
+
],
|
|
39
|
+
examples: [
|
|
40
|
+
'ironcurtain start "Summarize files in ." # Single-shot task',
|
|
41
|
+
'ironcurtain start # Interactive session',
|
|
42
|
+
'ironcurtain start --resume <session-id> # Resume a session',
|
|
43
|
+
'ironcurtain start -w ./my-project "Fix bugs" # Work in existing directory',
|
|
44
|
+
'ironcurtain start --agent claude-code "task" # Docker: Claude Code',
|
|
45
|
+
'ironcurtain start --pty # PTY mode',
|
|
46
|
+
'ironcurtain daemon # Start the daemon',
|
|
47
|
+
'ironcurtain daemon list-jobs # List scheduled jobs',
|
|
48
|
+
'ironcurtain compile-policy # Compile policy',
|
|
49
|
+
'ironcurtain refresh-lists --with-mcp # Refresh dynamic lists',
|
|
50
|
+
],
|
|
51
|
+
};
|
|
52
|
+
const setupSignalSpec = {
|
|
53
|
+
name: 'ironcurtain setup-signal',
|
|
54
|
+
description: 'Interactive Signal transport onboarding',
|
|
55
|
+
usage: ['ironcurtain setup-signal [options]'],
|
|
56
|
+
options: [{ flag: 're-trust', description: 'Re-verify a changed identity key' }],
|
|
57
|
+
};
|
|
65
58
|
const { values, positionals } = parseArgs({
|
|
66
59
|
args: process.argv.slice(2),
|
|
67
60
|
options: {
|
|
@@ -76,8 +69,11 @@ if (values.version) {
|
|
|
76
69
|
process.exit(0);
|
|
77
70
|
}
|
|
78
71
|
const subcommand = positionals[0];
|
|
79
|
-
|
|
80
|
-
|
|
72
|
+
// Show top-level help when no subcommand is given or 'help' is the subcommand.
|
|
73
|
+
// When a recognized subcommand is present, --help passes through to the
|
|
74
|
+
// subcommand handler via process.argv.slice(3).
|
|
75
|
+
if (!subcommand || subcommand === 'help') {
|
|
76
|
+
printSpecHelp(topLevelSpec);
|
|
81
77
|
process.exit(0);
|
|
82
78
|
}
|
|
83
79
|
switch (subcommand) {
|
|
@@ -111,15 +107,40 @@ switch (subcommand) {
|
|
|
111
107
|
await runConfigCommand();
|
|
112
108
|
break;
|
|
113
109
|
}
|
|
110
|
+
case 'persona': {
|
|
111
|
+
const { main: personaMain } = await import('./persona/persona-command.js');
|
|
112
|
+
await personaMain(process.argv.slice(3));
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
114
115
|
case 'setup': {
|
|
115
116
|
const { runFirstStart } = await import('./config/first-start.js');
|
|
116
117
|
await runFirstStart();
|
|
117
118
|
break;
|
|
118
119
|
}
|
|
120
|
+
case 'daemon': {
|
|
121
|
+
const { runDaemonCommand } = await import('./daemon/daemon-command.js');
|
|
122
|
+
await runDaemonCommand(process.argv.slice(3));
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
119
125
|
case 'bot': {
|
|
126
|
+
// 'bot' is an alias for 'daemon' (backward compatibility)
|
|
127
|
+
const botArgs = process.argv.slice(3);
|
|
128
|
+
if (botArgs.includes('--help') || botArgs.includes('-h')) {
|
|
129
|
+
const { botSpec } = await import('./signal/bot-command.js');
|
|
130
|
+
printSpecHelp(botSpec);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
120
133
|
const agentName = values.agent;
|
|
121
|
-
|
|
122
|
-
|
|
134
|
+
if (botArgs.some((a) => !a.startsWith('-'))) {
|
|
135
|
+
// Has subcommands -- route through daemon command
|
|
136
|
+
const { runDaemonCommand } = await import('./daemon/daemon-command.js');
|
|
137
|
+
await runDaemonCommand(botArgs);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// No subcommands -- existing bot behavior
|
|
141
|
+
const { runBot } = await import('./signal/bot-command.js');
|
|
142
|
+
await runBot({ agent: agentName });
|
|
143
|
+
}
|
|
123
144
|
break;
|
|
124
145
|
}
|
|
125
146
|
case 'mux': {
|
|
@@ -133,6 +154,8 @@ switch (subcommand) {
|
|
|
133
154
|
break;
|
|
134
155
|
}
|
|
135
156
|
case 'setup-signal': {
|
|
157
|
+
if (checkHelp({ help: process.argv.includes('--help') || process.argv.includes('-h') }, setupSignalSpec))
|
|
158
|
+
break;
|
|
136
159
|
const reTrust = process.argv.includes('--re-trust');
|
|
137
160
|
const { runSignalSetup } = await import('./signal/setup-signal.js');
|
|
138
161
|
await runSignalSetup({ reTrust });
|
|
@@ -140,7 +163,7 @@ switch (subcommand) {
|
|
|
140
163
|
}
|
|
141
164
|
default:
|
|
142
165
|
console.error(`Unknown command: ${subcommand}\n`);
|
|
143
|
-
|
|
166
|
+
printSpecHelp(topLevelSpec);
|
|
144
167
|
process.exit(1);
|
|
145
168
|
}
|
|
146
169
|
//# sourceMappingURL=cli.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|