dot-agents 0.4.1 → 0.6.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 +239 -122
- package/dist/cli/commands/channel.d.ts +19 -0
- package/dist/cli/commands/channel.d.ts.map +1 -1
- package/dist/cli/commands/channel.js +152 -13
- package/dist/cli/commands/channel.js.map +1 -1
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +61 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/personas.d.ts +3 -0
- package/dist/cli/commands/personas.d.ts.map +1 -0
- package/dist/cli/commands/personas.js +402 -0
- package/dist/cli/commands/personas.js.map +1 -0
- package/dist/cli/commands/projects.d.ts +3 -0
- package/dist/cli/commands/projects.d.ts.map +1 -0
- package/dist/cli/commands/projects.js +138 -0
- package/dist/cli/commands/projects.js.map +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +4 -5
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/index.js +5 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lib/runner.d.ts +2 -0
- package/dist/cli/lib/runner.d.ts.map +1 -1
- package/dist/cli/lib/runner.js +102 -25
- package/dist/cli/lib/runner.js.map +1 -1
- package/dist/daemon/api/server.d.ts.map +1 -1
- package/dist/daemon/api/server.js +4 -2
- package/dist/daemon/api/server.js.map +1 -1
- package/dist/daemon/daemon.d.ts +12 -3
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +138 -35
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/lib/executor.d.ts +12 -2
- package/dist/daemon/lib/executor.d.ts.map +1 -1
- package/dist/daemon/lib/executor.js +52 -34
- package/dist/daemon/lib/executor.js.map +1 -1
- package/dist/daemon/lib/watcher.d.ts +14 -2
- package/dist/daemon/lib/watcher.d.ts.map +1 -1
- package/dist/daemon/lib/watcher.js +43 -3
- package/dist/daemon/lib/watcher.js.map +1 -1
- package/dist/lib/channel.d.ts +53 -1
- package/dist/lib/channel.d.ts.map +1 -1
- package/dist/lib/channel.js +221 -30
- package/dist/lib/channel.js.map +1 -1
- package/dist/lib/channel.test.d.ts +2 -0
- package/dist/lib/channel.test.d.ts.map +1 -0
- package/dist/lib/channel.test.js +33 -0
- package/dist/lib/channel.test.js.map +1 -0
- package/dist/lib/daemon-status.d.ts +26 -0
- package/dist/lib/daemon-status.d.ts.map +1 -0
- package/dist/lib/daemon-status.js +64 -0
- package/dist/lib/daemon-status.js.map +1 -0
- package/dist/lib/environment.d.ts +87 -0
- package/dist/lib/environment.d.ts.map +1 -0
- package/dist/lib/environment.js +224 -0
- package/dist/lib/environment.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +8 -0
- package/dist/lib/frontmatter.d.ts.map +1 -1
- package/dist/lib/frontmatter.js +16 -3
- package/dist/lib/frontmatter.js.map +1 -1
- package/dist/lib/frontmatter.test.d.ts +2 -0
- package/dist/lib/frontmatter.test.d.ts.map +1 -0
- package/dist/lib/frontmatter.test.js +60 -0
- package/dist/lib/frontmatter.test.js.map +1 -0
- package/dist/lib/index.d.ts +8 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +8 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/integration.test.d.ts +2 -0
- package/dist/lib/integration.test.d.ts.map +1 -0
- package/dist/lib/integration.test.js +445 -0
- package/dist/lib/integration.test.js.map +1 -0
- package/dist/lib/invoke.d.ts +23 -0
- package/dist/lib/invoke.d.ts.map +1 -0
- package/dist/lib/invoke.js +158 -0
- package/dist/lib/invoke.js.map +1 -0
- package/dist/lib/invoke.test.d.ts +2 -0
- package/dist/lib/invoke.test.d.ts.map +1 -0
- package/dist/lib/invoke.test.js +82 -0
- package/dist/lib/invoke.test.js.map +1 -0
- package/dist/lib/persona.d.ts +41 -0
- package/dist/lib/persona.d.ts.map +1 -1
- package/dist/lib/persona.js +233 -31
- package/dist/lib/persona.js.map +1 -1
- package/dist/lib/persona.test.d.ts +2 -0
- package/dist/lib/persona.test.d.ts.map +1 -0
- package/dist/lib/persona.test.js +324 -0
- package/dist/lib/persona.test.js.map +1 -0
- package/dist/lib/processor.d.ts +50 -0
- package/dist/lib/processor.d.ts.map +1 -0
- package/dist/lib/processor.js +135 -0
- package/dist/lib/processor.js.map +1 -0
- package/dist/lib/processor.test.d.ts +2 -0
- package/dist/lib/processor.test.d.ts.map +1 -0
- package/dist/lib/processor.test.js +134 -0
- package/dist/lib/processor.test.js.map +1 -0
- package/dist/lib/registry.d.ts +109 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +192 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/registry.test.d.ts +2 -0
- package/dist/lib/registry.test.d.ts.map +1 -0
- package/dist/lib/registry.test.js +236 -0
- package/dist/lib/registry.test.js.map +1 -0
- package/dist/lib/session-thread.d.ts +75 -0
- package/dist/lib/session-thread.d.ts.map +1 -0
- package/dist/lib/session-thread.js +132 -0
- package/dist/lib/session-thread.js.map +1 -0
- package/dist/lib/session-thread.test.d.ts +2 -0
- package/dist/lib/session-thread.test.d.ts.map +1 -0
- package/dist/lib/session-thread.test.js +235 -0
- package/dist/lib/session-thread.test.js.map +1 -0
- package/dist/lib/session.d.ts +150 -0
- package/dist/lib/session.d.ts.map +1 -0
- package/dist/lib/session.js +183 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/session.test.d.ts +2 -0
- package/dist/lib/session.test.d.ts.map +1 -0
- package/dist/lib/session.test.js +336 -0
- package/dist/lib/session.test.js.map +1 -0
- package/dist/lib/types/channel.d.ts +4 -0
- package/dist/lib/types/channel.d.ts.map +1 -1
- package/dist/lib/types/persona.d.ts +51 -0
- package/dist/lib/types/persona.d.ts.map +1 -1
- package/dist/lib/types/triggers.d.ts +11 -0
- package/dist/lib/types/triggers.d.ts.map +1 -1
- package/dist/lib/version.d.ts +26 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +61 -0
- package/dist/lib/version.js.map +1 -0
- package/internal/personas/_base/PERSONA.md +251 -0
- package/internal/skills/channels/list/SKILL.md +76 -0
- package/internal/skills/channels/publish/SKILL.md +129 -0
- package/internal/skills/channels/read/SKILL.md +124 -0
- package/internal/skills/channels/reply/SKILL.md +138 -0
- package/package.json +7 -2
package/dist/lib/channel.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare function publishMessage(channelsDir: string, channelName: string,
|
|
|
21
21
|
/**
|
|
22
22
|
* Read messages from a channel
|
|
23
23
|
*/
|
|
24
|
-
export declare function readChannel(channelsDir: string, channelName: string, limit?: number, since?: Date): Promise<ChannelMessage[]>;
|
|
24
|
+
export declare function readChannel(channelsDir: string, channelName: string, limit?: number, since?: Date, threadId?: string): Promise<ChannelMessage[]>;
|
|
25
25
|
/**
|
|
26
26
|
* Reply to a message in a channel
|
|
27
27
|
*/
|
|
@@ -30,4 +30,56 @@ export declare function replyToMessage(channelsDir: string, channelName: string,
|
|
|
30
30
|
* Load channel metadata
|
|
31
31
|
*/
|
|
32
32
|
export declare function loadChannelMetadata(channelsDir: string, channelName: string): Promise<ChannelMetadata | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Get the last processed timestamp for a channel
|
|
35
|
+
*/
|
|
36
|
+
export declare function getLastProcessedTime(channelsDir: string, channelName: string): Promise<Date | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Mark a channel as processed at the current time
|
|
39
|
+
*/
|
|
40
|
+
export declare function markChannelProcessed(channelsDir: string, channelName: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* A pending message that needs processing
|
|
43
|
+
*/
|
|
44
|
+
export interface PendingMessage {
|
|
45
|
+
/** Message ID (ISO 8601 timestamp) */
|
|
46
|
+
id: string;
|
|
47
|
+
/** Channel name (e.g., @persona) */
|
|
48
|
+
channel: string;
|
|
49
|
+
/** Path to the message file */
|
|
50
|
+
path: string;
|
|
51
|
+
/** Message content (body, without frontmatter) */
|
|
52
|
+
content: string;
|
|
53
|
+
/** Message metadata */
|
|
54
|
+
meta: ChannelMessageMeta;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get pending (unprocessed) messages for a DM channel
|
|
58
|
+
* Returns messages newer than the last processed timestamp
|
|
59
|
+
*/
|
|
60
|
+
export declare function getPendingMessages(channelsDir: string, channelName: string): Promise<PendingMessage[]>;
|
|
61
|
+
/**
|
|
62
|
+
* List all DM channels (@persona) in the channels directory
|
|
63
|
+
*/
|
|
64
|
+
export declare function listDMChannels(channelsDir: string): Promise<string[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Get the workspace directory path for a thread.
|
|
67
|
+
* The workspace is a directory within the thread for working files.
|
|
68
|
+
*
|
|
69
|
+
* @param channelsDir - Base channels directory
|
|
70
|
+
* @param channelName - Channel name (e.g., "#sessions")
|
|
71
|
+
* @param threadId - Thread ID (ISO timestamp)
|
|
72
|
+
* @param create - If true, creates the workspace directory if it doesn't exist
|
|
73
|
+
* @returns Path to the workspace directory, or null if thread doesn't exist
|
|
74
|
+
*/
|
|
75
|
+
export declare function getThreadWorkspace(channelsDir: string, channelName: string, threadId: string, create?: boolean): Promise<string | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Get the thread directory path.
|
|
78
|
+
*
|
|
79
|
+
* @param channelsDir - Base channels directory
|
|
80
|
+
* @param channelName - Channel name (e.g., "#sessions")
|
|
81
|
+
* @param threadId - Thread ID (ISO timestamp)
|
|
82
|
+
* @returns Path to the thread directory, or null if it doesn't exist
|
|
83
|
+
*/
|
|
84
|
+
export declare function getThreadPath(channelsDir: string, channelName: string, threadId: string): Promise<string | null>;
|
|
33
85
|
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/lib/channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/lib/channel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAyD5B;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,EAAE,CAAC,CAiCxD;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,IAAI,EACZ,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,EAAE,CAAC,CA4E3B;AAmDD;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CASjC;AAYD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CActB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC,CA4D3B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
|
package/dist/lib/channel.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { readdir, mkdir, readFile, writeFile, stat } from "node:fs/promises";
|
|
2
|
+
import { hostname } from "node:os";
|
|
2
3
|
import { join } from "node:path";
|
|
3
4
|
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
4
5
|
import { parseFrontmatter } from "./frontmatter.js";
|
|
5
6
|
const METADATA_FILE = "_metadata.yaml";
|
|
6
|
-
const
|
|
7
|
+
const MESSAGE_FILE_LEGACY = "message.md"; // Backwards compatibility
|
|
8
|
+
const LAST_PROCESSED_FILE = "_last_processed.yaml";
|
|
7
9
|
/**
|
|
8
10
|
* Check if a path exists and is a directory
|
|
9
11
|
*/
|
|
@@ -34,6 +36,23 @@ async function isFile(path) {
|
|
|
34
36
|
function generateMessageId() {
|
|
35
37
|
return new Date().toISOString();
|
|
36
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the path to the initial message file in a thread directory.
|
|
41
|
+
* Supports both new format (<threadId>.md) and legacy format (message.md).
|
|
42
|
+
*/
|
|
43
|
+
async function getInitialMessagePath(threadDir, threadId) {
|
|
44
|
+
// Try new format first: <threadId>.md
|
|
45
|
+
const newPath = join(threadDir, `${threadId}.md`);
|
|
46
|
+
if (await isFile(newPath)) {
|
|
47
|
+
return newPath;
|
|
48
|
+
}
|
|
49
|
+
// Fall back to legacy format: message.md
|
|
50
|
+
const legacyPath = join(threadDir, MESSAGE_FILE_LEGACY);
|
|
51
|
+
if (await isFile(legacyPath)) {
|
|
52
|
+
return legacyPath;
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
37
56
|
/**
|
|
38
57
|
* Check if a name is a valid channel name (starts with # or @)
|
|
39
58
|
*/
|
|
@@ -102,25 +121,27 @@ export async function publishMessage(channelsDir, channelName, content, meta) {
|
|
|
102
121
|
const messageId = generateMessageId();
|
|
103
122
|
const messagePath = join(channelsDir, channelName, messageId);
|
|
104
123
|
await mkdir(messagePath, { recursive: true });
|
|
124
|
+
const host = hostname();
|
|
105
125
|
let messageContent = "";
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
126
|
+
const frontmatter = { host };
|
|
127
|
+
if (meta?.from)
|
|
128
|
+
frontmatter.from = meta.from;
|
|
129
|
+
if (meta?.run_id)
|
|
130
|
+
frontmatter.run_id = meta.run_id;
|
|
131
|
+
if (meta?.tags?.length)
|
|
132
|
+
frontmatter.tags = meta.tags;
|
|
133
|
+
if (meta?.thread_id)
|
|
134
|
+
frontmatter.thread_id = meta.thread_id;
|
|
135
|
+
messageContent = `---\n${stringifyYaml(frontmatter)}---\n\n`;
|
|
116
136
|
messageContent += content + "\n";
|
|
117
|
-
|
|
137
|
+
// Write initial message with timestamp filename (uniform with replies)
|
|
138
|
+
await writeFile(join(messagePath, `${messageId}.md`), messageContent, "utf-8");
|
|
118
139
|
return messageId;
|
|
119
140
|
}
|
|
120
141
|
/**
|
|
121
142
|
* Read messages from a channel
|
|
122
143
|
*/
|
|
123
|
-
export async function readChannel(channelsDir, channelName, limit, since) {
|
|
144
|
+
export async function readChannel(channelsDir, channelName, limit, since, threadId) {
|
|
124
145
|
const channelPath = join(channelsDir, channelName);
|
|
125
146
|
if (!(await isDirectory(channelPath))) {
|
|
126
147
|
return [];
|
|
@@ -133,12 +154,31 @@ export async function readChannel(channelsDir, channelName, limit, since) {
|
|
|
133
154
|
if (entry.name.startsWith("_"))
|
|
134
155
|
continue;
|
|
135
156
|
const messageDir = join(channelPath, entry.name);
|
|
136
|
-
const
|
|
137
|
-
|
|
157
|
+
const threadId_local = entry.name;
|
|
158
|
+
// Find initial message file (new or legacy format)
|
|
159
|
+
const messagePath = await getInitialMessagePath(messageDir, threadId_local);
|
|
160
|
+
if (!messagePath)
|
|
138
161
|
continue;
|
|
139
162
|
const messageDate = new Date(entry.name);
|
|
140
163
|
if (since && messageDate < since)
|
|
141
164
|
continue;
|
|
165
|
+
// If filtering by thread, we need to read and check frontmatter first
|
|
166
|
+
if (threadId) {
|
|
167
|
+
try {
|
|
168
|
+
const content = await readFile(messagePath, "utf-8");
|
|
169
|
+
if (content.startsWith("---\n")) {
|
|
170
|
+
const parsed = parseFrontmatter(content);
|
|
171
|
+
if (parsed.frontmatter.thread_id !== threadId)
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
continue; // No frontmatter means no thread_id
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
142
182
|
try {
|
|
143
183
|
const content = await readFile(messagePath, "utf-8");
|
|
144
184
|
let meta = {};
|
|
@@ -156,7 +196,7 @@ export async function readChannel(channelsDir, channelName, limit, since) {
|
|
|
156
196
|
else {
|
|
157
197
|
body = content.trim();
|
|
158
198
|
}
|
|
159
|
-
const replies = await readReplies(messageDir);
|
|
199
|
+
const replies = await readReplies(messageDir, threadId_local);
|
|
160
200
|
messages.push({
|
|
161
201
|
id: entry.name,
|
|
162
202
|
content: body,
|
|
@@ -175,16 +215,20 @@ export async function readChannel(channelsDir, channelName, limit, since) {
|
|
|
175
215
|
return messages;
|
|
176
216
|
}
|
|
177
217
|
/**
|
|
178
|
-
* Read replies for a message
|
|
218
|
+
* Read replies for a message (excluding the initial message)
|
|
179
219
|
*/
|
|
180
|
-
async function readReplies(messageDir) {
|
|
220
|
+
async function readReplies(messageDir, threadId) {
|
|
181
221
|
const entries = await readdir(messageDir, { withFileTypes: true });
|
|
182
222
|
const replies = [];
|
|
223
|
+
// Files to skip: legacy message.md and the initial message (<threadId>.md)
|
|
224
|
+
const initialMessageFile = `${threadId}.md`;
|
|
183
225
|
for (const entry of entries) {
|
|
184
226
|
if (!entry.isFile())
|
|
185
227
|
continue;
|
|
186
|
-
if (entry.name ===
|
|
187
|
-
continue;
|
|
228
|
+
if (entry.name === MESSAGE_FILE_LEGACY)
|
|
229
|
+
continue; // Skip legacy initial
|
|
230
|
+
if (entry.name === initialMessageFile)
|
|
231
|
+
continue; // Skip new-format initial
|
|
188
232
|
if (!entry.name.endsWith(".md"))
|
|
189
233
|
continue;
|
|
190
234
|
const replyId = entry.name.replace(/\.md$/, "");
|
|
@@ -227,17 +271,16 @@ export async function replyToMessage(channelsDir, channelName, messageId, conten
|
|
|
227
271
|
throw new Error(`Message not found: ${channelName}/${messageId}`);
|
|
228
272
|
}
|
|
229
273
|
const replyId = generateMessageId();
|
|
274
|
+
const host = hostname();
|
|
230
275
|
let replyContent = "";
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
replyContent = `---\n${stringifyYaml(frontmatter)}---\n\n`;
|
|
240
|
-
}
|
|
276
|
+
const frontmatter = { host };
|
|
277
|
+
if (meta?.from)
|
|
278
|
+
frontmatter.from = meta.from;
|
|
279
|
+
if (meta?.run_id)
|
|
280
|
+
frontmatter.run_id = meta.run_id;
|
|
281
|
+
if (meta?.tags?.length)
|
|
282
|
+
frontmatter.tags = meta.tags;
|
|
283
|
+
replyContent = `---\n${stringifyYaml(frontmatter)}---\n\n`;
|
|
241
284
|
replyContent += content + "\n";
|
|
242
285
|
await writeFile(join(messagePath, `${replyId}.md`), replyContent, "utf-8");
|
|
243
286
|
return replyId;
|
|
@@ -253,4 +296,152 @@ export async function loadChannelMetadata(channelsDir, channelName) {
|
|
|
253
296
|
const content = await readFile(metadataPath, "utf-8");
|
|
254
297
|
return parseYaml(content);
|
|
255
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Get the last processed timestamp for a channel
|
|
301
|
+
*/
|
|
302
|
+
export async function getLastProcessedTime(channelsDir, channelName) {
|
|
303
|
+
const lastProcessedPath = join(channelsDir, channelName, LAST_PROCESSED_FILE);
|
|
304
|
+
if (!(await isFile(lastProcessedPath))) {
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
try {
|
|
308
|
+
const content = await readFile(lastProcessedPath, "utf-8");
|
|
309
|
+
const info = parseYaml(content);
|
|
310
|
+
return new Date(info.last_processed_at);
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Mark a channel as processed at the current time
|
|
318
|
+
*/
|
|
319
|
+
export async function markChannelProcessed(channelsDir, channelName) {
|
|
320
|
+
const channelPath = join(channelsDir, channelName);
|
|
321
|
+
if (!(await isDirectory(channelPath))) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const info = {
|
|
325
|
+
last_processed_at: new Date().toISOString(),
|
|
326
|
+
processed_by: hostname(),
|
|
327
|
+
};
|
|
328
|
+
const lastProcessedPath = join(channelPath, LAST_PROCESSED_FILE);
|
|
329
|
+
await writeFile(lastProcessedPath, stringifyYaml(info), "utf-8");
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Get pending (unprocessed) messages for a DM channel
|
|
333
|
+
* Returns messages newer than the last processed timestamp
|
|
334
|
+
*/
|
|
335
|
+
export async function getPendingMessages(channelsDir, channelName) {
|
|
336
|
+
const channelPath = join(channelsDir, channelName);
|
|
337
|
+
if (!(await isDirectory(channelPath))) {
|
|
338
|
+
return [];
|
|
339
|
+
}
|
|
340
|
+
const lastProcessed = await getLastProcessedTime(channelsDir, channelName);
|
|
341
|
+
const entries = await readdir(channelPath, { withFileTypes: true });
|
|
342
|
+
const pending = [];
|
|
343
|
+
for (const entry of entries) {
|
|
344
|
+
if (!entry.isDirectory())
|
|
345
|
+
continue;
|
|
346
|
+
if (entry.name.startsWith("_"))
|
|
347
|
+
continue;
|
|
348
|
+
// Message ID is an ISO timestamp
|
|
349
|
+
const messageDate = new Date(entry.name);
|
|
350
|
+
if (Number.isNaN(messageDate.getTime()))
|
|
351
|
+
continue;
|
|
352
|
+
// Skip if already processed
|
|
353
|
+
if (lastProcessed && messageDate <= lastProcessed)
|
|
354
|
+
continue;
|
|
355
|
+
const messageDir = join(channelPath, entry.name);
|
|
356
|
+
const threadId = entry.name;
|
|
357
|
+
// Find initial message file (new or legacy format)
|
|
358
|
+
const messagePath = await getInitialMessagePath(messageDir, threadId);
|
|
359
|
+
if (!messagePath)
|
|
360
|
+
continue;
|
|
361
|
+
try {
|
|
362
|
+
const content = await readFile(messagePath, "utf-8");
|
|
363
|
+
let meta = {};
|
|
364
|
+
let body;
|
|
365
|
+
if (content.startsWith("---\n")) {
|
|
366
|
+
try {
|
|
367
|
+
const parsed = parseFrontmatter(content);
|
|
368
|
+
meta = parsed.frontmatter;
|
|
369
|
+
body = parsed.body;
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
body = content;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
body = content.trim();
|
|
377
|
+
}
|
|
378
|
+
pending.push({
|
|
379
|
+
id: entry.name,
|
|
380
|
+
channel: channelName,
|
|
381
|
+
path: messagePath,
|
|
382
|
+
content: body,
|
|
383
|
+
meta,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
continue;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// Sort by timestamp ascending (oldest first for processing order)
|
|
391
|
+
return pending.sort((a, b) => a.id.localeCompare(b.id));
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* List all DM channels (@persona) in the channels directory
|
|
395
|
+
*/
|
|
396
|
+
export async function listDMChannels(channelsDir) {
|
|
397
|
+
if (!(await isDirectory(channelsDir))) {
|
|
398
|
+
return [];
|
|
399
|
+
}
|
|
400
|
+
const entries = await readdir(channelsDir, { withFileTypes: true });
|
|
401
|
+
const dmChannels = [];
|
|
402
|
+
for (const entry of entries) {
|
|
403
|
+
if (!entry.isDirectory())
|
|
404
|
+
continue;
|
|
405
|
+
if (entry.name.startsWith("@")) {
|
|
406
|
+
dmChannels.push(entry.name);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
return dmChannels.sort();
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Get the workspace directory path for a thread.
|
|
413
|
+
* The workspace is a directory within the thread for working files.
|
|
414
|
+
*
|
|
415
|
+
* @param channelsDir - Base channels directory
|
|
416
|
+
* @param channelName - Channel name (e.g., "#sessions")
|
|
417
|
+
* @param threadId - Thread ID (ISO timestamp)
|
|
418
|
+
* @param create - If true, creates the workspace directory if it doesn't exist
|
|
419
|
+
* @returns Path to the workspace directory, or null if thread doesn't exist
|
|
420
|
+
*/
|
|
421
|
+
export async function getThreadWorkspace(channelsDir, channelName, threadId, create = false) {
|
|
422
|
+
const threadDir = join(channelsDir, channelName, threadId);
|
|
423
|
+
if (!(await isDirectory(threadDir))) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
const workspacePath = join(threadDir, "workspace");
|
|
427
|
+
if (create) {
|
|
428
|
+
await mkdir(workspacePath, { recursive: true });
|
|
429
|
+
}
|
|
430
|
+
return workspacePath;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Get the thread directory path.
|
|
434
|
+
*
|
|
435
|
+
* @param channelsDir - Base channels directory
|
|
436
|
+
* @param channelName - Channel name (e.g., "#sessions")
|
|
437
|
+
* @param threadId - Thread ID (ISO timestamp)
|
|
438
|
+
* @returns Path to the thread directory, or null if it doesn't exist
|
|
439
|
+
*/
|
|
440
|
+
export async function getThreadPath(channelsDir, channelName, threadId) {
|
|
441
|
+
const threadDir = join(channelsDir, channelName, threadId);
|
|
442
|
+
if (!(await isDirectory(threadDir))) {
|
|
443
|
+
return null;
|
|
444
|
+
}
|
|
445
|
+
return threadDir;
|
|
446
|
+
}
|
|
256
447
|
//# sourceMappingURL=channel.js.map
|
package/dist/lib/channel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/lib/channel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/lib/channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.test.d.ts","sourceRoot":"","sources":["../../src/lib/channel.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
// isChannelName is a pure function - inline it to avoid module resolution issues
|
|
4
|
+
// This is the same logic as in channel.ts
|
|
5
|
+
function isChannelName(name) {
|
|
6
|
+
return name.startsWith("#") || name.startsWith("@");
|
|
7
|
+
}
|
|
8
|
+
describe("isChannelName", () => {
|
|
9
|
+
it("returns true for public channels (# prefix)", () => {
|
|
10
|
+
assert.strictEqual(isChannelName("#general"), true);
|
|
11
|
+
assert.strictEqual(isChannelName("#status"), true);
|
|
12
|
+
assert.strictEqual(isChannelName("#dev-updates"), true);
|
|
13
|
+
});
|
|
14
|
+
it("returns true for DM channels (@ prefix)", () => {
|
|
15
|
+
assert.strictEqual(isChannelName("@developer"), true);
|
|
16
|
+
assert.strictEqual(isChannelName("@human"), true);
|
|
17
|
+
assert.strictEqual(isChannelName("@alice-bob"), true);
|
|
18
|
+
});
|
|
19
|
+
it("returns false for names without prefix", () => {
|
|
20
|
+
assert.strictEqual(isChannelName("general"), false);
|
|
21
|
+
assert.strictEqual(isChannelName("status"), false);
|
|
22
|
+
assert.strictEqual(isChannelName("developer"), false);
|
|
23
|
+
});
|
|
24
|
+
it("returns false for names with wrong prefix", () => {
|
|
25
|
+
assert.strictEqual(isChannelName("!general"), false);
|
|
26
|
+
assert.strictEqual(isChannelName("$status"), false);
|
|
27
|
+
assert.strictEqual(isChannelName("/developer"), false);
|
|
28
|
+
});
|
|
29
|
+
it("returns false for empty string", () => {
|
|
30
|
+
assert.strictEqual(isChannelName(""), false);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=channel.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.test.js","sourceRoot":"","sources":["../../src/lib/channel.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,iFAAiF;AACjF,0CAA0C;AAC1C,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon status information
|
|
3
|
+
*/
|
|
4
|
+
export interface DaemonStatus {
|
|
5
|
+
/** Whether the daemon is running */
|
|
6
|
+
running: boolean;
|
|
7
|
+
/** Process ID if running */
|
|
8
|
+
pid?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get the path to the daemon PID file for an agents directory
|
|
12
|
+
*/
|
|
13
|
+
export declare function getPidFilePath(agentsDir: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Write the daemon PID file
|
|
16
|
+
*/
|
|
17
|
+
export declare function writePidFile(agentsDir: string, pid: number): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Remove the daemon PID file
|
|
20
|
+
*/
|
|
21
|
+
export declare function removePidFile(agentsDir: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Get the daemon status for an agents directory
|
|
24
|
+
*/
|
|
25
|
+
export declare function getDaemonStatus(agentsDir: string): Promise<DaemonStatus>;
|
|
26
|
+
//# sourceMappingURL=daemon-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-status.d.ts","sourceRoot":"","sources":["../../src/lib/daemon-status.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOpE;AAeD;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqB9E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { readFile, writeFile, unlink } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
const PID_FILE = "daemon.pid";
|
|
4
|
+
/**
|
|
5
|
+
* Get the path to the daemon PID file for an agents directory
|
|
6
|
+
*/
|
|
7
|
+
export function getPidFilePath(agentsDir) {
|
|
8
|
+
return join(agentsDir, PID_FILE);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Write the daemon PID file
|
|
12
|
+
*/
|
|
13
|
+
export async function writePidFile(agentsDir, pid) {
|
|
14
|
+
const pidPath = getPidFilePath(agentsDir);
|
|
15
|
+
await writeFile(pidPath, pid.toString(), "utf-8");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Remove the daemon PID file
|
|
19
|
+
*/
|
|
20
|
+
export async function removePidFile(agentsDir) {
|
|
21
|
+
const pidPath = getPidFilePath(agentsDir);
|
|
22
|
+
try {
|
|
23
|
+
await unlink(pidPath);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// File may not exist, ignore
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check if a process with the given PID is running
|
|
31
|
+
*/
|
|
32
|
+
function isProcessRunning(pid) {
|
|
33
|
+
try {
|
|
34
|
+
// Sending signal 0 tests if process exists without actually signaling it
|
|
35
|
+
process.kill(pid, 0);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the daemon status for an agents directory
|
|
44
|
+
*/
|
|
45
|
+
export async function getDaemonStatus(agentsDir) {
|
|
46
|
+
const pidPath = getPidFilePath(agentsDir);
|
|
47
|
+
try {
|
|
48
|
+
const content = await readFile(pidPath, "utf-8");
|
|
49
|
+
const pid = parseInt(content.trim(), 10);
|
|
50
|
+
if (isNaN(pid)) {
|
|
51
|
+
return { running: false };
|
|
52
|
+
}
|
|
53
|
+
if (isProcessRunning(pid)) {
|
|
54
|
+
return { running: true, pid };
|
|
55
|
+
}
|
|
56
|
+
// PID file exists but process is not running (stale)
|
|
57
|
+
return { running: false };
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// No PID file
|
|
61
|
+
return { running: false };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=daemon-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-status.js","sourceRoot":"","sources":["../../src/lib/daemon-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,QAAQ,GAAG,YAAY,CAAC;AAY9B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,GAAW;IAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,yEAAyE;QACzE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,qDAAqD;QACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;QACd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
|