agent-flow-app 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.js +83 -65
- 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 =
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
1937
|
+
log4(`[sse] Client connected (${sseClients.size} total)`);
|
|
1920
1938
|
req.on("close", () => {
|
|
1921
1939
|
sseClients.delete(res);
|
|
1922
|
-
|
|
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
|
});
|