botmux 2.85.1 → 2.86.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/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +209 -1
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +7 -106
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +240 -2
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/role-resolver.d.ts +1 -0
- package/dist/core/role-resolver.d.ts.map +1 -1
- package/dist/core/role-resolver.js +14 -0
- package/dist/core/role-resolver.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +15 -4
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +116 -0
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/groups.d.ts +2 -0
- package/dist/dashboard/web/groups.d.ts.map +1 -1
- package/dist/dashboard/web/groups.js +419 -3
- package/dist/dashboard/web/groups.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +617 -3
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/insights.d.ts +2 -0
- package/dist/dashboard/web/insights.d.ts.map +1 -0
- package/dist/dashboard/web/insights.js +1523 -0
- package/dist/dashboard/web/insights.js.map +1 -0
- package/dist/dashboard/web/role-profile-match.d.ts +31 -0
- package/dist/dashboard/web/role-profile-match.d.ts.map +1 -0
- package/dist/dashboard/web/role-profile-match.js +58 -0
- package/dist/dashboard/web/role-profile-match.js.map +1 -0
- package/dist/dashboard/web/roles.d.ts +1 -0
- package/dist/dashboard/web/roles.d.ts.map +1 -1
- package/dist/dashboard/web/roles.js +520 -27
- package/dist/dashboard/web/roles.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +84 -0
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard-web/app.js +1243 -831
- package/dist/dashboard-web/index.html +2 -1
- package/dist/dashboard-web/style.css +1085 -3
- package/dist/dashboard.js +215 -3
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +34 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +34 -1
- package/dist/i18n/zh.js.map +1 -1
- package/dist/services/group-creator.d.ts +6 -0
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +54 -5
- package/dist/services/group-creator.js.map +1 -1
- package/dist/services/insight/antigravity-span-reader.d.ts +3 -0
- package/dist/services/insight/antigravity-span-reader.d.ts.map +1 -0
- package/dist/services/insight/antigravity-span-reader.js +249 -0
- package/dist/services/insight/antigravity-span-reader.js.map +1 -0
- package/dist/services/insight/classify.d.ts +7 -0
- package/dist/services/insight/classify.d.ts.map +1 -0
- package/dist/services/insight/classify.js +46 -0
- package/dist/services/insight/classify.js.map +1 -0
- package/dist/services/insight/claude-span-reader.d.ts +3 -0
- package/dist/services/insight/claude-span-reader.d.ts.map +1 -0
- package/dist/services/insight/claude-span-reader.js +257 -0
- package/dist/services/insight/claude-span-reader.js.map +1 -0
- package/dist/services/insight/codex-span-reader.d.ts +3 -0
- package/dist/services/insight/codex-span-reader.d.ts.map +1 -0
- package/dist/services/insight/codex-span-reader.js +290 -0
- package/dist/services/insight/codex-span-reader.js.map +1 -0
- package/dist/services/insight/intent.d.ts +5 -0
- package/dist/services/insight/intent.d.ts.map +1 -0
- package/dist/services/insight/intent.js +145 -0
- package/dist/services/insight/intent.js.map +1 -0
- package/dist/services/insight/jsonl.d.ts +10 -0
- package/dist/services/insight/jsonl.d.ts.map +1 -0
- package/dist/services/insight/jsonl.js +36 -0
- package/dist/services/insight/jsonl.js.map +1 -0
- package/dist/services/insight/prompt.d.ts +3 -0
- package/dist/services/insight/prompt.d.ts.map +1 -0
- package/dist/services/insight/prompt.js +99 -0
- package/dist/services/insight/prompt.js.map +1 -0
- package/dist/services/insight/redact.d.ts +4 -0
- package/dist/services/insight/redact.d.ts.map +1 -0
- package/dist/services/insight/redact.js +67 -0
- package/dist/services/insight/redact.js.map +1 -0
- package/dist/services/insight/report.d.ts +29 -0
- package/dist/services/insight/report.d.ts.map +1 -0
- package/dist/services/insight/report.js +1126 -0
- package/dist/services/insight/report.js.map +1 -0
- package/dist/services/insight/safe-detail.d.ts +5 -0
- package/dist/services/insight/safe-detail.d.ts.map +1 -0
- package/dist/services/insight/safe-detail.js +59 -0
- package/dist/services/insight/safe-detail.js.map +1 -0
- package/dist/services/insight/scrub.d.ts +22 -0
- package/dist/services/insight/scrub.d.ts.map +1 -0
- package/dist/services/insight/scrub.js +70 -0
- package/dist/services/insight/scrub.js.map +1 -0
- package/dist/services/insight/types.d.ts +394 -0
- package/dist/services/insight/types.d.ts.map +1 -0
- package/dist/services/insight/types.js +2 -0
- package/dist/services/insight/types.js.map +1 -0
- package/dist/services/role-profile-store.d.ts +25 -0
- package/dist/services/role-profile-store.d.ts.map +1 -0
- package/dist/services/role-profile-store.js +171 -0
- package/dist/services/role-profile-store.js.map +1 -0
- package/dist/services/transcript-resolver.d.ts +26 -0
- package/dist/services/transcript-resolver.d.ts.map +1 -0
- package/dist/services/transcript-resolver.js +111 -0
- package/dist/services/transcript-resolver.js.map +1 -0
- package/package.json +1 -1
|
@@ -2,27 +2,12 @@
|
|
|
2
2
|
* Session cost calculator — computes token usage from JSONL logs.
|
|
3
3
|
*/
|
|
4
4
|
import { closeSync, existsSync, openSync, readFileSync, readSync, statSync } from 'node:fs';
|
|
5
|
-
import { join, resolve } from 'node:path';
|
|
6
|
-
import { homedir } from 'node:os';
|
|
7
5
|
import { logger } from '../utils/logger.js';
|
|
8
|
-
import { expandHome } from './working-dir.js';
|
|
9
|
-
import { createCliAdapterSync } from '../adapters/cli/registry.js';
|
|
10
6
|
import { findAidenLatestCheckpointByBotmuxSessionId, findAidenLatestCheckpointBySessionId } from '../services/aiden-checkpoints.js';
|
|
11
|
-
import {
|
|
12
|
-
import { cocoEventsPathForSession } from '../services/coco-transcript.js';
|
|
13
|
-
import { findCursorTranscriptByChatId } from '../services/cursor-transcript.js';
|
|
14
|
-
import { findTraexRolloutBySessionId } from '../services/traex-transcript.js';
|
|
7
|
+
import { __resetTranscriptResolverCacheForTest, cachedTranscriptPathLookup, resolveSessionTranscriptPath, } from '../services/transcript-resolver.js';
|
|
15
8
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
16
9
|
export function getSessionJsonlPath(sessionId, cwd) {
|
|
17
|
-
return
|
|
18
|
-
}
|
|
19
|
-
function getClaudeSessionJsonlPath(sessionId, cwd, dataDir) {
|
|
20
|
-
const resolvedCwd = resolve(expandHome(cwd));
|
|
21
|
-
// Claude stores sessions at ~/.claude/projects/<project-key>/<sessionId>.jsonl
|
|
22
|
-
// where project-key = absolute path with non [A-Za-z0-9-] chars replaced by -
|
|
23
|
-
const projectKey = resolvedCwd.replace(/[^A-Za-z0-9-]/g, '-');
|
|
24
|
-
const jsonlPath = join(dataDir, 'projects', projectKey, `${sessionId}.jsonl`);
|
|
25
|
-
return existsSync(jsonlPath) ? jsonlPath : null;
|
|
10
|
+
return resolveSessionTranscriptPath({ cliId: 'claude-code', sessionId, cwd })?.path ?? null;
|
|
26
11
|
}
|
|
27
12
|
export function getSessionCost(sessionId, cwd) {
|
|
28
13
|
const jsonlPath = getSessionJsonlPath(sessionId, cwd);
|
|
@@ -244,45 +229,12 @@ const USAGE_FILE_CACHE_MAX_ENTRIES = 512;
|
|
|
244
229
|
/** While a transcript keeps changing, serve the cached value and reparse at
|
|
245
230
|
* most once per interval — keeps row composition off the disk. */
|
|
246
231
|
const USAGE_REPARSE_MIN_INTERVAL_MS = 15_000;
|
|
247
|
-
const sessionPathCache = new Map();
|
|
248
|
-
const SESSION_PATH_CACHE_MAX_ENTRIES = 1024;
|
|
249
|
-
/** A missed lookup (transcript not on disk yet) is retried only after this
|
|
250
|
-
* window — fresh sessions otherwise trigger a directory scan per row render. */
|
|
251
|
-
const PATH_MISS_RETRY_MS = 30_000;
|
|
252
232
|
/** Aiden checkpoint paths move as the session progresses (latest.json points
|
|
253
233
|
* at a new checkpoint id per turn), so positive hits expire quickly too. */
|
|
254
234
|
const AIDEN_PATH_HIT_TTL_MS = 15_000;
|
|
255
235
|
export function __resetSessionUsageCachesForTest() {
|
|
256
236
|
usageFileCache.clear();
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
/** Memoize a transcript-path lookup. `hitTtlMs === null` means a found path
|
|
260
|
-
* is trusted forever (rollout/transcript files never move); misses are
|
|
261
|
-
* retried after PATH_MISS_RETRY_MS — or immediately when `retryMiss` is set
|
|
262
|
-
* (ledger reads must see lazily created transcripts at turn boundaries).
|
|
263
|
-
* `refreshHit` additionally re-resolves a cached positive hit — for sources
|
|
264
|
-
* whose path MOVES between turns (aiden checkpoints), a fresh ledger read
|
|
265
|
-
* must not settle for a stale path inside the hit TTL. */
|
|
266
|
-
function cachedPathLookup(key, hitTtlMs, lookup, opts) {
|
|
267
|
-
const now = Date.now();
|
|
268
|
-
const cached = sessionPathCache.get(key);
|
|
269
|
-
if (cached) {
|
|
270
|
-
if (cached.path !== null) {
|
|
271
|
-
if (!opts?.refreshHit && (hitTtlMs === null || now - cached.atMs < hitTtlMs))
|
|
272
|
-
return cached.path;
|
|
273
|
-
}
|
|
274
|
-
else if (!opts?.retryMiss && now - cached.atMs < PATH_MISS_RETRY_MS) {
|
|
275
|
-
return null;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
if (sessionPathCache.size >= SESSION_PATH_CACHE_MAX_ENTRIES && !sessionPathCache.has(key)) {
|
|
279
|
-
const oldest = sessionPathCache.keys().next().value;
|
|
280
|
-
if (oldest !== undefined)
|
|
281
|
-
sessionPathCache.delete(oldest);
|
|
282
|
-
}
|
|
283
|
-
const path = lookup();
|
|
284
|
-
sessionPathCache.set(key, { path, atMs: now });
|
|
285
|
-
return path;
|
|
237
|
+
__resetTranscriptResolverCacheForTest();
|
|
286
238
|
}
|
|
287
239
|
function cloneAggregate(agg) {
|
|
288
240
|
return { ...agg };
|
|
@@ -472,71 +424,20 @@ function readTokenUsageFromAidenCheckpoint(path) {
|
|
|
472
424
|
turns,
|
|
473
425
|
};
|
|
474
426
|
}
|
|
475
|
-
/** Resolve a Claude-family fork's (seed / relay) data root EXACTLY as the worker
|
|
476
|
-
* does, so usage reads hit the same transcript the CLI wrote. The adapter
|
|
477
|
-
* derives the root per-fork (seed → `<pkg>/.claude-runtime`; relay → `~/.relay`,
|
|
478
|
-
* see deriveSeedDataDir / deriveRelayDataDir) and the worker spawns the CLI
|
|
479
|
-
* with `spawnEnv = { CLAUDE_CONFIG_DIR: <that root> }`, which *overrides* any
|
|
480
|
-
* inherited env (worker.ts: process.env first, then adapter.spawnEnv). So a
|
|
481
|
-
* botmux-spawned seed/relay ALWAYS writes to the adapter-derived root —
|
|
482
|
-
* regardless of whether the daemon itself has CLAUDE_CONFIG_DIR set. We must
|
|
483
|
-
* read from the same place; consulting the daemon's own env (the old
|
|
484
|
-
* `process.env.CLAUDE_CONFIG_DIR || ~/.claude-runtime`) would diverge from
|
|
485
|
-
* where the CLI actually wrote. `claudeDataDir` is the single source of truth.
|
|
486
|
-
* Cached so the dashboard read path doesn't shell out (`which`) per refresh.
|
|
487
|
-
*
|
|
488
|
-
* Uses the DEFAULT binary (no per-bot cliPathOverride); a custom path would
|
|
489
|
-
* resolve a different root, but that narrow case was already unsupported here. */
|
|
490
|
-
const claudeForkDataDirCache = new Map();
|
|
491
|
-
function claudeForkDataDir(cliId) {
|
|
492
|
-
const cached = claudeForkDataDirCache.get(cliId);
|
|
493
|
-
if (cached)
|
|
494
|
-
return cached;
|
|
495
|
-
const dir = createCliAdapterSync(cliId).claudeDataDir ?? join(homedir(), '.claude-runtime');
|
|
496
|
-
claudeForkDataDirCache.set(cliId, dir);
|
|
497
|
-
return dir;
|
|
498
|
-
}
|
|
499
|
-
function tokenUsagePathForSession(q) {
|
|
500
|
-
const sid = q.cliSessionId || q.sessionId;
|
|
501
|
-
switch (q.cliId) {
|
|
502
|
-
case 'claude-code':
|
|
503
|
-
return q.cwd ? getClaudeSessionJsonlPath(sid, q.cwd, join(homedir(), '.claude')) : null;
|
|
504
|
-
case 'seed':
|
|
505
|
-
case 'relay':
|
|
506
|
-
return q.cwd ? getClaudeSessionJsonlPath(sid, q.cwd, claudeForkDataDir(q.cliId)) : null;
|
|
507
|
-
case 'codex':
|
|
508
|
-
return cachedPathLookup(`codex:${q.sessionId}:${q.cliSessionId ?? ''}`, null, () => {
|
|
509
|
-
const codexSid = q.cliSessionId || findCodexSessionIdByBotmuxSessionId(q.sessionId) || q.sessionId;
|
|
510
|
-
return findCodexRolloutBySessionId(codexSid) ?? null;
|
|
511
|
-
}, { retryMiss: q.fresh });
|
|
512
|
-
case 'coco':
|
|
513
|
-
return cocoEventsPathForSession(sid);
|
|
514
|
-
case 'cursor':
|
|
515
|
-
return cachedPathLookup(`cursor:${sid}`, null, () => findCursorTranscriptByChatId(sid) ?? null, { retryMiss: q.fresh });
|
|
516
|
-
case 'traex':
|
|
517
|
-
return cachedPathLookup(`traex:${sid}`, null, () => findTraexRolloutBySessionId(sid) ?? null, { retryMiss: q.fresh });
|
|
518
|
-
case 'antigravity':
|
|
519
|
-
return q.cliSessionId
|
|
520
|
-
? join(homedir(), '.gemini', 'antigravity-cli', 'brain', q.cliSessionId, '.system_generated', 'logs', 'transcript.jsonl')
|
|
521
|
-
: null;
|
|
522
|
-
default:
|
|
523
|
-
return null;
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
427
|
export function getSessionTokenUsage(q) {
|
|
527
428
|
if (q.cliId === 'aiden') {
|
|
528
429
|
const sid = q.cliSessionId || q.sessionId;
|
|
529
|
-
const checkpointPath =
|
|
430
|
+
const checkpointPath = cachedTranscriptPathLookup(`aiden:${q.sessionId}:${sid}:${q.cwd ?? ''}`, AIDEN_PATH_HIT_TTL_MS, () => findAidenLatestCheckpointBySessionId(sid, undefined, q.cwd) ??
|
|
530
431
|
findAidenLatestCheckpointByBotmuxSessionId(q.sessionId, undefined, q.cwd) ??
|
|
531
432
|
null, { retryMiss: q.fresh, refreshHit: q.fresh });
|
|
532
433
|
if (!checkpointPath || !existsSync(checkpointPath))
|
|
533
434
|
return null;
|
|
534
435
|
return readSessionTokenUsageFile(checkpointPath, 'aiden', { fresh: q.fresh });
|
|
535
436
|
}
|
|
536
|
-
const
|
|
537
|
-
if (!
|
|
437
|
+
const resolved = resolveSessionTranscriptPath(q);
|
|
438
|
+
if (!resolved || !existsSync(resolved.path))
|
|
538
439
|
return null;
|
|
539
|
-
return readSessionTokenUsageFile(path, usageKindForCli(q.cliId), { fresh: q.fresh });
|
|
440
|
+
return readSessionTokenUsageFile(resolved.path, usageKindForCli(q.cliId), { fresh: q.fresh });
|
|
540
441
|
}
|
|
541
442
|
export function formatNumber(n) {
|
|
542
443
|
return n.toLocaleString('en-US');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-calculator.js","sourceRoot":"","sources":["../../src/core/cost-calculator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cost-calculator.js","sourceRoot":"","sources":["../../src/core/cost-calculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-ipc-server.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-ipc-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAe,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard-ipc-server.d.ts","sourceRoot":"","sources":["../../src/core/dashboard-ipc-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAe,MAAM,WAAW,CAAC;AAqDjG,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAM/E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAE3F;AACD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EAIpB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAiB,cAAc,EAAW,MAAM,aAAa,CAAC;AAI1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,MAAM,OAAO,GAAG,CACpB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAW1B,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAM7E;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAGhF;AAED,wBAAsB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAKhF;AAiBD,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAgC;AAyB7F,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;AAMtD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAA0B;AAKxE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAA0B;AAwhBxE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;CACxB;AAuvBD,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAiC7F"}
|
|
@@ -20,6 +20,7 @@ import * as grantPrefsStore from '../services/grant-prefs-store.js';
|
|
|
20
20
|
import { findConfigField, applyConfigField, coerceConfigValue } from '../services/bot-config-store.js';
|
|
21
21
|
import { config } from '../config.js';
|
|
22
22
|
import { computeSandboxDiff, applySandboxDiff } from '../services/sandbox-land.js';
|
|
23
|
+
import { buildSafeInsightConversation, buildSafeInsightOverview, buildSafeInsightReport, buildSafeInsightTurnDetail } from '../services/insight/report.js';
|
|
23
24
|
import { readRawConfig, findEntryIndex, requireConfigPath } from '../services/config-store.js';
|
|
24
25
|
import { setDefaultLocale, localeForBot, t } from '../i18n/index.js';
|
|
25
26
|
import { isLocale } from '../i18n/types.js';
|
|
@@ -37,7 +38,8 @@ import { locateLimiter } from './dashboard-locate.js';
|
|
|
37
38
|
import { buildTerminalUrl } from './terminal-url.js';
|
|
38
39
|
import { dashboardEventBus } from './dashboard-events.js';
|
|
39
40
|
import { validateWorkingDir } from './working-dir.js';
|
|
40
|
-
import { resolveRoleFile, writeRoleFile, deleteRoleFile } from './role-resolver.js';
|
|
41
|
+
import { isValidRoleChatId, resolveRole, resolveRoleFile, writeRoleFile, deleteRoleFile } from './role-resolver.js';
|
|
42
|
+
import { deleteRoleProfileEntry, deleteRoleProfileIfEmpty, isValidRoleProfileId, listRoleProfileEntries, listRoleProfiles, MAX_ROLE_PROFILE_ENTRY_BYTES, readRoleProfileEntry, writeRoleProfileEntry, } from '../services/role-profile-store.js';
|
|
41
43
|
import { triggerSessionTurn } from './trigger-session.js';
|
|
42
44
|
import { triggerWorkflowFromEnvelope } from '../workflows/trigger-from-envelope.js';
|
|
43
45
|
import { validateTriggerRequest } from '../services/trigger-types.js';
|
|
@@ -231,6 +233,105 @@ ipcRoute('GET', '/api/sessions/:sessionId/history', async (req, res, params) =>
|
|
|
231
233
|
jsonRes(res, 502, { ok: false, error: String(err?.message ?? err) });
|
|
232
234
|
}
|
|
233
235
|
});
|
|
236
|
+
// 会话 insight:只读解析本会话的 transcript,产出动作 span / 失败聚合 / 规则建议
|
|
237
|
+
// (SafeInsightReport)。底层 services/insight 已做 fail-closed 脱敏投影——raw 命令
|
|
238
|
+
// 与输出永不进结构。detail=summary 只返聚合+建议(/insight 卡片、抽屉概览用);
|
|
239
|
+
// detail=spans 才带脱敏 span(详情 tab 用)。owner-only 由 dashboard 外层 authed-only
|
|
240
|
+
// 路由 + /insight 命令层把关,IPC 自身 loopback-trusted。
|
|
241
|
+
ipcRoute('GET', '/api/sessions/:sessionId/insight', (req, res, params) => {
|
|
242
|
+
const session = findSessionRecord(params.sessionId);
|
|
243
|
+
if (!session)
|
|
244
|
+
return jsonRes(res, 404, { ok: false, error: 'session_not_found' });
|
|
245
|
+
const url = new URL(req.url ?? '/', 'http://localhost');
|
|
246
|
+
if (url.searchParams.get('detail') === 'conversation') {
|
|
247
|
+
const offset = parseInt(url.searchParams.get('offset') ?? '0', 10) || 0;
|
|
248
|
+
const limit = parseInt(url.searchParams.get('limit') ?? '50', 10) || 50;
|
|
249
|
+
const role = url.searchParams.get('role');
|
|
250
|
+
const severity = url.searchParams.get('severity');
|
|
251
|
+
const tag = url.searchParams.get('tag');
|
|
252
|
+
const turnIndexes = url.searchParams.getAll('turnIndexes')
|
|
253
|
+
.flatMap(v => v.split(','))
|
|
254
|
+
.map(v => parseInt(v, 10))
|
|
255
|
+
.filter(Number.isFinite);
|
|
256
|
+
const conversation = buildSafeInsightConversation({
|
|
257
|
+
cliId: session.cliId ?? 'unknown',
|
|
258
|
+
sessionId: session.sessionId,
|
|
259
|
+
cliSessionId: session.cliSessionId,
|
|
260
|
+
cwd: session.workingDir,
|
|
261
|
+
}, {
|
|
262
|
+
offset,
|
|
263
|
+
limit,
|
|
264
|
+
q: url.searchParams.get('q') ?? undefined,
|
|
265
|
+
role: role && ['user', 'a2a_agent', 'system', 'agent'].includes(role) ? role : undefined,
|
|
266
|
+
severity: severity && ['bad', 'warn', 'info'].includes(severity) ? severity : undefined,
|
|
267
|
+
tag: tag && ['failure', 'slow', 'retry', 'read_write_imbalance', 'diagnostic', 'normal'].includes(tag) ? tag : undefined,
|
|
268
|
+
turnIndexes: turnIndexes.length ? turnIndexes : undefined,
|
|
269
|
+
});
|
|
270
|
+
return jsonRes(res, 200, { ok: true, conversation });
|
|
271
|
+
}
|
|
272
|
+
const detail = url.searchParams.get('detail') === 'spans' ? 'spans' : 'summary';
|
|
273
|
+
try {
|
|
274
|
+
const report = buildSafeInsightReport({
|
|
275
|
+
cliId: session.cliId ?? 'unknown',
|
|
276
|
+
sessionId: session.sessionId,
|
|
277
|
+
cliSessionId: session.cliSessionId,
|
|
278
|
+
cwd: session.workingDir,
|
|
279
|
+
}, { detail });
|
|
280
|
+
jsonRes(res, 200, { ok: true, report });
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
jsonRes(res, 500, { ok: false, error: String(err?.message ?? err) });
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
ipcRoute('GET', '/api/sessions/:sessionId/insight/turn/:turnIndex', (req, res, params) => {
|
|
287
|
+
const session = findSessionRecord(params.sessionId);
|
|
288
|
+
if (!session)
|
|
289
|
+
return jsonRes(res, 404, { ok: false, error: 'session_not_found' });
|
|
290
|
+
const url = new URL(req.url ?? '/', 'http://localhost');
|
|
291
|
+
const offset = parseInt(url.searchParams.get('offset') ?? '0', 10) || 0;
|
|
292
|
+
const limit = parseInt(url.searchParams.get('limit') ?? '4000', 10) || 4000;
|
|
293
|
+
try {
|
|
294
|
+
const turn = buildSafeInsightTurnDetail({
|
|
295
|
+
cliId: session.cliId ?? 'unknown',
|
|
296
|
+
sessionId: session.sessionId,
|
|
297
|
+
cliSessionId: session.cliSessionId,
|
|
298
|
+
cwd: session.workingDir,
|
|
299
|
+
}, parseInt(params.turnIndex, 10) || 0, { offset, limit });
|
|
300
|
+
jsonRes(res, 200, { ok: true, turn });
|
|
301
|
+
}
|
|
302
|
+
catch (err) {
|
|
303
|
+
jsonRes(res, 500, { ok: false, error: String(err?.message ?? err) });
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
// 跨会话 insight 总览:仍然只读、按需、owner-only(外层 dashboard route
|
|
307
|
+
// 不在 public-read 白名单)。只聚合本 daemon registry 里的 botmux 会话;
|
|
308
|
+
// 不扫整机 transcript,不返回 raw span/input/output。
|
|
309
|
+
ipcRoute('GET', '/api/insights/summary', async (req, res) => {
|
|
310
|
+
const url = new URL(req.url ?? '/', 'http://localhost');
|
|
311
|
+
const limit = Math.min(Math.max(parseInt(url.searchParams.get('limit') ?? '200', 10) || 200, 1), 500);
|
|
312
|
+
const active = listActiveSessions().map(composeRowFromActive);
|
|
313
|
+
const activeIds = new Set(active.map(r => r.sessionId));
|
|
314
|
+
const closed = sessionStore.listSessions()
|
|
315
|
+
.filter(s => s.status === 'closed' && !activeIds.has(s.sessionId))
|
|
316
|
+
.map(composeRowFromClosed);
|
|
317
|
+
const rows = [...active, ...closed];
|
|
318
|
+
const overview = await buildSafeInsightOverview(rows.map(row => {
|
|
319
|
+
const session = findSessionRecord(row.sessionId);
|
|
320
|
+
return {
|
|
321
|
+
cliId: row.cliId,
|
|
322
|
+
sessionId: row.sessionId,
|
|
323
|
+
cliSessionId: session?.cliSessionId,
|
|
324
|
+
cwd: row.workingDir,
|
|
325
|
+
workingDir: row.workingDir,
|
|
326
|
+
title: row.title,
|
|
327
|
+
botName: row.botName,
|
|
328
|
+
larkAppId: row.larkAppId,
|
|
329
|
+
status: row.status,
|
|
330
|
+
lastMessageAt: row.lastMessageAt,
|
|
331
|
+
};
|
|
332
|
+
}), { limit });
|
|
333
|
+
jsonRes(res, 200, { ok: true, overview });
|
|
334
|
+
});
|
|
234
335
|
// 部署 owner 的资料(名字 + 头像)——dashboard 左上角和历史弹窗展示「我」。
|
|
235
336
|
// owner 身份来自 deployment identity(ownerUnionId),头像经 contact API 查询
|
|
236
337
|
// (带缓存);未绑定 owner 或查不到时回退名字/null。
|
|
@@ -753,23 +854,32 @@ ipcRoute('DELETE', '/api/oncall/:chatId', async (_req, res, p) => {
|
|
|
753
854
|
jsonRes(res, 200, { ok: true, wasBound: r.wasBound });
|
|
754
855
|
});
|
|
755
856
|
// ─── Role management (dashboard) ───────────────────────────────────────────
|
|
756
|
-
// GET /api/roles/:chatId → { chatId, content, byteLength }
|
|
857
|
+
// GET /api/roles/:chatId → { chatId, content, byteLength, effectiveContent, effectiveSource }
|
|
757
858
|
// PUT /api/roles/:chatId body: {content} → write role file
|
|
758
859
|
// DELETE /api/roles/:chatId → remove role file
|
|
759
860
|
ipcRoute('GET', '/api/roles/:chatId', async (_req, res, p) => {
|
|
760
861
|
if (!cachedLarkAppId)
|
|
761
862
|
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
863
|
+
if (!isValidRoleChatId(p.chatId))
|
|
864
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_chat_id' });
|
|
762
865
|
const content = resolveRoleFile(cachedLarkAppId, p.chatId);
|
|
866
|
+
const effective = resolveRole(cachedLarkAppId, p.chatId);
|
|
763
867
|
jsonRes(res, 200, {
|
|
764
868
|
chatId: p.chatId,
|
|
765
869
|
content,
|
|
766
870
|
byteLength: content ? Buffer.byteLength(content, 'utf-8') : 0,
|
|
767
871
|
hasRole: content !== null,
|
|
872
|
+
effectiveContent: effective.content,
|
|
873
|
+
effectiveSource: effective.source,
|
|
874
|
+
effectiveByteLength: effective.content ? Buffer.byteLength(effective.content, 'utf-8') : 0,
|
|
875
|
+
hasEffectiveRole: effective.content !== null,
|
|
768
876
|
});
|
|
769
877
|
});
|
|
770
878
|
ipcRoute('PUT', '/api/roles/:chatId', async (req, res, p) => {
|
|
771
879
|
if (!cachedLarkAppId)
|
|
772
880
|
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
881
|
+
if (!isValidRoleChatId(p.chatId))
|
|
882
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_chat_id' });
|
|
773
883
|
let body;
|
|
774
884
|
try {
|
|
775
885
|
body = await readJsonBody(req);
|
|
@@ -791,9 +901,130 @@ ipcRoute('PUT', '/api/roles/:chatId', async (req, res, p) => {
|
|
|
791
901
|
ipcRoute('DELETE', '/api/roles/:chatId', async (_req, res, p) => {
|
|
792
902
|
if (!cachedLarkAppId)
|
|
793
903
|
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
904
|
+
if (!isValidRoleChatId(p.chatId))
|
|
905
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_chat_id' });
|
|
794
906
|
const existed = deleteRoleFile(cachedLarkAppId, p.chatId);
|
|
795
907
|
jsonRes(res, 200, { ok: true, existed });
|
|
796
908
|
});
|
|
909
|
+
// ─── Role profile management (dashboard) ──────────────────────────────────
|
|
910
|
+
// Profiles are authoring/storage helpers only; applying one writes this bot's
|
|
911
|
+
// entry into the selected chat role and does not alter runtime role layering.
|
|
912
|
+
ipcRoute('GET', '/api/role-profiles', async (_req, res) => {
|
|
913
|
+
if (!cachedLarkAppId)
|
|
914
|
+
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
915
|
+
const profiles = listRoleProfiles(config.session.dataDir).map(p => ({
|
|
916
|
+
...p,
|
|
917
|
+
hasCurrentBotEntry: readRoleProfileEntry(config.session.dataDir, p.profileId, cachedLarkAppId) !== null,
|
|
918
|
+
}));
|
|
919
|
+
jsonRes(res, 200, { profiles, larkAppId: cachedLarkAppId });
|
|
920
|
+
});
|
|
921
|
+
ipcRoute('GET', '/api/role-profiles/:profileId', async (_req, res, p) => {
|
|
922
|
+
if (!cachedLarkAppId)
|
|
923
|
+
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
924
|
+
if (!isValidRoleProfileId(p.profileId))
|
|
925
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_role_profile_id' });
|
|
926
|
+
const entries = listRoleProfileEntries(config.session.dataDir, p.profileId);
|
|
927
|
+
jsonRes(res, 200, { profileId: p.profileId, entries });
|
|
928
|
+
});
|
|
929
|
+
ipcRoute('GET', '/api/role-profiles/:profileId/:larkAppId', async (_req, res, p) => {
|
|
930
|
+
if (!cachedLarkAppId)
|
|
931
|
+
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
932
|
+
if (p.larkAppId !== cachedLarkAppId)
|
|
933
|
+
return jsonRes(res, 403, { ok: false, error: 'wrong_daemon' });
|
|
934
|
+
if (!isValidRoleProfileId(p.profileId))
|
|
935
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_role_profile_id' });
|
|
936
|
+
const content = readRoleProfileEntry(config.session.dataDir, p.profileId, cachedLarkAppId);
|
|
937
|
+
jsonRes(res, 200, {
|
|
938
|
+
profileId: p.profileId,
|
|
939
|
+
larkAppId: cachedLarkAppId,
|
|
940
|
+
content,
|
|
941
|
+
byteLength: content ? Buffer.byteLength(content, 'utf-8') : 0,
|
|
942
|
+
hasEntry: content !== null,
|
|
943
|
+
});
|
|
944
|
+
});
|
|
945
|
+
ipcRoute('PUT', '/api/role-profiles/:profileId/:larkAppId', async (req, res, p) => {
|
|
946
|
+
if (!cachedLarkAppId)
|
|
947
|
+
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
948
|
+
if (p.larkAppId !== cachedLarkAppId)
|
|
949
|
+
return jsonRes(res, 403, { ok: false, error: 'wrong_daemon' });
|
|
950
|
+
if (!isValidRoleProfileId(p.profileId))
|
|
951
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_role_profile_id' });
|
|
952
|
+
let body;
|
|
953
|
+
try {
|
|
954
|
+
body = await readJsonBody(req);
|
|
955
|
+
}
|
|
956
|
+
catch {
|
|
957
|
+
return jsonRes(res, 400, { ok: false, error: 'bad_json' });
|
|
958
|
+
}
|
|
959
|
+
const content = typeof body.content === 'string' ? body.content.trim() : '';
|
|
960
|
+
const allowEmpty = body.allowEmpty === true;
|
|
961
|
+
if (!content && !allowEmpty)
|
|
962
|
+
return jsonRes(res, 400, { ok: false, error: 'content_required' });
|
|
963
|
+
try {
|
|
964
|
+
writeRoleProfileEntry(config.session.dataDir, p.profileId, cachedLarkAppId, content, { allowEmpty });
|
|
965
|
+
jsonRes(res, 200, { ok: true, byteLength: Math.min(Buffer.byteLength(content, 'utf-8'), MAX_ROLE_PROFILE_ENTRY_BYTES) });
|
|
966
|
+
}
|
|
967
|
+
catch (e) {
|
|
968
|
+
jsonRes(res, 500, { ok: false, error: String(e) });
|
|
969
|
+
}
|
|
970
|
+
});
|
|
971
|
+
ipcRoute('DELETE', '/api/role-profiles/:profileId/:larkAppId', async (_req, res, p) => {
|
|
972
|
+
if (!cachedLarkAppId)
|
|
973
|
+
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
974
|
+
if (p.larkAppId !== cachedLarkAppId)
|
|
975
|
+
return jsonRes(res, 403, { ok: false, error: 'wrong_daemon' });
|
|
976
|
+
if (!isValidRoleProfileId(p.profileId))
|
|
977
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_role_profile_id' });
|
|
978
|
+
const existed = deleteRoleProfileEntry(config.session.dataDir, p.profileId, cachedLarkAppId);
|
|
979
|
+
deleteRoleProfileIfEmpty(config.session.dataDir, p.profileId);
|
|
980
|
+
jsonRes(res, 200, { ok: true, existed });
|
|
981
|
+
});
|
|
982
|
+
ipcRoute('POST', '/api/role-profiles/:profileId/apply', async (req, res, p) => {
|
|
983
|
+
if (!cachedLarkAppId)
|
|
984
|
+
return jsonRes(res, 503, { error: 'larkAppId_not_set' });
|
|
985
|
+
if (!isValidRoleProfileId(p.profileId))
|
|
986
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_role_profile_id' });
|
|
987
|
+
let body;
|
|
988
|
+
try {
|
|
989
|
+
body = await readJsonBody(req);
|
|
990
|
+
}
|
|
991
|
+
catch {
|
|
992
|
+
return jsonRes(res, 400, { ok: false, error: 'bad_json' });
|
|
993
|
+
}
|
|
994
|
+
const chatId = typeof body.chatId === 'string' && body.chatId.trim() ? body.chatId.trim() : '';
|
|
995
|
+
const larkAppId = typeof body.larkAppId === 'string' && body.larkAppId.trim() ? body.larkAppId.trim() : '';
|
|
996
|
+
if (!chatId || !larkAppId)
|
|
997
|
+
return jsonRes(res, 400, { ok: false, error: 'chatId_and_larkAppId_required' });
|
|
998
|
+
if (!isValidRoleChatId(chatId))
|
|
999
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_chat_id' });
|
|
1000
|
+
if (larkAppId !== cachedLarkAppId)
|
|
1001
|
+
return jsonRes(res, 403, { ok: false, error: 'wrong_daemon' });
|
|
1002
|
+
const content = readRoleProfileEntry(config.session.dataDir, p.profileId, cachedLarkAppId);
|
|
1003
|
+
if (content === null)
|
|
1004
|
+
return jsonRes(res, 200, { ok: false, error: 'missing_entry', changed: false });
|
|
1005
|
+
const existing = resolveRoleFile(cachedLarkAppId, chatId);
|
|
1006
|
+
const preview = body.preview === true;
|
|
1007
|
+
const force = body.force === true;
|
|
1008
|
+
if (preview) {
|
|
1009
|
+
return jsonRes(res, 200, {
|
|
1010
|
+
ok: true,
|
|
1011
|
+
preview: true,
|
|
1012
|
+
changed: false,
|
|
1013
|
+
wouldOverwrite: existing !== null,
|
|
1014
|
+
wouldRefuse: existing !== null && !force,
|
|
1015
|
+
content,
|
|
1016
|
+
byteLength: Buffer.byteLength(content, 'utf-8'),
|
|
1017
|
+
});
|
|
1018
|
+
}
|
|
1019
|
+
if (existing && !force)
|
|
1020
|
+
return jsonRes(res, 409, { ok: false, error: 'chat_role_exists', changed: false });
|
|
1021
|
+
if (!content) {
|
|
1022
|
+
const existed = deleteRoleFile(cachedLarkAppId, chatId);
|
|
1023
|
+
return jsonRes(res, 200, { ok: true, changed: existed, byteLength: 0, deleted: existed });
|
|
1024
|
+
}
|
|
1025
|
+
writeRoleFile(cachedLarkAppId, chatId, content);
|
|
1026
|
+
jsonRes(res, 200, { ok: true, changed: true, byteLength: Buffer.byteLength(content, 'utf-8') });
|
|
1027
|
+
});
|
|
797
1028
|
// ─── Per-bot defaultOncall (dashboard) ─────────────────────────────────────
|
|
798
1029
|
// GET /api/bot-default-oncall → returns this daemon's current config
|
|
799
1030
|
// PUT /api/bot-default-oncall body: { enabled, workingDir }
|
|
@@ -1219,6 +1450,12 @@ ipcRoute('POST', '/api/groups/create', async (req, res) => {
|
|
|
1219
1450
|
const notifyTo = typeof body.notifyOwnerOpenId === 'string' && body.notifyOwnerOpenId.trim()
|
|
1220
1451
|
? body.notifyOwnerOpenId.trim()
|
|
1221
1452
|
: null;
|
|
1453
|
+
const roleProfileId = typeof body.roleProfileId === 'string' && body.roleProfileId.trim()
|
|
1454
|
+
? body.roleProfileId.trim()
|
|
1455
|
+
: null;
|
|
1456
|
+
if (roleProfileId && !isValidRoleProfileId(roleProfileId)) {
|
|
1457
|
+
return jsonRes(res, 400, { ok: false, error: 'invalid_role_profile_id' });
|
|
1458
|
+
}
|
|
1222
1459
|
const bindWorkingDir = typeof body.bindWorkingDir === 'string' ? body.bindWorkingDir.trim() : '';
|
|
1223
1460
|
let bindResolvedPath;
|
|
1224
1461
|
if (bindWorkingDir) {
|
|
@@ -1237,6 +1474,7 @@ ipcRoute('POST', '/api/groups/create', async (req, res) => {
|
|
|
1237
1474
|
transferOwnerTo: transferTo ?? undefined,
|
|
1238
1475
|
notifyOwnerOpenId: notifyTo ?? undefined,
|
|
1239
1476
|
bindWorkingDir: bindWorkingDir || undefined,
|
|
1477
|
+
roleProfileId: roleProfileId ?? undefined,
|
|
1240
1478
|
});
|
|
1241
1479
|
jsonRes(res, 200, bindResolvedPath ? { ...r, bindResolvedPath } : r);
|
|
1242
1480
|
}
|