@rubytech/create-realagent-code 0.1.12 → 0.1.14
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/package.json +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +228 -10
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +23 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +131 -6
- package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/url-capture.js +27 -15
- package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -1
- package/payload/server/public/assets/{Checkbox-D5bsL5IO.js → Checkbox-B1pi98Yw.js} +1 -1
- package/payload/server/public/assets/admin-ssJWtqVX.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C1Y8LkQn.js → architectureDiagram-Q4EWVU46-CYRT-hpJ.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DVWDZ5Od.js → blockDiagram-DXYQGD6D-Cn4D-jj8.js} +1 -1
- package/payload/server/public/assets/brand-D5k27KTB.js +1 -0
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BABaPulo.js → c4Diagram-AHTNJAMY-B9mQuKey.js} +1 -1
- package/payload/server/public/assets/channel-UyGQO49u.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-D8PM_LLD.js → chunk-336JU56O-_pHU1qs5.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-CPoMPNv-.js → chunk-426QAEUC-CJZBrpsW.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-DP7aaNeo.js → chunk-4TB4RGXK-CbdaQqED.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-BcEh8cqP.js → chunk-5FUZZQ4R-BHysGjPk.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-hlKOVg7k.js → chunk-5PVQY5BW-DwaJjlmQ.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-Clrj1-TK.js → chunk-EDXVE4YY-B5BtxUCu.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-DZ5oQwfW.js → chunk-ENJZ2VHE-Ehw_u_kr.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-DcYVBL08.js → chunk-ICPOFSXX-9pglSmm0.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-DYCm2d-j.js → chunk-OYMX7WX6-BYoXj_GS.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-DlMSsedr.js → chunk-U2HBQHQK-DY4UKSFX.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-BFgTiODq.js → chunk-X2U36JSP-nyvIphWC.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-Dl7Za-fK.js → chunk-YZCP3GAM-CwzhK7B_.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-DKJc-jnu.js → chunk-ZZ45TVLE-B3MIjbjy.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CnuEj2MV.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-C4euVG7i.js +1 -0
- package/payload/server/public/assets/clone-B6jQ4sQM.js +1 -0
- package/payload/server/public/assets/{dagre-BxZW6uVc.js → dagre-DmBM0gAU.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-DN0hRCmB.js → dagre-KV5264BT-BMF41iDw.js} +1 -1
- package/payload/server/public/assets/{data-DDIV_NMI.js → data-iCamt21J.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-BlN4_Net.js → diagram-5BDNPKRD-BlZco72d.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-Dl3YdJ94.js → diagram-G4DWMVQ6-DXhz1tn9.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-BhoYZ30j.js → diagram-MMDJMWI5-CjOK1TqX.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CgD2xqpO.js → diagram-TYMM5635-BLIfhJl_.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-D_4k-P_W.js → erDiagram-SMLLAGMA-BNvNebXl.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-C44HDuS2.js → flowDiagram-DWJPFMVM-CiiSkoYl.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Iprqq6jm.js → ganttDiagram-T4ZO3ILL-ojBwmxzi.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BNsuI5pf.js → gitGraphDiagram-UUTBAWPF-8r-vQIcq.js} +1 -1
- package/payload/server/public/assets/{graph-BhRpEpY1.js → graph-BsnHbm-w.js} +2 -2
- package/payload/server/public/assets/{graph-labels-CRmMK2-3.js → graph-labels-SjQPr62q.js} +1 -1
- package/payload/server/public/assets/{graphlib-00nEx5zd.js → graphlib-3qtLnRUJ.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-B05WrcQr.js → infoDiagram-42DDH7IO-DizGoC2U.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-Cjj-8sq-.js → ishikawaDiagram-UXIWVN3A-CoW4eBMG.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CE4zSJ_e.js → journeyDiagram-VCZTEJTY-D8ZCMlkd.js} +1 -1
- package/payload/server/public/assets/{jsx-runtime-orvUHz-c.css → jsx-runtime-CApIe6zc.css} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-vp1k55Vn.js → kanban-definition-6JOO6SKY-B7nGgL6n.js} +1 -1
- package/payload/server/public/assets/{line-DtgVCBmE.js → line-Df-cEDRK.js} +1 -1
- package/payload/server/public/assets/loader-circle-BXQvNcaV.js +1 -0
- package/payload/server/public/assets/{mermaid-parser.core-BLkF5CWy.js → mermaid-parser.core-BdS1yEBX.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-D8Ai1Ihc.js → mermaid.core-OrDOOKvo.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BBS2-egG.js → mindmap-definition-QFDTVHPH-DkGEftRu.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-D-YJ1TY9.js → pieDiagram-DEJITSTG-DjprDutI.js} +1 -1
- package/payload/server/public/assets/{public-Dlu50BWH.js → public-pA0tltHd.js} +5 -5
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CG-vUnZ2.js → quadrantDiagram-34T5L4WZ-DWaFd6rk.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-BU8DU7cT.js → requirementDiagram-MS252O5E-ZRZYYyme.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BD2Pv-fW.js → sankeyDiagram-XADWPNL6-C0BciP0t.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BNf_xS4I.js → sequenceDiagram-FGHM5R23-AjMIXRyo.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-KWX_egpr.js → stateDiagram-FHFEXIEX-Cdc5UYUG.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DKxHNlxN.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CZlun2e8.js → timeline-definition-GMOUNBTQ-CG7brXpR.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-ChgSQa6t.js → vennDiagram-DHZGUBPP-BdptqViO.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-kwRFhj3v.js → wardleyDiagram-NUSXRM2D-iDZMov2l.js} +1 -1
- package/payload/server/public/assets/{refresh-cw-Ho-xY4LQ.js → x-CFSf6g--.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-JaRJKECe.js → xychartDiagram-5P7HB3ND-dwPbxhbs.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +7 -7
- package/payload/server/public/index.html +7 -7
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +30 -1
- package/payload/server/public/assets/admin-Jg-kYJ64.js +0 -1
- package/payload/server/public/assets/brand-29DyfElX.js +0 -1
- package/payload/server/public/assets/channel-ClhfXesY.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CNuIn78n.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cxc_1DZI.js +0 -1
- package/payload/server/public/assets/clone-BnZ9qP0T.js +0 -1
- package/payload/server/public/assets/loader-circle-DwwVih2K.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-661rM-JV.js +0 -1
- /package/payload/server/public/assets/{jsx-runtime-LncohCxF.js → jsx-runtime-DS_YWdGF.js} +0 -0
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAiBpF,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IACxD,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAkFD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAiXjD"}
|
|
@@ -5,25 +5,48 @@
|
|
|
5
5
|
// Routes:
|
|
6
6
|
// POST /spawn { senderId, role, channel } -> Session
|
|
7
7
|
// GET /list?senderId=... -> Session[]
|
|
8
|
+
// POST /resume { senderId, role, channel, claudeSessionId } -> Session
|
|
8
9
|
// DELETE /:sessionId -> 204
|
|
10
|
+
// DELETE /:sessionId?purge=1 -> 204 (hard-removes JSONL + sidecar); 409 if PTY alive
|
|
9
11
|
// POST /:sessionId/input { text }
|
|
10
12
|
// GET /:sessionId/log -> { jsonlPath, sizeBytes, exists }
|
|
11
13
|
// GET /:sessionId/log?follow=1 -> streamed file content (current + new)
|
|
14
|
+
// GET /:sessionId/meta -> SessionMeta payload (Task 023)
|
|
15
|
+
// PATCH /:sessionId { displayName } -> 204 (writes sidecar)
|
|
12
16
|
//
|
|
13
17
|
// The `/log` route returns the path of claude's per-session JSONL transcript
|
|
14
18
|
// (not a manager-written .pty file — that's gone). On a streaming request
|
|
15
19
|
// (?follow=1) the manager opens the file, streams the current bytes, then
|
|
16
20
|
// watches for appends and pushes them as they arrive. On client disconnect
|
|
17
21
|
// the watcher is cleared.
|
|
22
|
+
//
|
|
23
|
+
// Task 023 — sidecar `<id>.meta.json` next to the JSONL holds operator-
|
|
24
|
+
// owned fields (displayName). PATCH writes it; /meta reads it via the
|
|
25
|
+
// enumerator helpers. Sidecar never touches the claude-owned JSONL.
|
|
18
26
|
import { Hono } from 'hono';
|
|
19
27
|
import { stream } from 'hono/streaming';
|
|
20
|
-
import { existsSync, statSync, createReadStream, watchFile, unwatchFile } from 'node:fs';
|
|
28
|
+
import { existsSync, statSync, createReadStream, watchFile, unwatchFile, rmSync, writeFileSync } from 'node:fs';
|
|
21
29
|
import { spawnClaudeSession, deleteSession } from './pty-spawner.js';
|
|
22
|
-
import { listJsonlSessions } from './jsonl-enumerator.js';
|
|
23
|
-
import { claudeSessionIdFromUrl } from './jsonl-path.js';
|
|
30
|
+
import { listJsonlSessions, readJsonlSession, readSidecar, sidecarPathFor } from './jsonl-enumerator.js';
|
|
31
|
+
import { claudeSessionIdFromUrl, claudeStateRoot, projectSlugForCwd } from './jsonl-path.js';
|
|
32
|
+
import { join } from 'node:path';
|
|
24
33
|
const ROLES = ['admin', 'public'];
|
|
25
34
|
const CHANNELS = ['browser', 'whatsapp', 'telegram', 'webchat', 'email'];
|
|
26
|
-
|
|
35
|
+
// Path-traversal guard. Manager sessionIds are randomUUID() (alive rows) or
|
|
36
|
+
// the claude session basename (dehydrated rows: `session_<id>` or bare UUID,
|
|
37
|
+
// per claude's writer). Both fit this shape. Reject anything with `/`, `..`,
|
|
38
|
+
// or out-of-range chars before touching the filesystem.
|
|
39
|
+
const SESSION_ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
|
|
40
|
+
const LIST_TAIL_BYTES = 64 * 1024;
|
|
41
|
+
const DISPLAY_NAME_MAX = 256;
|
|
42
|
+
function liveDisplayName(s, sidecarName) {
|
|
43
|
+
if (sidecarName && sidecarName.trim())
|
|
44
|
+
return sidecarName.trim();
|
|
45
|
+
const cid = s.url ? claudeSessionIdFromUrl(s.url) : null;
|
|
46
|
+
return (cid ?? s.sessionId).slice(0, 8);
|
|
47
|
+
}
|
|
48
|
+
function toLivePayload(s) {
|
|
49
|
+
const sidecar = s.jsonlPath ? readSidecar(s.jsonlPath) : null;
|
|
27
50
|
return {
|
|
28
51
|
sessionId: s.sessionId,
|
|
29
52
|
pid: s.pid,
|
|
@@ -34,11 +57,44 @@ function toSessionPayload(s) {
|
|
|
34
57
|
channel: s.channel,
|
|
35
58
|
jsonlPath: s.jsonlPath,
|
|
36
59
|
status: 'alive',
|
|
60
|
+
displayName: liveDisplayName(s, sidecar?.displayName),
|
|
61
|
+
// Pane-grade fields for alive rows are filled lazily on /meta to keep
|
|
62
|
+
// /list polls cheap; /list payload carries null/0 placeholders.
|
|
63
|
+
lastMessageAt: null,
|
|
64
|
+
turnCount: 0,
|
|
65
|
+
capped: false,
|
|
66
|
+
sizeBytes: s.jsonlPath && existsSync(s.jsonlPath) ? statSync(s.jsonlPath).size : null,
|
|
37
67
|
};
|
|
38
68
|
}
|
|
39
69
|
function timed(logger, method, path, status, ms) {
|
|
40
70
|
logger(`api method=${method} path=${path} outcome=${status} ms=${ms}`);
|
|
41
71
|
}
|
|
72
|
+
/** Returns the live row whose URL maps to the given claudeSessionId, if any.
|
|
73
|
+
* Load-bearing for the purge-while-alive guard: dehydrated sessionId IS the
|
|
74
|
+
* claudeSessionId, so a purge request can race against an alive PTY that
|
|
75
|
+
* the manager is still writing through. */
|
|
76
|
+
function findLiveByClaudeId(store, claudeSessionId) {
|
|
77
|
+
for (const s of store.all()) {
|
|
78
|
+
if (!s.url)
|
|
79
|
+
continue;
|
|
80
|
+
if (claudeSessionIdFromUrl(s.url) === claudeSessionId)
|
|
81
|
+
return s;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
/** Locate the JSONL path for any sessionId — live row first, then dehydrated. */
|
|
86
|
+
function resolveJsonlPath(deps, sessionId) {
|
|
87
|
+
const live = deps.store.get(sessionId);
|
|
88
|
+
if (live && live.jsonlPath) {
|
|
89
|
+
return { path: live.jsonlPath, claudeSessionId: live.url ? claudeSessionIdFromUrl(live.url) : null };
|
|
90
|
+
}
|
|
91
|
+
// Dehydrated: sessionId === claudeSessionId, JSONL lives under the slug.
|
|
92
|
+
const slug = projectSlugForCwd(deps.spawnCwd);
|
|
93
|
+
const path = join(claudeStateRoot(), 'projects', slug, `${sessionId}.jsonl`);
|
|
94
|
+
if (existsSync(path))
|
|
95
|
+
return { path, claudeSessionId: sessionId };
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
42
98
|
export function buildHttpApp(deps) {
|
|
43
99
|
const app = new Hono();
|
|
44
100
|
app.post('/spawn', async (c) => {
|
|
@@ -64,7 +120,7 @@ export function buildHttpApp(deps) {
|
|
|
64
120
|
return c.json({ error: 'spawn-failed', reason: result.reason }, 500);
|
|
65
121
|
}
|
|
66
122
|
timed(deps.logger, 'POST', '/spawn', 200, Date.now() - start);
|
|
67
|
-
return c.json(
|
|
123
|
+
return c.json(toLivePayload(result.session), 200);
|
|
68
124
|
});
|
|
69
125
|
app.get('/list', (c) => {
|
|
70
126
|
const start = Date.now();
|
|
@@ -76,7 +132,7 @@ export function buildHttpApp(deps) {
|
|
|
76
132
|
// Task 018 — merge in-memory live sessions with JSONL transcripts on
|
|
77
133
|
// disk so the list survives a manager restart. Live entries take
|
|
78
134
|
// precedence on duplicate claudeSessionId.
|
|
79
|
-
const live = deps.store.listBySender(senderId).map(
|
|
135
|
+
const live = deps.store.listBySender(senderId).map(toLivePayload);
|
|
80
136
|
const liveClaudeIds = new Set();
|
|
81
137
|
for (const s of live) {
|
|
82
138
|
if (s.url) {
|
|
@@ -86,7 +142,7 @@ export function buildHttpApp(deps) {
|
|
|
86
142
|
}
|
|
87
143
|
}
|
|
88
144
|
const dehydrated = [];
|
|
89
|
-
for (const j of listJsonlSessions(deps.spawnCwd)) {
|
|
145
|
+
for (const j of listJsonlSessions(deps.spawnCwd, LIST_TAIL_BYTES)) {
|
|
90
146
|
if (liveClaudeIds.has(j.claudeSessionId))
|
|
91
147
|
continue;
|
|
92
148
|
dehydrated.push({
|
|
@@ -99,6 +155,11 @@ export function buildHttpApp(deps) {
|
|
|
99
155
|
channel: null,
|
|
100
156
|
jsonlPath: j.jsonlPath,
|
|
101
157
|
status: 'ended',
|
|
158
|
+
displayName: j.displayName,
|
|
159
|
+
lastMessageAt: j.lastMessageAt,
|
|
160
|
+
turnCount: j.turnCount,
|
|
161
|
+
capped: j.capped,
|
|
162
|
+
sizeBytes: j.sizeBytes,
|
|
102
163
|
});
|
|
103
164
|
}
|
|
104
165
|
deps.logger(`list-source live=${live.length} jsonl=${dehydrated.length}`);
|
|
@@ -133,13 +194,170 @@ export function buildHttpApp(deps) {
|
|
|
133
194
|
}
|
|
134
195
|
deps.logger(`resume pid=${result.session.pid} sessionUrl=${result.session.url} resumeFrom=${claudeSessionId} latency-ms=${Date.now() - start}`);
|
|
135
196
|
timed(deps.logger, 'POST', '/resume', 200, Date.now() - start);
|
|
136
|
-
return c.json(
|
|
197
|
+
return c.json(toLivePayload(result.session), 200);
|
|
137
198
|
});
|
|
199
|
+
// Task 023 — sessionId metadata for the pane. Merges live store, dehydrated
|
|
200
|
+
// enumeration, and sidecar into one payload. Alive rows get a fresh tail
|
|
201
|
+
// parse with the full jsonlReadMaxBytes; ended rows likewise (cached).
|
|
202
|
+
app.get('/:sessionId/meta', (c) => {
|
|
203
|
+
const start = Date.now();
|
|
204
|
+
const sessionId = c.req.param('sessionId');
|
|
205
|
+
if (!SESSION_ID_PATTERN.test(sessionId)) {
|
|
206
|
+
timed(deps.logger, 'GET', `/${sessionId}/meta`, 400, Date.now() - start);
|
|
207
|
+
return c.json({ error: 'invalid-session-id' }, 400);
|
|
208
|
+
}
|
|
209
|
+
const live = deps.store.get(sessionId);
|
|
210
|
+
let payload;
|
|
211
|
+
if (live) {
|
|
212
|
+
const base = toLivePayload(live);
|
|
213
|
+
const claudeSessionId = live.url ? claudeSessionIdFromUrl(live.url) : null;
|
|
214
|
+
let lastMessageAt = null;
|
|
215
|
+
let turnCount = 0;
|
|
216
|
+
let capped = false;
|
|
217
|
+
let sizeBytes = base.sizeBytes;
|
|
218
|
+
if (live.jsonlPath && existsSync(live.jsonlPath)) {
|
|
219
|
+
const enriched = readJsonlSession(deps.spawnCwd, claudeSessionId ?? sessionId, deps.jsonlReadMaxBytes);
|
|
220
|
+
if (enriched) {
|
|
221
|
+
lastMessageAt = enriched.lastMessageAt;
|
|
222
|
+
turnCount = enriched.turnCount;
|
|
223
|
+
capped = enriched.capped;
|
|
224
|
+
sizeBytes = enriched.sizeBytes;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
payload = {
|
|
228
|
+
...base,
|
|
229
|
+
lastMessageAt,
|
|
230
|
+
turnCount,
|
|
231
|
+
capped,
|
|
232
|
+
sizeBytes,
|
|
233
|
+
claudeSessionId,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
const enriched = readJsonlSession(deps.spawnCwd, sessionId, deps.jsonlReadMaxBytes);
|
|
238
|
+
if (!enriched) {
|
|
239
|
+
timed(deps.logger, 'GET', `/${sessionId}/meta`, 404, Date.now() - start);
|
|
240
|
+
return c.json({ error: 'session-not-found' }, 404);
|
|
241
|
+
}
|
|
242
|
+
payload = {
|
|
243
|
+
sessionId: enriched.claudeSessionId,
|
|
244
|
+
pid: null,
|
|
245
|
+
url: null,
|
|
246
|
+
startedAt: enriched.startedAt,
|
|
247
|
+
senderId: '',
|
|
248
|
+
role: null,
|
|
249
|
+
channel: null,
|
|
250
|
+
jsonlPath: enriched.jsonlPath,
|
|
251
|
+
status: 'ended',
|
|
252
|
+
displayName: enriched.displayName,
|
|
253
|
+
lastMessageAt: enriched.lastMessageAt,
|
|
254
|
+
turnCount: enriched.turnCount,
|
|
255
|
+
capped: enriched.capped,
|
|
256
|
+
sizeBytes: enriched.sizeBytes,
|
|
257
|
+
claudeSessionId: enriched.claudeSessionId,
|
|
258
|
+
};
|
|
259
|
+
deps.logger(`meta-jsonl-tail-bytes sessionId=${sessionId.slice(0, 8)} read=${Math.min(enriched.sizeBytes, deps.jsonlReadMaxBytes)} capped=${enriched.capped}`);
|
|
260
|
+
}
|
|
261
|
+
deps.logger(`meta sessionId=${sessionId.slice(0, 8)} fields=${Object.keys(payload).length} ms=${Date.now() - start}`);
|
|
262
|
+
timed(deps.logger, 'GET', `/${sessionId}/meta`, 200, Date.now() - start);
|
|
263
|
+
return c.json(payload, 200);
|
|
264
|
+
});
|
|
265
|
+
// Task 023 — operator-owned displayName. Writes sidecar JSON next to the
|
|
266
|
+
// JSONL. Sidecar never touches the claude-owned transcript.
|
|
267
|
+
app.patch('/:sessionId', async (c) => {
|
|
268
|
+
const start = Date.now();
|
|
269
|
+
const sessionId = c.req.param('sessionId');
|
|
270
|
+
if (!SESSION_ID_PATTERN.test(sessionId)) {
|
|
271
|
+
timed(deps.logger, 'PATCH', `/${sessionId}`, 400, Date.now() - start);
|
|
272
|
+
return c.json({ error: 'invalid-session-id' }, 400);
|
|
273
|
+
}
|
|
274
|
+
let body;
|
|
275
|
+
try {
|
|
276
|
+
body = await c.req.json();
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
timed(deps.logger, 'PATCH', `/${sessionId}`, 400, Date.now() - start);
|
|
280
|
+
return c.json({ error: 'body-not-json' }, 400);
|
|
281
|
+
}
|
|
282
|
+
if (typeof body.displayName !== 'string' || body.displayName.length === 0 || body.displayName.length > DISPLAY_NAME_MAX) {
|
|
283
|
+
timed(deps.logger, 'PATCH', `/${sessionId}`, 400, Date.now() - start);
|
|
284
|
+
return c.json({ error: 'invalid-displayName', detail: { maxLen: DISPLAY_NAME_MAX } }, 400);
|
|
285
|
+
}
|
|
286
|
+
const resolved = resolveJsonlPath(deps, sessionId);
|
|
287
|
+
if (!resolved) {
|
|
288
|
+
timed(deps.logger, 'PATCH', `/${sessionId}`, 404, Date.now() - start);
|
|
289
|
+
return c.json({ error: 'session-not-found' }, 404);
|
|
290
|
+
}
|
|
291
|
+
const sidecarPath = sidecarPathFor(resolved.path);
|
|
292
|
+
const prior = readSidecar(resolved.path)?.displayName ?? null;
|
|
293
|
+
try {
|
|
294
|
+
writeFileSync(sidecarPath, JSON.stringify({ displayName: body.displayName }, null, 2) + '\n', 'utf8');
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
298
|
+
deps.logger(`rename-failed sessionId=${sessionId.slice(0, 8)} message=${msg}`);
|
|
299
|
+
timed(deps.logger, 'PATCH', `/${sessionId}`, 500, Date.now() - start);
|
|
300
|
+
return c.json({ error: 'sidecar-write-failed', detail: msg }, 500);
|
|
301
|
+
}
|
|
302
|
+
deps.logger(`rename sessionId=${sessionId.slice(0, 8)} from=${prior ?? ''} to=${body.displayName}`);
|
|
303
|
+
timed(deps.logger, 'PATCH', `/${sessionId}`, 200, Date.now() - start);
|
|
304
|
+
return c.json({ ok: true, displayName: body.displayName }, 200);
|
|
305
|
+
});
|
|
306
|
+
// Task 023 — DELETE branches on `?purge=1`. Bare DELETE is the existing
|
|
307
|
+
// "end session" path (kills the PTY, leaves the JSONL). Purge hard-removes
|
|
308
|
+
// the JSONL + sidecar + any `<sessionId>/` subdir claude wrote.
|
|
138
309
|
app.delete('/:sessionId', async (c) => {
|
|
139
310
|
const start = Date.now();
|
|
140
311
|
const sessionId = c.req.param('sessionId');
|
|
141
|
-
|
|
142
|
-
|
|
312
|
+
const purge = c.req.query('purge') === '1';
|
|
313
|
+
if (!SESSION_ID_PATTERN.test(sessionId)) {
|
|
314
|
+
timed(deps.logger, 'DELETE', `/${sessionId}`, 400, Date.now() - start);
|
|
315
|
+
return c.json({ error: 'invalid-session-id' }, 400);
|
|
316
|
+
}
|
|
317
|
+
if (!purge) {
|
|
318
|
+
await deleteSession({ store: deps.store, killGraceMs: deps.killGraceMs, logger: deps.logger }, sessionId);
|
|
319
|
+
timed(deps.logger, 'DELETE', `/${sessionId}`, 204, Date.now() - start);
|
|
320
|
+
return c.body(null, 204);
|
|
321
|
+
}
|
|
322
|
+
// Purge path. Refuse if the PTY is alive — either as the sessionId itself
|
|
323
|
+
// (a manager-UUID for a live row) or any live row whose URL maps to the
|
|
324
|
+
// same claudeSessionId (dehydrated row whose underlying claude session is
|
|
325
|
+
// still being written).
|
|
326
|
+
if (deps.store.get(sessionId) || findLiveByClaudeId(deps.store, sessionId)) {
|
|
327
|
+
deps.logger(`purge-rejected sessionId=${sessionId.slice(0, 8)} reason=pty-still-alive`);
|
|
328
|
+
timed(deps.logger, 'DELETE', `/${sessionId}?purge=1`, 409, Date.now() - start);
|
|
329
|
+
return c.json({ error: 'pty-still-alive', detail: 'end the session before purging' }, 409);
|
|
330
|
+
}
|
|
331
|
+
const resolved = resolveJsonlPath(deps, sessionId);
|
|
332
|
+
if (!resolved) {
|
|
333
|
+
timed(deps.logger, 'DELETE', `/${sessionId}?purge=1`, 404, Date.now() - start);
|
|
334
|
+
return c.json({ error: 'session-not-found' }, 404);
|
|
335
|
+
}
|
|
336
|
+
const sidecarPath = sidecarPathFor(resolved.path);
|
|
337
|
+
const subdir = join(claudeStateRoot(), 'projects', projectSlugForCwd(deps.spawnCwd), sessionId);
|
|
338
|
+
let bytes = 0;
|
|
339
|
+
try {
|
|
340
|
+
bytes = existsSync(resolved.path) ? statSync(resolved.path).size : 0;
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
// ignore — size is informational
|
|
344
|
+
}
|
|
345
|
+
try {
|
|
346
|
+
if (existsSync(resolved.path))
|
|
347
|
+
rmSync(resolved.path);
|
|
348
|
+
if (existsSync(sidecarPath))
|
|
349
|
+
rmSync(sidecarPath);
|
|
350
|
+
if (existsSync(subdir))
|
|
351
|
+
rmSync(subdir, { recursive: true, force: true });
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
355
|
+
deps.logger(`purge-failed sessionId=${sessionId.slice(0, 8)} message=${msg}`);
|
|
356
|
+
timed(deps.logger, 'DELETE', `/${sessionId}?purge=1`, 500, Date.now() - start);
|
|
357
|
+
return c.json({ error: 'purge-failed', detail: msg }, 500);
|
|
358
|
+
}
|
|
359
|
+
deps.logger(`purge sessionId=${sessionId.slice(0, 8)} bytes=${bytes}`);
|
|
360
|
+
timed(deps.logger, 'DELETE', `/${sessionId}?purge=1`, 204, Date.now() - start);
|
|
143
361
|
return c.body(null, 204);
|
|
144
362
|
});
|
|
145
363
|
app.post('/:sessionId/input', async (c) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,34 @@ export interface DehydratedSession {
|
|
|
7
7
|
startedAt: string;
|
|
8
8
|
/** Byte size of the JSONL, for ordering tiebreaker and operator surfaces. */
|
|
9
9
|
sizeBytes: number;
|
|
10
|
+
/** Sidecar displayName when present; else first 8 chars of claudeSessionId. */
|
|
11
|
+
displayName: string;
|
|
12
|
+
/** ISO timestamp of the last user|assistant turn in the parsed tail, or null. */
|
|
13
|
+
lastMessageAt: string | null;
|
|
14
|
+
/** Count of user|assistant turns found in the parsed tail. Lower bound when capped. */
|
|
15
|
+
turnCount: number;
|
|
16
|
+
/** True when the tail was clipped to tailMaxBytes — turnCount is a lower bound. */
|
|
17
|
+
capped: boolean;
|
|
10
18
|
}
|
|
19
|
+
export interface SessionSidecar {
|
|
20
|
+
displayName?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function readSidecar(jsonlPath: string): SessionSidecar | null;
|
|
23
|
+
export declare function sidecarPathFor(jsonlPath: string): string;
|
|
11
24
|
/**
|
|
12
25
|
* List every JSONL file under `~/.claude/projects/<slug>/` where `<slug>`
|
|
13
26
|
* is derived from the manager's spawnCwd. Returns newest-first by mtime.
|
|
14
27
|
* Returns an empty array when the projects directory does not yet exist
|
|
15
28
|
* (no sessions have ever been spawned).
|
|
29
|
+
*
|
|
30
|
+
* `tailMaxBytes` caps the per-row tail parse for displayName/turnCount/
|
|
31
|
+
* lastMessageAt enrichment. Callers driving /list polls pass the cheap
|
|
32
|
+
* 64 KB default; the /meta route passes the full `jsonlReadMaxBytes`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function listJsonlSessions(spawnCwd: string, tailMaxBytes?: number): DehydratedSession[];
|
|
35
|
+
/**
|
|
36
|
+
* Find a single dehydrated row by claudeSessionId. Returns null if the JSONL
|
|
37
|
+
* is missing. Used by /meta to avoid re-listing the full directory.
|
|
16
38
|
*/
|
|
17
|
-
export declare function
|
|
39
|
+
export declare function readJsonlSession(spawnCwd: string, claudeSessionId: string, tailMaxBytes: number): DehydratedSession | null;
|
|
18
40
|
//# sourceMappingURL=jsonl-enumerator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonl-enumerator.d.ts","sourceRoot":"","sources":["../src/jsonl-enumerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsonl-enumerator.d.ts","sourceRoot":"","sources":["../src/jsonl-enumerator.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAA;IACvB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAA;IACjB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAA;IACjB,mFAAmF;IACnF,MAAM,EAAE,OAAO,CAAA;CAChB;AAmBD,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAWpE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AA2DD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,GAAE,MAAgC,GAAG,iBAAiB,EAAE,CAiCvH;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAmB1H"}
|
|
@@ -7,19 +7,112 @@
|
|
|
7
7
|
// those files so the sidebar list survives restarts and the Resume action
|
|
8
8
|
// has something to bind to.
|
|
9
9
|
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
// Task 023 — entries now carry pane-grade metadata too:
|
|
11
|
+
// - displayName (sidecar `<id>.meta.json`.displayName, else 8-char slice)
|
|
12
|
+
// - lastMessageAt (ISO of the last user|assistant turn parsed from the
|
|
13
|
+
// JSONL tail)
|
|
14
|
+
// - turnCount (count of user|assistant turns in the parsed tail)
|
|
15
|
+
// - capped (true when the tail was clipped — turn count is a lower bound)
|
|
16
|
+
//
|
|
17
|
+
// The tail parse is bounded by `tailMaxBytes` (callers pass 64 KB for /list
|
|
18
|
+
// polls and 1 MB for /meta single-row reads). A module-scoped cache keyed on
|
|
19
|
+
// `${jsonlPath}|${mtimeMs}|${size}` short-circuits repeated parses on
|
|
20
|
+
// unchanged files, so a 3 s /list poll over N rows stays cheap.
|
|
21
|
+
import { existsSync, openSync, closeSync, readSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
22
|
+
import { join, dirname, basename } from 'node:path';
|
|
15
23
|
import { claudeStateRoot, projectSlugForCwd } from './jsonl-path.js';
|
|
24
|
+
// Tail-parse cache. Key: `${path}|${mtimeMs}|${size}|${tailMaxBytes}`.
|
|
25
|
+
// Invalidated implicitly on any append (mtime or size shifts).
|
|
26
|
+
const tailCache = new Map();
|
|
27
|
+
const DEFAULT_LIST_TAIL_BYTES = 64 * 1024;
|
|
28
|
+
function sidecarPath(jsonlPath) {
|
|
29
|
+
return join(dirname(jsonlPath), basename(jsonlPath, '.jsonl') + '.meta.json');
|
|
30
|
+
}
|
|
31
|
+
export function readSidecar(jsonlPath) {
|
|
32
|
+
const p = sidecarPath(jsonlPath);
|
|
33
|
+
if (!existsSync(p))
|
|
34
|
+
return null;
|
|
35
|
+
try {
|
|
36
|
+
const raw = readFileSync(p, 'utf8');
|
|
37
|
+
const parsed = JSON.parse(raw);
|
|
38
|
+
if (!parsed || typeof parsed !== 'object')
|
|
39
|
+
return null;
|
|
40
|
+
return parsed;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function sidecarPathFor(jsonlPath) {
|
|
47
|
+
return sidecarPath(jsonlPath);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Parse the trailing window of a JSONL file (or the whole file if it fits
|
|
51
|
+
* under `tailMaxBytes`). Returns the timestamp of the last user|assistant
|
|
52
|
+
* line and the count of user|assistant lines seen in the window. The
|
|
53
|
+
* partial line at the head of the window (when capped) is discarded —
|
|
54
|
+
* `\n` after the first read byte is the alignment anchor.
|
|
55
|
+
*/
|
|
56
|
+
function parseJsonlTail(jsonlPath, sizeBytes, tailMaxBytes) {
|
|
57
|
+
const cacheKey = `${jsonlPath}|${statSync(jsonlPath).mtimeMs}|${sizeBytes}|${tailMaxBytes}`;
|
|
58
|
+
const cached = tailCache.get(jsonlPath);
|
|
59
|
+
if (cached && cached.key === cacheKey) {
|
|
60
|
+
return { lastMessageAt: cached.lastMessageAt, turnCount: cached.turnCount, capped: cached.capped };
|
|
61
|
+
}
|
|
62
|
+
const capped = sizeBytes > tailMaxBytes;
|
|
63
|
+
const readBytes = Math.min(sizeBytes, tailMaxBytes);
|
|
64
|
+
const startOffset = sizeBytes - readBytes;
|
|
65
|
+
let chunk = '';
|
|
66
|
+
if (readBytes > 0) {
|
|
67
|
+
const fd = openSync(jsonlPath, 'r');
|
|
68
|
+
try {
|
|
69
|
+
const buf = Buffer.alloc(readBytes);
|
|
70
|
+
readSync(fd, buf, 0, readBytes, startOffset);
|
|
71
|
+
chunk = buf.toString('utf8');
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
closeSync(fd);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Drop the partial leading line when the window was clipped.
|
|
78
|
+
if (capped) {
|
|
79
|
+
const nl = chunk.indexOf('\n');
|
|
80
|
+
chunk = nl === -1 ? '' : chunk.slice(nl + 1);
|
|
81
|
+
}
|
|
82
|
+
let turnCount = 0;
|
|
83
|
+
let lastMessageAt = null;
|
|
84
|
+
for (const line of chunk.split('\n')) {
|
|
85
|
+
if (!line)
|
|
86
|
+
continue;
|
|
87
|
+
let obj;
|
|
88
|
+
try {
|
|
89
|
+
obj = JSON.parse(line);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const t = obj.type;
|
|
95
|
+
if (t !== 'user' && t !== 'assistant')
|
|
96
|
+
continue;
|
|
97
|
+
turnCount += 1;
|
|
98
|
+
if (typeof obj.timestamp === 'string')
|
|
99
|
+
lastMessageAt = obj.timestamp;
|
|
100
|
+
}
|
|
101
|
+
const entry = { key: cacheKey, lastMessageAt, turnCount, capped };
|
|
102
|
+
tailCache.set(jsonlPath, entry);
|
|
103
|
+
return { lastMessageAt, turnCount, capped };
|
|
104
|
+
}
|
|
16
105
|
/**
|
|
17
106
|
* List every JSONL file under `~/.claude/projects/<slug>/` where `<slug>`
|
|
18
107
|
* is derived from the manager's spawnCwd. Returns newest-first by mtime.
|
|
19
108
|
* Returns an empty array when the projects directory does not yet exist
|
|
20
109
|
* (no sessions have ever been spawned).
|
|
110
|
+
*
|
|
111
|
+
* `tailMaxBytes` caps the per-row tail parse for displayName/turnCount/
|
|
112
|
+
* lastMessageAt enrichment. Callers driving /list polls pass the cheap
|
|
113
|
+
* 64 KB default; the /meta route passes the full `jsonlReadMaxBytes`.
|
|
21
114
|
*/
|
|
22
|
-
export function listJsonlSessions(spawnCwd) {
|
|
115
|
+
export function listJsonlSessions(spawnCwd, tailMaxBytes = DEFAULT_LIST_TAIL_BYTES) {
|
|
23
116
|
const slug = projectSlugForCwd(spawnCwd);
|
|
24
117
|
const projectsDir = join(claudeStateRoot(), 'projects', slug);
|
|
25
118
|
if (!existsSync(projectsDir))
|
|
@@ -41,14 +134,46 @@ export function listJsonlSessions(spawnCwd) {
|
|
|
41
134
|
catch {
|
|
42
135
|
continue;
|
|
43
136
|
}
|
|
137
|
+
const sidecar = readSidecar(jsonlPath);
|
|
138
|
+
const displayName = sidecar?.displayName?.trim() || claudeSessionId.slice(0, 8);
|
|
139
|
+
const tail = parseJsonlTail(jsonlPath, stat.size, tailMaxBytes);
|
|
44
140
|
out.push({
|
|
45
141
|
claudeSessionId,
|
|
46
142
|
jsonlPath,
|
|
47
143
|
startedAt: stat.mtime.toISOString(),
|
|
48
144
|
sizeBytes: stat.size,
|
|
145
|
+
displayName,
|
|
146
|
+
lastMessageAt: tail.lastMessageAt,
|
|
147
|
+
turnCount: tail.turnCount,
|
|
148
|
+
capped: tail.capped,
|
|
49
149
|
});
|
|
50
150
|
}
|
|
51
151
|
out.sort((a, b) => (a.startedAt < b.startedAt ? 1 : -1));
|
|
52
152
|
return out;
|
|
53
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Find a single dehydrated row by claudeSessionId. Returns null if the JSONL
|
|
156
|
+
* is missing. Used by /meta to avoid re-listing the full directory.
|
|
157
|
+
*/
|
|
158
|
+
export function readJsonlSession(spawnCwd, claudeSessionId, tailMaxBytes) {
|
|
159
|
+
const slug = projectSlugForCwd(spawnCwd);
|
|
160
|
+
const projectsDir = join(claudeStateRoot(), 'projects', slug);
|
|
161
|
+
const jsonlPath = join(projectsDir, `${claudeSessionId}.jsonl`);
|
|
162
|
+
if (!existsSync(jsonlPath))
|
|
163
|
+
return null;
|
|
164
|
+
const stat = statSync(jsonlPath);
|
|
165
|
+
const sidecar = readSidecar(jsonlPath);
|
|
166
|
+
const displayName = sidecar?.displayName?.trim() || claudeSessionId.slice(0, 8);
|
|
167
|
+
const tail = parseJsonlTail(jsonlPath, stat.size, tailMaxBytes);
|
|
168
|
+
return {
|
|
169
|
+
claudeSessionId,
|
|
170
|
+
jsonlPath,
|
|
171
|
+
startedAt: stat.mtime.toISOString(),
|
|
172
|
+
sizeBytes: stat.size,
|
|
173
|
+
displayName,
|
|
174
|
+
lastMessageAt: tail.lastMessageAt,
|
|
175
|
+
turnCount: tail.turnCount,
|
|
176
|
+
capped: tail.capped,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
54
179
|
//# sourceMappingURL=jsonl-enumerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonl-enumerator.js","sourceRoot":"","sources":["../src/jsonl-enumerator.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,qFAAqF;AACrF,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,4EAA4E;AAC5E,0EAA0E;AAC1E,4BAA4B;AAC5B,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"jsonl-enumerator.js","sourceRoot":"","sources":["../src/jsonl-enumerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-capture.d.ts","sourceRoot":"","sources":["../src/url-capture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"url-capture.d.ts","sourceRoot":"","sources":["../src/url-capture.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAcnD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,SAAS,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAwC/E"}
|