@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,407 @@
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.setSessionEventCallback = setSessionEventCallback;
7
+ exports.setSessionPersistCallback = setSessionPersistCallback;
8
+ exports.getDriver = getDriver;
9
+ exports.sessionName = sessionName;
10
+ exports.startProject = startProject;
11
+ exports.stopProject = stopProject;
12
+ exports.initOnStartup = initOnStartup;
13
+ exports.restoreFromStore = restoreFromStore;
14
+ exports.restartSession = restartSession;
15
+ exports.launchSession = launchSession;
16
+ exports.getSessionOps = getSessionOps;
17
+ exports.startAutoFixProject = startAutoFixProject;
18
+ const tmux_js_1 = require("./tmux.js");
19
+ const claude_code_js_1 = require("./drivers/claude-code.js");
20
+ const codex_js_1 = require("./drivers/codex.js");
21
+ const opencode_js_1 = require("./drivers/opencode.js");
22
+ const shell_js_1 = require("./drivers/shell.js");
23
+ const gemini_js_1 = require("./drivers/gemini.js");
24
+ const signal_js_1 = require("./signal.js");
25
+ const notify_setup_js_1 = require("./notify-setup.js");
26
+ const session_store_js_1 = require("../store/session-store.js");
27
+ const logger_js_1 = __importDefault(require("../util/logger.js"));
28
+ const timeline_emitter_js_1 = require("../daemon/timeline-emitter.js");
29
+ const jsonl_watcher_js_1 = require("../daemon/jsonl-watcher.js");
30
+ const codex_watcher_js_1 = require("../daemon/codex-watcher.js");
31
+ const gemini_watcher_js_1 = require("../daemon/gemini-watcher.js");
32
+ const node_crypto_1 = require("node:crypto");
33
+ const node_path_1 = require("node:path");
34
+ /** Start JSONL watcher for a CC session — uses specific file if ccSessionId known, else directory scan. */
35
+ function startCCWatcher(sessionName, projectDir, ccSessionId) {
36
+ if (ccSessionId) {
37
+ const jsonlPath = (0, node_path_1.join)((0, jsonl_watcher_js_1.claudeProjectDir)(projectDir), `${ccSessionId}.jsonl`);
38
+ (0, jsonl_watcher_js_1.startWatchingFile)(sessionName, jsonlPath).catch((e) => logger_js_1.default.warn({ err: e, session: sessionName }, 'jsonl-watcher startWatchingFile failed'));
39
+ }
40
+ else {
41
+ (0, jsonl_watcher_js_1.startWatching)(sessionName, projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: sessionName }, 'jsonl-watcher start failed'));
42
+ }
43
+ }
44
+ // Restart loop prevention: max 3 restarts within 5 minutes
45
+ const MAX_RESTARTS = 3;
46
+ const RESTART_WINDOW_MS = 5 * 60 * 1000;
47
+ let _onSessionEvent = null;
48
+ function setSessionEventCallback(cb) {
49
+ _onSessionEvent = cb;
50
+ }
51
+ function emitSessionEvent(event, session, state) {
52
+ try {
53
+ _onSessionEvent?.(event, session, state);
54
+ }
55
+ catch { /* ignore */ }
56
+ timeline_emitter_js_1.timelineEmitter.emit(session, 'session.state', { state: event });
57
+ }
58
+ let _onSessionPersist = null;
59
+ function setSessionPersistCallback(cb) {
60
+ _onSessionPersist = cb;
61
+ }
62
+ function emitSessionPersist(record, name) {
63
+ _onSessionPersist?.(record, name).catch((e) => logger_js_1.default.warn({ err: e, name }, 'session persist callback failed'));
64
+ }
65
+ function getDriver(type) {
66
+ switch (type) {
67
+ case 'claude-code': return new claude_code_js_1.ClaudeCodeDriver();
68
+ case 'codex': return new codex_js_1.CodexDriver();
69
+ case 'opencode': return new opencode_js_1.OpenCodeDriver();
70
+ case 'shell': return new shell_js_1.ShellDriver();
71
+ case 'script': return new shell_js_1.ShellDriver();
72
+ case 'gemini': return new gemini_js_1.GeminiDriver();
73
+ }
74
+ }
75
+ function sessionName(project, role) {
76
+ return `deck_${project}_${role}`;
77
+ }
78
+ /** Start all sessions for a project (brain + workers). */
79
+ async function startProject(config) {
80
+ const { name, dir, brainType, workerTypes, fresh } = config;
81
+ await launchSession({ name: sessionName(name, 'brain'), projectName: name, role: 'brain', agentType: brainType, projectDir: dir, fresh });
82
+ for (let i = 0; i < workerTypes.length; i++) {
83
+ const role = `w${i + 1}`;
84
+ await launchSession({ name: sessionName(name, role), projectName: name, role, agentType: workerTypes[i], projectDir: dir, fresh });
85
+ }
86
+ }
87
+ /** Stop all sessions for a project. */
88
+ async function stopProject(projectName) {
89
+ const sessions = (0, session_store_js_1.listSessions)(projectName);
90
+ for (const s of sessions) {
91
+ (0, jsonl_watcher_js_1.stopWatching)(s.name);
92
+ (0, codex_watcher_js_1.stopWatching)(s.name);
93
+ (0, gemini_watcher_js_1.stopWatching)(s.name);
94
+ await (0, tmux_js_1.killSession)(s.name).catch(() => { });
95
+ (0, session_store_js_1.removeSession)(s.name);
96
+ emitSessionPersist(null, s.name);
97
+ emitSessionEvent('stopped', s.name, 'stopped');
98
+ }
99
+ }
100
+ /** Clean up orphan FIFOs from previous daemon runs and reconcile session store on startup. */
101
+ async function initOnStartup() {
102
+ await (0, tmux_js_1.cleanupOrphanFifos)();
103
+ }
104
+ // Pattern for valid codedeck session names: deck_{project}_{brain|wN}
105
+ const DECK_SESSION_RE = /^deck_(.+)_(brain|w\d+)$/;
106
+ /** Reconcile store with actual tmux on daemon start — restart missing sessions and discover orphans. */
107
+ async function restoreFromStore() {
108
+ const all = (0, session_store_js_1.listSessions)();
109
+ const live = await (0, tmux_js_1.listSessions)();
110
+ // 1. Restart store sessions missing from tmux; start jsonl-watcher for live ones
111
+ for (const s of all) {
112
+ if (s.state === 'stopped')
113
+ continue;
114
+ // Sub-sessions (deck_sub_*) are managed by rebuildSubSessions triggered by the browser.
115
+ // Their JSONL watcher uses a specific file path via startWatchingFile.
116
+ // Handling them here would fall back to directory scan (startWatching), stealing the main
117
+ // session's JSONL file since sub-sessions have no ccSessionId in the session-store.
118
+ if (s.name.startsWith('deck_sub_'))
119
+ continue;
120
+ if (!live.includes(s.name)) {
121
+ logger_js_1.default.info({ session: s.name }, 'Missing on restore, restarting');
122
+ await restartSession(s);
123
+ }
124
+ else if (s.agentType === 'claude-code' && s.projectDir && !(0, jsonl_watcher_js_1.isWatching)(s.name)) {
125
+ startCCWatcher(s.name, s.projectDir, s.ccSessionId);
126
+ }
127
+ else if (s.agentType === 'codex' && s.projectDir && !(0, codex_watcher_js_1.isWatching)(s.name)) {
128
+ if (s.codexSessionId) {
129
+ (0, codex_watcher_js_1.findRolloutPathByUuid)(s.codexSessionId).then((rolloutPath) => {
130
+ if (rolloutPath) {
131
+ (0, codex_watcher_js_1.startWatchingSpecificFile)(s.name, rolloutPath).catch((e) => logger_js_1.default.warn({ err: e, session: s.name }, 'codex-watcher startWatchingSpecificFile failed (restore)'));
132
+ }
133
+ else {
134
+ (0, codex_watcher_js_1.startWatching)(s.name, s.projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: s.name }, 'codex-watcher start failed (restore uuid fallback)'));
135
+ }
136
+ }).catch(() => {
137
+ (0, codex_watcher_js_1.startWatching)(s.name, s.projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: s.name }, 'codex-watcher start failed (restore)'));
138
+ });
139
+ }
140
+ else {
141
+ (0, codex_watcher_js_1.startWatching)(s.name, s.projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: s.name }, 'codex-watcher start failed (restore)'));
142
+ }
143
+ }
144
+ }
145
+ // 2. Discover tmux sessions unknown to the store (e.g. created before daemon started)
146
+ const knownNames = new Set(all.map((s) => s.name));
147
+ for (const name of live) {
148
+ if (knownNames.has(name))
149
+ continue;
150
+ const match = DECK_SESSION_RE.exec(name);
151
+ if (!match)
152
+ continue; // not a codedeck session
153
+ const projectName = match[1];
154
+ const role = match[2];
155
+ // Infer metadata from tmux pane
156
+ const [projectDir, paneId] = await Promise.all([
157
+ (0, tmux_js_1.getPaneCwd)(name).catch(() => ''),
158
+ (0, tmux_js_1.getPaneId)(name).catch(() => undefined),
159
+ ]);
160
+ const record = {
161
+ name,
162
+ projectName,
163
+ role,
164
+ agentType: 'claude-code', // default; most common
165
+ projectDir,
166
+ state: 'running',
167
+ restarts: 0,
168
+ restartTimestamps: [],
169
+ createdAt: Date.now(),
170
+ updatedAt: Date.now(),
171
+ ...(paneId ? { paneId } : {}),
172
+ };
173
+ (0, session_store_js_1.upsertSession)(record);
174
+ emitSessionPersist(record, name);
175
+ emitSessionEvent('started', name, 'running');
176
+ if (record.agentType === 'claude-code' && projectDir) {
177
+ startCCWatcher(name, projectDir, record.ccSessionId);
178
+ }
179
+ else if (record.agentType === 'codex' && projectDir) {
180
+ (0, codex_watcher_js_1.startWatching)(name, projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'codex-watcher start failed (discover)'));
181
+ }
182
+ logger_js_1.default.info({ session: name, projectDir }, 'Discovered unregistered tmux session, registered');
183
+ }
184
+ }
185
+ /**
186
+ * Auto-restart a crashed session.
187
+ * Enforces max 3 restarts within 5 minutes; marks as error if exceeded.
188
+ */
189
+ async function restartSession(record) {
190
+ const now = Date.now();
191
+ const windowStart = now - RESTART_WINDOW_MS;
192
+ const recentRestarts = record.restartTimestamps.filter((t) => t > windowStart);
193
+ if (recentRestarts.length >= MAX_RESTARTS) {
194
+ logger_js_1.default.error({ session: record.name }, 'Restart loop detected — marking as error');
195
+ (0, session_store_js_1.updateSessionState)(record.name, 'error');
196
+ emitSessionEvent('error', record.name, 'error');
197
+ return false;
198
+ }
199
+ const updated = {
200
+ ...record,
201
+ restarts: record.restarts + 1,
202
+ restartTimestamps: [...recentRestarts, now],
203
+ state: 'running',
204
+ updatedAt: now,
205
+ };
206
+ (0, session_store_js_1.upsertSession)(updated);
207
+ await launchSession({
208
+ name: record.name,
209
+ projectName: record.projectName,
210
+ role: record.role,
211
+ agentType: record.agentType,
212
+ projectDir: record.projectDir,
213
+ skipStore: true,
214
+ ccSessionId: record.ccSessionId,
215
+ codexSessionId: record.codexSessionId,
216
+ });
217
+ return true;
218
+ }
219
+ async function launchSession(opts) {
220
+ const { name, projectName, role, agentType, projectDir, skipStore, extraEnv, fresh } = opts;
221
+ const driver = getDriver(agentType);
222
+ // Configure agent-specific hooks/signals
223
+ if (agentType === 'claude-code') {
224
+ await (0, signal_js_1.setupCCStopHook)().catch((e) => logger_js_1.default.warn({ err: e }, 'CC hook setup failed'));
225
+ }
226
+ else if (agentType === 'codex') {
227
+ await (0, notify_setup_js_1.setupCodexNotify)(projectDir, name).catch((e) => logger_js_1.default.warn({ err: e }, 'Codex notify setup failed'));
228
+ }
229
+ else if (agentType === 'opencode') {
230
+ const oc = driver;
231
+ await oc.ensurePermissions(projectDir).catch((e) => logger_js_1.default.warn({ err: e }, 'OpenCode permissions failed'));
232
+ await (0, notify_setup_js_1.setupOpenCodePlugin)(projectDir, name).catch((e) => logger_js_1.default.warn({ err: e }, 'OpenCode plugin setup failed'));
233
+ }
234
+ const exists = await (0, tmux_js_1.sessionExists)(name);
235
+ // For CC sessions: resolve ccSessionId only when actually launching a new tmux session.
236
+ // If the session already exists in tmux, use the stored UUID (if any) but don't generate
237
+ // a fresh one — that would point startWatchingFile at a non-existent file.
238
+ let ccSessionId = opts.ccSessionId;
239
+ if (agentType === 'claude-code') {
240
+ const stored = (0, session_store_js_1.getSession)(name)?.ccSessionId;
241
+ if (stored) {
242
+ ccSessionId = stored;
243
+ }
244
+ else if (!exists) {
245
+ // Launching fresh — generate UUID now so JSONL path is deterministic
246
+ ccSessionId = ccSessionId ?? (0, node_crypto_1.randomUUID)();
247
+ }
248
+ // If exists and no stored UUID: ccSessionId stays undefined → fall back to dir scan
249
+ }
250
+ // For Codex sessions: resolve codexSessionId from opts or store
251
+ let codexSessionId = opts.codexSessionId;
252
+ if (agentType === 'codex' && !codexSessionId) {
253
+ codexSessionId = (0, session_store_js_1.getSession)(name)?.codexSessionId;
254
+ }
255
+ // For Gemini sessions: resolve geminiSessionId from opts or store.
256
+ // If launching fresh, run a one-shot stream-json probe to obtain the UUID
257
+ // generated by Gemini, then reuse it for all subsequent --resume launches.
258
+ let geminiSessionId = opts.geminiSessionId;
259
+ if (agentType === 'gemini') {
260
+ if (!geminiSessionId) {
261
+ geminiSessionId = (0, session_store_js_1.getSession)(name)?.geminiSessionId;
262
+ }
263
+ if (!geminiSessionId && !exists) {
264
+ try {
265
+ const geminiDriver = driver;
266
+ geminiSessionId = await geminiDriver.resolveSessionId(projectDir);
267
+ logger_js_1.default.info({ session: name, geminiSessionId }, 'Resolved Gemini session ID');
268
+ }
269
+ catch (e) {
270
+ logger_js_1.default.warn({ err: e, session: name }, 'Failed to resolve Gemini session ID — launching without --resume');
271
+ }
272
+ }
273
+ }
274
+ if (!exists) {
275
+ const launchCmd = driver.buildLaunchCommand(name, { cwd: projectDir, fresh, ccSessionId, codexSessionId, geminiSessionId });
276
+ await (0, tmux_js_1.newSession)(name, launchCmd, { cwd: projectDir, env: extraEnv });
277
+ logger_js_1.default.info({ session: name, agentType, ccSessionId, codexSessionId, geminiSessionId }, 'Launched session');
278
+ }
279
+ // Always record paneId — it changes on each session creation/restart
280
+ const paneId = await (0, tmux_js_1.getPaneId)(name).catch(() => undefined);
281
+ if (paneId) {
282
+ const existing = (0, session_store_js_1.getSession)(name);
283
+ if (existing) {
284
+ (0, session_store_js_1.upsertSession)({ ...existing, paneId });
285
+ }
286
+ }
287
+ if (!skipStore) {
288
+ const existing = (0, session_store_js_1.getSession)(name);
289
+ const record = {
290
+ name,
291
+ projectName,
292
+ role,
293
+ agentType,
294
+ projectDir,
295
+ state: 'running',
296
+ restarts: existing?.restarts ?? 0,
297
+ restartTimestamps: existing?.restartTimestamps ?? [],
298
+ createdAt: existing?.createdAt ?? Date.now(),
299
+ updatedAt: Date.now(),
300
+ paneId,
301
+ ...(ccSessionId ? { ccSessionId } : {}),
302
+ ...(codexSessionId ? { codexSessionId } : {}),
303
+ ...(geminiSessionId ? { geminiSessionId } : {}),
304
+ };
305
+ (0, session_store_js_1.upsertSession)(record);
306
+ emitSessionPersist(record, name);
307
+ }
308
+ emitSessionEvent('started', name, 'running');
309
+ // Start structured-event watchers for supported agent types
310
+ if (agentType === 'claude-code') {
311
+ startCCWatcher(name, projectDir, ccSessionId);
312
+ }
313
+ else if (agentType === 'codex') {
314
+ if (codexSessionId) {
315
+ // UUID already known — watch the specific file
316
+ (0, codex_watcher_js_1.findRolloutPathByUuid)(codexSessionId).then((rolloutPath) => {
317
+ if (rolloutPath) {
318
+ (0, codex_watcher_js_1.startWatchingSpecificFile)(name, rolloutPath).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'codex-watcher startWatchingSpecificFile failed'));
319
+ }
320
+ else {
321
+ // UUID known but file not found yet — fall back to dir scan
322
+ (0, codex_watcher_js_1.startWatching)(name, projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'codex-watcher start failed (uuid fallback)'));
323
+ }
324
+ }).catch(() => {
325
+ (0, codex_watcher_js_1.startWatching)(name, projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'codex-watcher start failed'));
326
+ });
327
+ }
328
+ else if (!exists) {
329
+ // Fresh launch — start dir-scan watcher now, then async-capture UUID once rollout appears
330
+ (0, codex_watcher_js_1.startWatching)(name, projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'codex-watcher start failed'));
331
+ const launchTime = Date.now();
332
+ void (async () => {
333
+ try {
334
+ const uuid = await (0, codex_watcher_js_1.extractNewRolloutUuid)(projectDir, launchTime);
335
+ if (!uuid)
336
+ return;
337
+ const rec = (0, session_store_js_1.getSession)(name);
338
+ if (!rec)
339
+ return;
340
+ const updated = { ...rec, codexSessionId: uuid };
341
+ (0, session_store_js_1.upsertSession)(updated);
342
+ emitSessionPersist(updated, name);
343
+ logger_js_1.default.info({ session: name, codexSessionId: uuid }, 'Codex session UUID captured');
344
+ // Switch to specific-file watcher
345
+ const rolloutPath = await (0, codex_watcher_js_1.findRolloutPathByUuid)(uuid);
346
+ if (rolloutPath) {
347
+ (0, codex_watcher_js_1.stopWatching)(name);
348
+ (0, codex_watcher_js_1.startWatchingSpecificFile)(name, rolloutPath).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'codex-watcher switch to specific file failed'));
349
+ }
350
+ }
351
+ catch (e) {
352
+ logger_js_1.default.warn({ err: e, session: name }, 'Codex UUID extraction failed');
353
+ }
354
+ })();
355
+ }
356
+ else {
357
+ // Session already exists, no UUID — use dir scan
358
+ (0, codex_watcher_js_1.startWatching)(name, projectDir).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'codex-watcher start failed'));
359
+ }
360
+ }
361
+ else if (agentType === 'gemini' && geminiSessionId) {
362
+ (0, gemini_watcher_js_1.startWatching)(name, geminiSessionId).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'gemini-watcher start failed'));
363
+ }
364
+ // Auto-dismiss startup prompts (trust folder, settings errors, update dialogs)
365
+ if (driver.postLaunch) {
366
+ driver.postLaunch(() => (0, tmux_js_1.capturePane)(name), (key) => (0, tmux_js_1.sendKey)(name, key)).catch((e) => logger_js_1.default.warn({ err: e, session: name }, 'postLaunch failed'));
367
+ }
368
+ }
369
+ /** Bound ops for a session (used by status poller / response collector). */
370
+ function getSessionOps(name) {
371
+ return {
372
+ capturePane: () => (0, tmux_js_1.capturePane)(name),
373
+ sendKeys: (keys) => (0, tmux_js_1.sendKeys)(name, keys),
374
+ showBuffer: () => (0, tmux_js_1.showBuffer)(),
375
+ };
376
+ }
377
+ /**
378
+ * Start sessions for auto-fix mode:
379
+ * - w1 (coder) session: launched in projectDir (feature branch already checked out)
380
+ * - brain session: launched with audit-enhanced system prompt env var so the brain dispatcher
381
+ * can call registerAutoFixExtensions() on startup
382
+ */
383
+ async function startAutoFixProject(config) {
384
+ const { projectName, projectDir, coderType, auditorType, featureBranch } = config;
385
+ const coderSession = sessionName(projectName, 'w1');
386
+ const auditorSession = sessionName(projectName, 'brain');
387
+ // Worker (coder) session — regular launch in feature branch dir
388
+ await launchSession({
389
+ name: coderSession,
390
+ projectName,
391
+ role: 'w1',
392
+ agentType: coderType,
393
+ projectDir,
394
+ });
395
+ // Brain (auditor) session — set RCC_AUTOFIX_MODE=1 so brain dispatcher enables audit commands
396
+ await launchSession({
397
+ name: auditorSession,
398
+ projectName,
399
+ role: 'brain',
400
+ agentType: auditorType,
401
+ projectDir,
402
+ extraEnv: { RCC_AUTOFIX_MODE: '1', RCC_AUTOFIX_BRANCH: featureBranch },
403
+ });
404
+ logger_js_1.default.info({ projectName, coderSession, auditorSession, featureBranch }, 'Auto-fix sessions started');
405
+ return { coderSession, auditorSession };
406
+ }
407
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/agent/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Full CC hook suite setup.
3
+ *
4
+ * Writes hook scripts to ~/.codedeck/ and registers them in ~/.claude/settings.json.
5
+ * All hooks POST directly to the daemon hook server (no file intermediary).
6
+ *
7
+ * Hook event types registered:
8
+ * Stop → { event: "idle", session, agentType: "claude-code" }
9
+ * Notification → { event: "notification", session, title, message }
10
+ * PreToolUse → { event: "tool_start", session, tool }
11
+ * PostToolUse → { event: "tool_end", session }
12
+ *
13
+ * Hook format required by Claude Code:
14
+ * "Stop": [{ "matcher": "", "hooks": [{ "type": "command", "command": "..." }] }]
15
+ */
16
+ /** Directory where idle signal files are written by hooks and consumed by the daemon. */
17
+ export declare const SIGNAL_DIR: string;
18
+ interface IdleSignal {
19
+ session: string;
20
+ timestamp: number;
21
+ agentType?: string;
22
+ }
23
+ /** Write an idle signal file for a session (atomic rename). */
24
+ export declare function writeIdleSignal(signal: IdleSignal): Promise<void>;
25
+ /** Read and consume an idle signal for a session. Returns null if none exists. */
26
+ export declare function checkIdleSignal(session: string): Promise<IdleSignal | null>;
27
+ /** Write all hook scripts to ~/.codedeck/ and register them in ~/.claude/settings.json. */
28
+ export declare function setupCCHooks(): Promise<void>;
29
+ /** @deprecated Use setupCCHooks() instead */
30
+ export declare const setupCCStopHook: typeof setupCCHooks;
31
+ export {};
32
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/agent/signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,yFAAyF;AACzF,eAAO,MAAM,UAAU,QAAqC,CAAC;AAE7D,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,+DAA+D;AAC/D,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED,kFAAkF;AAClF,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CASjF;AAsGD,2FAA2F;AAC3F,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgElD;AAED,6CAA6C;AAC7C,eAAO,MAAM,eAAe,qBAAe,CAAC"}