@codedeck/codedeck 2026.3.1-4.63

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 (239) hide show
  1. package/README.md +38 -0
  2. package/config/default.yaml +51 -0
  3. package/dist/agent/brain-dispatcher.d.ts +67 -0
  4. package/dist/agent/brain-dispatcher.d.ts.map +1 -0
  5. package/dist/agent/brain-dispatcher.js +136 -0
  6. package/dist/agent/brain-dispatcher.js.map +1 -0
  7. package/dist/agent/detect.d.ts +20 -0
  8. package/dist/agent/detect.d.ts.map +1 -0
  9. package/dist/agent/detect.js +187 -0
  10. package/dist/agent/detect.js.map +1 -0
  11. package/dist/agent/drivers/base.d.ts +57 -0
  12. package/dist/agent/drivers/base.d.ts.map +1 -0
  13. package/dist/agent/drivers/base.js +3 -0
  14. package/dist/agent/drivers/base.js.map +1 -0
  15. package/dist/agent/drivers/claude-code.d.ts +14 -0
  16. package/dist/agent/drivers/claude-code.d.ts.map +1 -0
  17. package/dist/agent/drivers/claude-code.js +112 -0
  18. package/dist/agent/drivers/claude-code.js.map +1 -0
  19. package/dist/agent/drivers/codex.d.ts +14 -0
  20. package/dist/agent/drivers/codex.d.ts.map +1 -0
  21. package/dist/agent/drivers/codex.js +77 -0
  22. package/dist/agent/drivers/codex.js.map +1 -0
  23. package/dist/agent/drivers/gemini.d.ts +24 -0
  24. package/dist/agent/drivers/gemini.d.ts.map +1 -0
  25. package/dist/agent/drivers/gemini.js +142 -0
  26. package/dist/agent/drivers/gemini.js.map +1 -0
  27. package/dist/agent/drivers/opencode.d.ts +18 -0
  28. package/dist/agent/drivers/opencode.d.ts.map +1 -0
  29. package/dist/agent/drivers/opencode.js +50 -0
  30. package/dist/agent/drivers/opencode.js.map +1 -0
  31. package/dist/agent/drivers/shell.d.ts +13 -0
  32. package/dist/agent/drivers/shell.d.ts.map +1 -0
  33. package/dist/agent/drivers/shell.js +30 -0
  34. package/dist/agent/drivers/shell.js.map +1 -0
  35. package/dist/agent/env-isolation.d.ts +26 -0
  36. package/dist/agent/env-isolation.d.ts.map +1 -0
  37. package/dist/agent/env-isolation.js +103 -0
  38. package/dist/agent/env-isolation.js.map +1 -0
  39. package/dist/agent/notify-setup.d.ts +18 -0
  40. package/dist/agent/notify-setup.d.ts.map +1 -0
  41. package/dist/agent/notify-setup.js +68 -0
  42. package/dist/agent/notify-setup.js.map +1 -0
  43. package/dist/agent/session-manager.d.ts +75 -0
  44. package/dist/agent/session-manager.d.ts.map +1 -0
  45. package/dist/agent/session-manager.js +407 -0
  46. package/dist/agent/session-manager.js.map +1 -0
  47. package/dist/agent/signal.d.ts +32 -0
  48. package/dist/agent/signal.d.ts.map +1 -0
  49. package/dist/agent/signal.js +199 -0
  50. package/dist/agent/signal.js.map +1 -0
  51. package/dist/agent/status-poller.d.ts +27 -0
  52. package/dist/agent/status-poller.d.ts.map +1 -0
  53. package/dist/agent/status-poller.js +76 -0
  54. package/dist/agent/status-poller.js.map +1 -0
  55. package/dist/agent/templates/brain-prompt.d.ts +14 -0
  56. package/dist/agent/templates/brain-prompt.d.ts.map +1 -0
  57. package/dist/agent/templates/brain-prompt.js +57 -0
  58. package/dist/agent/templates/brain-prompt.js.map +1 -0
  59. package/dist/agent/templates/identity.d.ts +19 -0
  60. package/dist/agent/templates/identity.d.ts.map +1 -0
  61. package/dist/agent/templates/identity.js +97 -0
  62. package/dist/agent/templates/identity.js.map +1 -0
  63. package/dist/agent/tmux.d.ts +90 -0
  64. package/dist/agent/tmux.d.ts.map +1 -0
  65. package/dist/agent/tmux.js +386 -0
  66. package/dist/agent/tmux.js.map +1 -0
  67. package/dist/autofix/audit-engine.d.ts +35 -0
  68. package/dist/autofix/audit-engine.d.ts.map +1 -0
  69. package/dist/autofix/audit-engine.js +144 -0
  70. package/dist/autofix/audit-engine.js.map +1 -0
  71. package/dist/autofix/branch-manager.d.ts +44 -0
  72. package/dist/autofix/branch-manager.d.ts.map +1 -0
  73. package/dist/autofix/branch-manager.js +97 -0
  74. package/dist/autofix/branch-manager.js.map +1 -0
  75. package/dist/autofix/decision-engine.d.ts +38 -0
  76. package/dist/autofix/decision-engine.d.ts.map +1 -0
  77. package/dist/autofix/decision-engine.js +115 -0
  78. package/dist/autofix/decision-engine.js.map +1 -0
  79. package/dist/autofix/index.d.ts +23 -0
  80. package/dist/autofix/index.d.ts.map +1 -0
  81. package/dist/autofix/index.js +192 -0
  82. package/dist/autofix/index.js.map +1 -0
  83. package/dist/autofix/prompt-builder.d.ts +25 -0
  84. package/dist/autofix/prompt-builder.d.ts.map +1 -0
  85. package/dist/autofix/prompt-builder.js +137 -0
  86. package/dist/autofix/prompt-builder.js.map +1 -0
  87. package/dist/autofix/report-parser.d.ts +18 -0
  88. package/dist/autofix/report-parser.d.ts.map +1 -0
  89. package/dist/autofix/report-parser.js +74 -0
  90. package/dist/autofix/report-parser.js.map +1 -0
  91. package/dist/autofix/state-machine.d.ts +40 -0
  92. package/dist/autofix/state-machine.d.ts.map +1 -0
  93. package/dist/autofix/state-machine.js +76 -0
  94. package/dist/autofix/state-machine.js.map +1 -0
  95. package/dist/bind/bind-flow.d.ts +15 -0
  96. package/dist/bind/bind-flow.d.ts.map +1 -0
  97. package/dist/bind/bind-flow.js +198 -0
  98. package/dist/bind/bind-flow.js.map +1 -0
  99. package/dist/config.d.ts +53 -0
  100. package/dist/config.d.ts.map +1 -0
  101. package/dist/config.js +89 -0
  102. package/dist/config.js.map +1 -0
  103. package/dist/daemon/codex-watcher.d.ts +46 -0
  104. package/dist/daemon/codex-watcher.d.ts.map +1 -0
  105. package/dist/daemon/codex-watcher.js +533 -0
  106. package/dist/daemon/codex-watcher.js.map +1 -0
  107. package/dist/daemon/command-handler.d.ts +6 -0
  108. package/dist/daemon/command-handler.d.ts.map +1 -0
  109. package/dist/daemon/command-handler.js +770 -0
  110. package/dist/daemon/command-handler.js.map +1 -0
  111. package/dist/daemon/discussion-orchestrator.d.ts +63 -0
  112. package/dist/daemon/discussion-orchestrator.d.ts.map +1 -0
  113. package/dist/daemon/discussion-orchestrator.js +482 -0
  114. package/dist/daemon/discussion-orchestrator.js.map +1 -0
  115. package/dist/daemon/gemini-watcher.d.ts +42 -0
  116. package/dist/daemon/gemini-watcher.d.ts.map +1 -0
  117. package/dist/daemon/gemini-watcher.js +463 -0
  118. package/dist/daemon/gemini-watcher.js.map +1 -0
  119. package/dist/daemon/hook-server.d.ts +42 -0
  120. package/dist/daemon/hook-server.d.ts.map +1 -0
  121. package/dist/daemon/hook-server.js +160 -0
  122. package/dist/daemon/hook-server.js.map +1 -0
  123. package/dist/daemon/jsonl-watcher.d.ts +35 -0
  124. package/dist/daemon/jsonl-watcher.d.ts.map +1 -0
  125. package/dist/daemon/jsonl-watcher.js +635 -0
  126. package/dist/daemon/jsonl-watcher.js.map +1 -0
  127. package/dist/daemon/lifecycle.d.ts +20 -0
  128. package/dist/daemon/lifecycle.d.ts.map +1 -0
  129. package/dist/daemon/lifecycle.js +331 -0
  130. package/dist/daemon/lifecycle.js.map +1 -0
  131. package/dist/daemon/server-link.d.ts +44 -0
  132. package/dist/daemon/server-link.d.ts.map +1 -0
  133. package/dist/daemon/server-link.js +232 -0
  134. package/dist/daemon/server-link.js.map +1 -0
  135. package/dist/daemon/subsession-manager.d.ts +37 -0
  136. package/dist/daemon/subsession-manager.d.ts.map +1 -0
  137. package/dist/daemon/subsession-manager.js +240 -0
  138. package/dist/daemon/subsession-manager.js.map +1 -0
  139. package/dist/daemon/terminal-parser.d.ts +42 -0
  140. package/dist/daemon/terminal-parser.d.ts.map +1 -0
  141. package/dist/daemon/terminal-parser.js +278 -0
  142. package/dist/daemon/terminal-parser.js.map +1 -0
  143. package/dist/daemon/terminal-streamer.d.ts +93 -0
  144. package/dist/daemon/terminal-streamer.d.ts.map +1 -0
  145. package/dist/daemon/terminal-streamer.js +451 -0
  146. package/dist/daemon/terminal-streamer.js.map +1 -0
  147. package/dist/daemon/timeline-emitter.d.ts +32 -0
  148. package/dist/daemon/timeline-emitter.d.ts.map +1 -0
  149. package/dist/daemon/timeline-emitter.js +97 -0
  150. package/dist/daemon/timeline-emitter.js.map +1 -0
  151. package/dist/daemon/timeline-event.d.ts +23 -0
  152. package/dist/daemon/timeline-event.d.ts.map +1 -0
  153. package/dist/daemon/timeline-event.js +7 -0
  154. package/dist/daemon/timeline-event.js.map +1 -0
  155. package/dist/daemon/timeline-store.d.ts +40 -0
  156. package/dist/daemon/timeline-store.d.ts.map +1 -0
  157. package/dist/daemon/timeline-store.js +153 -0
  158. package/dist/daemon/timeline-store.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +149 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/memory/claude-mem.d.ts +9 -0
  164. package/dist/memory/claude-mem.d.ts.map +1 -0
  165. package/dist/memory/claude-mem.js +58 -0
  166. package/dist/memory/claude-mem.js.map +1 -0
  167. package/dist/memory/context-builder.d.ts +4 -0
  168. package/dist/memory/context-builder.d.ts.map +1 -0
  169. package/dist/memory/context-builder.js +35 -0
  170. package/dist/memory/context-builder.js.map +1 -0
  171. package/dist/memory/detector.d.ts +7 -0
  172. package/dist/memory/detector.d.ts.map +1 -0
  173. package/dist/memory/detector.js +17 -0
  174. package/dist/memory/detector.js.map +1 -0
  175. package/dist/memory/extractor.d.ts +21 -0
  176. package/dist/memory/extractor.d.ts.map +1 -0
  177. package/dist/memory/extractor.js +83 -0
  178. package/dist/memory/extractor.js.map +1 -0
  179. package/dist/memory/injector.d.ts +7 -0
  180. package/dist/memory/injector.d.ts.map +1 -0
  181. package/dist/memory/injector.js +18 -0
  182. package/dist/memory/injector.js.map +1 -0
  183. package/dist/memory/interface.d.ts +25 -0
  184. package/dist/memory/interface.d.ts.map +1 -0
  185. package/dist/memory/interface.js +3 -0
  186. package/dist/memory/interface.js.map +1 -0
  187. package/dist/memory/mem0.d.ts +12 -0
  188. package/dist/memory/mem0.d.ts.map +1 -0
  189. package/dist/memory/mem0.js +93 -0
  190. package/dist/memory/mem0.js.map +1 -0
  191. package/dist/router/command-parser.d.ts +33 -0
  192. package/dist/router/command-parser.d.ts.map +1 -0
  193. package/dist/router/command-parser.js +66 -0
  194. package/dist/router/command-parser.js.map +1 -0
  195. package/dist/router/message-router.d.ts +42 -0
  196. package/dist/router/message-router.d.ts.map +1 -0
  197. package/dist/router/message-router.js +222 -0
  198. package/dist/router/message-router.js.map +1 -0
  199. package/dist/router/response-collector.d.ts +28 -0
  200. package/dist/router/response-collector.d.ts.map +1 -0
  201. package/dist/router/response-collector.js +164 -0
  202. package/dist/router/response-collector.js.map +1 -0
  203. package/dist/store/project-store.d.ts +37 -0
  204. package/dist/store/project-store.d.ts.map +1 -0
  205. package/dist/store/project-store.js +70 -0
  206. package/dist/store/project-store.js.map +1 -0
  207. package/dist/store/session-store.d.ts +32 -0
  208. package/dist/store/session-store.d.ts.map +1 -0
  209. package/dist/store/session-store.js +67 -0
  210. package/dist/store/session-store.js.map +1 -0
  211. package/dist/tracker/branch.d.ts +24 -0
  212. package/dist/tracker/branch.d.ts.map +1 -0
  213. package/dist/tracker/branch.js +55 -0
  214. package/dist/tracker/branch.js.map +1 -0
  215. package/dist/tracker/github.d.ts +31 -0
  216. package/dist/tracker/github.d.ts.map +1 -0
  217. package/dist/tracker/github.js +117 -0
  218. package/dist/tracker/github.js.map +1 -0
  219. package/dist/tracker/gitlab.d.ts +31 -0
  220. package/dist/tracker/gitlab.d.ts.map +1 -0
  221. package/dist/tracker/gitlab.js +116 -0
  222. package/dist/tracker/gitlab.js.map +1 -0
  223. package/dist/tracker/index.d.ts +9 -0
  224. package/dist/tracker/index.d.ts.map +1 -0
  225. package/dist/tracker/index.js +28 -0
  226. package/dist/tracker/index.js.map +1 -0
  227. package/dist/tracker/interface.d.ts +39 -0
  228. package/dist/tracker/interface.d.ts.map +1 -0
  229. package/dist/tracker/interface.js +7 -0
  230. package/dist/tracker/interface.js.map +1 -0
  231. package/dist/tracker/priority.d.ts +19 -0
  232. package/dist/tracker/priority.d.ts.map +1 -0
  233. package/dist/tracker/priority.js +40 -0
  234. package/dist/tracker/priority.js.map +1 -0
  235. package/dist/util/logger.d.ts +4 -0
  236. package/dist/util/logger.d.ts.map +1 -0
  237. package/dist/util/logger.js +14 -0
  238. package/dist/util/logger.js.map +1 -0
  239. package/package.json +65 -0
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.activeHookPort = exports.DEFAULT_HOOK_PORT = void 0;
7
+ exports.startHookServer = startHookServer;
8
+ /**
9
+ * Local HTTP server for agent hook callbacks.
10
+ *
11
+ * POST /notify { event: "idle"|"notification"|"tool_start"|"tool_end", session, ... }
12
+ *
13
+ * Port selection:
14
+ * 1. Load persisted port from ~/.codedeck/hook-port (remembered across restarts)
15
+ * 2. Try to bind; if EADDRINUSE, increment and retry (up to 20 attempts)
16
+ * 3. Save the successfully bound port back to the file
17
+ *
18
+ * After startHookServer() resolves, `activeHookPort` holds the actual port.
19
+ * All hook scripts and plugins read this value at write time.
20
+ */
21
+ const http_1 = __importDefault(require("http"));
22
+ const fs_1 = require("fs");
23
+ const path_1 = __importDefault(require("path"));
24
+ const os_1 = __importDefault(require("os"));
25
+ const logger_js_1 = __importDefault(require("../util/logger.js"));
26
+ const timeline_emitter_js_1 = require("./timeline-emitter.js");
27
+ exports.DEFAULT_HOOK_PORT = 51913;
28
+ const PORT_FILE = path_1.default.join(os_1.default.homedir(), '.codedeck', 'hook-port');
29
+ /** The port the hook server is currently listening on. Set after startHookServer() resolves. */
30
+ exports.activeHookPort = exports.DEFAULT_HOOK_PORT;
31
+ async function loadSavedPort() {
32
+ try {
33
+ const raw = await fs_1.promises.readFile(PORT_FILE, 'utf-8');
34
+ const p = parseInt(raw.trim(), 10);
35
+ return Number.isFinite(p) && p > 1024 && p < 65536 ? p : exports.DEFAULT_HOOK_PORT;
36
+ }
37
+ catch {
38
+ return exports.DEFAULT_HOOK_PORT;
39
+ }
40
+ }
41
+ async function savePort(port) {
42
+ await fs_1.promises.mkdir(path_1.default.dirname(PORT_FILE), { recursive: true });
43
+ await fs_1.promises.writeFile(PORT_FILE, String(port));
44
+ }
45
+ function tryBind(server, port) {
46
+ return new Promise((resolve, reject) => {
47
+ server.once('error', reject);
48
+ server.listen(port, '127.0.0.1', () => {
49
+ server.removeListener('error', reject);
50
+ resolve();
51
+ });
52
+ });
53
+ }
54
+ function extractToolSummary(tool, input) {
55
+ if (!input)
56
+ return '';
57
+ switch (tool) {
58
+ case 'Bash': {
59
+ const cmd = String(input['command'] ?? '');
60
+ return cmd.split('\n').find((l) => l.trim()) ?? cmd;
61
+ }
62
+ case 'Read':
63
+ case 'Write':
64
+ case 'Edit':
65
+ return String(input['file_path'] ?? '');
66
+ case 'Glob':
67
+ return String(input['pattern'] ?? '');
68
+ case 'Grep':
69
+ return `${input['pattern'] ?? ''}${input['path'] ? ` in ${input['path']}` : ''}`;
70
+ case 'Agent':
71
+ return String(input['description'] ?? '');
72
+ default:
73
+ return '';
74
+ }
75
+ }
76
+ async function startHookServer(onHook) {
77
+ const preferredPort = await loadSavedPort();
78
+ const server = http_1.default.createServer((req, res) => {
79
+ if (req.method !== 'POST' || req.url !== '/notify') {
80
+ res.writeHead(404);
81
+ res.end();
82
+ return;
83
+ }
84
+ let body = '';
85
+ req.on('data', (chunk) => { body += chunk.toString(); });
86
+ req.on('end', () => {
87
+ try {
88
+ const msg = JSON.parse(body);
89
+ const event = msg['event'];
90
+ const session = msg['session'];
91
+ if (!event || !session) {
92
+ res.writeHead(400);
93
+ res.end('missing event or session');
94
+ return;
95
+ }
96
+ if (event === 'idle') {
97
+ const agentType = msg['agentType'] ?? 'unknown';
98
+ logger_js_1.default.info({ session, agentType }, 'Hook: session idle');
99
+ onHook({ event: 'idle', session, agentType });
100
+ timeline_emitter_js_1.timelineEmitter.emit(session, 'session.state', { state: 'idle' }, { source: 'hook' });
101
+ }
102
+ else if (event === 'notification') {
103
+ const title = msg['title'] ?? '';
104
+ const message = msg['message'] ?? '';
105
+ logger_js_1.default.info({ session, title }, 'Hook: CC notification');
106
+ onHook({ event: 'notification', session, title, message });
107
+ }
108
+ else if (event === 'tool_start') {
109
+ const tool = msg['tool'] ?? 'unknown';
110
+ const toolInput = msg['tool_input'];
111
+ const input = extractToolSummary(tool, toolInput);
112
+ logger_js_1.default.debug({ session, tool }, 'Hook: tool start');
113
+ onHook({ event: 'tool_start', session, tool });
114
+ timeline_emitter_js_1.timelineEmitter.emit(session, 'session.state', { state: 'running' }, { source: 'hook' });
115
+ timeline_emitter_js_1.timelineEmitter.emit(session, 'tool.call', { tool, ...(input ? { input } : {}) }, { source: 'hook' });
116
+ }
117
+ else if (event === 'tool_end') {
118
+ logger_js_1.default.debug({ session }, 'Hook: tool end');
119
+ onHook({ event: 'tool_end', session });
120
+ timeline_emitter_js_1.timelineEmitter.emit(session, 'tool.result', {}, { source: 'hook' });
121
+ }
122
+ else if (event === 'mode_change') {
123
+ const mode = msg['mode'] ?? '';
124
+ const active = msg['active'] !== false;
125
+ logger_js_1.default.debug({ session, mode, active }, 'Hook: mode change');
126
+ timeline_emitter_js_1.timelineEmitter.emit(session, 'mode.state', { mode, active }, { source: 'hook' });
127
+ }
128
+ res.writeHead(200);
129
+ res.end('ok');
130
+ }
131
+ catch {
132
+ res.writeHead(400);
133
+ res.end('bad request');
134
+ }
135
+ });
136
+ });
137
+ // Try preferred port first, then increment on conflict
138
+ for (let attempt = 0; attempt < 20; attempt++) {
139
+ const port = preferredPort + attempt;
140
+ try {
141
+ await tryBind(server, port);
142
+ exports.activeHookPort = port;
143
+ await savePort(port);
144
+ if (port !== preferredPort) {
145
+ logger_js_1.default.info({ port, preferredPort }, 'Hook server: port conflict, using new port (saved)');
146
+ }
147
+ else {
148
+ logger_js_1.default.info({ port }, 'Hook server listening');
149
+ }
150
+ return { server, port };
151
+ }
152
+ catch (err) {
153
+ if (err.code !== 'EADDRINUSE')
154
+ throw err;
155
+ logger_js_1.default.debug({ port }, 'Hook server: port in use, trying next');
156
+ }
157
+ }
158
+ throw new Error(`Hook server: could not bind to any port in range ${preferredPort}–${preferredPort + 19}`);
159
+ }
160
+ //# sourceMappingURL=hook-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-server.js","sourceRoot":"","sources":["../../src/daemon/hook-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Watches Claude Code JSONL transcript files for structured events.
3
+ *
4
+ * Claude Code writes every conversation turn to:
5
+ * ~/.claude/projects/{projectKey}/{sessionId}.jsonl
6
+ *
7
+ * Each line is a JSON object with type "assistant", "user", "result", or "system".
8
+ * This watcher tails the active JSONL file and emits structured timeline events —
9
+ * far more reliable than parsing raw PTY terminal output.
10
+ *
11
+ * Integration:
12
+ * - startWatching(sessionName, projectDir) when a claude-code session starts
13
+ * - stopWatching(sessionName) when it stops
14
+ */
15
+ /** Return the ~/.claude/projects/{key} directory for a given work dir. */
16
+ export declare function claudeProjectDir(workDir: string): string;
17
+ /**
18
+ * Start watching Claude Code's JSONL transcript for a session.
19
+ * Only new lines written after this call are emitted — no history replay.
20
+ *
21
+ * @param sessionName tmux session name (e.g. "deck_myapp_brain")
22
+ * @param workDir absolute path to the project working directory
23
+ */
24
+ export declare function startWatching(sessionName: string, workDir: string): Promise<void>;
25
+ /** Returns true if a JSONL watcher is active for this session. */
26
+ export declare function isWatching(sessionName: string): boolean;
27
+ /** Stop watching and release all file handles for a session. */
28
+ export declare function stopWatching(sessionName: string): void;
29
+ /**
30
+ * Start watching a specific JSONL file for a session.
31
+ * Polls until the file appears (CC creates it on first conversation), then tails it.
32
+ * Used for CC sub-sessions where the file path is known from --session-id.
33
+ */
34
+ export declare function startWatchingFile(sessionName: string, filePath: string): Promise<void>;
35
+ //# sourceMappingURL=jsonl-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl-watcher.d.ts","sourceRoot":"","sources":["../../src/daemon/jsonl-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAgBH,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AA6UD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCvF;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C5F"}