context-lens 0.2.0 → 0.3.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 (119) hide show
  1. package/README.md +120 -25
  2. package/dist/cli-utils.d.ts +2 -1
  3. package/dist/cli-utils.d.ts.map +1 -1
  4. package/dist/cli-utils.js +40 -13
  5. package/dist/cli-utils.js.map +1 -1
  6. package/dist/cli.js +184 -68
  7. package/dist/cli.js.map +1 -1
  8. package/dist/core/conversation.d.ts +63 -0
  9. package/dist/core/conversation.d.ts.map +1 -0
  10. package/dist/core/conversation.js +305 -0
  11. package/dist/core/conversation.js.map +1 -0
  12. package/dist/core/health.d.ts +7 -0
  13. package/dist/core/health.d.ts.map +1 -0
  14. package/dist/core/health.js +311 -0
  15. package/dist/core/health.js.map +1 -0
  16. package/dist/core/models.d.ts +36 -0
  17. package/dist/core/models.d.ts.map +1 -0
  18. package/dist/core/models.js +111 -0
  19. package/dist/core/models.js.map +1 -0
  20. package/dist/core/parse.d.ts +17 -0
  21. package/dist/core/parse.d.ts.map +1 -0
  22. package/dist/core/parse.js +349 -0
  23. package/dist/core/parse.js.map +1 -0
  24. package/dist/core/routing.d.ts +47 -0
  25. package/dist/core/routing.d.ts.map +1 -0
  26. package/dist/core/routing.js +132 -0
  27. package/dist/core/routing.js.map +1 -0
  28. package/dist/core/security.d.ts +8 -0
  29. package/dist/core/security.d.ts.map +1 -0
  30. package/dist/core/security.js +222 -0
  31. package/dist/core/security.js.map +1 -0
  32. package/dist/core/source.d.ts +22 -0
  33. package/dist/core/source.d.ts.map +1 -0
  34. package/dist/core/source.js +56 -0
  35. package/dist/core/source.js.map +1 -0
  36. package/dist/core/tokens.d.ts +29 -0
  37. package/dist/core/tokens.d.ts.map +1 -0
  38. package/dist/core/tokens.js +163 -0
  39. package/dist/core/tokens.js.map +1 -0
  40. package/dist/core.d.ts +14 -22
  41. package/dist/core.d.ts.map +1 -1
  42. package/dist/core.js +14 -471
  43. package/dist/core.js.map +1 -1
  44. package/dist/http/headers.d.ts +25 -0
  45. package/dist/http/headers.d.ts.map +1 -0
  46. package/dist/http/headers.js +54 -0
  47. package/dist/http/headers.js.map +1 -0
  48. package/dist/lhar/composition.d.ts +12 -0
  49. package/dist/lhar/composition.d.ts.map +1 -0
  50. package/dist/lhar/composition.js +258 -0
  51. package/dist/lhar/composition.js.map +1 -0
  52. package/dist/lhar/export.d.ts +5 -0
  53. package/dist/lhar/export.d.ts.map +1 -0
  54. package/dist/lhar/export.js +59 -0
  55. package/dist/lhar/export.js.map +1 -0
  56. package/dist/lhar/record.d.ts +6 -0
  57. package/dist/lhar/record.d.ts.map +1 -0
  58. package/dist/lhar/record.js +216 -0
  59. package/dist/lhar/record.js.map +1 -0
  60. package/dist/lhar/response.d.ts +11 -0
  61. package/dist/lhar/response.d.ts.map +1 -0
  62. package/dist/lhar/response.js +132 -0
  63. package/dist/lhar/response.js.map +1 -0
  64. package/dist/lhar-types.generated.d.ts +24 -3
  65. package/dist/lhar-types.generated.d.ts.map +1 -1
  66. package/dist/lhar.d.ts +12 -19
  67. package/dist/lhar.d.ts.map +1 -1
  68. package/dist/lhar.js +16 -473
  69. package/dist/lhar.js.map +1 -1
  70. package/dist/server/api.d.ts +8 -0
  71. package/dist/server/api.d.ts.map +1 -0
  72. package/dist/server/api.js +292 -0
  73. package/dist/server/api.js.map +1 -0
  74. package/dist/server/config.d.ts +13 -0
  75. package/dist/server/config.d.ts.map +1 -0
  76. package/dist/server/config.js +36 -0
  77. package/dist/server/config.js.map +1 -0
  78. package/dist/server/projection.d.ts +9 -0
  79. package/dist/server/projection.d.ts.map +1 -0
  80. package/dist/server/projection.js +47 -0
  81. package/dist/server/projection.js.map +1 -0
  82. package/dist/server/proxy.d.ts +13 -0
  83. package/dist/server/proxy.d.ts.map +1 -0
  84. package/dist/server/proxy.js +218 -0
  85. package/dist/server/proxy.js.map +1 -0
  86. package/dist/server/static.d.ts +9 -0
  87. package/dist/server/static.d.ts.map +1 -0
  88. package/dist/server/static.js +78 -0
  89. package/dist/server/static.js.map +1 -0
  90. package/dist/server/store.d.ts +81 -0
  91. package/dist/server/store.d.ts.map +1 -0
  92. package/dist/server/store.js +632 -0
  93. package/dist/server/store.js.map +1 -0
  94. package/dist/server/webui.d.ts +5 -0
  95. package/dist/server/webui.d.ts.map +1 -0
  96. package/dist/server/webui.js +42 -0
  97. package/dist/server/webui.js.map +1 -0
  98. package/dist/server-utils.d.ts +2 -2
  99. package/dist/server-utils.d.ts.map +1 -1
  100. package/dist/server-utils.js +12 -21
  101. package/dist/server-utils.js.map +1 -1
  102. package/dist/server.js +31 -697
  103. package/dist/server.js.map +1 -1
  104. package/dist/types.d.ts +94 -10
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/version.generated.d.ts +2 -0
  107. package/dist/version.generated.d.ts.map +1 -0
  108. package/dist/version.generated.js +2 -0
  109. package/dist/version.generated.js.map +1 -0
  110. package/findings-screenshot.png +0 -0
  111. package/messages-screenshot.png +0 -0
  112. package/package.json +23 -10
  113. package/schema/lhar.schema.json +58 -4
  114. package/screenshot-overview.png +0 -0
  115. package/sessions-screenshot.png +0 -0
  116. package/timeline-screenshot.png +0 -0
  117. package/diff.png +0 -0
  118. package/overview-sidebar.png +0 -0
  119. package/public/index.html +0 -2804
package/dist/cli.js CHANGED
@@ -1,36 +1,63 @@
1
1
  #!/usr/bin/env node
2
- import { spawn } from 'node:child_process';
3
- import { join, dirname } from 'node:path';
4
- import { platform } from 'node:os';
5
- import fs from 'node:fs';
6
- import net from 'node:net';
7
- import { fileURLToPath } from 'node:url';
8
- import { getToolConfig, CLI_CONSTANTS } from './cli-utils.js';
2
+ import { spawn } from "node:child_process";
3
+ import fs from "node:fs";
4
+ import net from "node:net";
5
+ import { platform, tmpdir } from "node:os";
6
+ import { dirname, join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { CLI_CONSTANTS, getToolConfig } from "./cli-utils.js";
9
9
  const __filename = fileURLToPath(import.meta.url);
10
10
  const __dirname = dirname(__filename);
11
11
  // Known tool config: env vars for the child process, extra CLI args, server env vars, and whether mitmproxy is needed
12
12
  // Note: actual tool config lives in cli-utils.ts so it can be unit-tested without importing this entrypoint.
13
- const LOCKFILE = '/tmp/context-lens.lock';
13
+ const LOCKFILE = "/tmp/context-lens.lock";
14
14
  // Parse command line arguments
15
15
  const args = process.argv.slice(2);
16
- if (args.length === 0) {
16
+ // Extract --privacy flag from args (before or after command)
17
+ let privacyLevel;
18
+ const filteredArgs = [];
19
+ for (let i = 0; i < args.length; i++) {
20
+ if (args[i] === "--privacy" && i + 1 < args.length) {
21
+ privacyLevel = args[i + 1];
22
+ i++; // skip the value
23
+ }
24
+ else if (args[i].startsWith("--privacy=")) {
25
+ privacyLevel = args[i].split("=", 2)[1];
26
+ }
27
+ else {
28
+ filteredArgs.push(args[i]);
29
+ }
30
+ }
31
+ // Validate privacy level
32
+ if (privacyLevel !== undefined) {
33
+ if (!["minimal", "standard", "full"].includes(privacyLevel)) {
34
+ console.error(`Error: Invalid privacy level '${privacyLevel}'. Must be one of: minimal, standard, full`);
35
+ process.exit(1);
36
+ }
37
+ // Pass to server via env var
38
+ process.env.CONTEXT_LENS_PRIVACY = privacyLevel;
39
+ }
40
+ if (filteredArgs.length === 0) {
17
41
  // Standalone mode: just start the proxy server
18
- const serverPath = join(__dirname, 'server.js');
19
- const server = spawn('node', [serverPath], { stdio: 'inherit' });
20
- server.on('exit', (code) => process.exit(code || 0));
21
- process.on('SIGINT', () => server.kill('SIGINT'));
22
- process.on('SIGTERM', () => server.kill('SIGTERM'));
42
+ const serverPath = join(__dirname, "server.js");
43
+ const server = spawn("node", [serverPath], {
44
+ stdio: "inherit",
45
+ env: { ...process.env },
46
+ });
47
+ server.on("exit", (code) => process.exit(code || 0));
48
+ process.on("SIGINT", () => server.kill("SIGINT"));
49
+ process.on("SIGTERM", () => server.kill("SIGTERM"));
23
50
  // Prevent early exit
24
51
  process.stdin.resume();
25
52
  }
26
53
  else {
27
54
  // Skip '--' separator if present
28
- let commandArgs = args;
29
- if (args[0] === '--') {
30
- commandArgs = args.slice(1);
55
+ let commandArgs = filteredArgs;
56
+ if (filteredArgs[0] === "--") {
57
+ commandArgs = filteredArgs.slice(1);
31
58
  }
32
59
  if (commandArgs.length === 0) {
33
- console.error('Error: No command specified after --');
60
+ console.error("Error: No command specified after --");
34
61
  process.exit(1);
35
62
  }
36
63
  const commandName = commandArgs[0];
@@ -40,11 +67,11 @@ else {
40
67
  // Check if proxy is already running
41
68
  function isProxyRunning() {
42
69
  return new Promise((resolve) => {
43
- const socket = net.connect({ port: 4040, host: 'localhost' }, () => {
70
+ const socket = net.connect({ port: 4040, host: "localhost" }, () => {
44
71
  socket.end();
45
72
  resolve(true);
46
73
  });
47
- socket.on('error', () => resolve(false));
74
+ socket.on("error", () => resolve(false));
48
75
  socket.setTimeout(1000, () => {
49
76
  socket.destroy();
50
77
  resolve(false);
@@ -56,14 +83,14 @@ else {
56
83
  try {
57
84
  let count = 0;
58
85
  if (fs.existsSync(LOCKFILE)) {
59
- const data = fs.readFileSync(LOCKFILE, 'utf8');
60
- count = parseInt(data) || 0;
86
+ const data = fs.readFileSync(LOCKFILE, "utf8");
87
+ count = parseInt(data, 10) || 0;
61
88
  }
62
89
  fs.writeFileSync(LOCKFILE, String(count + 1));
63
90
  return count + 1;
64
91
  }
65
92
  catch (err) {
66
- console.error('Warning: failed to update lockfile:', err.message);
93
+ console.error("Warning: failed to update lockfile:", err instanceof Error ? err.message : String(err));
67
94
  return 1;
68
95
  }
69
96
  }
@@ -74,7 +101,7 @@ else {
74
101
  fs.unlinkSync(LOCKFILE);
75
102
  }
76
103
  catch (err) {
77
- console.error('Warning: failed to clear stale lockfile:', err.message);
104
+ console.error("Warning: failed to clear stale lockfile:", err instanceof Error ? err.message : String(err));
78
105
  }
79
106
  }
80
107
  // Decrement reference count in lockfile
@@ -82,8 +109,8 @@ else {
82
109
  try {
83
110
  if (!fs.existsSync(LOCKFILE))
84
111
  return 0;
85
- const data = fs.readFileSync(LOCKFILE, 'utf8');
86
- const count = Math.max(0, (parseInt(data) || 1) - 1);
112
+ const data = fs.readFileSync(LOCKFILE, "utf8");
113
+ const count = Math.max(0, (parseInt(data, 10) || 1) - 1);
87
114
  if (count === 0) {
88
115
  fs.unlinkSync(LOCKFILE);
89
116
  }
@@ -93,7 +120,7 @@ else {
93
120
  return count;
94
121
  }
95
122
  catch (err) {
96
- console.error('Warning: failed to update lockfile:', err.message);
123
+ console.error("Warning: failed to update lockfile:", err instanceof Error ? err.message : String(err));
97
124
  return 0;
98
125
  }
99
126
  }
@@ -102,61 +129,62 @@ else {
102
129
  let serverReady = false;
103
130
  let mitmReady = false;
104
131
  let childProcess = null;
132
+ let piAgentDirToCleanup = null;
105
133
  let shouldShutdownProxy = false;
106
134
  let cleanupDidRun = false;
107
135
  // Start proxy or attach to existing one
108
136
  async function initializeProxy() {
109
137
  const alreadyRunning = await isProxyRunning();
110
138
  if (alreadyRunning) {
111
- console.log('🔍 Context Lens proxy already running, attaching to it...');
139
+ console.log("🔍 Context Lens proxy already running, attaching to it...");
112
140
  incrementRefCount();
113
141
  serverReady = true;
114
142
  shouldShutdownProxy = false;
115
143
  maybeStartMitmThenChild();
116
144
  }
117
145
  else {
118
- console.log('🔍 Starting Context Lens proxy and web UI...');
146
+ console.log("🔍 Starting Context Lens proxy and web UI...");
119
147
  // No proxy is listening on :4040. Any existing lockfile is stale and would prevent shutdown later.
120
148
  clearStaleLockfile();
121
149
  incrementRefCount();
122
150
  shouldShutdownProxy = true;
123
- const serverPath = join(__dirname, 'server.js');
124
- serverProcess = spawn('node', [serverPath], {
125
- stdio: ['ignore', 'pipe', 'pipe'],
151
+ const serverPath = join(__dirname, "server.js");
152
+ serverProcess = spawn("node", [serverPath], {
153
+ stdio: ["ignore", "pipe", "pipe"],
126
154
  detached: false,
127
- env: { ...toolConfig.serverEnv, ...process.env, CONTEXT_LENS_CLI: '1' },
155
+ env: { ...toolConfig.serverEnv, ...process.env, CONTEXT_LENS_CLI: "1" },
128
156
  });
129
157
  // Wait for server to be ready, then suppress output (visible in web UI at :4041)
130
- serverProcess.stdout.on('data', (data) => {
158
+ serverProcess.stdout?.on("data", (data) => {
131
159
  const output = data.toString();
132
160
  if (!serverReady) {
133
161
  process.stderr.write(output);
134
162
  }
135
- if (output.includes('Context Lens Web UI running') && !serverReady) {
163
+ if (output.includes("Context Lens Web UI running") && !serverReady) {
136
164
  serverReady = true;
137
165
  maybeStartMitmThenChild();
138
166
  }
139
167
  });
140
- serverProcess.stderr.on('data', (data) => {
168
+ serverProcess.stderr?.on("data", (data) => {
141
169
  if (!serverReady) {
142
170
  process.stderr.write(data);
143
171
  }
144
172
  });
145
- serverProcess.on('error', (err) => {
146
- console.error('Failed to start server:', err);
173
+ serverProcess.on("error", (err) => {
174
+ console.error("Failed to start server:", err);
147
175
  decrementRefCount();
148
176
  process.exit(1);
149
177
  });
150
- serverProcess.on('exit', (code) => {
178
+ serverProcess.on("exit", (code) => {
151
179
  if (!serverReady) {
152
- console.error('Server exited unexpectedly');
180
+ console.error("Server exited unexpectedly");
153
181
  decrementRefCount();
154
182
  process.exit(code || 1);
155
183
  }
156
184
  });
157
185
  // Open browser after a short delay (only when starting new server)
158
186
  setTimeout(() => {
159
- openBrowser('http://localhost:4041');
187
+ openBrowser("http://localhost:4041");
160
188
  }, 1000);
161
189
  }
162
190
  }
@@ -164,27 +192,34 @@ else {
164
192
  // Start mitmproxy if needed, then start the child
165
193
  function maybeStartMitmThenChild() {
166
194
  if (!toolConfig.needsMitm) {
167
- return startChild();
195
+ startChild();
196
+ return;
168
197
  }
169
198
  const addonPath = CLI_CONSTANTS.MITM_ADDON_PATH;
170
- console.log('🔒 Starting mitmproxy (forward proxy for HTTPS interception)...');
171
- mitmProcess = spawn('mitmdump', ['-s', addonPath, '--quiet', '--listen-port', String(CLI_CONSTANTS.MITM_PORT)], {
172
- stdio: ['ignore', 'pipe', 'pipe'],
199
+ console.log("🔒 Starting mitmproxy (forward proxy for HTTPS interception)...");
200
+ mitmProcess = spawn("mitmdump", [
201
+ "-s",
202
+ addonPath,
203
+ "--quiet",
204
+ "--listen-port",
205
+ String(CLI_CONSTANTS.MITM_PORT),
206
+ ], {
207
+ stdio: ["ignore", "pipe", "pipe"],
173
208
  });
174
- mitmProcess.on('error', (err) => {
175
- console.error('Failed to start mitmproxy:', err.message);
176
- console.error('Install it: pipx install mitmproxy');
209
+ mitmProcess.on("error", (err) => {
210
+ console.error("Failed to start mitmproxy:", err.message);
211
+ console.error("Install it: pipx install mitmproxy");
177
212
  cleanup(1);
178
213
  });
179
- mitmProcess.on('exit', (code) => {
214
+ mitmProcess.on("exit", (code) => {
180
215
  if (!mitmReady) {
181
- console.error('mitmproxy exited unexpectedly');
216
+ console.error("mitmproxy exited unexpectedly");
182
217
  cleanup(code || 1);
183
218
  }
184
219
  });
185
220
  // Poll until mitmproxy is accepting connections
186
221
  const pollMitm = setInterval(() => {
187
- const socket = net.connect({ port: CLI_CONSTANTS.MITM_PORT, host: 'localhost' }, () => {
222
+ const socket = net.connect({ port: CLI_CONSTANTS.MITM_PORT, host: "localhost" }, () => {
188
223
  socket.end();
189
224
  if (!mitmReady) {
190
225
  mitmReady = true;
@@ -193,7 +228,7 @@ else {
193
228
  startChild();
194
229
  }
195
230
  });
196
- socket.on('error', () => { }); // not ready yet
231
+ socket.on("error", () => { }); // not ready yet
197
232
  socket.setTimeout(500, () => socket.destroy());
198
233
  }, 200);
199
234
  }
@@ -201,33 +236,103 @@ else {
201
236
  function startChild() {
202
237
  // Inject extra args (e.g. codex -c chatgpt_base_url=...) before user args
203
238
  const allArgs = [...toolConfig.extraArgs, ...commandArguments];
204
- console.log(`\n🚀 Launching: ${commandName} ${allArgs.join(' ')}\n`);
239
+ console.log(`\n🚀 Launching: ${commandName} ${allArgs.join(" ")}\n`);
205
240
  const childEnv = {
206
241
  ...process.env,
207
242
  ...toolConfig.childEnv,
208
243
  };
244
+ if (commandName === "pi") {
245
+ childEnv.PI_CODING_AGENT_DIR = preparePiAgentDir(childEnv.PI_CODING_AGENT_DIR);
246
+ }
209
247
  // Spawn the child process with inherited stdio (interactive)
210
- // No shell: true avoids intermediate process that breaks signal delivery
248
+ // No shell: true. Avoids intermediate process that breaks signal delivery
211
249
  childProcess = spawn(commandName, allArgs, {
212
- stdio: 'inherit',
250
+ stdio: "inherit",
213
251
  env: childEnv,
214
252
  });
215
- childProcess.on('error', (err) => {
253
+ childProcess.on("error", (err) => {
216
254
  console.error(`\nFailed to start ${commandName}:`, err.message);
217
255
  cleanup(1);
218
256
  });
219
257
  // When the child exits (however it happens), clean up and mirror its exit code
220
- childProcess.on('exit', (code, signal) => {
221
- cleanup(signal ? 128 + (signal === 'SIGINT' ? 2 : 15) : (code || 0));
258
+ childProcess.on("exit", (code, signal) => {
259
+ cleanup(signal ? 128 + (signal === "SIGINT" ? 2 : 15) : code || 0);
222
260
  });
223
261
  }
262
+ function preparePiAgentDir(targetDirEnv) {
263
+ const dirPrefix = targetDirEnv && targetDirEnv.length > 0
264
+ ? targetDirEnv
265
+ : join(tmpdir(), "context-lens-pi-agent-");
266
+ const targetDir = fs.mkdtempSync(dirPrefix);
267
+ const homeDir = process.env.HOME || "";
268
+ const sourceDir = join(homeDir, ".pi", "agent");
269
+ const sourceModelsPath = join(sourceDir, "models.json");
270
+ const targetModelsPath = join(targetDir, "models.json");
271
+ try {
272
+ // Keep temp agent dir private to this user.
273
+ fs.chmodSync(targetDir, 0o700);
274
+ piAgentDirToCleanup = targetDir;
275
+ if (fs.existsSync(sourceDir)) {
276
+ for (const entry of fs.readdirSync(sourceDir, {
277
+ withFileTypes: true,
278
+ })) {
279
+ if (entry.name === "models.json")
280
+ continue;
281
+ const src = join(sourceDir, entry.name);
282
+ const dst = join(targetDir, entry.name);
283
+ fs.symlinkSync(src, dst);
284
+ }
285
+ }
286
+ let modelsConfig = {};
287
+ if (fs.existsSync(sourceModelsPath)) {
288
+ try {
289
+ const parsed = JSON.parse(fs.readFileSync(sourceModelsPath, "utf8"));
290
+ if (parsed && typeof parsed === "object") {
291
+ modelsConfig = parsed;
292
+ }
293
+ }
294
+ catch {
295
+ console.error("Warning: ~/.pi/agent/models.json is not valid JSON; using proxy-only overrides");
296
+ }
297
+ }
298
+ const providers = modelsConfig.providers &&
299
+ typeof modelsConfig.providers === "object" &&
300
+ !Array.isArray(modelsConfig.providers)
301
+ ? { ...modelsConfig.providers }
302
+ : {};
303
+ const proxyBaseUrl = `${CLI_CONSTANTS.PROXY_URL}/pi`;
304
+ for (const key of [
305
+ "anthropic",
306
+ "openai",
307
+ "google-gemini-cli",
308
+ "google-antigravity",
309
+ ]) {
310
+ const existing = providers[key];
311
+ providers[key] =
312
+ existing && typeof existing === "object" && !Array.isArray(existing)
313
+ ? {
314
+ ...existing,
315
+ baseUrl: proxyBaseUrl,
316
+ }
317
+ : { baseUrl: proxyBaseUrl };
318
+ }
319
+ fs.writeFileSync(targetModelsPath, `${JSON.stringify({ ...modelsConfig, providers }, null, 2)}\n`);
320
+ return targetDir;
321
+ }
322
+ catch (err) {
323
+ console.error("Warning: failed to prepare Pi proxy config:", err instanceof Error ? err.message : String(err));
324
+ return targetDir;
325
+ }
326
+ }
224
327
  // Open browser (cross-platform)
225
328
  function openBrowser(url) {
226
- const cmd = platform() === 'darwin' ? 'open'
227
- : platform() === 'win32' ? 'start'
228
- : 'xdg-open';
329
+ const cmd = platform() === "darwin"
330
+ ? "open"
331
+ : platform() === "win32"
332
+ ? "start"
333
+ : "xdg-open";
229
334
  const browserProcess = spawn(cmd, [url], {
230
- stdio: 'ignore',
335
+ stdio: "ignore",
231
336
  detached: true,
232
337
  });
233
338
  browserProcess.unref(); // Don't wait for browser to close
@@ -241,18 +346,29 @@ else {
241
346
  if (mitmProcess && !mitmProcess.killed) {
242
347
  mitmProcess.kill();
243
348
  }
244
- if (remainingRefs === 0 && shouldShutdownProxy && serverProcess && !serverProcess.killed) {
349
+ if (piAgentDirToCleanup) {
350
+ try {
351
+ fs.rmSync(piAgentDirToCleanup, { recursive: true, force: true });
352
+ }
353
+ catch (err) {
354
+ console.error("Warning: failed to clean up temporary Pi config dir:", err instanceof Error ? err.message : String(err));
355
+ }
356
+ }
357
+ if (remainingRefs === 0 &&
358
+ shouldShutdownProxy &&
359
+ serverProcess &&
360
+ !serverProcess.killed) {
245
361
  serverProcess.kill();
246
362
  }
247
363
  process.exit(exitCode);
248
364
  }
249
- // Ignore SIGINT in the parent let it flow to the child (claude/codex) naturally.
365
+ // Ignore SIGINT in the parent. Let it flow to the child (claude/codex) naturally.
250
366
  // The child handles Ctrl+C itself; when it eventually exits, cleanup runs via the 'exit' handler.
251
- process.on('SIGINT', () => { });
252
- // SIGTERM: external shutdown request forward to child
253
- process.on('SIGTERM', () => {
367
+ process.on("SIGINT", () => { });
368
+ // SIGTERM: external shutdown request, forward to child
369
+ process.on("SIGTERM", () => {
254
370
  if (childProcess && !childProcess.killed)
255
- childProcess.kill('SIGTERM');
371
+ childProcess.kill("SIGTERM");
256
372
  });
257
373
  }
258
374
  //# 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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { ContextInfo, ParsedMessage } from "../types.js";
2
+ /**
3
+ * Extract readable text from message content.
4
+ *
5
+ * This is used for labels/fingerprints where we want the "real" prompt text, not wrappers.
6
+ * It understands a few common JSON wrappers used by tool APIs.
7
+ *
8
+ * @param content - Raw message content (string, often JSON-encoded).
9
+ * @returns A trimmed text string or `null` if no readable text exists.
10
+ */
11
+ export declare function extractReadableText(content: string | null | undefined): string | null;
12
+ /**
13
+ * Extract the working directory from captured content when a tool embeds it.
14
+ *
15
+ * Supports:
16
+ * - Claude Code: "Primary working directory: `/path`"
17
+ * - Codex: "<cwd>/path</cwd>"
18
+ * - Generic: "working directory is /path" or "cwd: /path"
19
+ */
20
+ export declare function extractWorkingDirectory(contextInfo: ContextInfo, rawBody?: Record<string, any> | null): string | null;
21
+ /**
22
+ * For OpenAI Responses-style input arrays, extract the first "real" user prompt.
23
+ *
24
+ * Skips boilerplate blocks (AGENTS.md / environment wrappers).
25
+ */
26
+ export declare function extractUserPrompt(messages: ParsedMessage[]): string | null;
27
+ /**
28
+ * Extract a stable session identifier when the upstream/tool provides one.
29
+ *
30
+ * Supported:
31
+ * - Anthropic: `metadata.user_id` contains `session_<uuid>`
32
+ * - Gemini Code Assist: `request.session_id` (uuid)
33
+ */
34
+ export declare function extractSessionId(rawBody: Record<string, any> | null | undefined): string | null;
35
+ /**
36
+ * Compute a sub-key to distinguish agents within a session (main vs subagents).
37
+ *
38
+ * Currently derived from the first readable user message.
39
+ */
40
+ export declare function computeAgentKey(contextInfo: ContextInfo): string | null;
41
+ /**
42
+ * Compute a conversation fingerprint for grouping.
43
+ *
44
+ * Priority:
45
+ * 1. explicit session IDs (most stable)
46
+ * 2. Responses API chaining (`previous_response_id`)
47
+ * 3. content hash of system + first prompt
48
+ */
49
+ export declare function computeFingerprint(contextInfo: ContextInfo, rawBody: Record<string, any> | null | undefined, responseIdToConvo: Map<string, string>): string | null;
50
+ /**
51
+ * Extract a readable label for a conversation, primarily for UI display.
52
+ */
53
+ export declare function extractConversationLabel(contextInfo: ContextInfo): string;
54
+ /**
55
+ * Extract all tool names used in a conversation's messages.
56
+ *
57
+ * Scans content blocks for tool_use blocks and collects their names.
58
+ *
59
+ * @param messages - Array of messages from one or more entries.
60
+ * @returns Set of tool names that were used.
61
+ */
62
+ export declare function extractToolsUsed(messages: ParsedMessage[]): Set<string>;
63
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/core/conversation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,MAAM,GAAG,IAAI,CAuBf;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GACnC,MAAM,GAAG,IAAI,CA6Bf;AA6FD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,GAAG,IAAI,CAmB1E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9C,MAAM,GAAG,IAAI,CAUf;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAcvE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/C,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,MAAM,GAAG,IAAI,CA+Bf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAgBzE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAYvE"}