@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.
Files changed (85) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  3. package/payload/platform/services/claude-session-manager/dist/http-server.js +228 -10
  4. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  5. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +23 -1
  6. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
  7. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +131 -6
  8. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
  9. package/payload/platform/services/claude-session-manager/dist/url-capture.d.ts.map +1 -1
  10. package/payload/platform/services/claude-session-manager/dist/url-capture.js +27 -15
  11. package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -1
  12. package/payload/server/public/assets/{Checkbox-D5bsL5IO.js → Checkbox-B1pi98Yw.js} +1 -1
  13. package/payload/server/public/assets/admin-ssJWtqVX.js +1 -0
  14. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-C1Y8LkQn.js → architectureDiagram-Q4EWVU46-CYRT-hpJ.js} +1 -1
  15. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DVWDZ5Od.js → blockDiagram-DXYQGD6D-Cn4D-jj8.js} +1 -1
  16. package/payload/server/public/assets/brand-D5k27KTB.js +1 -0
  17. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BABaPulo.js → c4Diagram-AHTNJAMY-B9mQuKey.js} +1 -1
  18. package/payload/server/public/assets/channel-UyGQO49u.js +1 -0
  19. package/payload/server/public/assets/{chunk-336JU56O-D8PM_LLD.js → chunk-336JU56O-_pHU1qs5.js} +2 -2
  20. package/payload/server/public/assets/{chunk-426QAEUC-CPoMPNv-.js → chunk-426QAEUC-CJZBrpsW.js} +1 -1
  21. package/payload/server/public/assets/{chunk-4TB4RGXK-DP7aaNeo.js → chunk-4TB4RGXK-CbdaQqED.js} +1 -1
  22. package/payload/server/public/assets/{chunk-5FUZZQ4R-BcEh8cqP.js → chunk-5FUZZQ4R-BHysGjPk.js} +1 -1
  23. package/payload/server/public/assets/{chunk-5PVQY5BW-hlKOVg7k.js → chunk-5PVQY5BW-DwaJjlmQ.js} +1 -1
  24. package/payload/server/public/assets/{chunk-EDXVE4YY-Clrj1-TK.js → chunk-EDXVE4YY-B5BtxUCu.js} +1 -1
  25. package/payload/server/public/assets/{chunk-ENJZ2VHE-DZ5oQwfW.js → chunk-ENJZ2VHE-Ehw_u_kr.js} +1 -1
  26. package/payload/server/public/assets/{chunk-ICPOFSXX-DcYVBL08.js → chunk-ICPOFSXX-9pglSmm0.js} +1 -1
  27. package/payload/server/public/assets/{chunk-OYMX7WX6-DYCm2d-j.js → chunk-OYMX7WX6-BYoXj_GS.js} +1 -1
  28. package/payload/server/public/assets/{chunk-U2HBQHQK-DlMSsedr.js → chunk-U2HBQHQK-DY4UKSFX.js} +1 -1
  29. package/payload/server/public/assets/{chunk-X2U36JSP-BFgTiODq.js → chunk-X2U36JSP-nyvIphWC.js} +1 -1
  30. package/payload/server/public/assets/{chunk-YZCP3GAM-Dl7Za-fK.js → chunk-YZCP3GAM-CwzhK7B_.js} +1 -1
  31. package/payload/server/public/assets/{chunk-ZZ45TVLE-DKJc-jnu.js → chunk-ZZ45TVLE-B3MIjbjy.js} +1 -1
  32. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CnuEj2MV.js +1 -0
  33. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-C4euVG7i.js +1 -0
  34. package/payload/server/public/assets/clone-B6jQ4sQM.js +1 -0
  35. package/payload/server/public/assets/{dagre-BxZW6uVc.js → dagre-DmBM0gAU.js} +1 -1
  36. package/payload/server/public/assets/{dagre-KV5264BT-DN0hRCmB.js → dagre-KV5264BT-BMF41iDw.js} +1 -1
  37. package/payload/server/public/assets/{data-DDIV_NMI.js → data-iCamt21J.js} +1 -1
  38. package/payload/server/public/assets/{diagram-5BDNPKRD-BlN4_Net.js → diagram-5BDNPKRD-BlZco72d.js} +1 -1
  39. package/payload/server/public/assets/{diagram-G4DWMVQ6-Dl3YdJ94.js → diagram-G4DWMVQ6-DXhz1tn9.js} +1 -1
  40. package/payload/server/public/assets/{diagram-MMDJMWI5-BhoYZ30j.js → diagram-MMDJMWI5-CjOK1TqX.js} +1 -1
  41. package/payload/server/public/assets/{diagram-TYMM5635-CgD2xqpO.js → diagram-TYMM5635-BLIfhJl_.js} +1 -1
  42. package/payload/server/public/assets/{erDiagram-SMLLAGMA-D_4k-P_W.js → erDiagram-SMLLAGMA-BNvNebXl.js} +1 -1
  43. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-C44HDuS2.js → flowDiagram-DWJPFMVM-CiiSkoYl.js} +1 -1
  44. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Iprqq6jm.js → ganttDiagram-T4ZO3ILL-ojBwmxzi.js} +1 -1
  45. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-BNsuI5pf.js → gitGraphDiagram-UUTBAWPF-8r-vQIcq.js} +1 -1
  46. package/payload/server/public/assets/{graph-BhRpEpY1.js → graph-BsnHbm-w.js} +2 -2
  47. package/payload/server/public/assets/{graph-labels-CRmMK2-3.js → graph-labels-SjQPr62q.js} +1 -1
  48. package/payload/server/public/assets/{graphlib-00nEx5zd.js → graphlib-3qtLnRUJ.js} +1 -1
  49. package/payload/server/public/assets/{infoDiagram-42DDH7IO-B05WrcQr.js → infoDiagram-42DDH7IO-DizGoC2U.js} +1 -1
  50. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-Cjj-8sq-.js → ishikawaDiagram-UXIWVN3A-CoW4eBMG.js} +1 -1
  51. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CE4zSJ_e.js → journeyDiagram-VCZTEJTY-D8ZCMlkd.js} +1 -1
  52. package/payload/server/public/assets/{jsx-runtime-orvUHz-c.css → jsx-runtime-CApIe6zc.css} +1 -1
  53. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-vp1k55Vn.js → kanban-definition-6JOO6SKY-B7nGgL6n.js} +1 -1
  54. package/payload/server/public/assets/{line-DtgVCBmE.js → line-Df-cEDRK.js} +1 -1
  55. package/payload/server/public/assets/loader-circle-BXQvNcaV.js +1 -0
  56. package/payload/server/public/assets/{mermaid-parser.core-BLkF5CWy.js → mermaid-parser.core-BdS1yEBX.js} +1 -1
  57. package/payload/server/public/assets/{mermaid.core-D8Ai1Ihc.js → mermaid.core-OrDOOKvo.js} +3 -3
  58. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BBS2-egG.js → mindmap-definition-QFDTVHPH-DkGEftRu.js} +1 -1
  59. package/payload/server/public/assets/{pieDiagram-DEJITSTG-D-YJ1TY9.js → pieDiagram-DEJITSTG-DjprDutI.js} +1 -1
  60. package/payload/server/public/assets/{public-Dlu50BWH.js → public-pA0tltHd.js} +5 -5
  61. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CG-vUnZ2.js → quadrantDiagram-34T5L4WZ-DWaFd6rk.js} +1 -1
  62. package/payload/server/public/assets/{requirementDiagram-MS252O5E-BU8DU7cT.js → requirementDiagram-MS252O5E-ZRZYYyme.js} +1 -1
  63. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BD2Pv-fW.js → sankeyDiagram-XADWPNL6-C0BciP0t.js} +1 -1
  64. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BNf_xS4I.js → sequenceDiagram-FGHM5R23-AjMIXRyo.js} +1 -1
  65. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-KWX_egpr.js → stateDiagram-FHFEXIEX-Cdc5UYUG.js} +1 -1
  66. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DKxHNlxN.js +1 -0
  67. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CZlun2e8.js → timeline-definition-GMOUNBTQ-CG7brXpR.js} +1 -1
  68. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-ChgSQa6t.js → vennDiagram-DHZGUBPP-BdptqViO.js} +1 -1
  69. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-kwRFhj3v.js → wardleyDiagram-NUSXRM2D-iDZMov2l.js} +1 -1
  70. package/payload/server/public/assets/{refresh-cw-Ho-xY4LQ.js → x-CFSf6g--.js} +1 -1
  71. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-JaRJKECe.js → xychartDiagram-5P7HB3ND-dwPbxhbs.js} +1 -1
  72. package/payload/server/public/data.html +5 -5
  73. package/payload/server/public/graph.html +7 -7
  74. package/payload/server/public/index.html +7 -7
  75. package/payload/server/public/public.html +5 -5
  76. package/payload/server/server.js +30 -1
  77. package/payload/server/public/assets/admin-Jg-kYJ64.js +0 -1
  78. package/payload/server/public/assets/brand-29DyfElX.js +0 -1
  79. package/payload/server/public/assets/channel-ClhfXesY.js +0 -1
  80. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CNuIn78n.js +0 -1
  81. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cxc_1DZI.js +0 -1
  82. package/payload/server/public/assets/clone-BnZ9qP0T.js +0 -1
  83. package/payload/server/public/assets/loader-circle-DwwVih2K.js +0 -1
  84. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-661rM-JV.js +0 -1
  85. /package/payload/server/public/assets/{jsx-runtime-LncohCxF.js → jsx-runtime-DS_YWdGF.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-realagent-code",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent-code": "./dist/index.js"
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAkBA,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;AAOpF,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;AAgCD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAqNjD"}
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
- function toSessionPayload(s) {
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(toSessionPayload(result.session), 200);
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(toSessionPayload);
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(toSessionPayload(result.session), 200);
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
- await deleteSession({ store: deps.store, killGraceMs: deps.killGraceMs, logger: deps.logger }, sessionId);
142
- timed(deps.logger, 'DELETE', `/${sessionId}`, 204, Date.now() - start);
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 listJsonlSessions(spawnCwd: string): DehydratedSession[];
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":"AAiBA,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;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA0BvE"}
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
- // The enumerator does NOT parse JSONL content only basename, mtime, and
11
- // size. Parsing is the UI's job via GET /:sessionId/log when the operator
12
- // opens a row.
13
- import { existsSync, readdirSync, statSync } from 'node:fs';
14
- import { join } from 'node:path';
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,0EAA0E;AAC1E,0EAA0E;AAC1E,eAAe;AAEf,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAapE;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAC7D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAA;IACvC,MAAM,GAAG,GAAwB,EAAE,CAAA;IACnC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAQ;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,SAAQ;QAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC7D,IAAI,CAAC,eAAe;YAAE,SAAQ;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,IAAI,CAAA;QACR,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,SAAQ;QACV,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,eAAe;YACf,SAAS;YACT,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,CAAC,IAAI;SACrB,CAAC,CAAA;IACJ,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,OAAO,GAAG,CAAA;AACZ,CAAC"}
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":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AASnD,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"}
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"}