@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.
Files changed (160) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +311 -0
  3. package/dist/agent/index.d.ts +10 -0
  4. package/dist/agent/index.js +71 -0
  5. package/dist/agent/index.js.map +1 -0
  6. package/dist/agent/prompts.d.ts +5 -0
  7. package/dist/agent/prompts.js +26 -0
  8. package/dist/agent/prompts.js.map +1 -0
  9. package/dist/agent/tools.d.ts +13 -0
  10. package/dist/agent/tools.js +51 -0
  11. package/dist/agent/tools.js.map +1 -0
  12. package/dist/cli.d.ts +2 -0
  13. package/dist/cli.js +78 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config/constitution.md +16 -0
  16. package/dist/config/generated/compiled-policy.json +236 -0
  17. package/dist/config/generated/test-scenarios.json +765 -0
  18. package/dist/config/generated/tool-annotations.json +955 -0
  19. package/dist/config/index.d.ts +25 -0
  20. package/dist/config/index.js +151 -0
  21. package/dist/config/index.js.map +1 -0
  22. package/dist/config/mcp-servers.json +22 -0
  23. package/dist/config/model-provider.d.ts +49 -0
  24. package/dist/config/model-provider.js +78 -0
  25. package/dist/config/model-provider.js.map +1 -0
  26. package/dist/config/paths.d.ts +59 -0
  27. package/dist/config/paths.js +96 -0
  28. package/dist/config/paths.js.map +1 -0
  29. package/dist/config/types.d.ts +89 -0
  30. package/dist/config/types.js +2 -0
  31. package/dist/config/types.js.map +1 -0
  32. package/dist/config/user-config.d.ts +93 -0
  33. package/dist/config/user-config.js +309 -0
  34. package/dist/config/user-config.js.map +1 -0
  35. package/dist/hash.d.ts +17 -0
  36. package/dist/hash.js +34 -0
  37. package/dist/hash.js.map +1 -0
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.js +61 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/logger.d.ts +11 -0
  42. package/dist/logger.js +93 -0
  43. package/dist/logger.js.map +1 -0
  44. package/dist/pipeline/annotate.d.ts +9 -0
  45. package/dist/pipeline/annotate.js +136 -0
  46. package/dist/pipeline/annotate.js.map +1 -0
  47. package/dist/pipeline/compile.d.ts +23 -0
  48. package/dist/pipeline/compile.js +386 -0
  49. package/dist/pipeline/compile.js.map +1 -0
  50. package/dist/pipeline/constitution-compiler.d.ts +22 -0
  51. package/dist/pipeline/constitution-compiler.js +197 -0
  52. package/dist/pipeline/constitution-compiler.js.map +1 -0
  53. package/dist/pipeline/generate-with-repair.d.ts +22 -0
  54. package/dist/pipeline/generate-with-repair.js +64 -0
  55. package/dist/pipeline/generate-with-repair.js.map +1 -0
  56. package/dist/pipeline/handwritten-scenarios.d.ts +9 -0
  57. package/dist/pipeline/handwritten-scenarios.js +321 -0
  58. package/dist/pipeline/handwritten-scenarios.js.map +1 -0
  59. package/dist/pipeline/llm-logger.d.ts +42 -0
  60. package/dist/pipeline/llm-logger.js +78 -0
  61. package/dist/pipeline/llm-logger.js.map +1 -0
  62. package/dist/pipeline/pipeline-shared.d.ts +47 -0
  63. package/dist/pipeline/pipeline-shared.js +145 -0
  64. package/dist/pipeline/pipeline-shared.js.map +1 -0
  65. package/dist/pipeline/policy-verifier.d.ts +46 -0
  66. package/dist/pipeline/policy-verifier.js +277 -0
  67. package/dist/pipeline/policy-verifier.js.map +1 -0
  68. package/dist/pipeline/scenario-generator.d.ts +11 -0
  69. package/dist/pipeline/scenario-generator.js +128 -0
  70. package/dist/pipeline/scenario-generator.js.map +1 -0
  71. package/dist/pipeline/tool-annotator.d.ts +24 -0
  72. package/dist/pipeline/tool-annotator.js +201 -0
  73. package/dist/pipeline/tool-annotator.js.map +1 -0
  74. package/dist/pipeline/types.d.ts +122 -0
  75. package/dist/pipeline/types.js +10 -0
  76. package/dist/pipeline/types.js.map +1 -0
  77. package/dist/sandbox/index.d.ts +39 -0
  78. package/dist/sandbox/index.js +178 -0
  79. package/dist/sandbox/index.js.map +1 -0
  80. package/dist/session/agent-session.d.ts +83 -0
  81. package/dist/session/agent-session.js +382 -0
  82. package/dist/session/agent-session.js.map +1 -0
  83. package/dist/session/cli-transport.d.ts +61 -0
  84. package/dist/session/cli-transport.js +320 -0
  85. package/dist/session/cli-transport.js.map +1 -0
  86. package/dist/session/errors.d.ts +19 -0
  87. package/dist/session/errors.js +33 -0
  88. package/dist/session/errors.js.map +1 -0
  89. package/dist/session/index.d.ts +29 -0
  90. package/dist/session/index.js +104 -0
  91. package/dist/session/index.js.map +1 -0
  92. package/dist/session/message-compactor.d.ts +32 -0
  93. package/dist/session/message-compactor.js +81 -0
  94. package/dist/session/message-compactor.js.map +1 -0
  95. package/dist/session/prompts.d.ts +5 -0
  96. package/dist/session/prompts.js +62 -0
  97. package/dist/session/prompts.js.map +1 -0
  98. package/dist/session/resource-budget-tracker.d.ts +124 -0
  99. package/dist/session/resource-budget-tracker.js +327 -0
  100. package/dist/session/resource-budget-tracker.js.map +1 -0
  101. package/dist/session/step-loop-detector.d.ts +63 -0
  102. package/dist/session/step-loop-detector.js +136 -0
  103. package/dist/session/step-loop-detector.js.map +1 -0
  104. package/dist/session/transport.d.ts +24 -0
  105. package/dist/session/transport.js +2 -0
  106. package/dist/session/transport.js.map +1 -0
  107. package/dist/session/truncate-result.d.ts +35 -0
  108. package/dist/session/truncate-result.js +71 -0
  109. package/dist/session/truncate-result.js.map +1 -0
  110. package/dist/session/types.d.ts +220 -0
  111. package/dist/session/types.js +6 -0
  112. package/dist/session/types.js.map +1 -0
  113. package/dist/trusted-process/audit-log.d.ts +7 -0
  114. package/dist/trusted-process/audit-log.js +21 -0
  115. package/dist/trusted-process/audit-log.js.map +1 -0
  116. package/dist/trusted-process/call-circuit-breaker.d.ts +33 -0
  117. package/dist/trusted-process/call-circuit-breaker.js +61 -0
  118. package/dist/trusted-process/call-circuit-breaker.js.map +1 -0
  119. package/dist/trusted-process/escalation.d.ts +7 -0
  120. package/dist/trusted-process/escalation.js +38 -0
  121. package/dist/trusted-process/escalation.js.map +1 -0
  122. package/dist/trusted-process/index.d.ts +32 -0
  123. package/dist/trusted-process/index.js +151 -0
  124. package/dist/trusted-process/index.js.map +1 -0
  125. package/dist/trusted-process/mcp-client-manager.d.ts +25 -0
  126. package/dist/trusted-process/mcp-client-manager.js +90 -0
  127. package/dist/trusted-process/mcp-client-manager.js.map +1 -0
  128. package/dist/trusted-process/mcp-proxy-server.d.ts +24 -0
  129. package/dist/trusted-process/mcp-proxy-server.js +451 -0
  130. package/dist/trusted-process/mcp-proxy-server.js.map +1 -0
  131. package/dist/trusted-process/path-utils.d.ts +50 -0
  132. package/dist/trusted-process/path-utils.js +158 -0
  133. package/dist/trusted-process/path-utils.js.map +1 -0
  134. package/dist/trusted-process/policy-engine.d.ts +88 -0
  135. package/dist/trusted-process/policy-engine.js +523 -0
  136. package/dist/trusted-process/policy-engine.js.map +1 -0
  137. package/dist/trusted-process/policy-roots.d.ts +50 -0
  138. package/dist/trusted-process/policy-roots.js +67 -0
  139. package/dist/trusted-process/policy-roots.js.map +1 -0
  140. package/dist/trusted-process/policy-types.d.ts +6 -0
  141. package/dist/trusted-process/policy-types.js +2 -0
  142. package/dist/trusted-process/policy-types.js.map +1 -0
  143. package/dist/trusted-process/sandbox-integration.d.ts +92 -0
  144. package/dist/trusted-process/sandbox-integration.js +184 -0
  145. package/dist/trusted-process/sandbox-integration.js.map +1 -0
  146. package/dist/types/argument-roles.d.ts +112 -0
  147. package/dist/types/argument-roles.js +344 -0
  148. package/dist/types/argument-roles.js.map +1 -0
  149. package/dist/types/audit.d.ts +18 -0
  150. package/dist/types/audit.js +2 -0
  151. package/dist/types/audit.js.map +1 -0
  152. package/dist/types/mcp.d.ts +20 -0
  153. package/dist/types/mcp.js +2 -0
  154. package/dist/types/mcp.js.map +1 -0
  155. package/package.json +83 -0
  156. package/src/config/constitution.md +16 -0
  157. package/src/config/generated/compiled-policy.json +236 -0
  158. package/src/config/generated/test-scenarios.json +765 -0
  159. package/src/config/generated/tool-annotations.json +955 -0
  160. 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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"}