@agents-tower/core 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 (178) hide show
  1. package/dist/adapters/claude.d.ts +2 -0
  2. package/dist/adapters/claude.js +43 -0
  3. package/dist/adapters/claude.js.map +1 -0
  4. package/dist/adapters/codex-cloud.d.ts +4 -0
  5. package/dist/adapters/codex-cloud.js +80 -0
  6. package/dist/adapters/codex-cloud.js.map +1 -0
  7. package/dist/adapters/codex-local.d.ts +17 -0
  8. package/dist/adapters/codex-local.js +180 -0
  9. package/dist/adapters/codex-local.js.map +1 -0
  10. package/dist/adapters/cursor-cloud.d.ts +2 -0
  11. package/dist/adapters/cursor-cloud.js +54 -0
  12. package/dist/adapters/cursor-cloud.js.map +1 -0
  13. package/dist/adapters/cursor-local.d.ts +2 -0
  14. package/dist/adapters/cursor-local.js +37 -0
  15. package/dist/adapters/cursor-local.js.map +1 -0
  16. package/dist/adapters/helpers.d.ts +15 -0
  17. package/dist/adapters/helpers.js +33 -0
  18. package/dist/adapters/helpers.js.map +1 -0
  19. package/dist/adapters/hermes.d.ts +2 -0
  20. package/dist/adapters/hermes.js +41 -0
  21. package/dist/adapters/hermes.js.map +1 -0
  22. package/dist/adapters/index.d.ts +2 -0
  23. package/dist/adapters/index.js +37 -0
  24. package/dist/adapters/index.js.map +1 -0
  25. package/dist/adapters/openclaw.d.ts +2 -0
  26. package/dist/adapters/openclaw.js +41 -0
  27. package/dist/adapters/openclaw.js.map +1 -0
  28. package/dist/adapters/presence.d.ts +2 -0
  29. package/dist/adapters/presence.js +36 -0
  30. package/dist/adapters/presence.js.map +1 -0
  31. package/dist/adapters/static-source.d.ts +15 -0
  32. package/dist/adapters/static-source.js +41 -0
  33. package/dist/adapters/static-source.js.map +1 -0
  34. package/dist/adapters/types.d.ts +44 -0
  35. package/dist/adapters/types.js +3 -0
  36. package/dist/adapters/types.js.map +1 -0
  37. package/dist/app-server.d.ts +94 -0
  38. package/dist/app-server.js +382 -0
  39. package/dist/app-server.js.map +1 -0
  40. package/dist/app-settings.d.ts +52 -0
  41. package/dist/app-settings.js +268 -0
  42. package/dist/app-settings.js.map +1 -0
  43. package/dist/appearance.d.ts +6 -0
  44. package/dist/appearance.js +84 -0
  45. package/dist/appearance.js.map +1 -0
  46. package/dist/aseprite.d.ts +4 -0
  47. package/dist/aseprite.js +42 -0
  48. package/dist/aseprite.js.map +1 -0
  49. package/dist/claude-agent-sdk.d.ts +44 -0
  50. package/dist/claude-agent-sdk.js +347 -0
  51. package/dist/claude-agent-sdk.js.map +1 -0
  52. package/dist/claude-home-cache.d.ts +61 -0
  53. package/dist/claude-home-cache.js +438 -0
  54. package/dist/claude-home-cache.js.map +1 -0
  55. package/dist/claude.d.ts +154 -0
  56. package/dist/claude.js +3495 -0
  57. package/dist/claude.js.map +1 -0
  58. package/dist/cloud.d.ts +2 -0
  59. package/dist/cloud.js +25 -0
  60. package/dist/cloud.js.map +1 -0
  61. package/dist/codex-command.d.ts +25 -0
  62. package/dist/codex-command.js +235 -0
  63. package/dist/codex-command.js.map +1 -0
  64. package/dist/codex-session-files.d.ts +8 -0
  65. package/dist/codex-session-files.js +509 -0
  66. package/dist/codex-session-files.js.map +1 -0
  67. package/dist/codex-thread-query.d.ts +14 -0
  68. package/dist/codex-thread-query.js +82 -0
  69. package/dist/codex-thread-query.js.map +1 -0
  70. package/dist/cursor-cloud-data.d.ts +34 -0
  71. package/dist/cursor-cloud-data.js +344 -0
  72. package/dist/cursor-cloud-data.js.map +1 -0
  73. package/dist/cursor-lib/local-discovery.d.ts +17 -0
  74. package/dist/cursor-lib/local-discovery.js +251 -0
  75. package/dist/cursor-lib/local-discovery.js.map +1 -0
  76. package/dist/cursor-lib/shared.d.ts +5 -0
  77. package/dist/cursor-lib/shared.js +88 -0
  78. package/dist/cursor-lib/shared.js.map +1 -0
  79. package/dist/cursor.d.ts +8 -0
  80. package/dist/cursor.js +1584 -0
  81. package/dist/cursor.js.map +1 -0
  82. package/dist/domain/codex-turn-semantics.d.ts +4 -0
  83. package/dist/domain/codex-turn-semantics.js +49 -0
  84. package/dist/domain/codex-turn-semantics.js.map +1 -0
  85. package/dist/domain/workload-policy.d.ts +8 -0
  86. package/dist/domain/workload-policy.js +268 -0
  87. package/dist/domain/workload-policy.js.map +1 -0
  88. package/dist/domain/workspace-activity.d.ts +10 -0
  89. package/dist/domain/workspace-activity.js +372 -0
  90. package/dist/domain/workspace-activity.js.map +1 -0
  91. package/dist/goal.d.ts +11 -0
  92. package/dist/goal.js +76 -0
  93. package/dist/goal.js.map +1 -0
  94. package/dist/hermes-hook-install.d.ts +12 -0
  95. package/dist/hermes-hook-install.js +335 -0
  96. package/dist/hermes-hook-install.js.map +1 -0
  97. package/dist/hermes.d.ts +97 -0
  98. package/dist/hermes.js +2446 -0
  99. package/dist/hermes.js.map +1 -0
  100. package/dist/index.d.ts +28 -0
  101. package/dist/index.js +47 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/live-monitor-lib/events.d.ts +43 -0
  104. package/dist/live-monitor-lib/events.js +1463 -0
  105. package/dist/live-monitor-lib/events.js.map +1 -0
  106. package/dist/live-monitor-lib/rollout-hooks.d.ts +13 -0
  107. package/dist/live-monitor-lib/rollout-hooks.js +253 -0
  108. package/dist/live-monitor-lib/rollout-hooks.js.map +1 -0
  109. package/dist/live-monitor.d.ts +102 -0
  110. package/dist/live-monitor.js +1461 -0
  111. package/dist/live-monitor.js.map +1 -0
  112. package/dist/local-thread-selection.d.ts +2 -0
  113. package/dist/local-thread-selection.js +58 -0
  114. package/dist/local-thread-selection.js.map +1 -0
  115. package/dist/openclaw.d.ts +41 -0
  116. package/dist/openclaw.js +715 -0
  117. package/dist/openclaw.js.map +1 -0
  118. package/dist/presence.d.ts +9 -0
  119. package/dist/presence.js +108 -0
  120. package/dist/presence.js.map +1 -0
  121. package/dist/project-identity.d.ts +7 -0
  122. package/dist/project-identity.js +162 -0
  123. package/dist/project-identity.js.map +1 -0
  124. package/dist/project-paths.d.ts +23 -0
  125. package/dist/project-paths.js +394 -0
  126. package/dist/project-paths.js.map +1 -0
  127. package/dist/project-storage.d.ts +7 -0
  128. package/dist/project-storage.js +79 -0
  129. package/dist/project-storage.js.map +1 -0
  130. package/dist/room-config.d.ts +21 -0
  131. package/dist/room-config.js +230 -0
  132. package/dist/room-config.js.map +1 -0
  133. package/dist/services/project-discovery.d.ts +1 -0
  134. package/dist/services/project-discovery.js +16 -0
  135. package/dist/services/project-discovery.js.map +1 -0
  136. package/dist/services/project-live-monitor.d.ts +1 -0
  137. package/dist/services/project-live-monitor.js +6 -0
  138. package/dist/services/project-live-monitor.js.map +1 -0
  139. package/dist/services/project-snapshot-coordinator.d.ts +49 -0
  140. package/dist/services/project-snapshot-coordinator.js +152 -0
  141. package/dist/services/project-snapshot-coordinator.js.map +1 -0
  142. package/dist/services/refresh-scheduler.d.ts +8 -0
  143. package/dist/services/refresh-scheduler.js +44 -0
  144. package/dist/services/refresh-scheduler.js.map +1 -0
  145. package/dist/services/snapshot-assembler.d.ts +8 -0
  146. package/dist/services/snapshot-assembler.js +167 -0
  147. package/dist/services/snapshot-assembler.js.map +1 -0
  148. package/dist/services/thread-store.d.ts +4 -0
  149. package/dist/services/thread-store.js +8 -0
  150. package/dist/services/thread-store.js.map +1 -0
  151. package/dist/snapshot-lib/activity-summary.d.ts +3 -0
  152. package/dist/snapshot-lib/activity-summary.js +220 -0
  153. package/dist/snapshot-lib/activity-summary.js.map +1 -0
  154. package/dist/snapshot-lib/dashboard-builder.d.ts +21 -0
  155. package/dist/snapshot-lib/dashboard-builder.js +146 -0
  156. package/dist/snapshot-lib/dashboard-builder.js.map +1 -0
  157. package/dist/snapshot-lib/thread-summary.d.ts +27 -0
  158. package/dist/snapshot-lib/thread-summary.js +953 -0
  159. package/dist/snapshot-lib/thread-summary.js.map +1 -0
  160. package/dist/snapshot.d.ts +2 -0
  161. package/dist/snapshot.js +21 -0
  162. package/dist/snapshot.js.map +1 -0
  163. package/dist/types.d.ts +368 -0
  164. package/dist/types.js +3 -0
  165. package/dist/types.js.map +1 -0
  166. package/dist/utils/json.d.ts +4 -0
  167. package/dist/utils/json.js +29 -0
  168. package/dist/utils/json.js.map +1 -0
  169. package/dist/utils/text.d.ts +3 -0
  170. package/dist/utils/text.js +26 -0
  171. package/dist/utils/text.js.map +1 -0
  172. package/dist/web-search.d.ts +1 -0
  173. package/dist/web-search.js +52 -0
  174. package/dist/web-search.js.map +1 -0
  175. package/dist/workload.d.ts +1 -0
  176. package/dist/workload.js +12 -0
  177. package/dist/workload.js.map +1 -0
  178. package/package.json +19 -0
@@ -0,0 +1,8 @@
1
+ import type { CodexThread } from "./types";
2
+ export declare function parseCodexSessionThreadFromJsonl(filePath: string, text: string, fallbackMtimeMs?: number): CodexThread | null;
3
+ export declare function discoverCodexSessionThreads(input: {
4
+ projectRoot: string;
5
+ maxFiles?: number;
6
+ now?: Date;
7
+ sessionDirectories?: string[];
8
+ }): Promise<CodexThread[]>;
@@ -0,0 +1,509 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCodexSessionThreadFromJsonl = parseCodexSessionThreadFromJsonl;
4
+ exports.discoverCodexSessionThreads = discoverCodexSessionThreads;
5
+ const promises_1 = require("node:fs/promises");
6
+ const node_os_1 = require("node:os");
7
+ const node_path_1 = require("node:path");
8
+ const project_paths_1 = require("./project-paths");
9
+ const DEFAULT_MAX_SESSION_FILES = 240;
10
+ const DEFAULT_SESSION_LOOKBACK_DAYS = 2;
11
+ const SESSION_FILE_RECENCY_MS = 24 * 60 * 60 * 1000;
12
+ const SESSION_META_PREFIX_BYTES = 64 * 1024;
13
+ const SESSION_META_CACHE_LIMIT = 512;
14
+ const SESSION_META_READ_CONCURRENCY = 12;
15
+ const SESSION_FULL_READ_CONCURRENCY = 3;
16
+ const sessionMetaCache = new Map();
17
+ const fullSessionReadInFlight = new Map();
18
+ const fullSessionReadWaiters = [];
19
+ let activeFullSessionReads = 0;
20
+ function asRecord(value) {
21
+ return typeof value === "object" && value !== null ? value : null;
22
+ }
23
+ function asString(value) {
24
+ return typeof value === "string" && value.length > 0 ? value : null;
25
+ }
26
+ function asNumber(value) {
27
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
28
+ }
29
+ function unixSecondsFromIso(value, fallbackMs) {
30
+ const parsed = value ? Date.parse(value) : Number.NaN;
31
+ return Math.floor((Number.isFinite(parsed) ? parsed : fallbackMs) / 1000);
32
+ }
33
+ function sessionDateDirectories(now = new Date(), lookbackDays = DEFAULT_SESSION_LOOKBACK_DAYS) {
34
+ const root = (0, node_path_1.join)((0, node_os_1.homedir)(), ".codex", "sessions");
35
+ const directories = [];
36
+ for (let offset = 0; offset < lookbackDays; offset += 1) {
37
+ const date = new Date(now.getTime() - offset * 24 * 60 * 60 * 1000);
38
+ const year = String(date.getFullYear()).padStart(4, "0");
39
+ const month = String(date.getMonth() + 1).padStart(2, "0");
40
+ const day = String(date.getDate()).padStart(2, "0");
41
+ directories.push((0, node_path_1.join)(root, year, month, day));
42
+ }
43
+ return directories;
44
+ }
45
+ async function listRecentSessionFiles(input) {
46
+ const nowMs = (input.now ?? new Date()).getTime();
47
+ const directories = input.sessionDirectories ?? sessionDateDirectories(input.now, input.lookbackDays);
48
+ const files = (await Promise.all(directories.map(async (directory) => {
49
+ try {
50
+ const entries = await (0, promises_1.readdir)(directory, { withFileTypes: true });
51
+ return await Promise.all(entries
52
+ .filter((entry) => entry.isFile() && entry.name.endsWith(".jsonl"))
53
+ .map(async (entry) => {
54
+ const filePath = (0, node_path_1.join)(directory, entry.name);
55
+ try {
56
+ const entryStat = await (0, promises_1.stat)(filePath);
57
+ if (nowMs - entryStat.mtimeMs > SESSION_FILE_RECENCY_MS) {
58
+ return null;
59
+ }
60
+ return { filePath, mtimeMs: entryStat.mtimeMs, size: entryStat.size };
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }));
66
+ }
67
+ catch {
68
+ return [];
69
+ }
70
+ }))).flat().filter((entry) => Boolean(entry));
71
+ return files
72
+ .sort((left, right) => right.mtimeMs - left.mtimeMs)
73
+ .slice(0, input.maxFiles ?? DEFAULT_MAX_SESSION_FILES);
74
+ }
75
+ async function mapWithConcurrency(values, concurrency, mapper) {
76
+ if (values.length === 0) {
77
+ return [];
78
+ }
79
+ const results = new Array(values.length);
80
+ let nextIndex = 0;
81
+ const workers = Array.from({ length: Math.min(values.length, Math.max(1, concurrency)) }, async () => {
82
+ while (nextIndex < values.length) {
83
+ const index = nextIndex;
84
+ nextIndex += 1;
85
+ results[index] = await mapper(values[index], index);
86
+ }
87
+ });
88
+ await Promise.all(workers);
89
+ return results;
90
+ }
91
+ function sessionFileSignature(file) {
92
+ return `${file.mtimeMs}:${file.size}`;
93
+ }
94
+ function fullSessionReadKey(file) {
95
+ return `${file.filePath}\u0000${sessionFileSignature(file)}`;
96
+ }
97
+ function pruneSessionMetaCache() {
98
+ while (sessionMetaCache.size > SESSION_META_CACHE_LIMIT) {
99
+ const oldestKey = sessionMetaCache.keys().next().value;
100
+ if (!oldestKey) {
101
+ return;
102
+ }
103
+ sessionMetaCache.delete(oldestKey);
104
+ }
105
+ }
106
+ async function readSessionMetaPrefix(file) {
107
+ const handle = await (0, promises_1.open)(file.filePath, "r");
108
+ try {
109
+ const length = Math.min(file.size, SESSION_META_PREFIX_BYTES);
110
+ if (length <= 0) {
111
+ return { kind: "unknown" };
112
+ }
113
+ const buffer = Buffer.alloc(length);
114
+ const { bytesRead } = await handle.read(buffer, 0, length, 0);
115
+ const prefix = buffer.subarray(0, bytesRead).toString("utf8").replace(/^\uFEFF/, "");
116
+ const newlineIndex = prefix.search(/\r?\n/);
117
+ if (newlineIndex < 0 && file.size > bytesRead) {
118
+ return { kind: "unknown" };
119
+ }
120
+ const firstLine = (newlineIndex >= 0 ? prefix.slice(0, newlineIndex) : prefix).trim();
121
+ const entry = parseJsonLine(firstLine);
122
+ const payload = asRecord(entry?.payload);
123
+ if (!entry || entry.type !== "session_meta" || !payload) {
124
+ return { kind: "unknown" };
125
+ }
126
+ return {
127
+ kind: "known",
128
+ cwd: asString(payload.cwd),
129
+ isSubagent: sessionSourceIsSubagent(payload.source, asString(payload.thread_source))
130
+ };
131
+ }
132
+ finally {
133
+ await handle.close();
134
+ }
135
+ }
136
+ function getSessionMetaProbe(file) {
137
+ const signature = sessionFileSignature(file);
138
+ const cached = sessionMetaCache.get(file.filePath);
139
+ if (cached?.signature === signature) {
140
+ sessionMetaCache.delete(file.filePath);
141
+ sessionMetaCache.set(file.filePath, cached);
142
+ return cached.promise;
143
+ }
144
+ const promise = readSessionMetaPrefix(file).catch(() => ({ kind: "unknown" }));
145
+ sessionMetaCache.set(file.filePath, { signature, promise });
146
+ pruneSessionMetaCache();
147
+ return promise;
148
+ }
149
+ async function acquireFullSessionReadSlot() {
150
+ if (activeFullSessionReads < SESSION_FULL_READ_CONCURRENCY) {
151
+ activeFullSessionReads += 1;
152
+ return;
153
+ }
154
+ await new Promise((resolve) => fullSessionReadWaiters.push(resolve));
155
+ }
156
+ function releaseFullSessionReadSlot() {
157
+ const next = fullSessionReadWaiters.shift();
158
+ if (next) {
159
+ // Transfer the occupied slot directly to the next reader.
160
+ next();
161
+ return;
162
+ }
163
+ activeFullSessionReads = Math.max(0, activeFullSessionReads - 1);
164
+ }
165
+ async function readAndParseSessionFile(file) {
166
+ const key = fullSessionReadKey(file);
167
+ const existing = fullSessionReadInFlight.get(key);
168
+ if (existing) {
169
+ return existing;
170
+ }
171
+ const promise = (async () => {
172
+ await acquireFullSessionReadSlot();
173
+ try {
174
+ const contents = await (0, promises_1.readFile)(file.filePath, "utf8");
175
+ const thread = parseCodexSessionThreadFromJsonl(file.filePath, contents, file.mtimeMs);
176
+ if (thread) {
177
+ sessionMetaCache.set(file.filePath, {
178
+ signature: sessionFileSignature(file),
179
+ promise: Promise.resolve({ kind: "known", cwd: thread.cwd, isSubagent: true })
180
+ });
181
+ pruneSessionMetaCache();
182
+ }
183
+ return thread;
184
+ }
185
+ catch {
186
+ return null;
187
+ }
188
+ finally {
189
+ releaseFullSessionReadSlot();
190
+ }
191
+ })();
192
+ fullSessionReadInFlight.set(key, promise);
193
+ void promise.finally(() => {
194
+ if (fullSessionReadInFlight.get(key) === promise) {
195
+ fullSessionReadInFlight.delete(key);
196
+ }
197
+ });
198
+ return promise;
199
+ }
200
+ function parseJsonLine(line) {
201
+ try {
202
+ return asRecord(JSON.parse(line));
203
+ }
204
+ catch {
205
+ return null;
206
+ }
207
+ }
208
+ function contentText(content) {
209
+ if (typeof content === "string") {
210
+ return content;
211
+ }
212
+ if (!Array.isArray(content)) {
213
+ return null;
214
+ }
215
+ const text = content
216
+ .map((entry) => asRecord(entry))
217
+ .map((entry) => asString(entry?.text))
218
+ .filter((entry) => Boolean(entry))
219
+ .join("\n")
220
+ .trim();
221
+ return text.length > 0 ? text : null;
222
+ }
223
+ function parseNestedAgentEnvelope(text) {
224
+ const trimmed = text.trim();
225
+ if (!trimmed.startsWith("{")) {
226
+ return text;
227
+ }
228
+ try {
229
+ const parsed = JSON.parse(trimmed);
230
+ const content = asString(parsed.content);
231
+ return content ?? text;
232
+ }
233
+ catch {
234
+ return text;
235
+ }
236
+ }
237
+ function parseCommandArguments(argumentsText) {
238
+ if (!argumentsText) {
239
+ return null;
240
+ }
241
+ try {
242
+ const parsed = JSON.parse(argumentsText);
243
+ const command = asString(parsed.cmd);
244
+ if (!command) {
245
+ return null;
246
+ }
247
+ return {
248
+ command,
249
+ cwd: asString(parsed.workdir) ?? undefined
250
+ };
251
+ }
252
+ catch {
253
+ return null;
254
+ }
255
+ }
256
+ function outputSucceeded(output) {
257
+ if (!output) {
258
+ return true;
259
+ }
260
+ const exitMatch = output.match(/Process exited with code\s+(\d+)/);
261
+ return !exitMatch || exitMatch[1] === "0";
262
+ }
263
+ function sessionSourceIsSubagent(source, threadSource) {
264
+ if (threadSource?.toLowerCase() === "subagent") {
265
+ return true;
266
+ }
267
+ const record = asRecord(source);
268
+ return Boolean(record?.subagent || record?.subAgent || record?.sub_agent);
269
+ }
270
+ function ensureTurn(turnsById, turnId) {
271
+ const existing = turnsById.get(turnId);
272
+ if (existing) {
273
+ return existing;
274
+ }
275
+ const turn = {
276
+ id: turnId,
277
+ status: "inProgress",
278
+ error: null,
279
+ items: []
280
+ };
281
+ turnsById.set(turnId, turn);
282
+ return turn;
283
+ }
284
+ function pushResponseItem(input) {
285
+ const type = asString(input.payload.type);
286
+ if (!type) {
287
+ return;
288
+ }
289
+ if (type === "message") {
290
+ const text = contentText(input.payload.content);
291
+ if (!text) {
292
+ return;
293
+ }
294
+ const role = asString(input.payload.role);
295
+ const normalizedText = parseNestedAgentEnvelope(text);
296
+ if (normalizedText.trim().startsWith("<turn_aborted>")) {
297
+ return;
298
+ }
299
+ input.turn.items.push({
300
+ type: role === "user" ? "userMessage" : "agentMessage",
301
+ id: `session-item-${input.itemIndex}`,
302
+ text: normalizedText,
303
+ phase: asString(input.payload.phase) ?? (role === "assistant" ? "commentary" : "updated")
304
+ });
305
+ return;
306
+ }
307
+ if (type === "reasoning") {
308
+ const summary = contentText(input.payload.summary) ?? asString(input.payload.text) ?? "Reasoning";
309
+ input.turn.items.push({
310
+ type: "reasoning",
311
+ id: `session-item-${input.itemIndex}`,
312
+ summary,
313
+ status: "completed"
314
+ });
315
+ return;
316
+ }
317
+ if (type === "function_call") {
318
+ const callId = asString(input.payload.call_id) ?? `session-call-${input.itemIndex}`;
319
+ const toolName = asString(input.payload.name) ?? "tool";
320
+ const command = toolName === "exec_command"
321
+ ? parseCommandArguments(asString(input.payload.arguments))
322
+ : null;
323
+ const item = command
324
+ ? {
325
+ type: "commandExecution",
326
+ id: callId,
327
+ command: command.command,
328
+ cwd: command.cwd,
329
+ status: "inProgress"
330
+ }
331
+ : {
332
+ type: "dynamicToolCall",
333
+ id: callId,
334
+ tool: toolName,
335
+ status: "inProgress"
336
+ };
337
+ input.pendingToolItems.set(callId, item);
338
+ input.turn.items.push(item);
339
+ return;
340
+ }
341
+ if (type === "function_call_output") {
342
+ const callId = asString(input.payload.call_id);
343
+ const item = callId ? input.pendingToolItems.get(callId) : null;
344
+ if (item) {
345
+ item.status = outputSucceeded(asString(input.payload.output)) ? "completed" : "failed";
346
+ }
347
+ }
348
+ }
349
+ function parseCodexSessionThreadFromJsonl(filePath, text, fallbackMtimeMs = Date.now()) {
350
+ const lines = text.split(/\r?\n/).filter((line) => line.trim().length > 0);
351
+ if (lines.length === 0) {
352
+ return null;
353
+ }
354
+ let meta;
355
+ let currentTurnId = null;
356
+ let latestTimestamp = null;
357
+ let latestTaskEvent = null;
358
+ const turnsById = new Map();
359
+ const pendingToolItems = new Map();
360
+ lines.forEach((line, lineIndex) => {
361
+ const entry = parseJsonLine(line);
362
+ if (!entry) {
363
+ return;
364
+ }
365
+ latestTimestamp = asString(entry.timestamp) ?? latestTimestamp;
366
+ const payload = asRecord(entry.payload);
367
+ if (!payload) {
368
+ return;
369
+ }
370
+ if (entry.type === "session_meta") {
371
+ meta = payload;
372
+ return;
373
+ }
374
+ if (entry.type === "turn_context") {
375
+ currentTurnId = asString(payload.turn_id) ?? currentTurnId;
376
+ if (currentTurnId) {
377
+ ensureTurn(turnsById, currentTurnId);
378
+ }
379
+ return;
380
+ }
381
+ if (entry.type === "event_msg") {
382
+ const payloadType = asString(payload.type);
383
+ const turnId = asString(payload.turn_id) ?? currentTurnId;
384
+ if (payloadType === "task_started") {
385
+ latestTaskEvent = "started";
386
+ currentTurnId = turnId ?? currentTurnId;
387
+ if (currentTurnId) {
388
+ ensureTurn(turnsById, currentTurnId).status = "inProgress";
389
+ }
390
+ return;
391
+ }
392
+ if (payloadType === "task_complete") {
393
+ latestTaskEvent = "complete";
394
+ if (turnId) {
395
+ const turn = ensureTurn(turnsById, turnId);
396
+ turn.status = "completed";
397
+ const lastMessage = asString(payload.last_agent_message);
398
+ if (lastMessage) {
399
+ turn.items.push({
400
+ type: "agentMessage",
401
+ id: `session-item-${lineIndex}`,
402
+ text: lastMessage,
403
+ phase: "final_answer"
404
+ });
405
+ }
406
+ }
407
+ return;
408
+ }
409
+ if (payloadType === "turn_aborted") {
410
+ latestTaskEvent = "aborted";
411
+ if (turnId) {
412
+ ensureTurn(turnsById, turnId).status = "interrupted";
413
+ }
414
+ return;
415
+ }
416
+ if (payloadType === "agent_message") {
417
+ const message = asString(payload.message);
418
+ if (message && currentTurnId) {
419
+ ensureTurn(turnsById, currentTurnId).items.push({
420
+ type: "agentMessage",
421
+ id: `session-item-${lineIndex}`,
422
+ text: parseNestedAgentEnvelope(message),
423
+ phase: asString(payload.phase) ?? "commentary"
424
+ });
425
+ }
426
+ }
427
+ return;
428
+ }
429
+ if (entry.type === "response_item" && currentTurnId) {
430
+ pushResponseItem({
431
+ payload,
432
+ turn: ensureTurn(turnsById, currentTurnId),
433
+ itemIndex: lineIndex,
434
+ pendingToolItems
435
+ });
436
+ }
437
+ });
438
+ const sessionMeta = meta;
439
+ if (!sessionMeta) {
440
+ return null;
441
+ }
442
+ const id = asString(sessionMeta.id);
443
+ const cwd = asString(sessionMeta.cwd);
444
+ if (!id || !cwd || !sessionSourceIsSubagent(sessionMeta.source, asString(sessionMeta.thread_source))) {
445
+ return null;
446
+ }
447
+ const latestMs = Date.parse(latestTimestamp ?? "") || fallbackMtimeMs;
448
+ const createdAt = unixSecondsFromIso(asString(sessionMeta.timestamp), fallbackMtimeMs);
449
+ const updatedAt = Math.floor(latestMs / 1000);
450
+ const turns = [...turnsById.values()];
451
+ const lastTurn = turns.at(-1) ?? null;
452
+ if (latestTaskEvent === "complete" && lastTurn && lastTurn.status === "inProgress") {
453
+ lastTurn.status = "completed";
454
+ }
455
+ if (latestTaskEvent === "aborted" && lastTurn && lastTurn.status === "inProgress") {
456
+ lastTurn.status = "interrupted";
457
+ }
458
+ const preview = asString(sessionMeta.agent_nickname)
459
+ ?? asString(sessionMeta.agent_path)
460
+ ?? asString(sessionMeta.agent_role)
461
+ ?? "Subagent";
462
+ return {
463
+ id,
464
+ preview,
465
+ ephemeral: false,
466
+ modelProvider: asString(sessionMeta.model_provider) ?? "openai",
467
+ createdAt,
468
+ updatedAt,
469
+ status: latestTaskEvent === "started" ? { type: "active", activeFlags: [] } : { type: "notLoaded" },
470
+ path: filePath,
471
+ cwd,
472
+ cliVersion: asString(sessionMeta.cli_version) ?? "",
473
+ source: asRecord(sessionMeta.source) ?? { subagent: {} },
474
+ agentNickname: asString(sessionMeta.agent_nickname),
475
+ agentRole: asString(sessionMeta.agent_role),
476
+ gitInfo: null,
477
+ name: null,
478
+ turns
479
+ };
480
+ }
481
+ async function discoverCodexSessionThreads(input) {
482
+ const sessionFiles = await listRecentSessionFiles({
483
+ now: input.now,
484
+ maxFiles: input.maxFiles,
485
+ sessionDirectories: input.sessionDirectories
486
+ });
487
+ const canonicalProjectRoot = (0, project_paths_1.canonicalizeProjectPath)(input.projectRoot);
488
+ if (!canonicalProjectRoot) {
489
+ return [];
490
+ }
491
+ const probes = await mapWithConcurrency(sessionFiles, SESSION_META_READ_CONCURRENCY, async (file) => ({ file, probe: await getSessionMetaProbe(file) }));
492
+ const candidates = probes
493
+ .filter(({ probe }) => {
494
+ if (probe.kind === "unknown") {
495
+ // Older or partially-written session files still get a compatibility
496
+ // parse, but only through the bounded global full-read queue.
497
+ return true;
498
+ }
499
+ return probe.isSubagent
500
+ && Boolean(probe.cwd && (0, project_paths_1.sameProjectPath)(probe.cwd, canonicalProjectRoot));
501
+ })
502
+ .map(({ file }) => file);
503
+ const threads = await mapWithConcurrency(candidates, SESSION_FULL_READ_CONCURRENCY, readAndParseSessionFile);
504
+ return threads
505
+ .filter((thread) => Boolean(thread))
506
+ .filter((thread) => (0, project_paths_1.sameProjectPath)(thread.cwd, canonicalProjectRoot))
507
+ .sort((left, right) => right.updatedAt - left.updatedAt);
508
+ }
509
+ //# sourceMappingURL=codex-session-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-session-files.js","sourceRoot":"","sources":["../src/codex-session-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { CodexAppServerClient } from "./app-server";
2
+ import type { CodexThread } from "./types";
3
+ export declare function listCodexProjectThreadCandidates(input: {
4
+ client: CodexAppServerClient;
5
+ projectRoot: string;
6
+ localLimit: number;
7
+ includeSessionThreads?: boolean;
8
+ }): Promise<{
9
+ allThreads: CodexThread[];
10
+ projectThreads: CodexThread[];
11
+ trackedThreads: CodexThread[];
12
+ usedUnscopedFallback: boolean;
13
+ }>;
14
+ export declare function readCodexThreadWithTimeout(client: CodexAppServerClient, threadId: string, timeoutMs?: number): Promise<CodexThread>;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listCodexProjectThreadCandidates = listCodexProjectThreadCandidates;
4
+ exports.readCodexThreadWithTimeout = readCodexThreadWithTimeout;
5
+ const codex_session_files_1 = require("./codex-session-files");
6
+ const project_paths_1 = require("./project-paths");
7
+ const local_thread_selection_1 = require("./local-thread-selection");
8
+ const APP_SERVER_THREAD_LIST_TIMEOUT_MS = 15000;
9
+ const APP_SERVER_THREAD_READ_TIMEOUT_MS = 15000;
10
+ function mergeThreadLists(...threadLists) {
11
+ const byId = new Map();
12
+ for (const thread of threadLists.flat()) {
13
+ const existing = byId.get(thread.id);
14
+ if (!existing
15
+ || thread.updatedAt > existing.updatedAt
16
+ || (thread.updatedAt === existing.updatedAt
17
+ && thread.turns.length > existing.turns.length)) {
18
+ byId.set(thread.id, thread);
19
+ }
20
+ }
21
+ return [...byId.values()].sort((left, right) => right.updatedAt - left.updatedAt);
22
+ }
23
+ async function withTimeout(promise, timeoutMs, label) {
24
+ return await Promise.race([
25
+ promise,
26
+ new Promise((_, reject) => {
27
+ const timer = setTimeout(() => {
28
+ reject(new Error(`${label} timed out after ${timeoutMs}ms`));
29
+ }, timeoutMs);
30
+ timer.unref?.();
31
+ promise.finally(() => clearTimeout(timer)).catch(() => clearTimeout(timer));
32
+ })
33
+ ]);
34
+ }
35
+ async function listCodexProjectThreadCandidates(input) {
36
+ const scopedLimit = Math.max(input.localLimit * 4, 40);
37
+ const scopedThreads = await withTimeout(input.client.listThreads({
38
+ cwd: input.projectRoot,
39
+ limit: scopedLimit
40
+ }), APP_SERVER_THREAD_LIST_TIMEOUT_MS, "thread/list");
41
+ const sessionThreads = input.includeSessionThreads === false
42
+ ? []
43
+ : await (0, codex_session_files_1.discoverCodexSessionThreads)({
44
+ projectRoot: input.projectRoot,
45
+ maxFiles: Math.max(scopedLimit * 3, 120)
46
+ });
47
+ const scopedAllThreads = mergeThreadLists(scopedThreads, sessionThreads);
48
+ const scopedProjectThreads = (0, project_paths_1.filterThreadsForProject)(input.projectRoot, scopedAllThreads);
49
+ const scopedTrackedThreads = (0, local_thread_selection_1.selectProjectThreadsWithParents)(input.projectRoot, scopedAllThreads, input.localLimit);
50
+ if (scopedTrackedThreads.length > 0) {
51
+ return {
52
+ allThreads: scopedAllThreads,
53
+ projectThreads: scopedProjectThreads,
54
+ trackedThreads: scopedTrackedThreads,
55
+ usedUnscopedFallback: false
56
+ };
57
+ }
58
+ const unscopedThreads = await withTimeout(input.client.listThreads({
59
+ limit: Math.max(input.localLimit * 8, 100)
60
+ }), APP_SERVER_THREAD_LIST_TIMEOUT_MS, "thread/list fallback");
61
+ const fallbackAllThreads = mergeThreadLists(unscopedThreads, sessionThreads);
62
+ const fallbackProjectThreads = (0, project_paths_1.filterThreadsForProject)(input.projectRoot, fallbackAllThreads);
63
+ const fallbackTrackedThreads = (0, local_thread_selection_1.selectProjectThreadsWithParents)(input.projectRoot, fallbackAllThreads, input.localLimit);
64
+ if (fallbackTrackedThreads.length === 0) {
65
+ return {
66
+ allThreads: scopedAllThreads,
67
+ projectThreads: scopedProjectThreads,
68
+ trackedThreads: scopedTrackedThreads,
69
+ usedUnscopedFallback: false
70
+ };
71
+ }
72
+ return {
73
+ allThreads: fallbackAllThreads,
74
+ projectThreads: fallbackProjectThreads,
75
+ trackedThreads: fallbackTrackedThreads,
76
+ usedUnscopedFallback: true
77
+ };
78
+ }
79
+ async function readCodexThreadWithTimeout(client, threadId, timeoutMs = APP_SERVER_THREAD_READ_TIMEOUT_MS) {
80
+ return await withTimeout(client.readThread(threadId), timeoutMs, "thread/read");
81
+ }
82
+ //# sourceMappingURL=codex-thread-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-thread-query.js","sourceRoot":"","sources":["../src/codex-thread-query.ts"],"names":[],"mappings":"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"}