@phigon/observer 8.1.0 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -8
- package/dist/bin/guardian-runner-darwin-amd64 +0 -0
- package/dist/bin/guardian-runner-darwin-arm64 +0 -0
- package/dist/bin/guardian-runner-linux-amd64 +0 -0
- package/dist/bin/guardian-runner-linux-arm64 +0 -0
- package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
- package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
- package/dist/src/action-policy.d.ts.map +1 -1
- package/dist/src/action-policy.js +4 -2
- package/dist/src/action-policy.js.map +1 -1
- package/dist/src/activity/adapters/claude.d.ts.map +1 -1
- package/dist/src/activity/adapters/claude.js +19 -1
- package/dist/src/activity/adapters/claude.js.map +1 -1
- package/dist/src/activity/adapters/cline-task.d.ts +7 -0
- package/dist/src/activity/adapters/cline-task.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline-task.js +197 -0
- package/dist/src/activity/adapters/cline-task.js.map +1 -0
- package/dist/src/activity/adapters/cline.d.ts +3 -0
- package/dist/src/activity/adapters/cline.d.ts.map +1 -0
- package/dist/src/activity/adapters/cline.js +102 -0
- package/dist/src/activity/adapters/cline.js.map +1 -0
- package/dist/src/activity/adapters/codex.d.ts.map +1 -1
- package/dist/src/activity/adapters/codex.js +76 -0
- package/dist/src/activity/adapters/codex.js.map +1 -1
- package/dist/src/activity/adapters/copilot-chat.d.ts +3 -0
- package/dist/src/activity/adapters/copilot-chat.d.ts.map +1 -0
- package/dist/src/activity/adapters/copilot-chat.js +176 -0
- package/dist/src/activity/adapters/copilot-chat.js.map +1 -0
- package/dist/src/activity/adapters/copilot.d.ts +2 -1
- package/dist/src/activity/adapters/copilot.d.ts.map +1 -1
- package/dist/src/activity/adapters/copilot.js +173 -2
- package/dist/src/activity/adapters/copilot.js.map +1 -1
- package/dist/src/activity/adapters/cursor.d.ts +3 -0
- package/dist/src/activity/adapters/cursor.d.ts.map +1 -0
- package/dist/src/activity/adapters/cursor.js +86 -0
- package/dist/src/activity/adapters/cursor.js.map +1 -0
- package/dist/src/activity/adapters/factory-droid.d.ts +3 -0
- package/dist/src/activity/adapters/factory-droid.d.ts.map +1 -0
- package/dist/src/activity/adapters/factory-droid.js +126 -0
- package/dist/src/activity/adapters/factory-droid.js.map +1 -0
- package/dist/src/activity/adapters/gemini.d.ts +3 -0
- package/dist/src/activity/adapters/gemini.d.ts.map +1 -0
- package/dist/src/activity/adapters/gemini.js +177 -0
- package/dist/src/activity/adapters/gemini.js.map +1 -0
- package/dist/src/activity/adapters/goose.d.ts +3 -0
- package/dist/src/activity/adapters/goose.d.ts.map +1 -0
- package/dist/src/activity/adapters/goose.js +116 -0
- package/dist/src/activity/adapters/goose.js.map +1 -0
- package/dist/src/activity/adapters/kiro.d.ts +3 -0
- package/dist/src/activity/adapters/kiro.d.ts.map +1 -0
- package/dist/src/activity/adapters/kiro.js +47 -0
- package/dist/src/activity/adapters/kiro.js.map +1 -0
- package/dist/src/activity/adapters/opencode.d.ts.map +1 -1
- package/dist/src/activity/adapters/opencode.js +108 -1
- package/dist/src/activity/adapters/opencode.js.map +1 -1
- package/dist/src/activity/adapters/zed.d.ts +3 -0
- package/dist/src/activity/adapters/zed.d.ts.map +1 -0
- package/dist/src/activity/adapters/zed.js +134 -0
- package/dist/src/activity/adapters/zed.js.map +1 -0
- package/dist/src/activity/collector.d.ts +12 -0
- package/dist/src/activity/collector.d.ts.map +1 -1
- package/dist/src/activity/collector.js +156 -3
- package/dist/src/activity/collector.js.map +1 -1
- package/dist/src/activity/goose-sqlite-source.d.ts +33 -0
- package/dist/src/activity/goose-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/goose-sqlite-source.js +274 -0
- package/dist/src/activity/goose-sqlite-source.js.map +1 -0
- package/dist/src/activity/index.d.ts +3 -0
- package/dist/src/activity/index.d.ts.map +1 -1
- package/dist/src/activity/index.js +3 -0
- package/dist/src/activity/index.js.map +1 -1
- package/dist/src/activity/ingest.d.ts.map +1 -1
- package/dist/src/activity/ingest.js +2 -1
- package/dist/src/activity/ingest.js.map +1 -1
- package/dist/src/activity/json-document-source.d.ts +136 -0
- package/dist/src/activity/json-document-source.d.ts.map +1 -0
- package/dist/src/activity/json-document-source.js +569 -0
- package/dist/src/activity/json-document-source.js.map +1 -0
- package/dist/src/activity/normalize.d.ts.map +1 -1
- package/dist/src/activity/normalize.js +64 -6
- package/dist/src/activity/normalize.js.map +1 -1
- package/dist/src/activity/opencode-message-tables.d.ts +87 -0
- package/dist/src/activity/opencode-message-tables.d.ts.map +1 -0
- package/dist/src/activity/opencode-message-tables.js +546 -0
- package/dist/src/activity/opencode-message-tables.js.map +1 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts +7 -0
- package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -1
- package/dist/src/activity/opencode-sqlite-source.js +153 -63
- package/dist/src/activity/opencode-sqlite-source.js.map +1 -1
- package/dist/src/activity/source-reader.d.ts +16 -1
- package/dist/src/activity/source-reader.d.ts.map +1 -1
- package/dist/src/activity/source-reader.js +308 -29
- package/dist/src/activity/source-reader.js.map +1 -1
- package/dist/src/activity/sqlite-connections.d.ts +77 -0
- package/dist/src/activity/sqlite-connections.d.ts.map +1 -0
- package/dist/src/activity/sqlite-connections.js +220 -0
- package/dist/src/activity/sqlite-connections.js.map +1 -0
- package/dist/src/activity/zed-sqlite-source.d.ts +65 -0
- package/dist/src/activity/zed-sqlite-source.d.ts.map +1 -0
- package/dist/src/activity/zed-sqlite-source.js +547 -0
- package/dist/src/activity/zed-sqlite-source.js.map +1 -0
- package/dist/src/agent-action-executor.d.ts +13 -1
- package/dist/src/agent-action-executor.d.ts.map +1 -1
- package/dist/src/agent-action-executor.js +108 -56
- package/dist/src/agent-action-executor.js.map +1 -1
- package/dist/src/agentic-guardian.d.ts.map +1 -1
- package/dist/src/agentic-guardian.js +6 -5
- package/dist/src/agentic-guardian.js.map +1 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +47 -10
- package/dist/src/cli.js.map +1 -1
- package/dist/src/config.d.ts +13 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +99 -3
- package/dist/src/config.js.map +1 -1
- package/dist/src/connection-config.d.ts.map +1 -1
- package/dist/src/connection-config.js +5 -0
- package/dist/src/connection-config.js.map +1 -1
- package/dist/src/content-redaction.d.ts.map +1 -1
- package/dist/src/content-redaction.js +9 -2
- package/dist/src/content-redaction.js.map +1 -1
- package/dist/src/credential-store.d.ts.map +1 -1
- package/dist/src/credential-store.js +2 -1
- package/dist/src/credential-store.js.map +1 -1
- package/dist/src/custom-agent-registry.d.ts.map +1 -1
- package/dist/src/custom-agent-registry.js +2 -1
- package/dist/src/custom-agent-registry.js.map +1 -1
- package/dist/src/discovery/adapters/generic.d.ts.map +1 -1
- package/dist/src/discovery/adapters/generic.js +160 -2
- package/dist/src/discovery/adapters/generic.js.map +1 -1
- package/dist/src/discovery/engine.d.ts +7 -1
- package/dist/src/discovery/engine.d.ts.map +1 -1
- package/dist/src/discovery/engine.js +20 -5
- package/dist/src/discovery/engine.js.map +1 -1
- package/dist/src/discovery/known-agent.d.ts +7 -0
- package/dist/src/discovery/known-agent.d.ts.map +1 -1
- package/dist/src/discovery/known-agent.js +9 -4
- package/dist/src/discovery/known-agent.js.map +1 -1
- package/dist/src/discovery/system-evidence.d.ts +40 -1
- package/dist/src/discovery/system-evidence.d.ts.map +1 -1
- package/dist/src/discovery/system-evidence.js +189 -16
- package/dist/src/discovery/system-evidence.js.map +1 -1
- package/dist/src/event-queue.d.ts.map +1 -1
- package/dist/src/event-queue.js +88 -38
- package/dist/src/event-queue.js.map +1 -1
- package/dist/src/event-spool.d.ts.map +1 -1
- package/dist/src/event-spool.js +58 -10
- package/dist/src/event-spool.js.map +1 -1
- package/dist/src/guardian-containment.d.ts +2 -6
- package/dist/src/guardian-containment.d.ts.map +1 -1
- package/dist/src/guardian-containment.js +12 -63
- package/dist/src/guardian-containment.js.map +1 -1
- package/dist/src/guardian-decision-journal.d.ts.map +1 -1
- package/dist/src/guardian-decision-journal.js +2 -1
- package/dist/src/guardian-decision-journal.js.map +1 -1
- package/dist/src/guardian-managed-exec.d.ts.map +1 -1
- package/dist/src/guardian-managed-exec.js +2 -1
- package/dist/src/guardian-managed-exec.js.map +1 -1
- package/dist/src/guardian-model-bridge.d.ts.map +1 -1
- package/dist/src/guardian-model-bridge.js +2 -1
- package/dist/src/guardian-model-bridge.js.map +1 -1
- package/dist/src/guardian-native.d.ts +0 -1
- package/dist/src/guardian-native.d.ts.map +1 -1
- package/dist/src/guardian-native.js +0 -6
- package/dist/src/guardian-native.js.map +1 -1
- package/dist/src/guardian-process-monitor.d.ts +3 -0
- package/dist/src/guardian-process-monitor.d.ts.map +1 -1
- package/dist/src/guardian-process-monitor.js +8 -0
- package/dist/src/guardian-process-monitor.js.map +1 -1
- package/dist/src/historical-identity-store.d.ts.map +1 -1
- package/dist/src/historical-identity-store.js +2 -1
- package/dist/src/historical-identity-store.js.map +1 -1
- package/dist/src/installation.d.ts.map +1 -1
- package/dist/src/installation.js +3 -2
- package/dist/src/installation.js.map +1 -1
- package/dist/src/machine-command-executor.d.ts +22 -7
- package/dist/src/machine-command-executor.d.ts.map +1 -1
- package/dist/src/machine-command-executor.js +91 -17
- package/dist/src/machine-command-executor.js.map +1 -1
- package/dist/src/pair.d.ts.map +1 -1
- package/dist/src/pair.js +3 -2
- package/dist/src/pair.js.map +1 -1
- package/dist/src/private-directory.d.ts +4 -0
- package/dist/src/private-directory.d.ts.map +1 -0
- package/dist/src/private-directory.js +35 -0
- package/dist/src/private-directory.js.map +1 -0
- package/dist/src/process-tree.d.ts +73 -0
- package/dist/src/process-tree.d.ts.map +1 -0
- package/dist/src/process-tree.js +256 -0
- package/dist/src/process-tree.js.map +1 -0
- package/dist/src/server-authority.d.ts +26 -0
- package/dist/src/server-authority.d.ts.map +1 -0
- package/dist/src/server-authority.js +102 -0
- package/dist/src/server-authority.js.map +1 -0
- package/dist/src/stream-client.d.ts +3 -1
- package/dist/src/stream-client.d.ts.map +1 -1
- package/dist/src/stream-client.js +49 -11
- package/dist/src/stream-client.js.map +1 -1
- package/dist/src/stream-state.d.ts.map +1 -1
- package/dist/src/stream-state.js +2 -1
- package/dist/src/stream-state.js.map +1 -1
- package/dist/src/system-inspection.d.ts +78 -0
- package/dist/src/system-inspection.d.ts.map +1 -0
- package/dist/src/system-inspection.js +281 -0
- package/dist/src/system-inspection.js.map +1 -0
- package/dist/src/update.d.ts.map +1 -1
- package/dist/src/update.js +9 -3
- package/dist/src/update.js.map +1 -1
- package/dist/src/user-notices.d.ts +53 -0
- package/dist/src/user-notices.d.ts.map +1 -0
- package/dist/src/user-notices.js +117 -0
- package/dist/src/user-notices.js.map +1 -0
- package/package.json +1 -1
- package/dist/src/windows-process.d.ts +0 -7
- package/dist/src/windows-process.d.ts.map +0 -1
- package/dist/src/windows-process.js +0 -18
- package/dist/src/windows-process.js.map +0 -1
|
@@ -0,0 +1,547 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { realpath, stat } from "node:fs/promises";
|
|
3
|
+
import { join, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { DatabaseSync } from "node:sqlite";
|
|
5
|
+
import { zstdDecompressSync } from "node:zlib";
|
|
6
|
+
import { packCursor, resumeIndex } from "./json-document-source.js";
|
|
7
|
+
import { databaseSignature } from "./sqlite-connections.js";
|
|
8
|
+
const databaseName = "threads.db";
|
|
9
|
+
// The newest threads are followed. An older thread is read again once Zed
|
|
10
|
+
// saves it, which moves it to the front.
|
|
11
|
+
const maxTrackedThreads = 1_024;
|
|
12
|
+
const maxThreadBytes = 32 << 20;
|
|
13
|
+
// A cursor packs the delivered item count in 17 bits (see packCursor).
|
|
14
|
+
const maxItemsPerThread = (1 << 17) - 1;
|
|
15
|
+
const maxBlocksPerMessage = 1_024;
|
|
16
|
+
const itemIdField = "id";
|
|
17
|
+
/**
|
|
18
|
+
* Zed's agent panel keeps every thread in one SQLite database,
|
|
19
|
+
* `<data dir>/threads/threads.db`: one `threads` row per thread whose `data`
|
|
20
|
+
* is the whole thread as JSON, zstd-compressed (`data_type` "zstd") or plain
|
|
21
|
+
* ("json"), rewritten on every save. Each thread is split into items (see
|
|
22
|
+
* zedThreadItems) and a per-thread cursor remembers how many were delivered
|
|
23
|
+
* and the last one's id, so only items added since are emitted. A thread
|
|
24
|
+
* whose `updated_at` and size are unchanged is not decompressed again.
|
|
25
|
+
* Messages carry no times of their own; items take the thread's save time.
|
|
26
|
+
*/
|
|
27
|
+
export async function scanZedSQLiteSources(options) {
|
|
28
|
+
const records = [];
|
|
29
|
+
let files = 0;
|
|
30
|
+
let malformed = 0;
|
|
31
|
+
let oversized = 0;
|
|
32
|
+
let complete = true;
|
|
33
|
+
for (const root of options.roots) {
|
|
34
|
+
try {
|
|
35
|
+
const result = await scanDatabase(root, {
|
|
36
|
+
...options,
|
|
37
|
+
maxRecords: Math.max(0, options.maxRecords - records.length),
|
|
38
|
+
});
|
|
39
|
+
records.push(...result.records);
|
|
40
|
+
files += result.files;
|
|
41
|
+
malformed += result.malformed;
|
|
42
|
+
oversized += result.oversized;
|
|
43
|
+
complete = complete && result.complete;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
options.connections?.release(root);
|
|
47
|
+
if (!isUnavailableDatabase(error))
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return { records, files, malformed, oversized, complete };
|
|
52
|
+
}
|
|
53
|
+
async function scanDatabase(root, options) {
|
|
54
|
+
const empty = { records: [], files: 0, malformed: 0, oversized: 0, complete: true };
|
|
55
|
+
const rootReal = await realpath(root);
|
|
56
|
+
const databaseReal = await realpath(join(rootReal, databaseName));
|
|
57
|
+
const metadata = isWithin(rootReal, databaseReal)
|
|
58
|
+
? await stat(databaseReal)
|
|
59
|
+
: undefined;
|
|
60
|
+
if (metadata?.isFile() !== true) {
|
|
61
|
+
options.connections?.release(root);
|
|
62
|
+
return empty;
|
|
63
|
+
}
|
|
64
|
+
// A history import skips a database it already read to the end.
|
|
65
|
+
const signature = options.historical && options.completedHistory !== undefined
|
|
66
|
+
? await databaseSignature(databaseReal, metadata)
|
|
67
|
+
: undefined;
|
|
68
|
+
if (signature !== undefined && options.completedHistory?.get(databaseReal) === signature) {
|
|
69
|
+
return { ...empty, files: 1 };
|
|
70
|
+
}
|
|
71
|
+
// Only a live reader skips unchanged databases; see SQLiteConnections.
|
|
72
|
+
const scan = options.historical
|
|
73
|
+
? undefined
|
|
74
|
+
: await options.connections?.check(root, databaseReal, metadata, options.cursors, openDatabase);
|
|
75
|
+
if (scan?.unchanged === true)
|
|
76
|
+
return { ...empty, files: 1 };
|
|
77
|
+
const database = scan?.database ?? openDatabase(databaseReal);
|
|
78
|
+
try {
|
|
79
|
+
if (!hasThreadColumns(database)) {
|
|
80
|
+
scan?.finish(undefined);
|
|
81
|
+
return { ...empty, files: 1, malformed: 1 };
|
|
82
|
+
}
|
|
83
|
+
const threads = listThreads(database);
|
|
84
|
+
const replay = new Set(options.initialScan && options.replayOnFirstStart && !options.historical
|
|
85
|
+
? threads.slice(0, options.replaySessions).map((thread) => thread.id)
|
|
86
|
+
: []);
|
|
87
|
+
const records = [];
|
|
88
|
+
let malformed = 0;
|
|
89
|
+
let oversized = 0;
|
|
90
|
+
let complete = true;
|
|
91
|
+
let remaining = options.maxRecords;
|
|
92
|
+
// The cursors this scan read, for the idle check when no thread changed.
|
|
93
|
+
const read = [];
|
|
94
|
+
let changed = 0;
|
|
95
|
+
for (const thread of threads) {
|
|
96
|
+
const identity = `${databaseReal}\u0000${thread.id}`;
|
|
97
|
+
const cursorKey = digest(`zed-thread-cursor\u0000${identity}`);
|
|
98
|
+
const versionKey = digest(`zed-thread-version\u0000${identity}`);
|
|
99
|
+
const cursor = options.cursors.get(cursorKey);
|
|
100
|
+
const version = threadVersion(thread);
|
|
101
|
+
const savedVersion = options.cursors.get(versionKey);
|
|
102
|
+
read.push([cursorKey, cursor], [versionKey, savedVersion]);
|
|
103
|
+
if (savedVersion === version)
|
|
104
|
+
continue;
|
|
105
|
+
changed++;
|
|
106
|
+
const baselineOnly = cursor === undefined &&
|
|
107
|
+
options.initialScan &&
|
|
108
|
+
!options.historical &&
|
|
109
|
+
!replay.has(thread.id);
|
|
110
|
+
if (remaining <= 0 && !baselineOnly) {
|
|
111
|
+
complete = false;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
let items;
|
|
115
|
+
try {
|
|
116
|
+
items = zedThreadItems(threadDocument(database, thread.id));
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (isOversized(error))
|
|
120
|
+
oversized++;
|
|
121
|
+
else if (isUndecodable(error))
|
|
122
|
+
malformed++;
|
|
123
|
+
else
|
|
124
|
+
throw error;
|
|
125
|
+
options.cursors.set(versionKey, version);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (items === undefined) {
|
|
129
|
+
malformed++;
|
|
130
|
+
options.cursors.set(versionKey, version);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// A tool call whose input was still streaming is held back until Zed
|
|
134
|
+
// saves it complete.
|
|
135
|
+
const available = items.at(-1)?.complete === false
|
|
136
|
+
? items.length - 1
|
|
137
|
+
: items.length;
|
|
138
|
+
let start;
|
|
139
|
+
if (cursor === undefined) {
|
|
140
|
+
if (options.historical)
|
|
141
|
+
start = 0;
|
|
142
|
+
else if (replay.has(thread.id)) {
|
|
143
|
+
start = Math.max(0, available - options.maxReplayRecords);
|
|
144
|
+
}
|
|
145
|
+
else if (options.initialScan)
|
|
146
|
+
start = available;
|
|
147
|
+
else
|
|
148
|
+
start = 0;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
start = resumeIndex(items, cursor, itemIdField);
|
|
152
|
+
}
|
|
153
|
+
const end = Math.max(start, Math.min(available, start + Math.max(0, remaining)));
|
|
154
|
+
const observedAt = threadTime(thread.updatedAt) ?? metadata.mtime;
|
|
155
|
+
const sourceId = `ses_${digest(identity).slice(0, 32)}`;
|
|
156
|
+
for (let index = start; index < end; index++) {
|
|
157
|
+
const item = items[index];
|
|
158
|
+
if (item === undefined)
|
|
159
|
+
break;
|
|
160
|
+
records.push({
|
|
161
|
+
adapterId: options.adapterId,
|
|
162
|
+
sourceId,
|
|
163
|
+
sourceRecordId: digest(`${identity}\u0000${item.id}`),
|
|
164
|
+
observedAt,
|
|
165
|
+
initialReplay: options.historical || replay.has(thread.id),
|
|
166
|
+
value: {
|
|
167
|
+
...item.value,
|
|
168
|
+
thread_id: thread.id,
|
|
169
|
+
timestamp: observedAt.toISOString(),
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
remaining -= end - start;
|
|
174
|
+
options.cursors.set(cursorKey, packCursor(items, end, itemIdField));
|
|
175
|
+
if (end < available) {
|
|
176
|
+
complete = false;
|
|
177
|
+
options.cursors.delete(versionKey);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
options.cursors.set(versionKey, version);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// No thread changed, so the same data and cursors give the same scan.
|
|
184
|
+
const idle = changed === 0 ? read : undefined;
|
|
185
|
+
scan?.finish(idle);
|
|
186
|
+
if (signature !== undefined && complete && records.length === 0) {
|
|
187
|
+
options.completedHistory?.set(databaseReal, signature);
|
|
188
|
+
}
|
|
189
|
+
return { records, files: 1, malformed, oversized, complete };
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
scan?.fail();
|
|
193
|
+
throw error;
|
|
194
|
+
}
|
|
195
|
+
finally {
|
|
196
|
+
if (scan === undefined)
|
|
197
|
+
database.close();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function openDatabase(path) {
|
|
201
|
+
const database = new DatabaseSync(path, { readOnly: true });
|
|
202
|
+
try {
|
|
203
|
+
database.exec("PRAGMA query_only = ON; PRAGMA trusted_schema = OFF;");
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
database.close();
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
return database;
|
|
210
|
+
}
|
|
211
|
+
function hasThreadColumns(database) {
|
|
212
|
+
const columns = new Set(database.prepare("PRAGMA table_info(threads)").all().flatMap((value) => isRecord(value) && typeof value["name"] === "string" ? [value["name"]] : []));
|
|
213
|
+
return ["id", "updated_at", "data_type", "data"].every((column) => columns.has(column));
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* The newest threads, newest first. length() of a blob is read from the
|
|
217
|
+
* row header, so listing never loads the compressed threads.
|
|
218
|
+
*/
|
|
219
|
+
function listThreads(database) {
|
|
220
|
+
return database.prepare("SELECT id, updated_at, length(data) AS size FROM threads " +
|
|
221
|
+
"ORDER BY updated_at DESC, id ASC LIMIT ?").all(maxTrackedThreads).flatMap((value) => {
|
|
222
|
+
if (!isRecord(value))
|
|
223
|
+
return [];
|
|
224
|
+
const id = value["id"];
|
|
225
|
+
const updatedAt = value["updated_at"];
|
|
226
|
+
const size = value["size"];
|
|
227
|
+
return typeof id === "string" &&
|
|
228
|
+
isBoundedId(id) &&
|
|
229
|
+
typeof updatedAt === "string" &&
|
|
230
|
+
updatedAt.length <= 64 &&
|
|
231
|
+
typeof size === "number"
|
|
232
|
+
? [{ id, updatedAt, size }]
|
|
233
|
+
: [];
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
function threadVersion(thread) {
|
|
237
|
+
return Number.parseInt(digest(`${thread.updatedAt}\u0000${thread.size}`).slice(0, 13), 16);
|
|
238
|
+
}
|
|
239
|
+
/** The thread's saved JSON. Throws for data that cannot be decoded. */
|
|
240
|
+
function threadDocument(database, id) {
|
|
241
|
+
const row = database.prepare("SELECT data_type, data FROM threads WHERE id = ? LIMIT 1").get(id);
|
|
242
|
+
if (!isRecord(row))
|
|
243
|
+
return undefined;
|
|
244
|
+
const type = row["data_type"];
|
|
245
|
+
const data = row["data"];
|
|
246
|
+
const bytes = typeof data === "string"
|
|
247
|
+
? Buffer.from(data, "utf8")
|
|
248
|
+
: data instanceof Uint8Array
|
|
249
|
+
? data
|
|
250
|
+
: undefined;
|
|
251
|
+
if (bytes === undefined)
|
|
252
|
+
return undefined;
|
|
253
|
+
let json;
|
|
254
|
+
if (type === "zstd") {
|
|
255
|
+
json = zstdDecompressSync(bytes, { maxOutputLength: maxThreadBytes });
|
|
256
|
+
}
|
|
257
|
+
else if (type === "json") {
|
|
258
|
+
if (bytes.byteLength > maxThreadBytes) {
|
|
259
|
+
throw new RangeError("thread_too_large");
|
|
260
|
+
}
|
|
261
|
+
json = bytes;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
return undefined;
|
|
265
|
+
}
|
|
266
|
+
return JSON.parse(Buffer.from(json.buffer, json.byteOffset, json.byteLength).toString("utf8"));
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Splits a saved Zed thread into items, in order. Zed's own format
|
|
270
|
+
* (version 0.3.0) stores `messages` as tagged values: `{ User: { id,
|
|
271
|
+
* content } }`, `{ Agent: { content, tool_results } }`, `"Resume"` and
|
|
272
|
+
* `{ Compaction: ... }`. A user message becomes one item; each Text,
|
|
273
|
+
* Thinking or ToolUse block of an agent message becomes one, followed by
|
|
274
|
+
* one per tool result. Older threads from Zed's first agent store messages
|
|
275
|
+
* as `{ id, role, segments, tool_uses, tool_results }` and are read into the
|
|
276
|
+
* same items.
|
|
277
|
+
*
|
|
278
|
+
* Item ids are stable across saves: they hang off the id of the user
|
|
279
|
+
* message that started the turn, so a turn rewound and sent again gets new
|
|
280
|
+
* ids. Large payloads are left out: images, the full text of mentioned files
|
|
281
|
+
* and Zed's debugging copy of tool output. Returns undefined when the
|
|
282
|
+
* document holds no message list.
|
|
283
|
+
*/
|
|
284
|
+
export function zedThreadItems(document) {
|
|
285
|
+
if (!isRecord(document) || !Array.isArray(document["messages"])) {
|
|
286
|
+
return undefined;
|
|
287
|
+
}
|
|
288
|
+
const items = [];
|
|
289
|
+
let turn = "start";
|
|
290
|
+
let agentMessages = 0;
|
|
291
|
+
for (const [index, message] of document["messages"].entries()) {
|
|
292
|
+
if (items.length >= maxItemsPerThread)
|
|
293
|
+
break;
|
|
294
|
+
if (!isRecord(message))
|
|
295
|
+
continue;
|
|
296
|
+
if (typeof message["role"] === "string") {
|
|
297
|
+
items.push(...legacyItems(message, index));
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
const user = message["User"];
|
|
301
|
+
if (isRecord(user)) {
|
|
302
|
+
turn = boundedId(user["id"]) ?? `message-${index}`;
|
|
303
|
+
agentMessages = 0;
|
|
304
|
+
const content = userContent(user["content"]);
|
|
305
|
+
if (content.length > 0) {
|
|
306
|
+
items.push({
|
|
307
|
+
id: `user:${turn}`,
|
|
308
|
+
complete: true,
|
|
309
|
+
value: { type: "zed_message", role: "user", content },
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
const agent = message["Agent"];
|
|
315
|
+
if (!isRecord(agent))
|
|
316
|
+
continue;
|
|
317
|
+
const prefix = `${turn}:agent-${agentMessages++}`;
|
|
318
|
+
const blocks = Array.isArray(agent["content"]) ? agent["content"] : [];
|
|
319
|
+
for (const [blockIndex, block] of blocks.slice(0, maxBlocksPerMessage).entries()) {
|
|
320
|
+
const item = agentBlock(block, `${prefix}:${blockIndex}`, prefix);
|
|
321
|
+
if (item !== undefined)
|
|
322
|
+
items.push(item);
|
|
323
|
+
}
|
|
324
|
+
const results = isRecord(agent["tool_results"]) ? agent["tool_results"] : {};
|
|
325
|
+
for (const [toolUseId, result] of Object.entries(results).slice(0, maxBlocksPerMessage)) {
|
|
326
|
+
const item = toolResult(result, toolUseId, prefix);
|
|
327
|
+
if (item !== undefined)
|
|
328
|
+
items.push(item);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return items.slice(0, maxItemsPerThread);
|
|
332
|
+
}
|
|
333
|
+
function agentBlock(block, positionalId, prefix) {
|
|
334
|
+
if (!isRecord(block))
|
|
335
|
+
return undefined;
|
|
336
|
+
const text = block["Text"];
|
|
337
|
+
if (typeof text === "string") {
|
|
338
|
+
return text.trim() === "" ? undefined : assistantItem(positionalId, { Text: text });
|
|
339
|
+
}
|
|
340
|
+
const thinking = block["Thinking"];
|
|
341
|
+
if (isRecord(thinking)) {
|
|
342
|
+
const value = thinking["text"];
|
|
343
|
+
return typeof value === "string" && value.trim() !== ""
|
|
344
|
+
? assistantItem(positionalId, { Thinking: { text: value } })
|
|
345
|
+
: undefined;
|
|
346
|
+
}
|
|
347
|
+
const toolUse = block["ToolUse"];
|
|
348
|
+
if (!isRecord(toolUse))
|
|
349
|
+
return undefined;
|
|
350
|
+
const id = boundedId(toolUse["id"]);
|
|
351
|
+
const inputComplete = toolUse["is_input_complete"] !== false;
|
|
352
|
+
return {
|
|
353
|
+
...assistantItem(id === undefined ? positionalId : `${prefix}:tool:${id}`, {
|
|
354
|
+
ToolUse: {
|
|
355
|
+
id: id ?? "",
|
|
356
|
+
name: typeof toolUse["name"] === "string" ? toolUse["name"] : "",
|
|
357
|
+
input: toolInput(toolUse["input"]),
|
|
358
|
+
is_input_complete: inputComplete,
|
|
359
|
+
},
|
|
360
|
+
}),
|
|
361
|
+
complete: inputComplete,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
function assistantItem(id, block) {
|
|
365
|
+
return {
|
|
366
|
+
id,
|
|
367
|
+
complete: true,
|
|
368
|
+
value: { type: "zed_message", role: "assistant", content: [block] },
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
function toolResult(result, toolUseId, prefix) {
|
|
372
|
+
if (!isRecord(result) || !isBoundedId(toolUseId))
|
|
373
|
+
return undefined;
|
|
374
|
+
return {
|
|
375
|
+
id: `${prefix}:result:${toolUseId}`,
|
|
376
|
+
complete: true,
|
|
377
|
+
value: {
|
|
378
|
+
type: "zed_tool_result",
|
|
379
|
+
tool_use_id: toolUseId,
|
|
380
|
+
tool_name: typeof result["tool_name"] === "string" ? result["tool_name"] : "",
|
|
381
|
+
is_error: result["is_error"] === true,
|
|
382
|
+
content: toolResultText(result["content"]),
|
|
383
|
+
},
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* A thread saved by Zed's first agent (format 0.1 and 0.2): `{ id, role,
|
|
388
|
+
* segments: [{ type: "text" | "thinking", text }], tool_uses: [{ id, name,
|
|
389
|
+
* input }], tool_results: [{ tool_use_id, is_error, content }], is_hidden }`.
|
|
390
|
+
* Tool results sit on the user message after the call.
|
|
391
|
+
*/
|
|
392
|
+
function legacyItems(message, index) {
|
|
393
|
+
const role = message["role"];
|
|
394
|
+
const prefix = `legacy-${boundedId(message["id"]) ?? index}`;
|
|
395
|
+
const segments = Array.isArray(message["segments"]) ? message["segments"] : [];
|
|
396
|
+
const items = [];
|
|
397
|
+
if (role === "user" && message["is_hidden"] !== true) {
|
|
398
|
+
const text = segments.flatMap((segment) => isRecord(segment) && typeof segment["text"] === "string" ? [segment["text"]] : []).join("\n");
|
|
399
|
+
if (text.trim() !== "") {
|
|
400
|
+
items.push({
|
|
401
|
+
id: `${prefix}:user`,
|
|
402
|
+
complete: true,
|
|
403
|
+
value: { type: "zed_message", role: "user", content: [{ Text: text }] },
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
else if (role === "assistant") {
|
|
408
|
+
for (const [segmentIndex, segment] of segments.slice(0, maxBlocksPerMessage).entries()) {
|
|
409
|
+
if (!isRecord(segment) || typeof segment["text"] !== "string")
|
|
410
|
+
continue;
|
|
411
|
+
const block = segment["type"] === "thinking"
|
|
412
|
+
? { Thinking: { text: segment["text"] } }
|
|
413
|
+
: segment["type"] === "text"
|
|
414
|
+
? { Text: segment["text"] }
|
|
415
|
+
: undefined;
|
|
416
|
+
if (block !== undefined && segment["text"].trim() !== "") {
|
|
417
|
+
items.push(assistantItem(`${prefix}:${segmentIndex}`, block));
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
const toolUses = Array.isArray(message["tool_uses"]) ? message["tool_uses"] : [];
|
|
421
|
+
for (const [toolIndex, toolUse] of toolUses.slice(0, maxBlocksPerMessage).entries()) {
|
|
422
|
+
if (!isRecord(toolUse))
|
|
423
|
+
continue;
|
|
424
|
+
const id = boundedId(toolUse["id"]);
|
|
425
|
+
items.push(assistantItem(`${prefix}:tool:${id ?? toolIndex}`, {
|
|
426
|
+
ToolUse: {
|
|
427
|
+
id: id ?? "",
|
|
428
|
+
name: typeof toolUse["name"] === "string" ? toolUse["name"] : "",
|
|
429
|
+
input: toolInput(toolUse["input"]),
|
|
430
|
+
is_input_complete: true,
|
|
431
|
+
},
|
|
432
|
+
}));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
if (role === "user" || role === "assistant") {
|
|
436
|
+
const results = Array.isArray(message["tool_results"]) ? message["tool_results"] : [];
|
|
437
|
+
for (const result of results.slice(0, maxBlocksPerMessage)) {
|
|
438
|
+
if (!isRecord(result))
|
|
439
|
+
continue;
|
|
440
|
+
const id = boundedId(result["tool_use_id"]);
|
|
441
|
+
const item = id === undefined ? undefined : toolResult(result, id, prefix);
|
|
442
|
+
if (item !== undefined)
|
|
443
|
+
items.push(item);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return items;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* The user's words and mentions. A mention keeps what it points at (a file,
|
|
450
|
+
* symbol, thread or URL) but not the text Zed attached for the model; an
|
|
451
|
+
* image keeps only that it was there.
|
|
452
|
+
*/
|
|
453
|
+
function userContent(content) {
|
|
454
|
+
if (!Array.isArray(content))
|
|
455
|
+
return [];
|
|
456
|
+
return content.slice(0, maxBlocksPerMessage).flatMap((part) => {
|
|
457
|
+
if (typeof part === "string")
|
|
458
|
+
return part === "" ? [] : [{ Text: part }];
|
|
459
|
+
if (!isRecord(part))
|
|
460
|
+
return [];
|
|
461
|
+
if (typeof part["Text"] === "string")
|
|
462
|
+
return [{ Text: part["Text"] }];
|
|
463
|
+
const mention = part["Mention"];
|
|
464
|
+
if (isRecord(mention))
|
|
465
|
+
return [{ Mention: { uri: mention["uri"] } }];
|
|
466
|
+
if ("Image" in part)
|
|
467
|
+
return [{ Image: {} }];
|
|
468
|
+
return [];
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Tool input as the model sent it. Current Zed saves `{ type: "json" |
|
|
473
|
+
* "text", value }`; older threads saved the JSON value itself.
|
|
474
|
+
*/
|
|
475
|
+
function toolInput(input) {
|
|
476
|
+
if (isRecord(input) &&
|
|
477
|
+
Object.keys(input).length === 2 &&
|
|
478
|
+
(input["type"] === "json" || input["type"] === "text") &&
|
|
479
|
+
"value" in input) {
|
|
480
|
+
return input["value"];
|
|
481
|
+
}
|
|
482
|
+
return input;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* The text of a tool result. Zed saves one part or a list of parts, each a
|
|
486
|
+
* string, `{ Text }`, `{ type: "text", text }`, `{ text }` or an image.
|
|
487
|
+
*/
|
|
488
|
+
function toolResultText(content) {
|
|
489
|
+
const parts = Array.isArray(content) ? content : [content];
|
|
490
|
+
return parts.slice(0, maxBlocksPerMessage).flatMap((part) => {
|
|
491
|
+
if (typeof part === "string")
|
|
492
|
+
return [part];
|
|
493
|
+
if (!isRecord(part))
|
|
494
|
+
return [];
|
|
495
|
+
for (const [key, value] of Object.entries(part)) {
|
|
496
|
+
if (key.toLowerCase() === "text" && typeof value === "string")
|
|
497
|
+
return [value];
|
|
498
|
+
}
|
|
499
|
+
return [];
|
|
500
|
+
}).join("\n");
|
|
501
|
+
}
|
|
502
|
+
/** Zed saves `updated_at` as RFC 3339. */
|
|
503
|
+
function threadTime(value) {
|
|
504
|
+
const parsed = Date.parse(value);
|
|
505
|
+
return Number.isFinite(parsed) ? new Date(parsed) : undefined;
|
|
506
|
+
}
|
|
507
|
+
function boundedId(value) {
|
|
508
|
+
const id = typeof value === "number" && Number.isSafeInteger(value)
|
|
509
|
+
? String(value)
|
|
510
|
+
: value;
|
|
511
|
+
return typeof id === "string" && isBoundedId(id) ? id : undefined;
|
|
512
|
+
}
|
|
513
|
+
function isBoundedId(value) {
|
|
514
|
+
return value !== "" &&
|
|
515
|
+
Buffer.byteLength(value, "utf8") <= 128 &&
|
|
516
|
+
!/[\u0000-\u001f\u007f]/u.test(value);
|
|
517
|
+
}
|
|
518
|
+
function isOversized(error) {
|
|
519
|
+
return error instanceof RangeError;
|
|
520
|
+
}
|
|
521
|
+
/** Data that is not valid zstd or JSON. */
|
|
522
|
+
function isUndecodable(error) {
|
|
523
|
+
return error instanceof SyntaxError ||
|
|
524
|
+
(error instanceof Error && "code" in error && String(error.code).startsWith("ZSTD_error_"));
|
|
525
|
+
}
|
|
526
|
+
function digest(value) {
|
|
527
|
+
return createHash("sha256").update(value).digest("hex");
|
|
528
|
+
}
|
|
529
|
+
function isRecord(value) {
|
|
530
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
531
|
+
}
|
|
532
|
+
function isWithin(root, candidate) {
|
|
533
|
+
const path = relative(resolve(root), resolve(candidate));
|
|
534
|
+
return path === "" || (!path.startsWith(`..${sep}`) && path !== "..");
|
|
535
|
+
}
|
|
536
|
+
function isUnavailableDatabase(error) {
|
|
537
|
+
return error instanceof Error && ("code" in error && [
|
|
538
|
+
"ENOENT",
|
|
539
|
+
"EACCES",
|
|
540
|
+
"EPERM",
|
|
541
|
+
"ENOTDIR",
|
|
542
|
+
"EBUSY",
|
|
543
|
+
"ESTALE",
|
|
544
|
+
].includes(String(error.code)) ||
|
|
545
|
+
/database is locked|unable to open database file/iu.test(error.message));
|
|
546
|
+
}
|
|
547
|
+
//# sourceMappingURL=zed-sqlite-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zed-sqlite-source.js","sourceRoot":"","sources":["../../../src/activity/zed-sqlite-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { RemoteActionType, type AgentActionCommand, type AgentActionResult } from "./generated/phigon/v1/action_pb.js";
|
|
1
|
+
import { RemoteActionResultState, RemoteActionType, type AgentActionCommand, type AgentActionResult } from "./generated/phigon/v1/action_pb.js";
|
|
2
2
|
import type { AgentInventory } from "./generated/phigon/v1/identity_pb.js";
|
|
3
|
+
import { type ProcessTreeControl, type TreeStopOutcome } from "./process-tree.js";
|
|
4
|
+
import { type UserNotices } from "./user-notices.js";
|
|
3
5
|
export type ActionInventoryProvider = () => Promise<AgentInventory>;
|
|
4
6
|
export declare class AgentActionExecutor {
|
|
5
7
|
#private;
|
|
@@ -9,7 +11,15 @@ export declare class AgentActionExecutor {
|
|
|
9
11
|
machineID: string;
|
|
10
12
|
dataDirectory: string;
|
|
11
13
|
inventory: ActionInventoryProvider;
|
|
14
|
+
processControl?: ProcessTreeControl;
|
|
15
|
+
/** Tells the person at this computer what Phigon did. */
|
|
16
|
+
notices?: UserNotices;
|
|
12
17
|
});
|
|
18
|
+
/**
|
|
19
|
+
* Records the observer's periodic discovery result. inspect_system reuses a
|
|
20
|
+
* recent one instead of scanning again; stop and kill always rescan.
|
|
21
|
+
*/
|
|
22
|
+
observeInventory(inventory: AgentInventory): void;
|
|
13
23
|
capabilities(): readonly RemoteActionType[];
|
|
14
24
|
maintainReceipts(): Promise<void>;
|
|
15
25
|
manifest(): {
|
|
@@ -19,4 +29,6 @@ export declare class AgentActionExecutor {
|
|
|
19
29
|
};
|
|
20
30
|
execute(command: AgentActionCommand): Promise<AgentActionResult>;
|
|
21
31
|
}
|
|
32
|
+
/** Maps a process-tree outcome to the wire receipt fields. */
|
|
33
|
+
export declare function describeOutcome(outcome: TreeStopOutcome, graceful: boolean): [RemoteActionResultState, string, string, boolean];
|
|
22
34
|
//# sourceMappingURL=agent-action-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-action-executor.d.ts","sourceRoot":"","sources":["../../src/agent-action-executor.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"agent-action-executor.d.ts","sourceRoot":"","sources":["../../src/agent-action-executor.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,uBAAuB,EACvB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAkD,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIlI,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAUtE,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;AAEpE,qBAAa,mBAAmB;;gBAalB,OAAO,EAAE;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,uBAAuB,CAAC;QACnC,cAAc,CAAC,EAAE,kBAAkB,CAAC;QACpC,yDAAyD;QACzD,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB;IAkBD;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAqBjD,YAAY,IAAI,SAAS,gBAAgB,EAAE;IAIrC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMvC,QAAQ;;;;;IAQF,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA8IvE;AAED,8DAA8D;AAC9D,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,GAAG,CAAC,uBAAuB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAI/H"}
|