@provos/ironcurtain 0.1.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/LICENSE +202 -0
- package/README.md +311 -0
- package/dist/agent/index.d.ts +10 -0
- package/dist/agent/index.js +71 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/prompts.d.ts +5 -0
- package/dist/agent/prompts.js +26 -0
- package/dist/agent/prompts.js.map +1 -0
- package/dist/agent/tools.d.ts +13 -0
- package/dist/agent/tools.js +51 -0
- package/dist/agent/tools.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +78 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/constitution.md +16 -0
- package/dist/config/generated/compiled-policy.json +236 -0
- package/dist/config/generated/test-scenarios.json +765 -0
- package/dist/config/generated/tool-annotations.json +955 -0
- package/dist/config/index.d.ts +25 -0
- package/dist/config/index.js +151 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/mcp-servers.json +22 -0
- package/dist/config/model-provider.d.ts +49 -0
- package/dist/config/model-provider.js +78 -0
- package/dist/config/model-provider.js.map +1 -0
- package/dist/config/paths.d.ts +59 -0
- package/dist/config/paths.js +96 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/types.d.ts +89 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/user-config.d.ts +93 -0
- package/dist/config/user-config.js +309 -0
- package/dist/config/user-config.js.map +1 -0
- package/dist/hash.d.ts +17 -0
- package/dist/hash.js +34 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +11 -0
- package/dist/logger.js +93 -0
- package/dist/logger.js.map +1 -0
- package/dist/pipeline/annotate.d.ts +9 -0
- package/dist/pipeline/annotate.js +136 -0
- package/dist/pipeline/annotate.js.map +1 -0
- package/dist/pipeline/compile.d.ts +23 -0
- package/dist/pipeline/compile.js +386 -0
- package/dist/pipeline/compile.js.map +1 -0
- package/dist/pipeline/constitution-compiler.d.ts +22 -0
- package/dist/pipeline/constitution-compiler.js +197 -0
- package/dist/pipeline/constitution-compiler.js.map +1 -0
- package/dist/pipeline/generate-with-repair.d.ts +22 -0
- package/dist/pipeline/generate-with-repair.js +64 -0
- package/dist/pipeline/generate-with-repair.js.map +1 -0
- package/dist/pipeline/handwritten-scenarios.d.ts +9 -0
- package/dist/pipeline/handwritten-scenarios.js +321 -0
- package/dist/pipeline/handwritten-scenarios.js.map +1 -0
- package/dist/pipeline/llm-logger.d.ts +42 -0
- package/dist/pipeline/llm-logger.js +78 -0
- package/dist/pipeline/llm-logger.js.map +1 -0
- package/dist/pipeline/pipeline-shared.d.ts +47 -0
- package/dist/pipeline/pipeline-shared.js +145 -0
- package/dist/pipeline/pipeline-shared.js.map +1 -0
- package/dist/pipeline/policy-verifier.d.ts +46 -0
- package/dist/pipeline/policy-verifier.js +277 -0
- package/dist/pipeline/policy-verifier.js.map +1 -0
- package/dist/pipeline/scenario-generator.d.ts +11 -0
- package/dist/pipeline/scenario-generator.js +128 -0
- package/dist/pipeline/scenario-generator.js.map +1 -0
- package/dist/pipeline/tool-annotator.d.ts +24 -0
- package/dist/pipeline/tool-annotator.js +201 -0
- package/dist/pipeline/tool-annotator.js.map +1 -0
- package/dist/pipeline/types.d.ts +122 -0
- package/dist/pipeline/types.js +10 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/sandbox/index.d.ts +39 -0
- package/dist/sandbox/index.js +178 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/session/agent-session.d.ts +83 -0
- package/dist/session/agent-session.js +382 -0
- package/dist/session/agent-session.js.map +1 -0
- package/dist/session/cli-transport.d.ts +61 -0
- package/dist/session/cli-transport.js +320 -0
- package/dist/session/cli-transport.js.map +1 -0
- package/dist/session/errors.d.ts +19 -0
- package/dist/session/errors.js +33 -0
- package/dist/session/errors.js.map +1 -0
- package/dist/session/index.d.ts +29 -0
- package/dist/session/index.js +104 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/message-compactor.d.ts +32 -0
- package/dist/session/message-compactor.js +81 -0
- package/dist/session/message-compactor.js.map +1 -0
- package/dist/session/prompts.d.ts +5 -0
- package/dist/session/prompts.js +62 -0
- package/dist/session/prompts.js.map +1 -0
- package/dist/session/resource-budget-tracker.d.ts +124 -0
- package/dist/session/resource-budget-tracker.js +327 -0
- package/dist/session/resource-budget-tracker.js.map +1 -0
- package/dist/session/step-loop-detector.d.ts +63 -0
- package/dist/session/step-loop-detector.js +136 -0
- package/dist/session/step-loop-detector.js.map +1 -0
- package/dist/session/transport.d.ts +24 -0
- package/dist/session/transport.js +2 -0
- package/dist/session/transport.js.map +1 -0
- package/dist/session/truncate-result.d.ts +35 -0
- package/dist/session/truncate-result.js +71 -0
- package/dist/session/truncate-result.js.map +1 -0
- package/dist/session/types.d.ts +220 -0
- package/dist/session/types.js +6 -0
- package/dist/session/types.js.map +1 -0
- package/dist/trusted-process/audit-log.d.ts +7 -0
- package/dist/trusted-process/audit-log.js +21 -0
- package/dist/trusted-process/audit-log.js.map +1 -0
- package/dist/trusted-process/call-circuit-breaker.d.ts +33 -0
- package/dist/trusted-process/call-circuit-breaker.js +61 -0
- package/dist/trusted-process/call-circuit-breaker.js.map +1 -0
- package/dist/trusted-process/escalation.d.ts +7 -0
- package/dist/trusted-process/escalation.js +38 -0
- package/dist/trusted-process/escalation.js.map +1 -0
- package/dist/trusted-process/index.d.ts +32 -0
- package/dist/trusted-process/index.js +151 -0
- package/dist/trusted-process/index.js.map +1 -0
- package/dist/trusted-process/mcp-client-manager.d.ts +25 -0
- package/dist/trusted-process/mcp-client-manager.js +90 -0
- package/dist/trusted-process/mcp-client-manager.js.map +1 -0
- package/dist/trusted-process/mcp-proxy-server.d.ts +24 -0
- package/dist/trusted-process/mcp-proxy-server.js +451 -0
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -0
- package/dist/trusted-process/path-utils.d.ts +50 -0
- package/dist/trusted-process/path-utils.js +158 -0
- package/dist/trusted-process/path-utils.js.map +1 -0
- package/dist/trusted-process/policy-engine.d.ts +88 -0
- package/dist/trusted-process/policy-engine.js +523 -0
- package/dist/trusted-process/policy-engine.js.map +1 -0
- package/dist/trusted-process/policy-roots.d.ts +50 -0
- package/dist/trusted-process/policy-roots.js +67 -0
- package/dist/trusted-process/policy-roots.js.map +1 -0
- package/dist/trusted-process/policy-types.d.ts +6 -0
- package/dist/trusted-process/policy-types.js +2 -0
- package/dist/trusted-process/policy-types.js.map +1 -0
- package/dist/trusted-process/sandbox-integration.d.ts +92 -0
- package/dist/trusted-process/sandbox-integration.js +184 -0
- package/dist/trusted-process/sandbox-integration.js.map +1 -0
- package/dist/types/argument-roles.d.ts +112 -0
- package/dist/types/argument-roles.js +344 -0
- package/dist/types/argument-roles.js.map +1 -0
- package/dist/types/audit.d.ts +18 -0
- package/dist/types/audit.js +2 -0
- package/dist/types/audit.js.map +1 -0
- package/dist/types/mcp.d.ts +20 -0
- package/dist/types/mcp.js +2 -0
- package/dist/types/mcp.js.map +1 -0
- package/package.json +83 -0
- package/src/config/constitution.md +16 -0
- package/src/config/generated/compiled-policy.json +236 -0
- package/src/config/generated/test-scenarios.json +765 -0
- package/src/config/generated/tool-annotations.json +955 -0
- package/src/config/mcp-servers.json +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-session.js","sourceRoot":"","sources":["../../src/session/agent-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI transport -- reads from stdin, writes to stdout/stderr.
|
|
3
|
+
*
|
|
4
|
+
* Supports two modes:
|
|
5
|
+
* - Single-shot: if initialMessage is provided, sends it and returns
|
|
6
|
+
* - Interactive: event-driven REPL with slash commands
|
|
7
|
+
*
|
|
8
|
+
* Provides a rich terminal experience:
|
|
9
|
+
* - Spinner (via ora) during message processing
|
|
10
|
+
* - Colored prompts and status messages (via chalk)
|
|
11
|
+
* - Markdown-rendered agent responses (via marked + marked-terminal)
|
|
12
|
+
*
|
|
13
|
+
* Slash commands:
|
|
14
|
+
* /quit, /exit -- end the session
|
|
15
|
+
* /logs -- display accumulated diagnostic events
|
|
16
|
+
* /budget -- show resource budget usage
|
|
17
|
+
* /approve -- approve a pending escalation
|
|
18
|
+
* /deny -- deny a pending escalation
|
|
19
|
+
*/
|
|
20
|
+
import type { Transport } from './transport.js';
|
|
21
|
+
import type { Session, DiagnosticEvent, EscalationRequest } from './types.js';
|
|
22
|
+
/** Options for constructing a CliTransport. */
|
|
23
|
+
export interface CliTransportOptions {
|
|
24
|
+
/** If provided, run in single-shot mode with this message. */
|
|
25
|
+
initialMessage?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare class CliTransport implements Transport {
|
|
28
|
+
private readonly initialMessage?;
|
|
29
|
+
/** The spinner instance, managed across the message lifecycle. */
|
|
30
|
+
private spinner;
|
|
31
|
+
/** The readline interface, stored so escalation handlers can re-prompt. */
|
|
32
|
+
private rl;
|
|
33
|
+
constructor(options?: CliTransportOptions);
|
|
34
|
+
run(session: Session): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns an onDiagnostic callback that updates the spinner.
|
|
37
|
+
* Wire this into SessionOptions so the transport controls display.
|
|
38
|
+
*/
|
|
39
|
+
createDiagnosticHandler(): (event: DiagnosticEvent) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Returns an onEscalation callback that stops the spinner and
|
|
42
|
+
* shows an escalation banner with the readline prompt so the user
|
|
43
|
+
* can type /approve or /deny. The spinner is restarted only after
|
|
44
|
+
* the user resolves the escalation (see handleEscalationCommand).
|
|
45
|
+
*/
|
|
46
|
+
createEscalationHandler(): (request: EscalationRequest) => void;
|
|
47
|
+
private runSingleShot;
|
|
48
|
+
private runInteractive;
|
|
49
|
+
/**
|
|
50
|
+
* Handles slash commands. Returns true if the input was a command,
|
|
51
|
+
* false if it should be treated as a regular message.
|
|
52
|
+
*/
|
|
53
|
+
private handleSlashCommand;
|
|
54
|
+
private displayDiagnosticLog;
|
|
55
|
+
private handleEscalationCommand;
|
|
56
|
+
private displayBudgetStatus;
|
|
57
|
+
private displaySessionSummary;
|
|
58
|
+
private startSpinner;
|
|
59
|
+
private stopSpinnerWithError;
|
|
60
|
+
private writeEscalationBanner;
|
|
61
|
+
}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI transport -- reads from stdin, writes to stdout/stderr.
|
|
3
|
+
*
|
|
4
|
+
* Supports two modes:
|
|
5
|
+
* - Single-shot: if initialMessage is provided, sends it and returns
|
|
6
|
+
* - Interactive: event-driven REPL with slash commands
|
|
7
|
+
*
|
|
8
|
+
* Provides a rich terminal experience:
|
|
9
|
+
* - Spinner (via ora) during message processing
|
|
10
|
+
* - Colored prompts and status messages (via chalk)
|
|
11
|
+
* - Markdown-rendered agent responses (via marked + marked-terminal)
|
|
12
|
+
*
|
|
13
|
+
* Slash commands:
|
|
14
|
+
* /quit, /exit -- end the session
|
|
15
|
+
* /logs -- display accumulated diagnostic events
|
|
16
|
+
* /budget -- show resource budget usage
|
|
17
|
+
* /approve -- approve a pending escalation
|
|
18
|
+
* /deny -- deny a pending escalation
|
|
19
|
+
*/
|
|
20
|
+
import { createInterface } from 'node:readline';
|
|
21
|
+
import ora from 'ora';
|
|
22
|
+
import chalk from 'chalk';
|
|
23
|
+
import { marked } from 'marked';
|
|
24
|
+
import { markedTerminal } from 'marked-terminal';
|
|
25
|
+
// Configure marked to render markdown for the terminal.
|
|
26
|
+
// This is module-level since marked is a singleton.
|
|
27
|
+
marked.use(markedTerminal());
|
|
28
|
+
export class CliTransport {
|
|
29
|
+
initialMessage;
|
|
30
|
+
/** The spinner instance, managed across the message lifecycle. */
|
|
31
|
+
spinner = null;
|
|
32
|
+
/** The readline interface, stored so escalation handlers can re-prompt. */
|
|
33
|
+
rl = null;
|
|
34
|
+
constructor(options = {}) {
|
|
35
|
+
this.initialMessage = options.initialMessage;
|
|
36
|
+
}
|
|
37
|
+
async run(session) {
|
|
38
|
+
if (this.initialMessage) {
|
|
39
|
+
return this.runSingleShot(session);
|
|
40
|
+
}
|
|
41
|
+
return this.runInteractive(session);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Returns an onDiagnostic callback that updates the spinner.
|
|
45
|
+
* Wire this into SessionOptions so the transport controls display.
|
|
46
|
+
*/
|
|
47
|
+
createDiagnosticHandler() {
|
|
48
|
+
return (event) => {
|
|
49
|
+
if (!this.spinner?.isSpinning)
|
|
50
|
+
return;
|
|
51
|
+
switch (event.kind) {
|
|
52
|
+
case 'tool_call':
|
|
53
|
+
this.spinner.text = 'Executing code...';
|
|
54
|
+
break;
|
|
55
|
+
case 'agent_text':
|
|
56
|
+
this.spinner.text = 'Generating response...';
|
|
57
|
+
break;
|
|
58
|
+
case 'budget_warning':
|
|
59
|
+
this.spinner.text = chalk.yellow(`Budget warning: ${event.message}`);
|
|
60
|
+
break;
|
|
61
|
+
case 'budget_exhausted':
|
|
62
|
+
this.spinner.fail(chalk.red(`Budget exhausted: ${event.message}`));
|
|
63
|
+
break;
|
|
64
|
+
case 'message_compaction':
|
|
65
|
+
this.spinner.text = 'Compacting conversation history...';
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Returns an onEscalation callback that stops the spinner and
|
|
72
|
+
* shows an escalation banner with the readline prompt so the user
|
|
73
|
+
* can type /approve or /deny. The spinner is restarted only after
|
|
74
|
+
* the user resolves the escalation (see handleEscalationCommand).
|
|
75
|
+
*/
|
|
76
|
+
createEscalationHandler() {
|
|
77
|
+
return (request) => {
|
|
78
|
+
if (this.spinner?.isSpinning) {
|
|
79
|
+
this.spinner.stop();
|
|
80
|
+
}
|
|
81
|
+
this.writeEscalationBanner(request);
|
|
82
|
+
// Re-show the readline prompt so the user can type /approve or /deny
|
|
83
|
+
if (this.rl) {
|
|
84
|
+
this.rl.prompt();
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// --- Single-shot mode ---
|
|
89
|
+
async runSingleShot(session) {
|
|
90
|
+
this.startSpinner('Thinking...');
|
|
91
|
+
try {
|
|
92
|
+
const response = await session.sendMessage(this.initialMessage);
|
|
93
|
+
this.spinner.stop();
|
|
94
|
+
process.stdout.write('\n');
|
|
95
|
+
process.stdout.write(renderMarkdown(response));
|
|
96
|
+
this.displaySessionSummary(session.getBudgetStatus());
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
this.stopSpinnerWithError(error);
|
|
100
|
+
throw error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// --- Interactive mode ---
|
|
104
|
+
async runInteractive(session) {
|
|
105
|
+
this.rl = createInterface({
|
|
106
|
+
input: process.stdin,
|
|
107
|
+
output: process.stderr, // Prompts to stderr, responses to stdout
|
|
108
|
+
prompt: chalk.cyan('> '),
|
|
109
|
+
});
|
|
110
|
+
const rl = this.rl;
|
|
111
|
+
process.stderr.write(chalk.dim('IronCurtain interactive mode. Type /quit to exit.\n\n'));
|
|
112
|
+
process.stderr.write(chalk.dim('Commands: /quit /logs /budget /approve /deny\n\n'));
|
|
113
|
+
rl.prompt();
|
|
114
|
+
let running = true;
|
|
115
|
+
let messageInFlight = false;
|
|
116
|
+
const processLine = async (input) => {
|
|
117
|
+
const trimmed = input.trim();
|
|
118
|
+
if (!trimmed) {
|
|
119
|
+
rl.prompt();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (this.handleSlashCommand(trimmed, session, () => {
|
|
123
|
+
running = false;
|
|
124
|
+
rl.close();
|
|
125
|
+
})) {
|
|
126
|
+
if (running)
|
|
127
|
+
rl.prompt();
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (messageInFlight) {
|
|
131
|
+
process.stderr.write(chalk.dim(' (still processing previous message, please wait)\n'));
|
|
132
|
+
rl.prompt();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
messageInFlight = true;
|
|
136
|
+
this.startSpinner('Thinking...');
|
|
137
|
+
try {
|
|
138
|
+
const response = await session.sendMessage(trimmed);
|
|
139
|
+
this.spinner.stop();
|
|
140
|
+
process.stdout.write('\n');
|
|
141
|
+
process.stdout.write(renderMarkdown(response));
|
|
142
|
+
process.stdout.write('\n');
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
this.stopSpinnerWithError(error);
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
messageInFlight = false;
|
|
149
|
+
if (running)
|
|
150
|
+
rl.prompt();
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
rl.on('line', (line) => {
|
|
154
|
+
if (running) {
|
|
155
|
+
processLine(line).catch((err) => {
|
|
156
|
+
process.stderr.write(chalk.red(`Unexpected error: ${err}\n`));
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
await new Promise((resolvePromise) => {
|
|
161
|
+
rl.on('close', () => {
|
|
162
|
+
this.rl = null;
|
|
163
|
+
resolvePromise();
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
this.displaySessionSummary(session.getBudgetStatus());
|
|
167
|
+
}
|
|
168
|
+
// --- Slash commands ---
|
|
169
|
+
/**
|
|
170
|
+
* Handles slash commands. Returns true if the input was a command,
|
|
171
|
+
* false if it should be treated as a regular message.
|
|
172
|
+
*/
|
|
173
|
+
handleSlashCommand(input, session, onQuit) {
|
|
174
|
+
switch (input) {
|
|
175
|
+
case '/quit':
|
|
176
|
+
case '/exit':
|
|
177
|
+
onQuit();
|
|
178
|
+
return true;
|
|
179
|
+
case '/logs':
|
|
180
|
+
this.displayDiagnosticLog(session.getDiagnosticLog());
|
|
181
|
+
return true;
|
|
182
|
+
case '/budget':
|
|
183
|
+
this.displayBudgetStatus(session.getBudgetStatus());
|
|
184
|
+
return true;
|
|
185
|
+
case '/approve':
|
|
186
|
+
case '/deny':
|
|
187
|
+
this.handleEscalationCommand(input, session);
|
|
188
|
+
return true;
|
|
189
|
+
default:
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
displayDiagnosticLog(logs) {
|
|
194
|
+
if (logs.length === 0) {
|
|
195
|
+
process.stderr.write(chalk.dim(' (no diagnostic events yet)\n'));
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
for (const event of logs) {
|
|
199
|
+
switch (event.kind) {
|
|
200
|
+
case 'tool_call':
|
|
201
|
+
process.stderr.write(chalk.dim(` [tool] ${event.toolName}: ${event.preview}\n`));
|
|
202
|
+
break;
|
|
203
|
+
case 'agent_text':
|
|
204
|
+
process.stderr.write(chalk.dim(` [agent] ${event.preview}\n`));
|
|
205
|
+
break;
|
|
206
|
+
case 'budget_warning':
|
|
207
|
+
process.stderr.write(chalk.yellow(` [budget] ${event.message}\n`));
|
|
208
|
+
break;
|
|
209
|
+
case 'budget_exhausted':
|
|
210
|
+
process.stderr.write(chalk.red(` [budget] ${event.message}\n`));
|
|
211
|
+
break;
|
|
212
|
+
case 'message_compaction':
|
|
213
|
+
process.stderr.write(chalk.dim(` [compact] ${event.originalMessageCount} → ${event.newMessageCount} messages\n`));
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
handleEscalationCommand(command, session) {
|
|
219
|
+
const pending = session.getPendingEscalation();
|
|
220
|
+
if (!pending) {
|
|
221
|
+
process.stderr.write(chalk.dim(' No escalation pending.\n'));
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
const decision = command === '/approve' ? 'approved' : 'denied';
|
|
225
|
+
session.resolveEscalation(pending.escalationId, decision)
|
|
226
|
+
.then(() => {
|
|
227
|
+
const color = decision === 'approved' ? chalk.green : chalk.red;
|
|
228
|
+
process.stderr.write(color(` Escalation ${decision}.\n`));
|
|
229
|
+
// Restart the spinner — sendMessage() is still in-flight, waiting
|
|
230
|
+
// for the proxy to process the escalation result and continue.
|
|
231
|
+
this.startSpinner('Processing...');
|
|
232
|
+
})
|
|
233
|
+
.catch((err) => {
|
|
234
|
+
process.stderr.write(chalk.red(` Error: ${err instanceof Error ? err.message : String(err)}\n`));
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
// --- Budget display ---
|
|
238
|
+
displayBudgetStatus(status) {
|
|
239
|
+
const { limits, cumulative } = status;
|
|
240
|
+
process.stderr.write(chalk.cyan(' Current turn budget:\n'));
|
|
241
|
+
process.stderr.write(formatBudgetLine('Tokens', status.totalTokens, limits.maxTotalTokens, (v) => v.toLocaleString()));
|
|
242
|
+
process.stderr.write(formatBudgetLine('Steps', status.stepCount, limits.maxSteps, String));
|
|
243
|
+
process.stderr.write(formatBudgetLine('Time', status.elapsedSeconds, limits.maxSessionSeconds, (v) => `${Math.round(v)}s`));
|
|
244
|
+
process.stderr.write(formatBudgetLine('Est. cost', status.estimatedCostUsd, limits.maxEstimatedCostUsd, (v) => `$${v.toFixed(2)}`));
|
|
245
|
+
process.stderr.write(chalk.cyan(' Session totals:\n'));
|
|
246
|
+
process.stderr.write(` Tokens: ${cumulative.totalTokens.toLocaleString()}\n`);
|
|
247
|
+
process.stderr.write(` Steps: ${cumulative.stepCount}\n`);
|
|
248
|
+
process.stderr.write(` Active time: ${Math.round(cumulative.activeSeconds)}s\n`);
|
|
249
|
+
process.stderr.write(` Est. cost: $${cumulative.estimatedCostUsd.toFixed(2)}\n`);
|
|
250
|
+
}
|
|
251
|
+
displaySessionSummary(status) {
|
|
252
|
+
const { cumulative } = status;
|
|
253
|
+
process.stderr.write(chalk.dim(`\nSession: ${cumulative.totalTokens.toLocaleString()} tokens` +
|
|
254
|
+
` · ${cumulative.stepCount} steps` +
|
|
255
|
+
` · ${Math.round(cumulative.activeSeconds)}s` +
|
|
256
|
+
` · ~$${cumulative.estimatedCostUsd.toFixed(2)}\n`));
|
|
257
|
+
}
|
|
258
|
+
// --- Spinner helpers ---
|
|
259
|
+
startSpinner(text) {
|
|
260
|
+
this.spinner = ora({
|
|
261
|
+
text,
|
|
262
|
+
stream: process.stderr,
|
|
263
|
+
discardStdin: false,
|
|
264
|
+
}).start();
|
|
265
|
+
}
|
|
266
|
+
stopSpinnerWithError(error) {
|
|
267
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
268
|
+
if (this.spinner?.isSpinning) {
|
|
269
|
+
this.spinner.fail(chalk.red(message));
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
process.stderr.write(chalk.red(`Error: ${message}\n`));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// --- Escalation banner ---
|
|
276
|
+
writeEscalationBanner(request) {
|
|
277
|
+
const border = chalk.yellow.bold('========================================');
|
|
278
|
+
const lines = [
|
|
279
|
+
'',
|
|
280
|
+
border,
|
|
281
|
+
chalk.yellow.bold(' ESCALATION: Human approval required'),
|
|
282
|
+
border,
|
|
283
|
+
chalk.yellow(` Tool: ${request.serverName}/${request.toolName}`),
|
|
284
|
+
chalk.yellow(` Arguments: ${JSON.stringify(request.arguments, null, 2)}`),
|
|
285
|
+
chalk.yellow(` Reason: ${request.reason}`),
|
|
286
|
+
border,
|
|
287
|
+
chalk.yellow.bold(' Type /approve or /deny'),
|
|
288
|
+
border,
|
|
289
|
+
'',
|
|
290
|
+
];
|
|
291
|
+
process.stderr.write(lines.join('\n') + '\n');
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// --- Budget formatting ---
|
|
295
|
+
function formatBudgetLine(label, current, limit, format) {
|
|
296
|
+
const currentStr = format(current);
|
|
297
|
+
if (limit === null)
|
|
298
|
+
return ` ${label}: ${currentStr} (no limit)\n`;
|
|
299
|
+
const pct = limit > 0 ? Math.round((current / limit) * 100) : 0;
|
|
300
|
+
return ` ${label}: ${currentStr} / ${format(limit)} (${pct}%)\n`;
|
|
301
|
+
}
|
|
302
|
+
// --- Markdown rendering ---
|
|
303
|
+
/**
|
|
304
|
+
* Renders a markdown string for terminal display.
|
|
305
|
+
* Returns the formatted string with ANSI codes for colors,
|
|
306
|
+
* bold/italic, syntax-highlighted code blocks, etc.
|
|
307
|
+
*/
|
|
308
|
+
function renderMarkdown(text) {
|
|
309
|
+
if (!text.trim())
|
|
310
|
+
return '';
|
|
311
|
+
// marked.parse() can return string or Promise<string> depending on
|
|
312
|
+
// extensions. With marked-terminal (synchronous), it returns a string.
|
|
313
|
+
const rendered = marked.parse(text);
|
|
314
|
+
if (typeof rendered !== 'string') {
|
|
315
|
+
// Defensive: if somehow async, fall back to raw text
|
|
316
|
+
return text;
|
|
317
|
+
}
|
|
318
|
+
return rendered;
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=cli-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-transport.js","sourceRoot":"","sources":["../../src/session/cli-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for session-related errors. Uses a discriminant
|
|
3
|
+
* `code` field for programmatic handling without instanceof checks.
|
|
4
|
+
*/
|
|
5
|
+
export declare class SessionError extends Error {
|
|
6
|
+
readonly code: SessionErrorCode;
|
|
7
|
+
constructor(message: string, code: SessionErrorCode);
|
|
8
|
+
}
|
|
9
|
+
export type SessionErrorCode = 'SESSION_NOT_READY' | 'SESSION_CLOSED' | 'SESSION_INIT_FAILED' | 'BUDGET_EXHAUSTED';
|
|
10
|
+
export declare class SessionNotReadyError extends SessionError {
|
|
11
|
+
constructor(currentStatus: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class SessionClosedError extends SessionError {
|
|
14
|
+
constructor();
|
|
15
|
+
}
|
|
16
|
+
export declare class BudgetExhaustedError extends SessionError {
|
|
17
|
+
readonly dimension: string;
|
|
18
|
+
constructor(dimension: string, message: string);
|
|
19
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base class for session-related errors. Uses a discriminant
|
|
3
|
+
* `code` field for programmatic handling without instanceof checks.
|
|
4
|
+
*/
|
|
5
|
+
export class SessionError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
constructor(message, code) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.name = 'SessionError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class SessionNotReadyError extends SessionError {
|
|
14
|
+
constructor(currentStatus) {
|
|
15
|
+
super(`Session is not ready to accept messages (current status: ${currentStatus})`, 'SESSION_NOT_READY');
|
|
16
|
+
this.name = 'SessionNotReadyError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class SessionClosedError extends SessionError {
|
|
20
|
+
constructor() {
|
|
21
|
+
super('Session has been closed', 'SESSION_CLOSED');
|
|
22
|
+
this.name = 'SessionClosedError';
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class BudgetExhaustedError extends SessionError {
|
|
26
|
+
dimension;
|
|
27
|
+
constructor(dimension, message) {
|
|
28
|
+
super(message, 'BUDGET_EXHAUSTED');
|
|
29
|
+
this.dimension = dimension;
|
|
30
|
+
this.name = 'BudgetExhaustedError';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/session/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAGnB;IAFlB,YACE,OAAe,EACC,IAAsB;QAEtC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,SAAI,GAAJ,IAAI,CAAkB;QAGtC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAQD,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,YAAY,aAAqB;QAC/B,KAAK,CACH,4DAA4D,aAAa,GAAG,EAC5E,mBAAmB,CACpB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAClD;QACE,KAAK,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IAElC;IADlB,YACkB,SAAiB,EACjC,OAAe;QAEf,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAHnB,cAAS,GAAT,SAAS,CAAQ;QAIjC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session module public API.
|
|
3
|
+
*
|
|
4
|
+
* createSession() is the only entry point for session creation.
|
|
5
|
+
* The concrete AgentSession class is not exported -- callers
|
|
6
|
+
* depend on the Session interface only.
|
|
7
|
+
*/
|
|
8
|
+
import type { Session, SessionOptions } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Creates and initializes a new session.
|
|
11
|
+
*
|
|
12
|
+
* This is the only public entry point for session creation.
|
|
13
|
+
* The concrete implementation (AgentSession) is not exported --
|
|
14
|
+
* callers depend on the Session interface only.
|
|
15
|
+
*
|
|
16
|
+
* The factory:
|
|
17
|
+
* 1. Resolves config (from options or loadConfig())
|
|
18
|
+
* 2. Generates a SessionId
|
|
19
|
+
* 3. Creates the session directory tree
|
|
20
|
+
* 4. Overrides the config's allowedDirectory and auditLogPath
|
|
21
|
+
* 5. Creates the AgentSession, calls initialize(), returns Session
|
|
22
|
+
*
|
|
23
|
+
* @throws {SessionError} with code SESSION_INIT_FAILED if
|
|
24
|
+
* sandbox or MCP connection setup fails.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createSession(options?: SessionOptions): Promise<Session>;
|
|
27
|
+
export type { Session, SessionOptions, SessionInfo, SessionId, ConversationTurn, DiagnosticEvent, EscalationRequest, SandboxFactory, BudgetStatus, } from './types.js';
|
|
28
|
+
export type { Transport } from './transport.js';
|
|
29
|
+
export { SessionError, SessionNotReadyError, SessionClosedError, BudgetExhaustedError } from './errors.js';
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session module public API.
|
|
3
|
+
*
|
|
4
|
+
* createSession() is the only entry point for session creation.
|
|
5
|
+
* The concrete AgentSession class is not exported -- callers
|
|
6
|
+
* depend on the Session interface only.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
9
|
+
import { loadConfig } from '../config/index.js';
|
|
10
|
+
import { getSessionDir, getSessionSandboxDir, getSessionEscalationDir, getSessionAuditLogPath, getSessionLogPath, getSessionLlmLogPath, } from '../config/paths.js';
|
|
11
|
+
import * as logger from '../logger.js';
|
|
12
|
+
import { AgentSession } from './agent-session.js';
|
|
13
|
+
import { SessionError } from './errors.js';
|
|
14
|
+
import { createSessionId } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Creates and initializes a new session.
|
|
17
|
+
*
|
|
18
|
+
* This is the only public entry point for session creation.
|
|
19
|
+
* The concrete implementation (AgentSession) is not exported --
|
|
20
|
+
* callers depend on the Session interface only.
|
|
21
|
+
*
|
|
22
|
+
* The factory:
|
|
23
|
+
* 1. Resolves config (from options or loadConfig())
|
|
24
|
+
* 2. Generates a SessionId
|
|
25
|
+
* 3. Creates the session directory tree
|
|
26
|
+
* 4. Overrides the config's allowedDirectory and auditLogPath
|
|
27
|
+
* 5. Creates the AgentSession, calls initialize(), returns Session
|
|
28
|
+
*
|
|
29
|
+
* @throws {SessionError} with code SESSION_INIT_FAILED if
|
|
30
|
+
* sandbox or MCP connection setup fails.
|
|
31
|
+
*/
|
|
32
|
+
export async function createSession(options = {}) {
|
|
33
|
+
const config = options.config ?? loadConfig();
|
|
34
|
+
const sessionId = createSessionId();
|
|
35
|
+
// When resuming, reuse the previous session's directory tree entirely.
|
|
36
|
+
// Logs are append-only so they simply extend.
|
|
37
|
+
const effectiveSessionId = options.resumeSessionId ?? sessionId;
|
|
38
|
+
if (options.resumeSessionId) {
|
|
39
|
+
const sessionDir = getSessionDir(options.resumeSessionId);
|
|
40
|
+
if (!existsSync(sessionDir)) {
|
|
41
|
+
throw new SessionError(`Cannot resume session "${options.resumeSessionId}": ` +
|
|
42
|
+
`session directory not found at ${sessionDir}`, 'SESSION_INIT_FAILED');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const sandboxDir = getSessionSandboxDir(effectiveSessionId);
|
|
46
|
+
const escalationDir = getSessionEscalationDir(effectiveSessionId);
|
|
47
|
+
const auditLogPath = getSessionAuditLogPath(effectiveSessionId);
|
|
48
|
+
mkdirSync(sandboxDir, { recursive: true });
|
|
49
|
+
mkdirSync(escalationDir, { recursive: true });
|
|
50
|
+
const sessionLogPath = getSessionLogPath(effectiveSessionId);
|
|
51
|
+
const llmLogPath = getSessionLlmLogPath(effectiveSessionId);
|
|
52
|
+
// Set up session logging -- captures all console output to file
|
|
53
|
+
logger.setup({ logFilePath: sessionLogPath });
|
|
54
|
+
logger.info(`Session ${sessionId} created`);
|
|
55
|
+
logger.info(`Sandbox: ${sandboxDir}`);
|
|
56
|
+
logger.info(`Escalation dir: ${escalationDir}`);
|
|
57
|
+
logger.info(`Audit log: ${auditLogPath}`);
|
|
58
|
+
logger.info(`LLM log: ${llmLogPath}`);
|
|
59
|
+
if (options.resumeSessionId) {
|
|
60
|
+
logger.info(`Resumed from session: ${options.resumeSessionId}`);
|
|
61
|
+
}
|
|
62
|
+
// Override config paths for this session's isolated directories.
|
|
63
|
+
// Deep-clone mcpServers so patching doesn't mutate the caller's config.
|
|
64
|
+
const sessionConfig = {
|
|
65
|
+
...config,
|
|
66
|
+
allowedDirectory: sandboxDir,
|
|
67
|
+
auditLogPath,
|
|
68
|
+
escalationDir,
|
|
69
|
+
sessionLogPath,
|
|
70
|
+
llmLogPath,
|
|
71
|
+
mcpServers: JSON.parse(JSON.stringify(config.mcpServers)),
|
|
72
|
+
};
|
|
73
|
+
// Patch MCP server args to use the session-specific sandbox directory
|
|
74
|
+
patchMcpServerAllowedDirectory(sessionConfig, sandboxDir);
|
|
75
|
+
const session = new AgentSession(sessionConfig, sessionId, escalationDir, options);
|
|
76
|
+
try {
|
|
77
|
+
await session.initialize();
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
// Clean up on init failure
|
|
81
|
+
await session.close().catch(() => { });
|
|
82
|
+
logger.teardown();
|
|
83
|
+
throw new SessionError(`Session initialization failed: ${error instanceof Error ? error.message : String(error)}`, 'SESSION_INIT_FAILED');
|
|
84
|
+
}
|
|
85
|
+
return session;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Patches the filesystem MCP server's allowed directory argument
|
|
89
|
+
* to use the session-specific sandbox directory, mirroring the
|
|
90
|
+
* logic in loadConfig() that syncs ALLOWED_DIRECTORY.
|
|
91
|
+
*/
|
|
92
|
+
function patchMcpServerAllowedDirectory(config, sandboxDir) {
|
|
93
|
+
const fsServer = config.mcpServers['filesystem'];
|
|
94
|
+
if (!fsServer)
|
|
95
|
+
return;
|
|
96
|
+
// Replace any existing allowed directory path in args.
|
|
97
|
+
// The config may have the original default or a previously patched value.
|
|
98
|
+
const lastArgIndex = fsServer.args.length - 1;
|
|
99
|
+
if (lastArgIndex >= 0) {
|
|
100
|
+
fsServer.args[lastArgIndex] = sandboxDir;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export { SessionError, SessionNotReadyError, SessionClosedError, BudgetExhaustedError } from './errors.js';
|
|
104
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"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"}
|