discord-agent-bridge 0.1.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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/app.js +210 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/app.test.js +117 -0
  6. package/dist/app.test.js.map +1 -0
  7. package/dist/cli.js +63 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/cli.test.js +91 -0
  10. package/dist/cli.test.js.map +1 -0
  11. package/dist/core/auditLog.js +65 -0
  12. package/dist/core/auditLog.js.map +1 -0
  13. package/dist/core/auditLog.test.js +124 -0
  14. package/dist/core/auditLog.test.js.map +1 -0
  15. package/dist/core/auth.js +106 -0
  16. package/dist/core/auth.js.map +1 -0
  17. package/dist/core/auth.test.js +216 -0
  18. package/dist/core/auth.test.js.map +1 -0
  19. package/dist/core/channelRegistry.js +119 -0
  20. package/dist/core/channelRegistry.js.map +1 -0
  21. package/dist/core/channelRegistry.test.js +114 -0
  22. package/dist/core/channelRegistry.test.js.map +1 -0
  23. package/dist/core/commandPolicy.js +6 -0
  24. package/dist/core/commandPolicy.js.map +1 -0
  25. package/dist/core/commandRouter.js +9 -0
  26. package/dist/core/commandRouter.js.map +1 -0
  27. package/dist/core/config.js +141 -0
  28. package/dist/core/config.js.map +1 -0
  29. package/dist/core/config.test.js +149 -0
  30. package/dist/core/config.test.js.map +1 -0
  31. package/dist/core/configResolver.js +90 -0
  32. package/dist/core/configResolver.js.map +1 -0
  33. package/dist/core/configResolver.test.js +138 -0
  34. package/dist/core/configResolver.test.js.map +1 -0
  35. package/dist/core/configSchema.js +164 -0
  36. package/dist/core/configSchema.js.map +1 -0
  37. package/dist/core/contracts.js +5 -0
  38. package/dist/core/contracts.js.map +1 -0
  39. package/dist/core/eventBus.js +42 -0
  40. package/dist/core/eventBus.js.map +1 -0
  41. package/dist/core/eventBus.test.js +72 -0
  42. package/dist/core/eventBus.test.js.map +1 -0
  43. package/dist/core/hookBridge.js +11 -0
  44. package/dist/core/hookBridge.js.map +1 -0
  45. package/dist/core/logger.js +116 -0
  46. package/dist/core/logger.js.map +1 -0
  47. package/dist/core/logger.test.js +88 -0
  48. package/dist/core/logger.test.js.map +1 -0
  49. package/dist/core/modeRegistry.js +33 -0
  50. package/dist/core/modeRegistry.js.map +1 -0
  51. package/dist/core/permissionResolver.js +43 -0
  52. package/dist/core/permissionResolver.js.map +1 -0
  53. package/dist/core/permissionResolver.test.js +136 -0
  54. package/dist/core/permissionResolver.test.js.map +1 -0
  55. package/dist/core/providerCatalog.js +240 -0
  56. package/dist/core/providerCatalog.js.map +1 -0
  57. package/dist/core/providerCatalog.test.js +230 -0
  58. package/dist/core/providerCatalog.test.js.map +1 -0
  59. package/dist/core/sessionOrchestrator.js +463 -0
  60. package/dist/core/sessionOrchestrator.js.map +1 -0
  61. package/dist/core/sessionOrchestrator.test.js +344 -0
  62. package/dist/core/sessionOrchestrator.test.js.map +1 -0
  63. package/dist/core/state/schema.js +49 -0
  64. package/dist/core/state/schema.js.map +1 -0
  65. package/dist/core/state/store.js +86 -0
  66. package/dist/core/state/store.js.map +1 -0
  67. package/dist/core/state/store.test.js +99 -0
  68. package/dist/core/state/store.test.js.map +1 -0
  69. package/dist/core/usageService.js +310 -0
  70. package/dist/core/usageService.js.map +1 -0
  71. package/dist/core/usageService.test.js +234 -0
  72. package/dist/core/usageService.test.js.map +1 -0
  73. package/dist/discord/alwaysAllow.test.js +181 -0
  74. package/dist/discord/alwaysAllow.test.js.map +1 -0
  75. package/dist/discord/client.js +666 -0
  76. package/dist/discord/client.js.map +1 -0
  77. package/dist/discord/client.test.js +256 -0
  78. package/dist/discord/client.test.js.map +1 -0
  79. package/dist/discord/configPanel.js +270 -0
  80. package/dist/discord/configPanel.js.map +1 -0
  81. package/dist/discord/configPanel.test.js +332 -0
  82. package/dist/discord/configPanel.test.js.map +1 -0
  83. package/dist/discord/directoryBrowser.js +151 -0
  84. package/dist/discord/directoryBrowser.js.map +1 -0
  85. package/dist/discord/directoryBrowser.test.js +163 -0
  86. package/dist/discord/directoryBrowser.test.js.map +1 -0
  87. package/dist/discord/favorites.js +10 -0
  88. package/dist/discord/favorites.js.map +1 -0
  89. package/dist/discord/fileDownload.js +94 -0
  90. package/dist/discord/fileDownload.js.map +1 -0
  91. package/dist/discord/fileDownload.test.js +59 -0
  92. package/dist/discord/fileDownload.test.js.map +1 -0
  93. package/dist/discord/format.js +104 -0
  94. package/dist/discord/format.js.map +1 -0
  95. package/dist/discord/format.test.js +40 -0
  96. package/dist/discord/format.test.js.map +1 -0
  97. package/dist/discord/guildChannels.js +97 -0
  98. package/dist/discord/guildChannels.js.map +1 -0
  99. package/dist/discord/guildChannels.test.js +231 -0
  100. package/dist/discord/guildChannels.test.js.map +1 -0
  101. package/dist/discord/i18n.js +207 -0
  102. package/dist/discord/i18n.js.map +1 -0
  103. package/dist/discord/i18n.test.js +31 -0
  104. package/dist/discord/i18n.test.js.map +1 -0
  105. package/dist/discord/interactionRouter.js +954 -0
  106. package/dist/discord/interactionRouter.js.map +1 -0
  107. package/dist/discord/interactionRouter.test.js +1245 -0
  108. package/dist/discord/interactionRouter.test.js.map +1 -0
  109. package/dist/discord/messageRouter.js +221 -0
  110. package/dist/discord/messageRouter.js.map +1 -0
  111. package/dist/discord/messageRouter.test.js +360 -0
  112. package/dist/discord/messageRouter.test.js.map +1 -0
  113. package/dist/discord/ports.js +12 -0
  114. package/dist/discord/ports.js.map +1 -0
  115. package/dist/discord/renderers/defaultSet.test.js +97 -0
  116. package/dist/discord/renderers/defaultSet.test.js.map +1 -0
  117. package/dist/discord/renderers/diffView.js +73 -0
  118. package/dist/discord/renderers/diffView.js.map +1 -0
  119. package/dist/discord/renderers/diffView.test.js +54 -0
  120. package/dist/discord/renderers/diffView.test.js.map +1 -0
  121. package/dist/discord/renderers/index.js +143 -0
  122. package/dist/discord/renderers/index.js.map +1 -0
  123. package/dist/discord/renderers/index.test.js +124 -0
  124. package/dist/discord/renderers/index.test.js.map +1 -0
  125. package/dist/discord/renderers/mentionOnComplete.js +19 -0
  126. package/dist/discord/renderers/mentionOnComplete.js.map +1 -0
  127. package/dist/discord/renderers/mentionOnComplete.test.js +35 -0
  128. package/dist/discord/renderers/mentionOnComplete.test.js.map +1 -0
  129. package/dist/discord/renderers/permissionButtons.js +150 -0
  130. package/dist/discord/renderers/permissionButtons.js.map +1 -0
  131. package/dist/discord/renderers/permissionButtons.test.js +108 -0
  132. package/dist/discord/renderers/permissionButtons.test.js.map +1 -0
  133. package/dist/discord/renderers/resultLine.js +25 -0
  134. package/dist/discord/renderers/resultLine.js.map +1 -0
  135. package/dist/discord/renderers/statusEmbed.js +20 -0
  136. package/dist/discord/renderers/statusEmbed.js.map +1 -0
  137. package/dist/discord/renderers/statusEmbed.test.js +32 -0
  138. package/dist/discord/renderers/statusEmbed.test.js.map +1 -0
  139. package/dist/discord/renderers/streamEmbed.js +134 -0
  140. package/dist/discord/renderers/streamEmbed.js.map +1 -0
  141. package/dist/discord/renderers/streamEmbed.test.js +97 -0
  142. package/dist/discord/renderers/streamEmbed.test.js.map +1 -0
  143. package/dist/discord/renderers/toolThread.js +65 -0
  144. package/dist/discord/renderers/toolThread.js.map +1 -0
  145. package/dist/discord/renderers/toolThread.test.js +54 -0
  146. package/dist/discord/renderers/toolThread.test.js.map +1 -0
  147. package/dist/discord/renderers/transcriptFeed.js +33 -0
  148. package/dist/discord/renderers/transcriptFeed.js.map +1 -0
  149. package/dist/discord/renderers/usageEmbed.js +78 -0
  150. package/dist/discord/renderers/usageEmbed.js.map +1 -0
  151. package/dist/discord/renderers/usageEmbed.test.js +42 -0
  152. package/dist/discord/renderers/usageEmbed.test.js.map +1 -0
  153. package/dist/discord/wiring.js +214 -0
  154. package/dist/discord/wiring.js.map +1 -0
  155. package/dist/discord/wiring.test.js +252 -0
  156. package/dist/discord/wiring.test.js.map +1 -0
  157. package/dist/discord/wizard/channelWizard.js +305 -0
  158. package/dist/discord/wizard/channelWizard.js.map +1 -0
  159. package/dist/discord/wizard/channelWizard.test.js +298 -0
  160. package/dist/discord/wizard/channelWizard.test.js.map +1 -0
  161. package/dist/discord/wizard/resumeWizard.js +123 -0
  162. package/dist/discord/wizard/resumeWizard.js.map +1 -0
  163. package/dist/modes/claude/index.js +80 -0
  164. package/dist/modes/claude/index.js.map +1 -0
  165. package/dist/modes/claude/listResumable.test.js +72 -0
  166. package/dist/modes/claude/listResumable.test.js.map +1 -0
  167. package/dist/modes/claude/mcpFileTool.js +82 -0
  168. package/dist/modes/claude/mcpFileTool.js.map +1 -0
  169. package/dist/modes/claude/permissions.js +35 -0
  170. package/dist/modes/claude/permissions.js.map +1 -0
  171. package/dist/modes/claude/plugins.js +56 -0
  172. package/dist/modes/claude/plugins.js.map +1 -0
  173. package/dist/modes/claude/session.js +324 -0
  174. package/dist/modes/claude/session.js.map +1 -0
  175. package/dist/modes/claude/session.test.js +415 -0
  176. package/dist/modes/claude/session.test.js.map +1 -0
  177. package/dist/modes/codex/discovery.js +221 -0
  178. package/dist/modes/codex/discovery.js.map +1 -0
  179. package/dist/modes/codex/discovery.test.js +213 -0
  180. package/dist/modes/codex/discovery.test.js.map +1 -0
  181. package/dist/modes/codex/eventMapper.js +262 -0
  182. package/dist/modes/codex/eventMapper.js.map +1 -0
  183. package/dist/modes/codex/index.js +132 -0
  184. package/dist/modes/codex/index.js.map +1 -0
  185. package/dist/modes/codex/index.test.js +170 -0
  186. package/dist/modes/codex/index.test.js.map +1 -0
  187. package/dist/modes/codex/runner.js +207 -0
  188. package/dist/modes/codex/runner.js.map +1 -0
  189. package/dist/modes/codex/runner.test.js +587 -0
  190. package/dist/modes/codex/runner.test.js.map +1 -0
  191. package/dist/modes/codex/sqliteReader.js +171 -0
  192. package/dist/modes/codex/sqliteReader.js.map +1 -0
  193. package/dist/modes/codex/sqliteReader.test.js +137 -0
  194. package/dist/modes/codex/sqliteReader.test.js.map +1 -0
  195. package/dist/setup/wizard.js +115 -0
  196. package/dist/setup/wizard.js.map +1 -0
  197. package/dist/setup/wizard.test.js +216 -0
  198. package/dist/setup/wizard.test.js.map +1 -0
  199. package/dist/startBot.test.js +78 -0
  200. package/dist/startBot.test.js.map +1 -0
  201. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/modes/codex/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ import { describe, it, expect, beforeAll } from 'vitest';
2
+ import initSqlJs from 'sql.js';
3
+ import { createRequire } from 'node:module';
4
+ import { mkdtemp, mkdir, writeFile, rm } from 'node:fs/promises';
5
+ import * as os from 'node:os';
6
+ import * as path from 'node:path';
7
+ import { CodexSqliteReader } from './sqliteReader.js';
8
+ import { CodexDiscovery } from './discovery.js';
9
+ const require = createRequire(import.meta.url);
10
+ let SQL;
11
+ beforeAll(async () => {
12
+ const wasmPath = require.resolve('sql.js/dist/sql-wasm.wasm');
13
+ SQL = await initSqlJs({ locateFile: () => wasmPath });
14
+ });
15
+ // A recording logger so the fallback test can assert a visible warning.
16
+ function makeLogger() {
17
+ const warnCalls = [];
18
+ const logger = {
19
+ debug: () => { },
20
+ info: () => { },
21
+ warn: (...meta) => warnCalls.push(meta),
22
+ error: () => { },
23
+ };
24
+ return { logger, warnCalls };
25
+ }
26
+ // Session ids are real 36-char hex UUIDs so they match both the rollout
27
+ // filename regex and the on-disk session id (as codex actually stores them).
28
+ const ID = {
29
+ user1: '11111111-1111-1111-1111-111111111111',
30
+ user2: '22222222-2222-2222-2222-222222222222',
31
+ archived: '33333333-3333-3333-3333-333333333333',
32
+ sub: '44444444-4444-4444-4444-444444444444',
33
+ exec: '55555555-5555-5555-5555-555555555555',
34
+ };
35
+ function buildStateBytes() {
36
+ const db = new SQL.Database();
37
+ db.run(`CREATE TABLE threads (
38
+ id TEXT, cwd TEXT, title TEXT, preview TEXT,
39
+ updated_at_ms INTEGER, archived INTEGER, source TEXT
40
+ );
41
+ CREATE TABLE thread_spawn_edges (child_thread_id TEXT);`);
42
+ db.run(`INSERT INTO threads (id, cwd, title, preview, updated_at_ms, archived, source)
43
+ VALUES ('${ID.user1}', '/work/user-1', 'From SQLite', 'preview', 3000, 0, 'cli');`);
44
+ // A user thread with no title → label falls back to preview.
45
+ db.run(`INSERT INTO threads (id, cwd, preview, updated_at_ms, archived, source)
46
+ VALUES ('${ID.user2}', '/work/user-2', 'Preview label', 2500, 0, 'vscode');`);
47
+ db.run(`INSERT INTO threads (id, cwd, title, updated_at_ms, archived, source)
48
+ VALUES ('${ID.archived}', '/work/arch', 'Archived', 2000, 1, 'cli');`);
49
+ db.run(`INSERT INTO threads (id, cwd, updated_at_ms, archived, source)
50
+ VALUES ('${ID.sub}', '/work/sub', 1900, 0, '{"subagent":{}}');`);
51
+ db.run(`INSERT INTO thread_spawn_edges (child_thread_id) VALUES ('${ID.sub}');`);
52
+ db.run(`INSERT INTO threads (id, cwd, updated_at_ms, archived, source)
53
+ VALUES ('${ID.exec}', '/work/exec', 1800, 0, 'exec');`);
54
+ const bytes = db.export();
55
+ db.close();
56
+ return bytes;
57
+ }
58
+ function indexLine(id, threadName, updatedAt) {
59
+ return JSON.stringify({ id, thread_name: threadName, updated_at: updatedAt });
60
+ }
61
+ function rolloutMeta(id, cwd) {
62
+ return JSON.stringify({ type: 'session_meta', payload: { id, cwd, cli_version: '0.142.4' } });
63
+ }
64
+ // Lay out a temp ~/.codex: session_index.jsonl, a few rollout files under
65
+ // sessions/2026/07/01, and (optionally) a state_2.sqlite fixture.
66
+ async function makeCodexHome(dir, opts = {}) {
67
+ const lines = [
68
+ indexLine(ID.user1, 'user-1 name', '2026-07-01T10:00:00Z'),
69
+ indexLine(ID.user2, 'user-2 name', '2026-07-01T09:00:00Z'),
70
+ indexLine(ID.archived, 'archived name', '2026-07-01T08:00:00Z'),
71
+ indexLine(ID.sub, 'sub name', '2026-07-01T07:00:00Z'),
72
+ indexLine(ID.exec, 'exec name', '2026-07-01T06:00:00Z'),
73
+ ];
74
+ await writeFile(path.join(dir, 'session_index.jsonl'), lines.join('\n') + '\n');
75
+ const day = path.join(dir, 'sessions', '2026', '07', '01');
76
+ await mkdir(day, { recursive: true });
77
+ const rollout = (uuid, cwd) => writeFile(path.join(day, `rollout-2026-07-01T10-00-00-${uuid}.jsonl`), rolloutMeta(uuid, cwd) + '\n' + JSON.stringify({ type: 'response_item' }) + '\n');
78
+ // Rollout files for the two user threads (cwd hint source in the fallback path).
79
+ await rollout(ID.user1, '/rollout/user-1');
80
+ await rollout(ID.user2, '/rollout/user-2');
81
+ if (opts.corruptState) {
82
+ await writeFile(path.join(dir, 'state_2.sqlite'), Buffer.from('corrupt', 'utf8'));
83
+ }
84
+ else if (opts.writeState) {
85
+ await writeFile(path.join(dir, 'state_2.sqlite'), Buffer.from(buildStateBytes()));
86
+ }
87
+ if (opts.archivedIds && opts.archivedIds.length > 0) {
88
+ const archivedDay = path.join(dir, 'archived_sessions', '2026', '07', '01');
89
+ await mkdir(archivedDay, { recursive: true });
90
+ for (const id of opts.archivedIds) {
91
+ await writeFile(path.join(archivedDay, `rollout-2026-07-01T05-00-00-${id}.jsonl`), rolloutMeta(id, '/archived') + '\n');
92
+ }
93
+ }
94
+ }
95
+ async function withCodexHome(opts, fn) {
96
+ const dir = await mkdtemp(path.join(os.tmpdir(), 'dab-codexhome-'));
97
+ try {
98
+ await makeCodexHome(dir, opts);
99
+ return await fn(dir);
100
+ }
101
+ finally {
102
+ await rm(dir, { recursive: true, force: true });
103
+ }
104
+ }
105
+ function makeReader() {
106
+ return new CodexSqliteReader({ loadSql: async () => SQL });
107
+ }
108
+ describe('CodexDiscovery.listResumable (state db present)', () => {
109
+ it('lists only resumable user threads, sorted by recency', async () => {
110
+ await withCodexHome({ writeState: true }, async (dir) => {
111
+ const discovery = new CodexDiscovery({ reader: makeReader() });
112
+ const sessions = await discovery.listResumable(dir);
113
+ // archived (archived), sub (sub-agent), exec (exec source) excluded.
114
+ expect(sessions.map((s) => s.sessionId)).toEqual([ID.user1, ID.user2]);
115
+ });
116
+ });
117
+ it('labels from sqlite title, then preview; cwd comes from sqlite', async () => {
118
+ await withCodexHome({ writeState: true }, async (dir) => {
119
+ const discovery = new CodexDiscovery({ reader: makeReader() });
120
+ const sessions = await discovery.listResumable(dir);
121
+ const byId = new Map(sessions.map((s) => [s.sessionId, s]));
122
+ expect(byId.get(ID.user1)).toMatchObject({
123
+ label: 'From SQLite',
124
+ cwd: '/work/user-1',
125
+ updatedAt: '2026-07-01T10:00:00Z',
126
+ });
127
+ expect(byId.get(ID.user2)?.label).toBe('Preview label');
128
+ });
129
+ });
130
+ it('includes sub-agents when includeSubAgents is set', async () => {
131
+ await withCodexHome({ writeState: true }, async (dir) => {
132
+ const discovery = new CodexDiscovery({ reader: makeReader() });
133
+ const sessions = await discovery.listResumable(dir, { includeSubAgents: true });
134
+ expect(sessions.map((s) => s.sessionId)).toContain(ID.sub);
135
+ // archived + exec still excluded even with sub-agents included.
136
+ expect(sessions.map((s) => s.sessionId)).not.toContain(ID.archived);
137
+ expect(sessions.map((s) => s.sessionId)).not.toContain(ID.exec);
138
+ });
139
+ });
140
+ });
141
+ describe('CodexDiscovery.listResumable (fallback)', () => {
142
+ it('falls back to the index (no filtering) and warns when the db is unreadable', async () => {
143
+ await withCodexHome({ corruptState: true }, async (dir) => {
144
+ const { logger, warnCalls } = makeLogger();
145
+ const discovery = new CodexDiscovery({ reader: makeReader(), logger });
146
+ const sessions = await discovery.listResumable(dir);
147
+ // No thread state → everything from the index is listed, unfiltered.
148
+ expect(sessions.map((s) => s.sessionId).sort()).toEqual([ID.user1, ID.user2, ID.archived, ID.sub, ID.exec].sort());
149
+ // cwd for rollout-backed sessions still populated from session_meta.
150
+ const byId = new Map(sessions.map((s) => [s.sessionId, s]));
151
+ expect(byId.get(ID.user1)?.cwd).toBe('/rollout/user-1');
152
+ // Label falls back to the index thread_name (no sqlite title/preview).
153
+ expect(byId.get(ID.user1)?.label).toBe('user-1 name');
154
+ expect(warnCalls.length).toBeGreaterThan(0);
155
+ });
156
+ });
157
+ it('falls back when no state db exists at all', async () => {
158
+ await withCodexHome({}, async (dir) => {
159
+ const { logger, warnCalls } = makeLogger();
160
+ const discovery = new CodexDiscovery({ reader: makeReader(), logger });
161
+ const sessions = await discovery.listResumable(dir);
162
+ expect(sessions.length).toBe(5);
163
+ expect(warnCalls.length).toBeGreaterThan(0);
164
+ });
165
+ });
166
+ it('still EXCLUDES ids present under archived_sessions/ in the index-only fallback (P2-2 Q3)', async () => {
167
+ // db unreadable → fallback; but ID.archived also lives under archived_sessions/,
168
+ // so it must not reappear.
169
+ await withCodexHome({ corruptState: true, archivedIds: [ID.archived] }, async (dir) => {
170
+ const { logger } = makeLogger();
171
+ const discovery = new CodexDiscovery({ reader: makeReader(), logger });
172
+ const sessions = await discovery.listResumable(dir);
173
+ const ids = sessions.map((s) => s.sessionId);
174
+ expect(ids).not.toContain(ID.archived);
175
+ // The other (non-archived) index entries are still listed.
176
+ expect(ids.sort()).toEqual([ID.user1, ID.user2, ID.sub, ID.exec].sort());
177
+ });
178
+ });
179
+ it('tolerates a missing archived_sessions/ dir in the fallback (no exclusion, no throw)', async () => {
180
+ await withCodexHome({ corruptState: true }, async (dir) => {
181
+ const { logger } = makeLogger();
182
+ const discovery = new CodexDiscovery({ reader: makeReader(), logger });
183
+ const sessions = await discovery.listResumable(dir);
184
+ expect(sessions.length).toBe(5); // no archived_sessions/ → nothing excluded
185
+ });
186
+ });
187
+ });
188
+ describe('CodexDiscovery.listResumable (fail-safe exclude)', () => {
189
+ it('excludes an index session that has no row in threads', async () => {
190
+ await withCodexHome({ writeState: true }, async (dir) => {
191
+ const ghost = '99999999-9999-9999-9999-999999999999';
192
+ // Append an index entry with no corresponding threads row.
193
+ await writeFile(path.join(dir, 'session_index.jsonl'), indexLine(ghost, 'ghost name', '2026-07-01T11:00:00Z') + '\n', { flag: 'a' });
194
+ const discovery = new CodexDiscovery({ reader: makeReader() });
195
+ const sessions = await discovery.listResumable(dir);
196
+ expect(sessions.map((s) => s.sessionId)).not.toContain(ghost);
197
+ expect(sessions.map((s) => s.sessionId)).toEqual([ID.user1, ID.user2]);
198
+ });
199
+ });
200
+ });
201
+ describe('CodexDiscovery.listResumable (edges)', () => {
202
+ it('returns an empty list when there is no session_index.jsonl', async () => {
203
+ const dir = await mkdtemp(path.join(os.tmpdir(), 'dab-empty-'));
204
+ try {
205
+ const discovery = new CodexDiscovery({ reader: makeReader() });
206
+ expect(await discovery.listResumable(dir)).toEqual([]);
207
+ }
208
+ finally {
209
+ await rm(dir, { recursive: true, force: true });
210
+ }
211
+ });
212
+ });
213
+ //# sourceMappingURL=discovery.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.test.js","sourceRoot":"","sources":["../../../src/modes/codex/discovery.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,262 @@
1
+ // Codex `exec --json` stream → normalized AgentEvent mapping (§5b).
2
+ //
3
+ // This parses the EXPERIMENTAL JSON event stream (`thread.*` / `turn.*` /
4
+ // `item.*`) that `codex exec --json` prints to stdout — NOT the on-disk rollout
5
+ // schema (`response_item` / `event_msg`), which is what discovery.ts reads.
6
+ // The mapper is a pure function: one raw stdout line in, zero-or-more
7
+ // AgentEvents (plus an optionally-captured sessionId) out. It NEVER throws and
8
+ // NEVER silently drops — an unrecognized line is logged at debug and skipped so
9
+ // a future Codex event kind can never crash the stream (C2, §5b).
10
+ //
11
+ // Tolerance note: the primary schema is the `thread.*`/`turn.*`/`item.*` stream,
12
+ // but a small fallback also understands the alternate on-disk-ish
13
+ // `event_msg`/`response_item` agent-message shapes (as CDC's runner does) in
14
+ // case of stream drift between CLI versions.
15
+ // The Korean operation-progress labels surfaced for in-flight items (§5b).
16
+ const PROGRESS_LABELS = {
17
+ commandExecution: '명령 실행 중',
18
+ fileChange: '파일 수정 중',
19
+ fileSearch: '파일 탐색 중',
20
+ webSearch: '웹 검색 중',
21
+ image: '이미지 생성 중',
22
+ mcpToolCall: '도구 실행 중',
23
+ };
24
+ const EMPTY = { events: [] };
25
+ // Map a single raw stdout line to AgentEvents. `line` is a raw string (possibly
26
+ // non-JSON, e.g. the deprecation warning); parsing and shape-guarding happen
27
+ // here. `idFor` mints a stable id for tool_use/tool_result correlation when the
28
+ // item carries none (the AgentEvent union requires an id on those kinds).
29
+ export function mapCodexLine(line, logger, idFor) {
30
+ const trimmed = line.trim();
31
+ if (trimmed.length === 0)
32
+ return EMPTY;
33
+ let parsed;
34
+ try {
35
+ parsed = JSON.parse(trimmed);
36
+ }
37
+ catch {
38
+ // Non-JSON line (e.g. a CLI deprecation warning). Log, never throw.
39
+ logger.debug('unrecognized codex event', { type: 'non-json', line: trimmed });
40
+ return EMPTY;
41
+ }
42
+ if (typeof parsed !== 'object' || parsed === null) {
43
+ logger.debug('unrecognized codex event', { type: 'non-object' });
44
+ return EMPTY;
45
+ }
46
+ const event = parsed;
47
+ const type = typeof event.type === 'string' ? event.type : undefined;
48
+ switch (type) {
49
+ case 'thread.started':
50
+ return typeof event.thread_id === 'string'
51
+ ? { events: [], sessionId: event.thread_id }
52
+ : EMPTY;
53
+ case 'turn.started':
54
+ // Optional coarse progress; a bare "working…" tick.
55
+ return EMPTY;
56
+ case 'item.started':
57
+ return mapItemStarted(event);
58
+ case 'item.completed':
59
+ return mapItemCompleted(event, idFor);
60
+ case 'turn.completed':
61
+ return mapTurnCompleted(event);
62
+ case 'turn.failed':
63
+ case 'thread.failed':
64
+ return mapFailure(event);
65
+ // Fallback: alternate on-disk-ish shapes in case of stream drift (CDC parity).
66
+ case 'event_msg':
67
+ case 'response_item': {
68
+ const text = fallbackAgentMessage(event);
69
+ if (text !== null)
70
+ return { events: [{ kind: 'text', text, delta: false }] };
71
+ logger.debug('unrecognized codex event', { type });
72
+ return EMPTY;
73
+ }
74
+ default:
75
+ logger.debug('unrecognized codex event', { type: type ?? 'missing' });
76
+ return EMPTY;
77
+ }
78
+ }
79
+ // `item.started` → a coarse progress event classified by item type. Unknown
80
+ // item types are dropped (in-flight progress is best-effort, not authoritative).
81
+ function mapItemStarted(event) {
82
+ const item = asRecord(event.item);
83
+ if (!item)
84
+ return EMPTY;
85
+ const itemType = typeof item.type === 'string' ? item.type : '';
86
+ const progress = progressForItem(itemType, item);
87
+ return progress ? { events: [progress] } : EMPTY;
88
+ }
89
+ // Build the operation-progress event for an in-flight item, or null if the item
90
+ // type carries no meaningful progress label.
91
+ function progressForItem(itemType, item) {
92
+ switch (itemType) {
93
+ case 'command_execution': {
94
+ const detail = optString(item.command);
95
+ return progress(PROGRESS_LABELS.commandExecution, detail);
96
+ }
97
+ case 'file_change':
98
+ return progress(PROGRESS_LABELS.fileChange, fileChangeDetail(item));
99
+ case 'web_search': {
100
+ const detail = optString(item.query);
101
+ return progress(PROGRESS_LABELS.webSearch, detail);
102
+ }
103
+ case 'mcp_tool_call': {
104
+ const detail = optString(item.tool) ?? optString(item.server);
105
+ return progress(PROGRESS_LABELS.mcpToolCall, detail);
106
+ }
107
+ case 'image':
108
+ return progress(PROGRESS_LABELS.image);
109
+ case 'file_search':
110
+ return progress(PROGRESS_LABELS.fileSearch);
111
+ default:
112
+ return null;
113
+ }
114
+ }
115
+ // `item.completed` → the terminal events for a finished item (§5b).
116
+ function mapItemCompleted(event, idFor) {
117
+ const item = asRecord(event.item);
118
+ if (!item)
119
+ return EMPTY;
120
+ const itemType = typeof item.type === 'string' ? item.type : '';
121
+ switch (itemType) {
122
+ case 'agent_message': {
123
+ const text = optString(item.text);
124
+ return text !== undefined ? { events: [{ kind: 'text', text, delta: false }] } : EMPTY;
125
+ }
126
+ case 'reasoning':
127
+ // Codex Capabilities.thinking is false (§5b): never surface thinking.
128
+ return EMPTY;
129
+ case 'command_execution': {
130
+ const id = idFor(item);
131
+ const command = optString(item.command) ?? '';
132
+ const output = optString(item.aggregated_output) ?? '';
133
+ const exitCode = typeof item.exit_code === 'number' ? item.exit_code : null;
134
+ return {
135
+ events: [
136
+ { kind: 'tool_use', id, name: 'shell', input: { command } },
137
+ { kind: 'tool_result', id, ok: exitCode === 0, content: output },
138
+ ],
139
+ };
140
+ }
141
+ case 'file_change': {
142
+ const id = idFor(item);
143
+ const changes = Array.isArray(item.changes) ? item.changes : [];
144
+ return { events: [{ kind: 'tool_use', id, name: 'apply_patch', input: { changes } }] };
145
+ }
146
+ case 'mcp_tool_call': {
147
+ const id = idFor(item);
148
+ const name = optString(item.tool) ?? optString(item.name) ?? 'mcp_tool_call';
149
+ const input = item.arguments ?? item.input ?? {};
150
+ const events = [{ kind: 'tool_use', id, name, input }];
151
+ const result = optString(item.result) ?? optString(item.output);
152
+ if (result !== undefined) {
153
+ const ok = item.status !== 'failed' && item.error === undefined;
154
+ events.push({ kind: 'tool_result', id, ok, content: result });
155
+ }
156
+ return { events };
157
+ }
158
+ case 'web_search': {
159
+ const id = idFor(item);
160
+ const query = optString(item.query);
161
+ return { events: [{ kind: 'tool_use', id, name: 'web_search', input: query !== undefined ? { query } : {} }] };
162
+ }
163
+ case 'error': {
164
+ const message = optString(item.message) ?? 'Codex reported an error.';
165
+ return { events: [{ kind: 'error', message, retryable: false }] };
166
+ }
167
+ default:
168
+ // Unknown item type — logged by the caller only for the top-level `type`;
169
+ // an unrecognized item subtype is a benign drop of a completed item.
170
+ return EMPTY;
171
+ }
172
+ }
173
+ // `turn.completed` → a result event carrying token counts only. Codex has no
174
+ // usage/context panel (usagePanel:false), so NO context_usage is ever emitted
175
+ // and the result text is left to the runner (authoritative -o file).
176
+ function mapTurnCompleted(event) {
177
+ const usage = asRecord(event.usage);
178
+ const result = { kind: 'result' };
179
+ if (usage) {
180
+ if (typeof usage.input_tokens === 'number')
181
+ result.tokensIn = usage.input_tokens;
182
+ if (typeof usage.output_tokens === 'number')
183
+ result.tokensOut = usage.output_tokens;
184
+ }
185
+ return { events: [result] };
186
+ }
187
+ // `turn.failed` / `thread.failed` → a non-retryable error event.
188
+ function mapFailure(event) {
189
+ const error = asRecord(event.error);
190
+ const message = (error && optString(error.message)) ?? optString(event.message) ?? 'Codex turn failed.';
191
+ return { events: [{ kind: 'error', message, retryable: false }] };
192
+ }
193
+ // Fallback agent-message extraction for the alternate `event_msg`/`response_item`
194
+ // shapes, mirroring CDC's tolerant runner. Returns null when the line is not an
195
+ // agent message under either shape.
196
+ function fallbackAgentMessage(event) {
197
+ const payload = asRecord(event.payload);
198
+ if (!payload)
199
+ return null;
200
+ const payloadType = typeof payload.type === 'string' ? payload.type : '';
201
+ if (event.type === 'event_msg') {
202
+ if (payloadType === 'agent_message') {
203
+ const text = optString(payload.message);
204
+ if (text !== undefined && text.trim().length > 0)
205
+ return text.trim();
206
+ }
207
+ if (payloadType === 'task_complete') {
208
+ const text = optString(payload.last_agent_message);
209
+ if (text !== undefined && text.trim().length > 0)
210
+ return text.trim();
211
+ }
212
+ return null;
213
+ }
214
+ // response_item message from the assistant.
215
+ if (payloadType === 'message' && payload.role === 'assistant') {
216
+ const text = contentText(payload.content);
217
+ return text.length > 0 ? text : null;
218
+ }
219
+ return null;
220
+ }
221
+ // ---- shape helpers ----------------------------------------------------------
222
+ function progress(label, detail) {
223
+ return detail !== undefined ? { kind: 'progress', label, detail } : { kind: 'progress', label };
224
+ }
225
+ // A compact single-line detail for a file_change item's affected paths.
226
+ function fileChangeDetail(item) {
227
+ if (!Array.isArray(item.changes))
228
+ return undefined;
229
+ const paths = item.changes
230
+ .map((c) => (typeof c.path === 'string' ? c.path : ''))
231
+ .filter((p) => p.length > 0);
232
+ if (paths.length === 0)
233
+ return undefined;
234
+ return paths.length === 1 ? paths[0] : `${paths.length}개 파일`;
235
+ }
236
+ function asRecord(value) {
237
+ return typeof value === 'object' && value !== null && !Array.isArray(value)
238
+ ? value
239
+ : undefined;
240
+ }
241
+ // A non-empty trimmed string, or undefined. Used to guard optional string fields.
242
+ function optString(value) {
243
+ return typeof value === 'string' ? value : undefined;
244
+ }
245
+ // Flatten a `response_item` content (string, or array of text blocks) to a string.
246
+ function contentText(content) {
247
+ if (typeof content === 'string')
248
+ return content.trim();
249
+ if (!Array.isArray(content))
250
+ return '';
251
+ return content
252
+ .map((part) => {
253
+ if (typeof part === 'string')
254
+ return part;
255
+ const rec = asRecord(part);
256
+ return rec && typeof rec.text === 'string' ? rec.text : '';
257
+ })
258
+ .map((t) => t.trim())
259
+ .filter((t) => t.length > 0)
260
+ .join('\n');
261
+ }
262
+ //# sourceMappingURL=eventMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventMapper.js","sourceRoot":"","sources":["../../../src/modes/codex/eventMapper.ts"],"names":[],"mappings":"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"}