agent-flow-app 0.6.0 → 0.6.2

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 (2) hide show
  1. package/dist/app.js +83 -65
  2. package/package.json +1 -1
package/dist/app.js CHANGED
@@ -279,10 +279,65 @@ var require_vscode_shim = __commonJS({
279
279
  }
280
280
  });
281
281
 
282
+ // extension/src/constants.ts
283
+ var INACTIVITY_TIMEOUT_MS = 5 * 60 * 1e3;
284
+ var SCAN_INTERVAL_MS = 1e3;
285
+ var POLL_FALLBACK_MS = 3e3;
286
+ var PERMISSION_DETECT_MS = 5e3;
287
+ var ACTIVE_SESSION_AGE_S = 10 * 60;
288
+ var DEFAULT_RELAY_PORT = 3001;
289
+ var HOOK_SERVER_NOT_STARTED = -1;
290
+ var HOOK_MAX_BODY_SIZE = 1024 * 1024;
291
+ var WORKSPACE_HASH_LENGTH = 16;
292
+ var PREVIEW_MAX = 60;
293
+ var ARGS_MAX = 80;
294
+ var RESULT_MAX = 200;
295
+ var MESSAGE_MAX = 2e3;
296
+ var SESSION_LABEL_MAX = 14;
297
+ var SESSION_LABEL_TRUNCATED = SESSION_LABEL_MAX - 2;
298
+ var DISCOVERY_LABEL_MAX = 40;
299
+ var DISCOVERY_LABEL_TAIL = DISCOVERY_LABEL_MAX - 3;
300
+ var DISCOVERY_CONTENT_MAX = 100;
301
+ var TASK_MAX = 60;
302
+ var EDIT_CONTENT_MAX = 500;
303
+ var WEB_FETCH_PROMPT_MAX = 200;
304
+ var CHILD_NAME_MAX = 30;
305
+ var SKILL_NAME_MAX = 40;
306
+ var URL_PATH_MAX = 40;
307
+ var SESSION_ID_DISPLAY = 8;
308
+ var FAILED_RESULT_MAX = 100;
309
+ var CHARS_PER_TOKEN = 4;
310
+ var MIN_TOKEN_ESTIMATE = 10;
311
+ var FALLBACK_TOKEN_ESTIMATE = 200;
312
+ var GREP_TOKEN_MULTIPLIER = 0.5;
313
+ var DEFAULT_TOKEN_MULTIPLIER = 0.3;
314
+ var SYSTEM_PROMPT_BASE_TOKENS = 5e3;
315
+ var HASH_PREFIX_MAX = 200;
316
+ var HOOK_SERVER_HOST = "127.0.0.1";
317
+ var HOOK_URL_PREFIX = `http://${HOOK_SERVER_HOST}:`;
318
+ var ORCHESTRATOR_NAME = "orchestrator";
319
+ var FILE_TOOLS = ["Read", "Edit", "Write", "Glob", "Grep"];
320
+ var PATTERN_TOOLS = ["Glob", "Grep"];
321
+ var SUBAGENT_ID_SUFFIX_LENGTH = 6;
322
+ function generateSubagentFallbackName(id, index) {
323
+ return `subagent-${id.length > SUBAGENT_ID_SUFFIX_LENGTH ? id.slice(-SUBAGENT_ID_SUFFIX_LENGTH) : index}`;
324
+ }
325
+ function resolveSubagentChildName(input) {
326
+ return String(input.description || input.subagent_type || "subagent").slice(0, CHILD_NAME_MAX);
327
+ }
328
+ var SYSTEM_CONTENT_PREFIXES = [
329
+ "This session is being continued",
330
+ "<ide_",
331
+ "<system-reminder",
332
+ "<available-deferred-tools",
333
+ "<command-name"
334
+ ];
335
+
282
336
  // app/src/args.ts
283
337
  function parseArgs(argv) {
284
- let port = 3001;
338
+ let port = DEFAULT_RELAY_PORT;
285
339
  let open = true;
340
+ let verbose2 = false;
286
341
  for (let i = 0; i < argv.length; i++) {
287
342
  const arg = argv[i];
288
343
  if ((arg === "--port" || arg === "-p") && argv[i + 1]) {
@@ -292,19 +347,22 @@ function parseArgs(argv) {
292
347
  i++;
293
348
  } else if (arg === "--no-open") {
294
349
  open = false;
350
+ } else if (arg === "--verbose" || arg === "-v") {
351
+ verbose2 = true;
295
352
  } else if (arg === "--help" || arg === "-h") {
296
353
  console.log(`
297
354
  Usage: agent-flow [options]
298
355
 
299
356
  Options:
300
- -p, --port <number> Port for the server (default: 3001)
357
+ -p, --port <number> Port for the server (default: ${DEFAULT_RELAY_PORT})
301
358
  --no-open Don't open the browser automatically
359
+ -v, --verbose Show detailed event logs
302
360
  -h, --help Show this help message
303
361
  `);
304
362
  process.exit(0);
305
363
  }
306
364
  }
307
- return { port, open };
365
+ return { port, open, verbose: verbose2 };
308
366
  }
309
367
 
310
368
  // app/src/app.ts
@@ -338,59 +396,6 @@ function emitSubagentSpawn(emitter, parent, child, task, sessionId) {
338
396
  }, sessionId);
339
397
  }
340
398
 
341
- // extension/src/constants.ts
342
- var INACTIVITY_TIMEOUT_MS = 5 * 60 * 1e3;
343
- var SCAN_INTERVAL_MS = 1e3;
344
- var POLL_FALLBACK_MS = 3e3;
345
- var PERMISSION_DETECT_MS = 5e3;
346
- var ACTIVE_SESSION_AGE_S = 10 * 60;
347
- var HOOK_SERVER_NOT_STARTED = -1;
348
- var HOOK_MAX_BODY_SIZE = 1024 * 1024;
349
- var WORKSPACE_HASH_LENGTH = 16;
350
- var PREVIEW_MAX = 60;
351
- var ARGS_MAX = 80;
352
- var RESULT_MAX = 200;
353
- var MESSAGE_MAX = 2e3;
354
- var SESSION_LABEL_MAX = 14;
355
- var SESSION_LABEL_TRUNCATED = SESSION_LABEL_MAX - 2;
356
- var DISCOVERY_LABEL_MAX = 40;
357
- var DISCOVERY_LABEL_TAIL = DISCOVERY_LABEL_MAX - 3;
358
- var DISCOVERY_CONTENT_MAX = 100;
359
- var TASK_MAX = 60;
360
- var EDIT_CONTENT_MAX = 500;
361
- var WEB_FETCH_PROMPT_MAX = 200;
362
- var CHILD_NAME_MAX = 30;
363
- var SKILL_NAME_MAX = 40;
364
- var URL_PATH_MAX = 40;
365
- var SESSION_ID_DISPLAY = 8;
366
- var FAILED_RESULT_MAX = 100;
367
- var CHARS_PER_TOKEN = 4;
368
- var MIN_TOKEN_ESTIMATE = 10;
369
- var FALLBACK_TOKEN_ESTIMATE = 200;
370
- var GREP_TOKEN_MULTIPLIER = 0.5;
371
- var DEFAULT_TOKEN_MULTIPLIER = 0.3;
372
- var SYSTEM_PROMPT_BASE_TOKENS = 5e3;
373
- var HASH_PREFIX_MAX = 200;
374
- var HOOK_SERVER_HOST = "127.0.0.1";
375
- var HOOK_URL_PREFIX = `http://${HOOK_SERVER_HOST}:`;
376
- var ORCHESTRATOR_NAME = "orchestrator";
377
- var FILE_TOOLS = ["Read", "Edit", "Write", "Glob", "Grep"];
378
- var PATTERN_TOOLS = ["Glob", "Grep"];
379
- var SUBAGENT_ID_SUFFIX_LENGTH = 6;
380
- function generateSubagentFallbackName(id, index) {
381
- return `subagent-${id.length > SUBAGENT_ID_SUFFIX_LENGTH ? id.slice(-SUBAGENT_ID_SUFFIX_LENGTH) : index}`;
382
- }
383
- function resolveSubagentChildName(input) {
384
- return String(input.description || input.subagent_type || "subagent").slice(0, CHILD_NAME_MAX);
385
- }
386
- var SYSTEM_CONTENT_PREFIXES = [
387
- "This session is being continued",
388
- "<ide_",
389
- "<system-reminder",
390
- "<available-deferred-tools",
391
- "<command-name"
392
- ];
393
-
394
399
  // extension/src/tool-summarizer.ts
395
400
  function tailPath(filePath, segments = 2) {
396
401
  return String(filePath).split("/").slice(-segments).join("/");
@@ -619,6 +624,10 @@ function estimateTokenCost(toolName, result) {
619
624
  // extension/src/logger.ts
620
625
  var LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
621
626
  var minLevel = "info";
627
+ function setLogLevel(level) {
628
+ if (level in LOG_LEVELS)
629
+ minLevel = level;
630
+ }
622
631
  function shouldLog(level) {
623
632
  return (LOG_LEVELS[level] ?? 0) >= (LOG_LEVELS[minLevel] ?? 0);
624
633
  }
@@ -1600,6 +1609,11 @@ var MAX_EVENT_BUFFER = 5e3;
1600
1609
  var DISCOVERY_DIR = path2.join(os.homedir(), ".claude", "agent-flow");
1601
1610
  var CLAUDE_DIR = path2.join(os.homedir(), ".claude", "projects");
1602
1611
  var relayCreated = false;
1612
+ var verbose = false;
1613
+ function log4(...args2) {
1614
+ if (verbose)
1615
+ console.log(...args2);
1616
+ }
1603
1617
  var sseClients = /* @__PURE__ */ new Set();
1604
1618
  function sendSSE(res, data) {
1605
1619
  try {
@@ -1624,7 +1638,7 @@ function broadcast(data) {
1624
1638
  var eventBuffer = /* @__PURE__ */ new Map();
1625
1639
  function broadcastEvent(event) {
1626
1640
  const sid = event.sessionId?.slice(0, SESSION_ID_DISPLAY) || "?";
1627
- console.log(`[event] ${event.type} (session ${sid})`);
1641
+ log4(`[event] ${event.type} (session ${sid})`);
1628
1642
  if (event.sessionId) {
1629
1643
  let buf = eventBuffer.get(event.sessionId) || [];
1630
1644
  buf.push(event);
@@ -1703,7 +1717,7 @@ function resetInactivityTimer(sessionId) {
1703
1717
  clearTimeout(session.inactivityTimer);
1704
1718
  session.inactivityTimer = setTimeout(() => {
1705
1719
  if (!session.sessionCompleted && session.sessionDetected) {
1706
- console.log(`[session] ${sessionId.slice(0, SESSION_ID_DISPLAY)} inactive`);
1720
+ log4(`[session] ${sessionId.slice(0, SESSION_ID_DISPLAY)} inactive`);
1707
1721
  session.sessionCompleted = true;
1708
1722
  broadcastEvent({
1709
1723
  time: elapsed(sessionId),
@@ -1772,7 +1786,7 @@ function watchSession(sessionId, filePath) {
1772
1786
  session.subagentsDir = path2.join(path2.dirname(filePath), sessionId, "subagents");
1773
1787
  scanSubagentsDir(watcherDelegate, parser, sessionId);
1774
1788
  resetInactivityTimer(sessionId);
1775
- console.log(`[session] Watching ${sessionId.slice(0, SESSION_ID_DISPLAY)} \u2014 "${session.label}"`);
1789
+ log4(`[session] Watching ${sessionId.slice(0, SESSION_ID_DISPLAY)} \u2014 "${session.label}"`);
1776
1790
  }
1777
1791
  function readNewLines(sessionId) {
1778
1792
  const session = sessions.get(sessionId);
@@ -1873,7 +1887,11 @@ function removeDiscoveryFile() {
1873
1887
  }
1874
1888
  }
1875
1889
  }
1876
- async function createRelay(workspace) {
1890
+ async function createRelay(options) {
1891
+ const { workspace } = options;
1892
+ verbose = options.verbose ?? false;
1893
+ if (!verbose)
1894
+ setLogLevel("error");
1877
1895
  if (relayCreated) {
1878
1896
  throw new Error("createRelay() can only be called once per process");
1879
1897
  }
@@ -1916,10 +1934,10 @@ async function createRelay(workspace) {
1916
1934
  "Connection": "keep-alive"
1917
1935
  });
1918
1936
  sseClients.add(res);
1919
- console.log(`[sse] Client connected (${sseClients.size} total)`);
1937
+ log4(`[sse] Client connected (${sseClients.size} total)`);
1920
1938
  req.on("close", () => {
1921
1939
  sseClients.delete(res);
1922
- console.log(`[sse] Client disconnected (${sseClients.size} total)`);
1940
+ log4(`[sse] Client disconnected (${sseClients.size} total)`);
1923
1941
  });
1924
1942
  const sessionList = [];
1925
1943
  for (const session of sessions.values()) {
@@ -2023,7 +2041,7 @@ function serveStatic(req, res) {
2023
2041
  // app/src/server.ts
2024
2042
  async function startServer(options) {
2025
2043
  const { port, openBrowser, workspace } = options;
2026
- const relay = await createRelay(workspace);
2044
+ const relay = await createRelay({ workspace, verbose: options.verbose });
2027
2045
  const server = http2.createServer((req, res) => {
2028
2046
  if (req.url === "/events") {
2029
2047
  return relay.handleSSE(req, res);
@@ -2049,7 +2067,6 @@ async function startServer(options) {
2049
2067
  }
2050
2068
  process.on("SIGINT", cleanup);
2051
2069
  process.on("SIGTERM", cleanup);
2052
- process.on("exit", () => relay.dispose());
2053
2070
  }
2054
2071
  function openURL(url) {
2055
2072
  if (process.platform === "win32") {
@@ -2068,5 +2085,6 @@ console.log("Agent Flow\n");
2068
2085
  startServer({
2069
2086
  port: args.port,
2070
2087
  openBrowser: args.open,
2071
- workspace: process.cwd()
2088
+ workspace: process.cwd(),
2089
+ verbose: args.verbose
2072
2090
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-flow-app",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Real-time visualization of AI agent orchestration — standalone web app",
5
5
  "bin": {
6
6
  "agent-flow": "dist/app.js"