@indianic/dialout 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +429 -16
  2. package/bin/AGENTS.md +44 -0
  3. package/bin/devdash-agent.js +2 -0
  4. package/dist/ai-adapters/claude.d.ts +3 -0
  5. package/dist/ai-adapters/claude.d.ts.map +1 -0
  6. package/dist/ai-adapters/claude.js +98 -0
  7. package/dist/ai-adapters/claude.js.map +1 -0
  8. package/dist/ai-adapters/codex.d.ts +3 -0
  9. package/dist/ai-adapters/codex.d.ts.map +1 -0
  10. package/dist/ai-adapters/codex.js +147 -0
  11. package/dist/ai-adapters/codex.js.map +1 -0
  12. package/dist/ai-adapters/grok.d.ts +3 -0
  13. package/dist/ai-adapters/grok.d.ts.map +1 -0
  14. package/dist/ai-adapters/grok.js +164 -0
  15. package/dist/ai-adapters/grok.js.map +1 -0
  16. package/dist/ai-adapters/index.d.ts +5 -0
  17. package/dist/ai-adapters/index.d.ts.map +1 -0
  18. package/dist/ai-adapters/index.js +30 -0
  19. package/dist/ai-adapters/index.js.map +1 -0
  20. package/dist/ai-adapters/types.d.ts +3 -0
  21. package/dist/ai-adapters/types.d.ts.map +1 -0
  22. package/dist/ai-adapters/types.js +7 -0
  23. package/dist/ai-adapters/types.js.map +1 -0
  24. package/dist/ai-capabilities/claude.d.ts +4 -0
  25. package/dist/ai-capabilities/claude.d.ts.map +1 -0
  26. package/dist/ai-capabilities/claude.js +174 -0
  27. package/dist/ai-capabilities/claude.js.map +1 -0
  28. package/dist/ai-capabilities/describe.d.ts +2 -0
  29. package/dist/ai-capabilities/describe.d.ts.map +1 -0
  30. package/dist/ai-capabilities/describe.js +31 -0
  31. package/dist/ai-capabilities/describe.js.map +1 -0
  32. package/dist/ai-capabilities/fsdeps.d.ts +3 -0
  33. package/dist/ai-capabilities/fsdeps.d.ts.map +1 -0
  34. package/dist/ai-capabilities/fsdeps.js +71 -0
  35. package/dist/ai-capabilities/fsdeps.js.map +1 -0
  36. package/dist/ai-capabilities/grok.d.ts +5 -0
  37. package/dist/ai-capabilities/grok.d.ts.map +1 -0
  38. package/dist/ai-capabilities/grok.js +145 -0
  39. package/dist/ai-capabilities/grok.js.map +1 -0
  40. package/dist/ai-capabilities/index.d.ts +4 -0
  41. package/dist/ai-capabilities/index.d.ts.map +1 -0
  42. package/dist/ai-capabilities/index.js +94 -0
  43. package/dist/ai-capabilities/index.js.map +1 -0
  44. package/dist/ai-capabilities/redact.d.ts +2 -0
  45. package/dist/ai-capabilities/redact.d.ts.map +1 -0
  46. package/dist/ai-capabilities/redact.js +27 -0
  47. package/dist/ai-capabilities/redact.js.map +1 -0
  48. package/dist/ai-capabilities/types.d.ts +11 -0
  49. package/dist/ai-capabilities/types.d.ts.map +1 -0
  50. package/dist/ai-capabilities/types.js +3 -0
  51. package/dist/ai-capabilities/types.js.map +1 -0
  52. package/dist/ai-launch.d.ts +35 -0
  53. package/dist/ai-launch.d.ts.map +1 -0
  54. package/dist/ai-launch.js +211 -0
  55. package/dist/ai-launch.js.map +1 -0
  56. package/dist/ai-session-detector.d.ts +19 -0
  57. package/dist/ai-session-detector.d.ts.map +1 -0
  58. package/dist/ai-session-detector.js +79 -0
  59. package/dist/ai-session-detector.js.map +1 -0
  60. package/dist/ai-sessions.d.ts +36 -0
  61. package/dist/ai-sessions.d.ts.map +1 -0
  62. package/dist/ai-sessions.js +309 -0
  63. package/dist/ai-sessions.js.map +1 -0
  64. package/dist/ai-status.d.ts +6 -0
  65. package/dist/ai-status.d.ts.map +1 -0
  66. package/dist/ai-status.js +40 -0
  67. package/dist/ai-status.js.map +1 -0
  68. package/dist/ai-transcript-locator.d.ts +35 -0
  69. package/dist/ai-transcript-locator.d.ts.map +1 -0
  70. package/dist/ai-transcript-locator.js +268 -0
  71. package/dist/ai-transcript-locator.js.map +1 -0
  72. package/dist/ai-transcript-tail.d.ts +17 -0
  73. package/dist/ai-transcript-tail.d.ts.map +1 -0
  74. package/dist/ai-transcript-tail.js +120 -0
  75. package/dist/ai-transcript-tail.js.map +1 -0
  76. package/dist/checklist.d.ts +20 -0
  77. package/dist/checklist.d.ts.map +1 -0
  78. package/dist/checklist.js +51 -0
  79. package/dist/checklist.js.map +1 -0
  80. package/dist/cli.d.ts +2 -0
  81. package/dist/cli.d.ts.map +1 -0
  82. package/dist/cli.js +1427 -0
  83. package/dist/cli.js.map +1 -0
  84. package/dist/command-runner.d.ts +15 -0
  85. package/dist/command-runner.d.ts.map +1 -0
  86. package/dist/command-runner.js +84 -0
  87. package/dist/command-runner.js.map +1 -0
  88. package/dist/config.d.ts +41 -0
  89. package/dist/config.d.ts.map +1 -0
  90. package/dist/config.js +152 -0
  91. package/dist/config.js.map +1 -0
  92. package/dist/cowork.d.ts +26 -0
  93. package/dist/cowork.d.ts.map +1 -0
  94. package/dist/cowork.js +370 -0
  95. package/dist/cowork.js.map +1 -0
  96. package/dist/fs-browser.d.ts +6 -0
  97. package/dist/fs-browser.d.ts.map +1 -0
  98. package/dist/fs-browser.js +61 -0
  99. package/dist/fs-browser.js.map +1 -0
  100. package/dist/has-command.d.ts +12 -0
  101. package/dist/has-command.d.ts.map +1 -0
  102. package/dist/has-command.js +24 -0
  103. package/dist/has-command.js.map +1 -0
  104. package/dist/heartbeat.d.ts +7 -0
  105. package/dist/heartbeat.d.ts.map +1 -0
  106. package/dist/heartbeat.js +50 -0
  107. package/dist/heartbeat.js.map +1 -0
  108. package/dist/index.d.ts +2 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +56 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/port-scanner.d.ts +4 -0
  113. package/dist/port-scanner.d.ts.map +1 -0
  114. package/dist/port-scanner.js +75 -0
  115. package/dist/port-scanner.js.map +1 -0
  116. package/dist/project-scanner.d.ts +15 -0
  117. package/dist/project-scanner.d.ts.map +1 -0
  118. package/dist/project-scanner.js +333 -0
  119. package/dist/project-scanner.js.map +1 -0
  120. package/dist/pty-manager.d.ts +28 -0
  121. package/dist/pty-manager.d.ts.map +1 -0
  122. package/dist/pty-manager.js +506 -0
  123. package/dist/pty-manager.js.map +1 -0
  124. package/dist/service-installer.d.ts +95 -0
  125. package/dist/service-installer.d.ts.map +1 -0
  126. package/dist/service-installer.js +911 -0
  127. package/dist/service-installer.js.map +1 -0
  128. package/dist/single-instance.d.ts +20 -0
  129. package/dist/single-instance.d.ts.map +1 -0
  130. package/dist/single-instance.js +151 -0
  131. package/dist/single-instance.js.map +1 -0
  132. package/dist/ssh-local-network.d.ts +26 -0
  133. package/dist/ssh-local-network.d.ts.map +1 -0
  134. package/dist/ssh-local-network.js +169 -0
  135. package/dist/ssh-local-network.js.map +1 -0
  136. package/dist/terminal-detect.d.ts +52 -0
  137. package/dist/terminal-detect.d.ts.map +1 -0
  138. package/dist/terminal-detect.js +147 -0
  139. package/dist/terminal-detect.js.map +1 -0
  140. package/dist/terminal-markers.d.ts +52 -0
  141. package/dist/terminal-markers.d.ts.map +1 -0
  142. package/dist/terminal-markers.js +174 -0
  143. package/dist/terminal-markers.js.map +1 -0
  144. package/dist/tmux-manager.d.ts +35 -0
  145. package/dist/tmux-manager.d.ts.map +1 -0
  146. package/dist/tmux-manager.js +274 -0
  147. package/dist/tmux-manager.js.map +1 -0
  148. package/dist/update-check.d.ts +3 -0
  149. package/dist/update-check.d.ts.map +1 -0
  150. package/dist/update-check.js +202 -0
  151. package/dist/update-check.js.map +1 -0
  152. package/dist/websocket.d.ts +8 -0
  153. package/dist/websocket.d.ts.map +1 -0
  154. package/dist/websocket.js +472 -0
  155. package/dist/websocket.js.map +1 -0
  156. package/node_modules/@dialout/shared/README.md +16 -0
  157. package/node_modules/@dialout/shared/dist/ai-chat-prefs.d.ts +8 -0
  158. package/node_modules/@dialout/shared/dist/ai-chat-prefs.d.ts.map +1 -0
  159. package/node_modules/@dialout/shared/dist/ai-chat-prefs.js +41 -0
  160. package/node_modules/@dialout/shared/dist/capabilities.d.ts +25 -0
  161. package/node_modules/@dialout/shared/dist/capabilities.d.ts.map +1 -0
  162. package/node_modules/@dialout/shared/dist/capabilities.js +2 -0
  163. package/node_modules/@dialout/shared/dist/chat-blocks.d.ts +33 -0
  164. package/node_modules/@dialout/shared/dist/chat-blocks.d.ts.map +1 -0
  165. package/node_modules/@dialout/shared/dist/chat-blocks.js +61 -0
  166. package/node_modules/@dialout/shared/dist/command-filter.d.ts +4 -0
  167. package/node_modules/@dialout/shared/dist/command-filter.d.ts.map +1 -0
  168. package/node_modules/@dialout/shared/dist/command-filter.js +49 -0
  169. package/node_modules/@dialout/shared/dist/composer-behaviour.d.ts +6 -0
  170. package/node_modules/@dialout/shared/dist/composer-behaviour.d.ts.map +1 -0
  171. package/node_modules/@dialout/shared/dist/composer-behaviour.js +24 -0
  172. package/node_modules/@dialout/shared/dist/events.d.ts +37 -0
  173. package/node_modules/@dialout/shared/dist/events.d.ts.map +1 -0
  174. package/node_modules/@dialout/shared/dist/events.js +13 -0
  175. package/node_modules/@dialout/shared/dist/index.d.ts +21 -0
  176. package/node_modules/@dialout/shared/dist/index.d.ts.map +1 -0
  177. package/node_modules/@dialout/shared/dist/index.js +37 -0
  178. package/node_modules/@dialout/shared/dist/kinds.d.ts +2 -0
  179. package/node_modules/@dialout/shared/dist/kinds.d.ts.map +1 -0
  180. package/node_modules/@dialout/shared/dist/kinds.js +2 -0
  181. package/node_modules/@dialout/shared/dist/notify.d.ts +3 -0
  182. package/node_modules/@dialout/shared/dist/notify.d.ts.map +1 -0
  183. package/node_modules/@dialout/shared/dist/notify.js +31 -0
  184. package/node_modules/@dialout/shared/dist/permission.d.ts +4 -0
  185. package/node_modules/@dialout/shared/dist/permission.d.ts.map +1 -0
  186. package/node_modules/@dialout/shared/dist/permission.js +8 -0
  187. package/node_modules/@dialout/shared/dist/scroll-pin.d.ts +3 -0
  188. package/node_modules/@dialout/shared/dist/scroll-pin.d.ts.map +1 -0
  189. package/node_modules/@dialout/shared/dist/scroll-pin.js +11 -0
  190. package/node_modules/@dialout/shared/dist/session.d.ts +19 -0
  191. package/node_modules/@dialout/shared/dist/session.d.ts.map +1 -0
  192. package/node_modules/@dialout/shared/dist/session.js +6 -0
  193. package/node_modules/@dialout/shared/dist/terminal-name.d.ts +25 -0
  194. package/node_modules/@dialout/shared/dist/terminal-name.d.ts.map +1 -0
  195. package/node_modules/@dialout/shared/dist/terminal-name.js +63 -0
  196. package/node_modules/@dialout/shared/dist/tool-appearance.d.ts +9 -0
  197. package/node_modules/@dialout/shared/dist/tool-appearance.d.ts.map +1 -0
  198. package/node_modules/@dialout/shared/dist/tool-appearance.js +30 -0
  199. package/node_modules/@dialout/shared/package.json +37 -0
  200. package/node_modules/@dialout/shared/src/ai-chat-prefs.test.ts +40 -0
  201. package/node_modules/@dialout/shared/src/ai-chat-prefs.ts +39 -0
  202. package/node_modules/@dialout/shared/src/capabilities.ts +30 -0
  203. package/node_modules/@dialout/shared/src/chat-blocks.test.ts +65 -0
  204. package/node_modules/@dialout/shared/src/chat-blocks.ts +79 -0
  205. package/node_modules/@dialout/shared/src/command-filter.test.ts +76 -0
  206. package/node_modules/@dialout/shared/src/command-filter.ts +45 -0
  207. package/node_modules/@dialout/shared/src/composer-behaviour.test.ts +31 -0
  208. package/node_modules/@dialout/shared/src/composer-behaviour.ts +22 -0
  209. package/node_modules/@dialout/shared/src/events.ts +27 -0
  210. package/node_modules/@dialout/shared/src/index.ts +32 -0
  211. package/node_modules/@dialout/shared/src/kinds.ts +5 -0
  212. package/node_modules/@dialout/shared/src/notify.test.ts +49 -0
  213. package/node_modules/@dialout/shared/src/notify.ts +30 -0
  214. package/node_modules/@dialout/shared/src/permission.ts +10 -0
  215. package/node_modules/@dialout/shared/src/scroll-pin.test.ts +23 -0
  216. package/node_modules/@dialout/shared/src/scroll-pin.ts +13 -0
  217. package/node_modules/@dialout/shared/src/session.ts +25 -0
  218. package/node_modules/@dialout/shared/src/terminal-name.ts +82 -0
  219. package/node_modules/@dialout/shared/src/tool-appearance.test.ts +41 -0
  220. package/node_modules/@dialout/shared/src/tool-appearance.ts +39 -0
  221. package/package.json +54 -14
  222. package/scripts/postinstall.js +79 -0
  223. package/scripts/prepack.js +45 -0
  224. package/bin/dialout.js +0 -13
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PERMISSION_MODES = void 0;
37
+ exports.launchId = launchId;
38
+ exports.isLaunchId = isLaunchId;
39
+ exports.parseLaunchId = parseLaunchId;
40
+ exports.buildLaunchArgs = buildLaunchArgs;
41
+ exports.listRecords = listRecords;
42
+ exports.addRecord = addRecord;
43
+ exports.removeRecord = removeRecord;
44
+ exports.isTurnRunning = isTurnRunning;
45
+ exports.runningSessionIds = runningSessionIds;
46
+ exports.runTurn = runTurn;
47
+ exports.stopTurn = stopTurn;
48
+ exports.stopAllTurns = stopAllTurns;
49
+ const child_process_1 = require("child_process");
50
+ const fs = __importStar(require("fs"));
51
+ const os = __importStar(require("os"));
52
+ const path = __importStar(require("path"));
53
+ const shared_1 = require("@dialout/shared");
54
+ Object.defineProperty(exports, "PERMISSION_MODES", { enumerable: true, get: function () { return shared_1.PERMISSION_MODES; } });
55
+ const config_1 = require("./config");
56
+ // Launch mode: sessions DevDash starts, rather than ones the user started in
57
+ // their own terminal.
58
+ //
59
+ // Turn-based by design. Each message spawns
60
+ // claude -p --resume <uuid> --input-format stream-json --output-format stream-json
61
+ // which runs that one turn, appends to the session's transcript, and exits.
62
+ // There is no long-lived child to supervise, an agent restart loses nothing,
63
+ // and a session stays resumable forever because the transcript IS the state.
64
+ //
65
+ // The transcript it writes is byte-identical in shape and location to the one
66
+ // a native session writes, so the entire attach-mode read path — tail,
67
+ // adapter, status — works on launched sessions with no changes at all.
68
+ //
69
+ // What this deliberately does NOT do is per-tool Allow/Deny. Verified against
70
+ // CLI 2.1.238 on 2026-08-21: --permission-mode manual emits no permission
71
+ // event over stream-json (the tool simply runs), and there is no
72
+ // --permission-prompt-tool flag. A canUseTool callback exists only in the
73
+ // Agent SDK. So the trust level is chosen once, at launch.
74
+ const LAUNCH_PREFIX = 'launch:';
75
+ // Launched sessions share a list with tmux ones, so their ids are namespaced.
76
+ // A tmux session cannot contain ':' in a name that reaches us, so the two can
77
+ // never be confused.
78
+ function launchId(sessionId) {
79
+ return `${LAUNCH_PREFIX}${sessionId}`;
80
+ }
81
+ function isLaunchId(id) {
82
+ return id.startsWith(LAUNCH_PREFIX);
83
+ }
84
+ function parseLaunchId(id) {
85
+ return isLaunchId(id) ? id.slice(LAUNCH_PREFIX.length) : null;
86
+ }
87
+ function safeMode(mode) {
88
+ return shared_1.PERMISSION_MODES.includes(mode)
89
+ ? mode
90
+ : 'default';
91
+ }
92
+ function buildLaunchArgs(rec, firstTurn) {
93
+ if (rec.kind === 'codex') {
94
+ // Codex has no --session-id; it names its own rollout file. Resuming is
95
+ // done by its own subcommand, so v1 launches a fresh codex exec per turn
96
+ // and relies on the rollout for history.
97
+ return ['exec', '--json', '-'];
98
+ }
99
+ return [
100
+ '-p',
101
+ '--input-format', 'stream-json',
102
+ '--output-format', 'stream-json',
103
+ '--verbose',
104
+ ...(firstTurn ? ['--session-id', rec.sessionId] : ['--resume', rec.sessionId]),
105
+ '--permission-mode', safeMode(rec.permissionMode),
106
+ ];
107
+ }
108
+ function registryPath() {
109
+ return path.join((0, config_1.configDirFor)(os.homedir()), 'ai-launched.json');
110
+ }
111
+ function defaultRead() {
112
+ return fs.readFileSync(registryPath(), 'utf8');
113
+ }
114
+ function defaultWrite(text) {
115
+ const file = registryPath();
116
+ fs.mkdirSync(path.dirname(file), { recursive: true });
117
+ fs.writeFileSync(file, text);
118
+ }
119
+ function listRecords(deps = {}) {
120
+ const read = deps.read || defaultRead;
121
+ try {
122
+ const parsed = JSON.parse(read());
123
+ return Array.isArray(parsed) ? parsed : [];
124
+ }
125
+ catch {
126
+ // Missing or corrupt. An unreadable registry must not take the agent down
127
+ // with it; the worst case is that launched sessions stop being listed.
128
+ return [];
129
+ }
130
+ }
131
+ function addRecord(rec, deps = {}) {
132
+ const write = deps.write || defaultWrite;
133
+ const others = listRecords(deps).filter((r) => r.sessionId !== rec.sessionId);
134
+ write(JSON.stringify([...others, rec], null, 2));
135
+ }
136
+ function removeRecord(sessionId, deps = {}) {
137
+ const write = deps.write || defaultWrite;
138
+ write(JSON.stringify(listRecords(deps).filter((r) => r.sessionId !== sessionId), null, 2));
139
+ }
140
+ // --- running turns ----------------------------------------------------------
141
+ // sessionId -> the child currently running a turn for it. Presence here is
142
+ // what makes a launched session read as 'working'.
143
+ const running = new Map();
144
+ function isTurnRunning(sessionId) {
145
+ return running.has(sessionId);
146
+ }
147
+ function runningSessionIds() {
148
+ return Array.from(running.keys());
149
+ }
150
+ // Send one message and let the turn run to completion in the background.
151
+ // Returns immediately: the answer arrives through the transcript tail, exactly
152
+ // as it does for a session the user started themselves.
153
+ function runTurn(rec, text, firstTurn, onDone, deps = {}) {
154
+ if (running.has(rec.sessionId)) {
155
+ // A turn is already in flight. Claude Code cannot process two at once, and
156
+ // resuming the same session twice would fork the transcript.
157
+ return;
158
+ }
159
+ const args = buildLaunchArgs(rec, firstTurn);
160
+ const message = JSON.stringify({
161
+ type: 'user',
162
+ message: { role: 'user', content: [{ type: 'text', text }] },
163
+ });
164
+ const spawnTurn = deps.spawnTurn || ((r, a, input) => {
165
+ const env = { ...process.env };
166
+ if (r.configHome)
167
+ env.CLAUDE_CONFIG_DIR = r.configHome;
168
+ const child = (0, child_process_1.spawn)(r.kind === 'claude' ? 'claude' : 'codex', a, {
169
+ cwd: r.cwd,
170
+ env,
171
+ stdio: ['pipe', 'ignore', 'ignore'],
172
+ });
173
+ // stdout is ignored on purpose: the transcript on disk is the source of
174
+ // truth and is already being tailed. Reading both would double-render.
175
+ try {
176
+ child.stdin.write(`${input}\n`);
177
+ child.stdin.end();
178
+ }
179
+ catch { /* the child died before we could write; 'close' still fires */ }
180
+ return child;
181
+ });
182
+ let child;
183
+ try {
184
+ child = spawnTurn(rec, args, message);
185
+ }
186
+ catch {
187
+ onDone?.(false);
188
+ return;
189
+ }
190
+ running.set(rec.sessionId, { startedAt: Date.now(), kill: () => { try {
191
+ child.kill();
192
+ }
193
+ catch { /* already gone */ } } });
194
+ child.on('close', (code) => {
195
+ running.delete(rec.sessionId);
196
+ onDone?.(code === 0);
197
+ });
198
+ child.on('error', () => {
199
+ running.delete(rec.sessionId);
200
+ onDone?.(false);
201
+ });
202
+ }
203
+ function stopTurn(sessionId) {
204
+ running.get(sessionId)?.kill();
205
+ running.delete(sessionId);
206
+ }
207
+ function stopAllTurns() {
208
+ for (const id of Array.from(running.keys()))
209
+ stopTurn(id);
210
+ }
211
+ //# sourceMappingURL=ai-launch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-launch.js","sourceRoot":"","sources":["../src/ai-launch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { AiKind } from '@dialout/shared';
2
+ export type { AiKind };
3
+ export interface ProcRow {
4
+ pid: number;
5
+ ppid: number;
6
+ command: string;
7
+ }
8
+ export declare function parseProcessTable(psOutput: string): ProcRow[];
9
+ export declare function descendantsOf(rows: ProcRow[], rootPid: number): ProcRow[];
10
+ export declare function classifyProcess(command: string): AiKind | null;
11
+ export declare function findAgentInPane(rows: ProcRow[], panePid: number): {
12
+ pid: number;
13
+ kind: AiKind;
14
+ } | null;
15
+ export interface ProcessTableDeps {
16
+ run?: () => Promise<string>;
17
+ }
18
+ export declare function readProcessTable(deps?: ProcessTableDeps): Promise<ProcRow[]>;
19
+ //# sourceMappingURL=ai-session-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-session-detector.d.ts","sourceRoot":"","sources":["../src/ai-session-detector.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EAAE,MAAM,EAAE,CAAC;AAEvB,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CAQ7D;AAKD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAmBzE;AAYD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK9D;AAID,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,EAAE,EACf,OAAO,EAAE,MAAM,GACd;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMtC;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAOtF"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseProcessTable = parseProcessTable;
4
+ exports.descendantsOf = descendantsOf;
5
+ exports.classifyProcess = classifyProcess;
6
+ exports.findAgentInPane = findAgentInPane;
7
+ exports.readProcessTable = readProcessTable;
8
+ const child_process_1 = require("child_process");
9
+ const PS_ROW_RE = /^\s*(\d+)\s+(\d+)\s+(\S.*)$/;
10
+ function parseProcessTable(psOutput) {
11
+ const rows = [];
12
+ for (const line of psOutput.split('\n')) {
13
+ const m = line.match(PS_ROW_RE);
14
+ if (!m)
15
+ continue;
16
+ rows.push({ pid: parseInt(m[1], 10), ppid: parseInt(m[2], 10), command: m[3] });
17
+ }
18
+ return rows;
19
+ }
20
+ // Every descendant of rootPid, depth unbounded. The `seen` set is not an
21
+ // optimisation: `ps` output is a snapshot and pid reuse can produce a parent
22
+ // cycle, which would otherwise spin the agent's poll loop forever.
23
+ function descendantsOf(rows, rootPid) {
24
+ const byParent = new Map();
25
+ for (const row of rows) {
26
+ const siblings = byParent.get(row.ppid);
27
+ if (siblings)
28
+ siblings.push(row);
29
+ else
30
+ byParent.set(row.ppid, [row]);
31
+ }
32
+ const out = [];
33
+ const seen = new Set([rootPid]);
34
+ const stack = [rootPid];
35
+ while (stack.length) {
36
+ for (const child of byParent.get(stack.pop()) || []) {
37
+ if (seen.has(child.pid))
38
+ continue;
39
+ seen.add(child.pid);
40
+ out.push(child);
41
+ stack.push(child.pid);
42
+ }
43
+ }
44
+ return out;
45
+ }
46
+ // Anchored on a path segment boundary so `claudette` and `claude-notes.md`
47
+ // do not match, and on the vendors' real install layouts.
48
+ const KIND_RULES = [
49
+ { kind: 'claude', re: /(^|\/)claude(\s|$)|\/\.local\/share\/claude\/versions\// },
50
+ { kind: 'codex', re: /(^|\/)codex(\s|$)|\/Caskroom\/codex\// },
51
+ // Grok installs to ~/.grok/bin/grok, so the install-layout half is anchored
52
+ // on that directory rather than a package manager's.
53
+ { kind: 'grok', re: /(^|\/)grok(\s|$)|\/\.grok\/bin\// },
54
+ ];
55
+ function classifyProcess(command) {
56
+ for (const rule of KIND_RULES) {
57
+ if (rule.re.test(command))
58
+ return rule.kind;
59
+ }
60
+ return null;
61
+ }
62
+ // Shallowest match wins: the agent CLI is a direct child of the pane shell,
63
+ // while its MCP servers and subprocesses sit deeper and may share its name.
64
+ function findAgentInPane(rows, panePid) {
65
+ for (const proc of descendantsOf(rows, panePid)) {
66
+ const kind = classifyProcess(proc.command);
67
+ if (kind)
68
+ return { pid: proc.pid, kind };
69
+ }
70
+ return null;
71
+ }
72
+ async function readProcessTable(deps = {}) {
73
+ const run = deps.run || (() => new Promise((resolve) => {
74
+ // One `ps` for the whole machine, not one per pane.
75
+ (0, child_process_1.execFile)('ps', ['-A', '-o', 'pid=,ppid=,command='], { timeout: 5000, maxBuffer: 8 << 20 }, (err, stdout) => resolve(err ? '' : stdout));
76
+ }));
77
+ return parseProcessTable(await run());
78
+ }
79
+ //# sourceMappingURL=ai-session-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-session-detector.js","sourceRoot":"","sources":["../src/ai-session-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { AiKind, ProcRow } from './ai-session-detector';
2
+ import { LaunchedRecord } from './ai-launch';
3
+ import { AiEvent, AiStatus } from './ai-adapters';
4
+ import type { AiSessionSummary } from '@dialout/shared';
5
+ import { REPLAY_LIMIT } from '@dialout/shared';
6
+ export type { AiSessionSummary };
7
+ export { REPLAY_LIMIT };
8
+ export interface DiscoverDeps {
9
+ listSessions?: () => Promise<any[]>;
10
+ panePid?: (tmuxName: string) => number;
11
+ processTable?: () => Promise<ProcRow[]>;
12
+ locate?: (pid: number, kind: AiKind, exclude: Set<string>) => string | null;
13
+ procStartMs?: (pid: number) => number;
14
+ profileOf?: (pid: number) => string;
15
+ }
16
+ export declare function launchedTranscript(rec: LaunchedRecord): string;
17
+ export declare function listLaunchedSessions(): AiSessionSummary[];
18
+ export declare function discoverAiSessions(deps?: DiscoverDeps): Promise<AiSessionSummary[]>;
19
+ export interface CreateSessionOptions {
20
+ kind?: AiKind;
21
+ cwd: string;
22
+ prompt: string;
23
+ permissionMode?: string;
24
+ configHome?: string;
25
+ }
26
+ export declare function createAiSession(opts: CreateSessionOptions): string | null;
27
+ export declare function deleteAiSession(id: string): boolean;
28
+ export declare function openAiSession(tmuxName: string, onEvents: (events: AiEvent[], status: AiStatus) => void): void;
29
+ export declare function closeAiSession(tmuxName: string): void;
30
+ export declare function closeAllAiSessions(): void;
31
+ export declare function sendKeysArgs(tmuxName: string, text: string): string[][];
32
+ export interface SendDeps {
33
+ run?: (args: string[]) => void;
34
+ }
35
+ export declare function sendAiInput(tmuxName: string, text: string, deps?: SendDeps): void;
36
+ //# sourceMappingURL=ai-sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sessions.d.ts","sourceRoot":"","sources":["../src/ai-sessions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAqC,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE3F,OAAO,EACL,cAAc,EAEf,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAc,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,YAAY,EAAE,gBAAgB,EAAE,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,CAAC;AAWxB,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC;IAC5E,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC;AA6BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAS9D;AAKD,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAuBzD;AAED,wBAAsB,kBAAkB,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsD7F;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI,CA6BzE;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAOnD;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,KAAK,IAAI,GACtD,IAAI,CAyCN;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKrD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAYD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CASvE;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,QAAa,GAAG,IAAI,CAarF"}