@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,438 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseClaudeHomeWatchSse = parseClaudeHomeWatchSse;
4
+ exports.readClaudeHomeWatchCacheFile = readClaudeHomeWatchCacheFile;
5
+ exports.discoverClaudeHomeRemoteSessions = discoverClaudeHomeRemoteSessions;
6
+ exports.loadClaudeHomeAccountAgents = loadClaudeHomeAccountAgents;
7
+ const promises_1 = require("node:fs/promises");
8
+ const node_os_1 = require("node:os");
9
+ const node_path_1 = require("node:path");
10
+ const appearance_1 = require("./appearance");
11
+ const CACHE_MAGIC = Buffer.from("305c72a71b6dfbfc", "hex");
12
+ const CACHE_HEADER_BYTES = 24;
13
+ const WATCH_CACHE_KEY = "1/0/https://claude.ai/v1/code/sessions/watch";
14
+ const DEFAULT_MAX_CACHE_FILES = 96;
15
+ const DEFAULT_MAX_FILE_BYTES = 2 * 1024 * 1024;
16
+ const DEFAULT_MAX_BODY_BYTES = 1024 * 1024;
17
+ const DEFAULT_CACHE_FRESHNESS_MS = 14 * 24 * 60 * 60 * 1_000;
18
+ const DEFAULT_SESSION_FRESHNESS_MS = 14 * 24 * 60 * 60 * 1_000;
19
+ const DEFAULT_ACTIVE_WINDOW_MS = 3 * 60 * 1_000;
20
+ const DEFAULT_RECENT_DONE_WINDOW_MS = 7 * 24 * 60 * 60 * 1_000;
21
+ function defaultClaudeCacheDirs() {
22
+ const home = (0, node_os_1.homedir)();
23
+ const dirs = [(0, node_path_1.join)(home, "Library", "Application Support", "Claude", "Cache", "Cache_Data")];
24
+ if (process.env.APPDATA) {
25
+ dirs.push((0, node_path_1.join)(process.env.APPDATA, "Claude", "Cache", "Cache_Data"));
26
+ }
27
+ dirs.push((0, node_path_1.join)(process.env.XDG_CONFIG_HOME ?? (0, node_path_1.join)(home, ".config"), "Claude", "Cache", "Cache_Data"));
28
+ return Array.from(new Set(dirs));
29
+ }
30
+ function recordValue(value) {
31
+ return value !== null && typeof value === "object" && !Array.isArray(value)
32
+ ? value
33
+ : null;
34
+ }
35
+ function boundedString(value, maxLength) {
36
+ if (typeof value !== "string") {
37
+ return null;
38
+ }
39
+ const normalized = value.trim();
40
+ return normalized ? normalized.slice(0, maxLength) : null;
41
+ }
42
+ function isoTimestamp(value) {
43
+ const text = boundedString(value, 64);
44
+ if (!text) {
45
+ return null;
46
+ }
47
+ const timestamp = Date.parse(text);
48
+ return Number.isFinite(timestamp) ? new Date(timestamp).toISOString() : null;
49
+ }
50
+ function stringList(value, limit, maxLength) {
51
+ if (!Array.isArray(value)) {
52
+ return undefined;
53
+ }
54
+ return Array.from(new Set(value
55
+ .map((entry) => boundedString(entry, maxLength))
56
+ .filter((entry) => Boolean(entry))))
57
+ .slice(0, limit);
58
+ }
59
+ function selectedFolderNames(config) {
60
+ const candidates = config?.selected_folders ?? config?.selectedFolders ?? config?.sources;
61
+ if (!Array.isArray(candidates)) {
62
+ return undefined;
63
+ }
64
+ const names = candidates.flatMap((candidate) => {
65
+ if (typeof candidate === "string") {
66
+ const value = boundedString((0, node_path_1.basename)(candidate), 80);
67
+ return value ? [value] : [];
68
+ }
69
+ const source = recordValue(candidate);
70
+ const value = boundedString(source?.name ?? source?.label, 80)
71
+ ?? (typeof source?.path === "string" ? boundedString((0, node_path_1.basename)(source.path), 80) : null);
72
+ return value ? [value] : [];
73
+ });
74
+ return Array.from(new Set(names)).slice(0, 12);
75
+ }
76
+ function sanitizeSessionPatch(value) {
77
+ const raw = recordValue(value);
78
+ if (!raw) {
79
+ return null;
80
+ }
81
+ const id = boundedString(raw.id ?? raw.session_id, 160);
82
+ if (!id || !/^cse_[A-Za-z0-9_-]+$/.test(id)) {
83
+ return null;
84
+ }
85
+ const config = recordValue(raw?.config);
86
+ const external = recordValue(raw?.external_metadata);
87
+ const summary = recordValue(external?.post_turn_summary ?? raw?.post_turn_summary);
88
+ const patch = { id };
89
+ if (Object.hasOwn(raw, "title"))
90
+ patch.title = boundedString(raw.title, 160);
91
+ if (Object.hasOwn(raw, "created_at") || Object.hasOwn(raw, "createdAt")) {
92
+ patch.createdAt = isoTimestamp(raw.created_at ?? raw.createdAt);
93
+ }
94
+ if (Object.hasOwn(raw, "last_event_at") || Object.hasOwn(raw, "lastEventAt")) {
95
+ patch.lastEventAt = isoTimestamp(raw.last_event_at ?? raw.lastEventAt);
96
+ }
97
+ if (Object.hasOwn(raw, "environment_kind") || Object.hasOwn(raw, "environmentKind")) {
98
+ patch.environmentKind = boundedString(raw.environment_kind ?? raw.environmentKind, 64) ?? "";
99
+ }
100
+ if (config && Object.hasOwn(config, "model"))
101
+ patch.model = boundedString(config.model, 96);
102
+ else if (Object.hasOwn(raw, "model"))
103
+ patch.model = boundedString(raw.model, 96);
104
+ if (config && Object.hasOwn(config, "origin"))
105
+ patch.origin = boundedString(config.origin, 64);
106
+ else if (Object.hasOwn(raw, "origin"))
107
+ patch.origin = boundedString(raw.origin, 64);
108
+ const tags = stringList(raw.tags, 32, 96);
109
+ if (tags)
110
+ patch.tags = tags;
111
+ const folders = selectedFolderNames(config);
112
+ if (folders)
113
+ patch.selectedFolders = folders;
114
+ if (Object.hasOwn(raw, "status"))
115
+ patch.status = boundedString(raw.status, 64);
116
+ if (Object.hasOwn(raw, "status_bucket") || Object.hasOwn(raw, "statusBucket")) {
117
+ patch.statusBucket = boundedString(raw.status_bucket ?? raw.statusBucket, 64);
118
+ }
119
+ if (Object.hasOwn(raw, "worker_status") || Object.hasOwn(raw, "workerStatus")) {
120
+ patch.workerStatus = boundedString(raw.worker_status ?? raw.workerStatus, 64);
121
+ }
122
+ if (summary) {
123
+ patch.postTurnSummary = {
124
+ needsAction: boundedString(summary.needs_action ?? summary.needsAction, 32),
125
+ statusCategory: boundedString(summary.status_category ?? summary.statusCategory, 64)
126
+ };
127
+ }
128
+ return patch;
129
+ }
130
+ /** Parse only the already-isolated response body and discard every unrecognized field. */
131
+ function parseClaudeHomeWatchSse(body) {
132
+ const text = typeof body === "string" ? body : body.toString("utf8");
133
+ const events = [];
134
+ let eventType = "";
135
+ let dataLines = [];
136
+ const flush = () => {
137
+ const type = eventType;
138
+ const data = dataLines.join("\n");
139
+ eventType = "";
140
+ dataLines = [];
141
+ if (!(type === "added" || type === "changed" || type === "removed")
142
+ || !data
143
+ || Buffer.byteLength(data, "utf8") > 256 * 1024) {
144
+ return;
145
+ }
146
+ try {
147
+ const parsed = JSON.parse(data);
148
+ const record = recordValue(parsed);
149
+ const patch = sanitizeSessionPatch(record?.session ?? parsed);
150
+ if (patch) {
151
+ events.push({ type, session: patch });
152
+ }
153
+ }
154
+ catch {
155
+ // Cache entries are opportunistic and may end mid-event.
156
+ }
157
+ };
158
+ for (const line of text.split(/\r?\n/)) {
159
+ if (line === "") {
160
+ flush();
161
+ continue;
162
+ }
163
+ if (line.startsWith("event:")) {
164
+ eventType = line.slice(6).trim();
165
+ }
166
+ else if (line.startsWith("data:")) {
167
+ dataLines.push(line.slice(5).replace(/^ /, ""));
168
+ }
169
+ }
170
+ flush();
171
+ return events;
172
+ }
173
+ async function readClaudeHomeWatchCacheFile(filePath, options = {}) {
174
+ const maxFileBytes = options.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;
175
+ const maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
176
+ let handle;
177
+ try {
178
+ handle = await (0, promises_1.open)(filePath, "r");
179
+ }
180
+ catch {
181
+ return [];
182
+ }
183
+ try {
184
+ const info = await handle.stat();
185
+ if (!info.isFile() || info.size < CACHE_HEADER_BYTES || info.size > maxFileBytes) {
186
+ return [];
187
+ }
188
+ const header = Buffer.alloc(CACHE_HEADER_BYTES);
189
+ const headerRead = await handle.read(header, 0, header.length, 0);
190
+ if (headerRead.bytesRead !== header.length || !header.subarray(0, 8).equals(CACHE_MAGIC)) {
191
+ return [];
192
+ }
193
+ const keyLength = header.readUInt32LE(12);
194
+ if (keyLength < WATCH_CACHE_KEY.length || keyLength > 4_096) {
195
+ return [];
196
+ }
197
+ const keyProbeLength = Math.min(keyLength, Buffer.byteLength(WATCH_CACHE_KEY) + 1);
198
+ const keyProbe = Buffer.alloc(keyProbeLength);
199
+ const keyRead = await handle.read(keyProbe, 0, keyProbe.length, CACHE_HEADER_BYTES);
200
+ if (keyRead.bytesRead !== keyProbe.length) {
201
+ return [];
202
+ }
203
+ const keyProbeText = keyProbe.toString("utf8");
204
+ if (!keyProbeText.startsWith(WATCH_CACHE_KEY)) {
205
+ return [];
206
+ }
207
+ if (keyLength > WATCH_CACHE_KEY.length && keyProbeText[WATCH_CACHE_KEY.length] !== "?") {
208
+ return [];
209
+ }
210
+ const bodyOffset = CACHE_HEADER_BYTES + keyLength;
211
+ const bodyLength = info.size - bodyOffset;
212
+ if (bodyLength <= 0 || bodyLength > maxBodyBytes) {
213
+ return [];
214
+ }
215
+ const body = Buffer.alloc(bodyLength);
216
+ const bodyRead = await handle.read(body, 0, body.length, bodyOffset);
217
+ if (bodyRead.bytesRead !== body.length) {
218
+ return [];
219
+ }
220
+ return parseClaudeHomeWatchSse(body);
221
+ }
222
+ catch {
223
+ return [];
224
+ }
225
+ finally {
226
+ await handle.close();
227
+ }
228
+ }
229
+ async function isClaudeHomeWatchCacheFile(filePath) {
230
+ let handle;
231
+ try {
232
+ handle = await (0, promises_1.open)(filePath, "r");
233
+ }
234
+ catch {
235
+ return false;
236
+ }
237
+ try {
238
+ const header = Buffer.alloc(CACHE_HEADER_BYTES);
239
+ const headerRead = await handle.read(header, 0, header.length, 0);
240
+ if (headerRead.bytesRead !== header.length || !header.subarray(0, 8).equals(CACHE_MAGIC)) {
241
+ return false;
242
+ }
243
+ const keyLength = header.readUInt32LE(12);
244
+ if (keyLength < WATCH_CACHE_KEY.length || keyLength > 4_096) {
245
+ return false;
246
+ }
247
+ // Probe exactly the public endpoint plus one delimiter byte. The resume query is never read.
248
+ const probeLength = Math.min(keyLength, Buffer.byteLength(WATCH_CACHE_KEY) + 1);
249
+ const probe = Buffer.alloc(probeLength);
250
+ const probeRead = await handle.read(probe, 0, probe.length, CACHE_HEADER_BYTES);
251
+ if (probeRead.bytesRead !== probe.length || !probe.toString("utf8").startsWith(WATCH_CACHE_KEY)) {
252
+ return false;
253
+ }
254
+ return keyLength === WATCH_CACHE_KEY.length || probe[WATCH_CACHE_KEY.length] === "?".charCodeAt(0);
255
+ }
256
+ catch {
257
+ return false;
258
+ }
259
+ finally {
260
+ await handle.close();
261
+ }
262
+ }
263
+ async function cacheCandidates(options) {
264
+ const now = options.now ?? Date.now();
265
+ const freshnessMs = options.cacheFreshnessMs ?? DEFAULT_CACHE_FRESHNESS_MS;
266
+ const maxFileBytes = options.maxFileBytes ?? DEFAULT_MAX_FILE_BYTES;
267
+ const candidates = [];
268
+ for (const dir of options.cacheDirs ?? defaultClaudeCacheDirs()) {
269
+ try {
270
+ const entries = await (0, promises_1.readdir)(dir, { withFileTypes: true });
271
+ for (const entry of entries) {
272
+ if (!entry.isFile() || !entry.name.endsWith("_0"))
273
+ continue;
274
+ const path = (0, node_path_1.join)(dir, entry.name);
275
+ const info = await (0, promises_1.stat)(path);
276
+ if (info.size <= maxFileBytes
277
+ && now - info.mtimeMs <= freshnessMs
278
+ && info.mtimeMs <= now + 60_000
279
+ && await isClaudeHomeWatchCacheFile(path)) {
280
+ candidates.push({ path, mtimeMs: info.mtimeMs });
281
+ }
282
+ }
283
+ }
284
+ catch {
285
+ // Claude Desktop may be absent, not running, or have no cache yet.
286
+ }
287
+ }
288
+ return candidates
289
+ .sort((left, right) => right.mtimeMs - left.mtimeMs || left.path.localeCompare(right.path))
290
+ .slice(0, options.maxCacheFiles ?? DEFAULT_MAX_CACHE_FILES)
291
+ .sort((left, right) => left.mtimeMs - right.mtimeMs || left.path.localeCompare(right.path));
292
+ }
293
+ async function discoverClaudeHomeRemoteSessions(options = {}) {
294
+ const sessions = new Map();
295
+ for (const candidate of await cacheCandidates(options)) {
296
+ const events = await readClaudeHomeWatchCacheFile(candidate.path, options);
297
+ for (const event of events) {
298
+ if (event.type === "removed") {
299
+ sessions.delete(event.session.id);
300
+ }
301
+ else {
302
+ sessions.set(event.session.id, { ...sessions.get(event.session.id), ...event.session });
303
+ }
304
+ }
305
+ }
306
+ const now = options.now ?? Date.now();
307
+ const sessionFreshnessMs = options.sessionFreshnessMs ?? DEFAULT_SESSION_FRESHNESS_MS;
308
+ return Array.from(sessions.values())
309
+ .filter((session) => session.environmentKind === "anthropic_cloud")
310
+ .filter((session) => session.tags?.includes("product:cowork-remote"))
311
+ .flatMap((session) => {
312
+ const lastEventAt = session.lastEventAt ?? session.createdAt;
313
+ if (!lastEventAt || now - Date.parse(lastEventAt) > sessionFreshnessMs) {
314
+ return [];
315
+ }
316
+ return [{
317
+ id: session.id,
318
+ title: session.title ?? null,
319
+ createdAt: session.createdAt ?? null,
320
+ lastEventAt,
321
+ environmentKind: session.environmentKind ?? "",
322
+ model: session.model ?? null,
323
+ origin: session.origin ?? null,
324
+ tags: session.tags ?? [],
325
+ selectedFolders: session.selectedFolders ?? [],
326
+ status: session.status ?? null,
327
+ statusBucket: session.statusBucket ?? null,
328
+ workerStatus: session.workerStatus ?? null,
329
+ postTurnSummary: session.postTurnSummary ?? null
330
+ }];
331
+ })
332
+ .sort((left, right) => Date.parse(right.lastEventAt) - Date.parse(left.lastEventAt))
333
+ .slice(0, options.limit ?? 12);
334
+ }
335
+ function normalizedStatus(session) {
336
+ return [session.status, session.statusBucket, session.workerStatus, session.postTurnSummary?.statusCategory]
337
+ .filter((value) => Boolean(value))
338
+ .join(" ")
339
+ .toLowerCase();
340
+ }
341
+ function needsAction(session) {
342
+ const value = session.postTurnSummary?.needsAction?.toLowerCase();
343
+ return value === "true" || value === "yes" || value === "required" || value === "needs_action";
344
+ }
345
+ function sessionState(session, now, activeWindowMs, recentDoneWindowMs) {
346
+ const ageMs = Math.max(0, now - Date.parse(session.lastEventAt));
347
+ const status = normalizedStatus(session);
348
+ if (status.includes("blocked") || status.includes("error") || status.includes("failed"))
349
+ return "blocked";
350
+ if (needsAction(session) || status.includes("need_input") || status.includes("waiting"))
351
+ return "waiting";
352
+ if (status.includes("review_ready") || status.includes("complete") || status.includes("done"))
353
+ return "done";
354
+ if (ageMs <= activeWindowMs && (status.includes("active") || status.includes("working") || status.includes("running"))) {
355
+ return "thinking";
356
+ }
357
+ if (ageMs <= recentDoneWindowMs) {
358
+ return "done";
359
+ }
360
+ return "idle";
361
+ }
362
+ function deterministicAppearance(key) {
363
+ let hash = 2166136261;
364
+ for (const char of key) {
365
+ hash ^= char.charCodeAt(0);
366
+ hash = Math.imul(hash, 16777619);
367
+ }
368
+ return appearance_1.APPEARANCES[(hash >>> 0) % appearance_1.APPEARANCES.length];
369
+ }
370
+ function statusDetail(session, state) {
371
+ if (state === "thinking")
372
+ return "Claude Home remote work is active";
373
+ if (state === "waiting")
374
+ return "Claude Home remote work is waiting";
375
+ if (state === "blocked")
376
+ return "Claude Home remote work is blocked";
377
+ if (state === "done")
378
+ return "Claude Home remote work is ready to review";
379
+ return "Claude Home remote work session";
380
+ }
381
+ async function loadClaudeHomeAccountAgents(options = {}) {
382
+ const now = options.now ?? Date.now();
383
+ const activeWindowMs = options.activeWindowMs ?? DEFAULT_ACTIVE_WINDOW_MS;
384
+ const recentDoneWindowMs = options.recentDoneWindowMs ?? DEFAULT_RECENT_DONE_WINDOW_MS;
385
+ const sessions = await discoverClaudeHomeRemoteSessions(options);
386
+ return sessions.map((session) => {
387
+ const state = sessionState(session, now, activeWindowMs, recentDoneWindowMs);
388
+ const isOngoing = state === "thinking" || state === "waiting" || state === "blocked";
389
+ const label = session.title?.trim() || "Claude Home";
390
+ return {
391
+ id: `claude:home-remote:${session.id}`,
392
+ label,
393
+ source: "claude",
394
+ sourceKind: session.model ? `claude:cowork-remote:${session.model}` : "claude:cowork-remote",
395
+ parentThreadId: null,
396
+ depth: 0,
397
+ isCurrent: state === "thinking",
398
+ isOngoing,
399
+ statusText: "home · remote",
400
+ role: "home work",
401
+ nickname: null,
402
+ isSubagent: false,
403
+ state,
404
+ detail: statusDetail(session, state),
405
+ cwd: null,
406
+ sourceProjectRoot: null,
407
+ roomId: null,
408
+ appearance: deterministicAppearance(session.id),
409
+ updatedAt: session.lastEventAt,
410
+ stoppedAt: isOngoing ? null : session.lastEventAt,
411
+ paths: [],
412
+ activityEvent: null,
413
+ goal: {
414
+ kind: "claudeCowork",
415
+ objective: session.title || "Claude Home remote work",
416
+ status: state === "done" ? "complete" : state === "blocked" ? "blocked" : isOngoing ? "active" : "unknown",
417
+ confidence: "inferred",
418
+ createdAt: session.createdAt,
419
+ updatedAt: session.lastEventAt
420
+ },
421
+ latestMessage: null,
422
+ threadId: null,
423
+ taskId: null,
424
+ resumeCommand: null,
425
+ url: null,
426
+ git: null,
427
+ provenance: "claude",
428
+ confidence: "inferred",
429
+ needsUser: null,
430
+ liveSubscription: "readOnly",
431
+ network: null,
432
+ interactionMode: "work",
433
+ conversationKey: `claude-home:${session.id}`,
434
+ accountObserved: true
435
+ };
436
+ });
437
+ }
438
+ //# sourceMappingURL=claude-home-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-home-cache.js","sourceRoot":"","sources":["../src/claude-home-cache.ts"],"names":[],"mappings":";;AAkMA,0DA2CC;AAED,oEAyDC;AAiED,4EA2CC;AAmDD,kEA0DC;AAjgBD,+CAAuD;AACvD,qCAAkC;AAClC,yCAA2C;AAE3C,6CAA2C;AAG3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAC3D,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,eAAe,GAAG,8CAA8C,CAAC;AACvE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAC7D,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAC/D,MAAM,wBAAwB,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AAChD,MAAM,6BAA6B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;AAkE/D,SAAS,sBAAsB;IAC7B,MAAM,IAAI,GAAG,IAAA,iBAAO,GAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAA,gBAAI,EAAC,IAAI,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACvG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAC,KAAgC;QAClC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,SAAiB;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,KAAa,EAAE,SAAiB;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK;SAC5B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SAC/C,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpD,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAsC;IACjE,MAAM,UAAU,GAAG,MAAM,EAAE,gBAAgB,IAAI,MAAM,EAAE,eAAe,IAAI,MAAM,EAAE,OAAO,CAAC;IAC1F,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAC7C,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAA,oBAAQ,EAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;eACzD,CAAC,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAA,oBAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1F,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,iBAAiB,IAAI,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACnF,MAAM,KAAK,GAAiC,EAAE,EAAE,EAAE,CAAC;IAEnD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;QAAE,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;QACxE,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC;QAC7E,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,kBAAkB,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACpF,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QAAE,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACvF,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;QAAE,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjF,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SAC1F,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;QAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,OAAO;QAAE,KAAK,CAAC,eAAe,GAAG,OAAO,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;QAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC;QAC9E,KAAK,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,eAAe,GAAG;YACtB,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3E,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SACrF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0FAA0F;AAC1F,SAAgB,uBAAuB,CAAC,IAAqB;IAC3D,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,SAAS,GAAa,EAAE,CAAC;IAE7B,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,MAAM,IAAI,GAAG,SAAS,CAAC;QACvB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,SAAS,GAAG,EAAE,CAAC;QACf,SAAS,GAAG,EAAE,CAAC;QACf,IACE,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC;eAC5D,CAAC,IAAI;eACL,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,EAC/C,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC;YAC9D,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,4BAA4B,CAChD,QAAgB,EAChB,UAAyE,EAAE;IAE3E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACpE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACpE,IAAI,MAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,kBAAkB,IAAI,IAAI,CAAC,IAAI,GAAG,YAAY,EAAE,CAAC;YACjF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACzF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;YAC5D,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QACpF,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,IAAI,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;YACvF,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QAC1C,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,QAAgB;IACxD,IAAI,MAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAA,eAAI,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACzF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,IAAI,SAAS,GAAG,KAAK,EAAE,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,6FAA6F;QAC7F,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QAChF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAChF,IAAI,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,SAAS,KAAK,eAAe,CAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAA+B;IAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACpE,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,SAAS,IAAI,sBAAsB,EAAE,EAAE,CAAC;QAChE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC5D,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM,IAAI,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;gBAC9B,IACE,IAAI,CAAC,IAAI,IAAI,YAAY;uBACtB,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW;uBACjC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,MAAM;uBAC5B,MAAM,0BAA0B,CAAC,IAAI,CAAC,EACzC,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;IACD,OAAO,UAAU;SACd,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1F,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAuB,CAAC;SAC1D,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAChG,CAAC;AAEM,KAAK,UAAU,gCAAgC,CACpD,UAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwC,CAAC;IACjE,KAAK,MAAM,SAAS,IAAI,MAAM,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,4BAA4B,CAAC;IACtF,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,KAAK,iBAAiB,CAAC;SAClE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;SACpE,OAAO,CAAC,CAAC,OAAO,EAA6B,EAAE;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;QAC7D,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,kBAAkB,EAAE,CAAC;YACvE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC;gBACN,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;gBACpC,WAAW;gBACX,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,EAAE;gBAC9C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;gBACxB,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,EAAE;gBAC9C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;gBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;gBAC1C,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;gBAC1C,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;aACjD,CAAC,CAAC;IACL,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACnF,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgC;IACxD,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,eAAe,EAAE,cAAc,CAAC;SACzG,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAClD,IAAI,CAAC,GAAG,CAAC;SACT,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,OAAgC;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IAClE,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,cAAc,CAAC;AACjG,CAAC;AAED,SAAS,YAAY,CACnB,OAAgC,EAChC,GAAW,EACX,cAAsB,EACtB,kBAA0B;IAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1G,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1G,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7G,IAAI,KAAK,IAAI,cAAc,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACvH,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,IAAI,kBAAkB,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC1C,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,wBAAW,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,wBAAW,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,OAAgC,EAAE,KAAoB;IAC1E,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,mCAAmC,CAAC;IACrE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,oCAAoC,CAAC;IACrE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,oCAAoC,CAAC;IACrE,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,4CAA4C,CAAC;IAC1E,OAAO,iCAAiC,CAAC;AAC3C,CAAC;AAEM,KAAK,UAAU,2BAA2B,CAC/C,UAAkC,EAAE;IAEpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC;IAC1E,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,6BAA6B,CAAC;IACvF,MAAM,QAAQ,GAAG,MAAM,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACjE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC;QACrF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,aAAa,CAAC;QACrD,OAAO;YACL,EAAE,EAAE,sBAAsB,OAAO,CAAC,EAAE,EAAE;YACtC,KAAK;YACL,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,wBAAwB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,sBAAsB;YAC5F,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,KAAK,KAAK,UAAU;YAC/B,SAAS;YACT,UAAU,EAAE,eAAe;YAC3B,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,KAAK;YACjB,KAAK;YACL,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;YACpC,GAAG,EAAE,IAAI;YACT,iBAAiB,EAAE,IAAI;YACvB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,SAAS,EAAE,OAAO,CAAC,WAAW;YAC9B,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW;YACjD,KAAK,EAAE,EAAE;YACT,aAAa,EAAE,IAAI;YACnB,IAAI,EAAE;gBACJ,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,yBAAyB;gBACrD,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBAC1G,UAAU,EAAE,UAAU;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,WAAW;aAC/B;YACD,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,IAAI;YACnB,GAAG,EAAE,IAAI;YACT,GAAG,EAAE,IAAI;YACT,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,UAAU;YACtB,SAAS,EAAE,IAAI;YACf,gBAAgB,EAAE,UAAU;YAC5B,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,MAAM;YACvB,eAAe,EAAE,eAAe,OAAO,CAAC,EAAE,EAAE;YAC5C,eAAe,EAAE,IAAI;SACtB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,154 @@
1
+ import { type DiscoveredProject } from "./project-paths";
2
+ import type { AgentActivityEvent, ActivityState, AgentConfidence, AgentGoalState, DashboardAgent, DashboardEvent, NeedsUserState } from "./types";
3
+ export interface ClaudeTeamMember {
4
+ agentId: string;
5
+ name: string;
6
+ agentType: string | null;
7
+ model: string | null;
8
+ prompt: string | null;
9
+ color: string | null;
10
+ joinedAt: number | null;
11
+ tmuxPaneId: string | null;
12
+ cwd: string;
13
+ worktreePath: string | null;
14
+ sessionId: string | null;
15
+ subscriptions: string[];
16
+ backendType: string | null;
17
+ isActive: boolean;
18
+ mode: string | null;
19
+ }
20
+ export interface ClaudeTeamSnapshot {
21
+ name: string;
22
+ description: string | null;
23
+ leadAgentId: string | null;
24
+ leadSessionId: string | null;
25
+ updatedAt: number;
26
+ members: ClaudeTeamMember[];
27
+ }
28
+ interface ClaudeTeamMemberContext {
29
+ team: ClaudeTeamSnapshot;
30
+ member: ClaudeTeamMember;
31
+ leadSessionId: string | null;
32
+ }
33
+ interface ClaudeTeamIndex {
34
+ bySessionId: Map<string, ClaudeTeamMemberContext>;
35
+ byLeadAndAgentId: Map<string, ClaudeTeamMemberContext>;
36
+ contexts: ClaudeTeamMemberContext[];
37
+ }
38
+ export interface ClaudeCoworkSpace {
39
+ id: string | null;
40
+ name: string;
41
+ root: string;
42
+ instructions: string | null;
43
+ updatedAt: number;
44
+ }
45
+ export interface ClaudeCoworkSession {
46
+ sessionId: string;
47
+ cliSessionId: string | null;
48
+ processName: string | null;
49
+ vmProcessName: string | null;
50
+ title: string | null;
51
+ initialMessage: string | null;
52
+ model: string | null;
53
+ spaceId: string | null;
54
+ roots: string[];
55
+ filePaths: string[];
56
+ createdAt: number;
57
+ updatedAt: number;
58
+ isArchived: boolean;
59
+ }
60
+ export interface ClaudeBackgroundJobSession {
61
+ jobId: string;
62
+ sessionId: string | null;
63
+ name: string | null;
64
+ prompt: string | null;
65
+ cwd: string;
66
+ projectRoot: string;
67
+ worktreePath: string | null;
68
+ state: ActivityState;
69
+ stateText: string | null;
70
+ detail: string;
71
+ updatedAt: number;
72
+ createdAt: number | null;
73
+ isOngoing: boolean;
74
+ }
75
+ interface ClaudeActivitySummary {
76
+ label: string;
77
+ sourceKind: string;
78
+ state: ActivityState;
79
+ detail: string;
80
+ updatedAt: string;
81
+ paths: string[];
82
+ activityEvent: AgentActivityEvent | null;
83
+ gitBranch: string | null;
84
+ confidence: AgentConfidence;
85
+ needsUser: NeedsUserState | null;
86
+ latestMessage: string | null;
87
+ isOngoing: boolean;
88
+ goal?: AgentGoalState | null;
89
+ }
90
+ export declare function buildClaudeSessionEventsForTest(input: {
91
+ sessionId: string;
92
+ fallbackCwd: string;
93
+ records: Array<Record<string, unknown>>;
94
+ fallbackUpdatedAt: number;
95
+ hookRecords: Array<Record<string, unknown>>;
96
+ teamIndex?: ClaudeTeamIndex;
97
+ }): DashboardEvent[];
98
+ export declare function normalizeClaudeBackgroundJobForTest(jobId: string, value: unknown, fallbackUpdatedAt: number): ClaudeBackgroundJobSession | null;
99
+ export declare function summariseClaudeHookRecord(input: {
100
+ sessionId: string;
101
+ model: string | null;
102
+ fallbackCwd: string;
103
+ gitBranch: string | null;
104
+ record: Record<string, unknown>;
105
+ fallbackUpdatedAt: number;
106
+ }): ClaudeActivitySummary | null;
107
+ export declare function loadClaudeProjectSnapshotData(projectRoot: string, limit?: number): Promise<{
108
+ agents: DashboardAgent[];
109
+ events: DashboardEvent[];
110
+ }>;
111
+ export declare function summariseClaudeSession(sessionId: string, fallbackCwd: string, records: Array<Record<string, unknown>>, fallbackUpdatedAt: number, hookRecords?: Array<Record<string, unknown>>, sessionTitle?: string | null): ClaudeActivitySummary;
112
+ export declare function discoverClaudeProjects(limit?: number): Promise<DiscoveredProject[]>;
113
+ export declare function discoverClaudeProjectsFromTeamsForTest(teams: ClaudeTeamSnapshot[], limit?: number): DiscoveredProject[];
114
+ export declare function discoverClaudeProjectsFromCoworkForTest(input: {
115
+ spaces?: ClaudeCoworkSpace[];
116
+ sessions?: ClaudeCoworkSession[];
117
+ limit?: number;
118
+ }): DiscoveredProject[];
119
+ export declare function discoverClaudeProjectsFromBackgroundJobsForTest(jobs: ClaudeBackgroundJobSession[], limit?: number): DiscoveredProject[];
120
+ export declare function buildClaudeLeadAgentsForTest(input: {
121
+ projectRoot: string;
122
+ sessionId: string;
123
+ cwd: string;
124
+ gitBranch?: string | null;
125
+ updatedAt: number;
126
+ records?: Array<Record<string, unknown>>;
127
+ hookRecords?: Array<Record<string, unknown>>;
128
+ teams?: ClaudeTeamSnapshot[];
129
+ }): Promise<DashboardAgent[]>;
130
+ export declare function buildClaudeSubagentAgentsForTest(input: {
131
+ projectRoot: string;
132
+ sessionId: string;
133
+ projectDirPath?: string | null;
134
+ cwd: string;
135
+ gitBranch?: string | null;
136
+ updatedAt: number;
137
+ records?: Array<Record<string, unknown>>;
138
+ hookRecords: Array<Record<string, unknown>>;
139
+ teams?: ClaudeTeamSnapshot[];
140
+ }): Promise<DashboardAgent[]>;
141
+ export declare function buildClaudeTeamAgentsForTest(input: {
142
+ projectRoot: string;
143
+ teams: ClaudeTeamSnapshot[];
144
+ }): Promise<DashboardAgent[]>;
145
+ export declare function buildClaudeCoworkAgentsForTest(input: {
146
+ projectRoot: string;
147
+ sessions: ClaudeCoworkSession[];
148
+ }): Promise<DashboardAgent[]>;
149
+ export declare function buildClaudeBackgroundAgentsForTest(input: {
150
+ projectRoot: string;
151
+ jobs: ClaudeBackgroundJobSession[];
152
+ }): Promise<DashboardAgent[]>;
153
+ export declare function loadClaudeAgents(projectRoot: string, limit?: number): Promise<DashboardAgent[]>;
154
+ export {};