@wirecat/cli-memo 0.7.1 → 0.9.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 +50 -10
- package/dist/actions/actions.d.ts +11 -0
- package/dist/actions/actions.d.ts.map +1 -0
- package/dist/actions/actions.js +23 -0
- package/dist/actions/actions.js.map +1 -0
- package/dist/actions/command.d.ts +4 -0
- package/dist/actions/command.d.ts.map +1 -0
- package/dist/actions/command.js +53 -0
- package/dist/actions/command.js.map +1 -0
- package/dist/agents/command.d.ts +4 -0
- package/dist/agents/command.d.ts.map +1 -0
- package/dist/agents/command.js +22 -0
- package/dist/agents/command.js.map +1 -0
- package/dist/mail/import.d.ts +3 -3
- package/dist/mail/import.d.ts.map +1 -1
- package/dist/mail/import.js +89 -98
- package/dist/mail/import.js.map +1 -1
- package/dist/mcp/command.d.ts +4 -0
- package/dist/mcp/command.d.ts.map +1 -0
- package/dist/mcp/command.js +17 -0
- package/dist/mcp/command.js.map +1 -0
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +149 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memories/command.d.ts +4 -0
- package/dist/memories/command.d.ts.map +1 -0
- package/dist/memories/command.js +68 -0
- package/dist/memories/command.js.map +1 -0
- package/dist/memories/memories.d.ts +11 -0
- package/dist/memories/memories.d.ts.map +1 -0
- package/dist/memories/memories.js +11 -0
- package/dist/memories/memories.js.map +1 -0
- package/dist/notes/command.js +1 -1
- package/dist/notes/command.js.map +1 -1
- package/dist/notes/embed.d.ts +6 -0
- package/dist/notes/embed.d.ts.map +1 -1
- package/dist/notes/embed.js +19 -1
- package/dist/notes/embed.js.map +1 -1
- package/dist/people/subject.js +1 -1
- package/dist/people/subject.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +8 -0
- package/dist/program.js.map +1 -1
- package/dist/records/run.d.ts +5 -0
- package/dist/records/run.d.ts.map +1 -0
- package/dist/records/run.js +17 -0
- package/dist/records/run.js.map +1 -0
- package/dist/search/command.d.ts.map +1 -1
- package/dist/search/command.js +7 -2
- package/dist/search/command.js.map +1 -1
- package/dist/store/gone.d.ts +5 -1
- package/dist/store/gone.d.ts.map +1 -1
- package/dist/store/gone.js +7 -5
- package/dist/store/gone.js.map +1 -1
- package/dist/store/held.d.ts +13 -0
- package/dist/store/held.d.ts.map +1 -0
- package/dist/store/held.js +21 -0
- package/dist/store/held.js.map +1 -0
- package/dist/store/scope.d.ts +1 -0
- package/dist/store/scope.d.ts.map +1 -1
- package/dist/store/scope.js +2 -2
- package/dist/store/scope.js.map +1 -1
- package/dist/tags/command.d.ts.map +1 -1
- package/dist/tags/command.js +5 -3
- package/dist/tags/command.js.map +1 -1
- package/dist/tasks/command.d.ts.map +1 -1
- package/dist/tasks/command.js +2 -1
- package/dist/tasks/command.js.map +1 -1
- package/dist/tasks/context.d.ts.map +1 -1
- package/dist/tasks/context.js +2 -1
- package/dist/tasks/context.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -77,8 +77,12 @@ holds; `linked` counts what the notes found link to, with each person's name. Fo
|
|
|
77
77
|
`notes show` takes `note:<id>` or a file in a configured folder, and answers with the note's tags, its
|
|
78
78
|
links, its backlinks and, for a PDF or sheet, where its text came from.
|
|
79
79
|
|
|
80
|
-
`search all` searches messages, imported mail and native notes together
|
|
81
|
-
|
|
80
|
+
`search all` searches messages, imported mail and native notes together, and nothing else: not people,
|
|
81
|
+
memories, projects, organizations or decisions. Use it when you do not know where something was written. When
|
|
82
|
+
you know the kind, its own search reads it with every field: `search mail` takes `from:`, `to:`, `cc:`, `bcc:`,
|
|
83
|
+
`subject:` and `mailbox:` (a folder or Gmail label); `search messages`, `search notes`; `search notes --type
|
|
84
|
+
internal|file` narrows note kinds. An empty answer means those three hold nothing that matches: try the kind's
|
|
85
|
+
own search, looser words, or `tg search conversations` to find mail and messages by meaning.
|
|
82
86
|
`search all` includes a separate `tasks` list for open work linked to matching sources. Results identify source
|
|
83
87
|
kind/account and skipped-resource coverage; a query using a field only messages have (`from:`, `after:`)
|
|
84
88
|
searches the messages and says the notes were not searched. Missing hits do not prove that an event
|
|
@@ -114,6 +118,38 @@ shared-domain proposals for direct email contacts. Proposals retain rule provena
|
|
|
114
118
|
unconfirmed; they do not enter confirmed person context. `relationships confirm <id>` records your
|
|
115
119
|
explicit acceptance. Common free-mail domains are excluded from this heuristic.
|
|
116
120
|
|
|
121
|
+
## Memories, proposed actions and the agent log
|
|
122
|
+
|
|
123
|
+
```sh
|
|
124
|
+
memo memories add 'Bob Sample prefers Friday meetings' --kind preference --scope work --evidence note:NOTE_ID
|
|
125
|
+
memo memories list --status proposed
|
|
126
|
+
memo memories confirm memory:MEMORY_ID
|
|
127
|
+
memo actions propose reply --reason 'asked twice' --provider telegram --payload '{"text":"Friday works"}'
|
|
128
|
+
memo actions approve ACTION_ID
|
|
129
|
+
memo agents log --agent memo-mcp --limit 20
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
A memory is a summary, digest, fact or preference with its evidence (any stored reference) and a scope,
|
|
133
|
+
`personal` or `work`. One you write is confirmed at once; an agent's waits as `proposed` until you
|
|
134
|
+
`confirm` it, and `stale` marks one whose evidence no longer holds. `memories search` finds the words in
|
|
135
|
+
them.
|
|
136
|
+
|
|
137
|
+
A proposed action is what an agent wants done in one account: a reply, a ban, an invitation. Nothing is ever
|
|
138
|
+
sent. `actions approve` makes it a task in that account's inbox, so it shows in `memo tasks list`, and the
|
|
139
|
+
proposal remembers the task; `actions reject` closes it. `actions list --status` filters them.
|
|
140
|
+
|
|
141
|
+
`memo agents log` lists what agents did through the MCP servers that share the store, newest first: the
|
|
142
|
+
agent, the tool, its tier, the outcome and the times, never the arguments.
|
|
143
|
+
|
|
144
|
+
`memo mcp` serves the same to an agent over MCP, on stdin and stdout: `memories_add`, `memories_list`,
|
|
145
|
+
`memories_show`, `memories_search`, `actions_propose`, `actions_list`, `actions_show` and `agents_log`. An
|
|
146
|
+
agent's memories and proposals are its own (`memo-mcp`) and wait for you; it cannot confirm, approve or
|
|
147
|
+
reject. Every call goes into the agent log.
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{ "mcpServers": { "memo": { "command": "memo", "args": ["mcp"] } } }
|
|
151
|
+
```
|
|
152
|
+
|
|
117
153
|
## Local task reminders
|
|
118
154
|
|
|
119
155
|
```sh
|
|
@@ -238,19 +274,21 @@ message/thread identities across folder moves and UID resets. Mail without Messa
|
|
|
238
274
|
UIDVALIDITY/folder/UID fallback, which can change after a move/reset. Configured folders are listed
|
|
239
275
|
completely before deletion checks; a changed folder scope skips deletion for that run.
|
|
240
276
|
|
|
241
|
-
Imports
|
|
242
|
-
window,
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
277
|
+
Imports report the proven date/folder window. No thread is called globally complete on the basis of one
|
|
278
|
+
window. To, CC and BCC are kept. A readable attachment's text is kept with its email and searched with it
|
|
279
|
+
(`content:`, `filename:`); extraction failures are reported. After installing an optional engine, use
|
|
280
|
+
`memo mail import --retry-attachments` to reread a bounded batch of stored mail. Mail in the mail tables is
|
|
281
|
+
searched by words, not yet by meaning.
|
|
246
282
|
|
|
247
283
|
```sh
|
|
248
284
|
memo mail import --since 2026-09-01
|
|
249
285
|
```
|
|
250
286
|
|
|
251
287
|
Reads a Gmail account's All Mail through [Himalaya](https://github.com/pimalaya/himalaya) into the
|
|
252
|
-
shared
|
|
253
|
-
account, senders and recipients as people.
|
|
288
|
+
shared store's mail tables: one thread per Gmail thread, each folder a mailbox, the mailbox address as
|
|
289
|
+
the account, senders and recipients as people. `search mail`, `search all`, `ask`, person context and tags
|
|
290
|
+
see it. Mail an import before 0.8.0 saved as messages stays searchable; an email imported again is listed
|
|
291
|
+
once.
|
|
254
292
|
|
|
255
293
|
- Read only: the mailbox is opened read-only, nothing is sent, and no mail is marked read.
|
|
256
294
|
- Run it again any time: what is stored is skipped; `--max` (default 200) bounds the new mails read
|
|
@@ -298,7 +336,9 @@ tg search mail 'tag:follow-up'
|
|
|
298
336
|
A note is labelled by its reference (`--note note:<id>`, or `document:<id>` for a file in a notes
|
|
299
337
|
folder), an email or messenger message by its full `msg:` locator, a mail thread or chat by its exact id
|
|
300
338
|
and account. A person, organization, project or task is labelled by `--person`, `--organization`,
|
|
301
|
-
`--project` or `--task`, with no account; a contact names its account
|
|
339
|
+
`--project` or `--task`, with no account; a contact names its account, and so does a meeting:
|
|
340
|
+
`--meeting <id> --provider <provider> --account <account>`, the meeting's id in the store. A note about a
|
|
341
|
+
meeting names it as `meeting:<account id>/<meeting id>` in `memo notes add --about`. `--folder` with an id from
|
|
302
342
|
`memo folders list`, and `--path` for one subfolder, labels every note under it at any depth. Tags use 1–32 letters a–z, digits or hyphens; case is ignored.
|
|
303
343
|
Adding an existing tag or removing an absent one leaves it unchanged.
|
|
304
344
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Author, MessageStore, ProposedAction } from "@wirecat/cli-messaging/store";
|
|
2
|
+
import { type AccountScope } from "../store/scope.js";
|
|
3
|
+
export interface NewProposal extends AccountScope {
|
|
4
|
+
kind: string;
|
|
5
|
+
reason: string;
|
|
6
|
+
target?: string;
|
|
7
|
+
payload?: string;
|
|
8
|
+
}
|
|
9
|
+
/** The account is the one that would act, and the task the proposal becomes on approval lands in its inbox. */
|
|
10
|
+
export declare const propose: (store: MessageStore, proposal: NewProposal, by: Author) => Promise<ProposedAction>;
|
|
11
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/actions/actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AACxF,OAAO,EAAE,KAAK,YAAY,EAAiB,MAAM,mBAAmB,CAAA;AAEpE,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,+GAA+G;AAC/G,eAAO,MAAM,OAAO,UAAiB,YAAY,YAAY,WAAW,MAAM,MAAM,KAAG,OAAO,CAAC,cAAc,CAiB5G,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import { selectAccount } from "../store/scope.js";
|
|
3
|
+
/** The account is the one that would act, and the task the proposal becomes on approval lands in its inbox. */
|
|
4
|
+
export const propose = async (store, proposal, by) => {
|
|
5
|
+
let payload;
|
|
6
|
+
if (proposal.payload !== undefined) {
|
|
7
|
+
try {
|
|
8
|
+
payload = JSON.parse(proposal.payload);
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
throw new CliError("validation_error", '--payload is JSON, such as {"text":"Friday works"}');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return store.proposedActions.propose({
|
|
15
|
+
kind: proposal.kind,
|
|
16
|
+
by,
|
|
17
|
+
account: await selectAccount(store, proposal),
|
|
18
|
+
reason: proposal.reason,
|
|
19
|
+
...(proposal.target === undefined ? {} : { target: proposal.target }),
|
|
20
|
+
...(payload === undefined ? {} : { payload }),
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAA;AASpE,+GAA+G;AAC/G,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,KAAmB,EAAE,QAAqB,EAAE,EAAU,EAA2B,EAAE;IAC/G,IAAI,OAAgB,CAAA;IACpB,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,oDAAoD,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;QACnC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,EAAE;QACF,OAAO,EAAE,MAAM,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC7C,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC9C,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/actions/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,eAAO,MAAM,cAAc,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAuD3F,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { approveAsTask } from "@wirecat/cli-messaging/services";
|
|
2
|
+
import { PROPOSAL_STATUSES } from "@wirecat/cli-messaging/store";
|
|
3
|
+
import { oneOf, positive } from "../options.js";
|
|
4
|
+
import { answering } from "../records/run.js";
|
|
5
|
+
import { propose } from "./actions.js";
|
|
6
|
+
export const actionsCommand = (program, streams, env) => {
|
|
7
|
+
const run = answering(streams, env);
|
|
8
|
+
const actions = program
|
|
9
|
+
.command("actions")
|
|
10
|
+
.description("What an agent proposes to do; approving one makes it your task, nothing is sent");
|
|
11
|
+
actions
|
|
12
|
+
.command("propose")
|
|
13
|
+
.description("Propose an action, such as a reply or a ban, in the account that would act")
|
|
14
|
+
.argument("<kind>", "a lower-case word: reply, send, ban, mute, pin, invite, create_task, …")
|
|
15
|
+
.requiredOption("--reason <text>", "why it should be done")
|
|
16
|
+
.requiredOption("--provider <provider>", "the provider of the account that would act")
|
|
17
|
+
.option("--account <account>", "the account that would act, when the provider has several")
|
|
18
|
+
.option("--target <ref>", "what it acts on: msg:, chat:, contact:, person:, task:, …")
|
|
19
|
+
.option("--payload <json>", "what to do, as JSON, such as the reply's text")
|
|
20
|
+
.option("--json", "print JSON")
|
|
21
|
+
.action((kind, options) => run(options.json, (store) => propose(store, { ...options, kind }, "owner")));
|
|
22
|
+
actions
|
|
23
|
+
.command("list")
|
|
24
|
+
.description("Proposed actions, newest first")
|
|
25
|
+
.option("--status <status>", PROPOSAL_STATUSES.join(", "), oneOf(PROPOSAL_STATUSES))
|
|
26
|
+
.option("--limit <n>", "most actions, up to 500", positive, 100)
|
|
27
|
+
.option("--json", "print JSON")
|
|
28
|
+
.action((options) => run(options.json, async (store) => ({
|
|
29
|
+
items: await store.proposedActions.list({
|
|
30
|
+
limit: options.limit,
|
|
31
|
+
...(options.status === undefined ? {} : { status: options.status }),
|
|
32
|
+
}),
|
|
33
|
+
})));
|
|
34
|
+
actions
|
|
35
|
+
.command("show")
|
|
36
|
+
.description("One proposed action, with its payload")
|
|
37
|
+
.argument("<id>")
|
|
38
|
+
.option("--json", "print JSON")
|
|
39
|
+
.action((id, options) => run(options.json, (store) => store.proposedActions.get(id)));
|
|
40
|
+
actions
|
|
41
|
+
.command("approve")
|
|
42
|
+
.description("Approve it: it becomes a task in the account that would act; nothing is sent")
|
|
43
|
+
.argument("<id>")
|
|
44
|
+
.option("--json", "print JSON")
|
|
45
|
+
.action((id, options) => run(options.json, (store) => approveAsTask(store, id)));
|
|
46
|
+
actions
|
|
47
|
+
.command("reject")
|
|
48
|
+
.description("Reject it; nothing is done")
|
|
49
|
+
.argument("<id>")
|
|
50
|
+
.option("--json", "print JSON")
|
|
51
|
+
.action((id, options) => run(options.json, (store) => store.proposedActions.reject(id)));
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/actions/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/agents/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAIxC,eAAO,MAAM,aAAa,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAoB1F,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { positive } from "../options.js";
|
|
2
|
+
import { answering } from "../records/run.js";
|
|
3
|
+
export const agentsCommand = (program, streams, env) => {
|
|
4
|
+
const run = answering(streams, env);
|
|
5
|
+
program
|
|
6
|
+
.command("agents")
|
|
7
|
+
.description("What agents did through the MCP servers that share the store")
|
|
8
|
+
.command("log")
|
|
9
|
+
.description("One row per tool call, newest first: agent, tool, tier, outcome and times, never its arguments")
|
|
10
|
+
.option("--tool <name>", "only this tool")
|
|
11
|
+
.option("--agent <name>", "only this agent, such as tg-mcp or memo-mcp")
|
|
12
|
+
.option("--limit <n>", "most rows, up to 500", positive, 100)
|
|
13
|
+
.option("--json", "print JSON")
|
|
14
|
+
.action((options) => run(options.json, async (store) => ({
|
|
15
|
+
items: await store.agentActions.list({
|
|
16
|
+
...(options.tool === undefined ? {} : { tool: options.tool }),
|
|
17
|
+
...(options.agent === undefined ? {} : { agent: options.agent }),
|
|
18
|
+
limit: options.limit,
|
|
19
|
+
}),
|
|
20
|
+
})));
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/agents/command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE7C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,GAAsB,EAAQ,EAAE;IAChG,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACnC,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8DAA8D,CAAC;SAC3E,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,gGAAgG,CAAC;SAC7G,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,gBAAgB,EAAE,6CAA6C,CAAC;SACvE,MAAM,CAAC,aAAa,EAAE,sBAAsB,EAAE,QAAQ,EAAE,GAAG,CAAC;SAC5D,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;SAC9B,MAAM,CAAC,CAAC,OAAyE,EAAE,EAAE,CACpF,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAClC,KAAK,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;YACnC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7D,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAChE,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;KACH,CAAC,CAAC,CACJ,CAAA;AACL,CAAC,CAAA"}
|
package/dist/mail/import.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type LoadEngine } from "@wirecat/cli-messaging/documents";
|
|
2
2
|
import type { MessageStore } from "@wirecat/cli-messaging/store";
|
|
3
|
-
import { embedChanged, type NotesEmbedded } from "../notes/embed.js";
|
|
3
|
+
import { embedChanged, embedMailChunks, type NotesEmbedded } from "../notes/embed.js";
|
|
4
4
|
import type { Himalaya } from "./himalaya.js";
|
|
5
5
|
export interface MailAccount {
|
|
6
6
|
/** The account's name in Himalaya's config. */
|
|
@@ -34,10 +34,9 @@ export interface ImportResult {
|
|
|
34
34
|
message: string;
|
|
35
35
|
part: number;
|
|
36
36
|
status: string;
|
|
37
|
-
locatorId?: string;
|
|
38
37
|
}[];
|
|
39
38
|
}
|
|
40
|
-
export declare const importMail: ({ store, run, account, since, max, now, env, embed, loadEngine, retryAttachments, indexThreads, }: {
|
|
39
|
+
export declare const importMail: ({ store, run, account, since, max, now, env, embed, loadEngine, retryAttachments, indexThreads, embedMail, }: {
|
|
41
40
|
store: MessageStore;
|
|
42
41
|
run: Himalaya;
|
|
43
42
|
account: MailAccount;
|
|
@@ -49,5 +48,6 @@ export declare const importMail: ({ store, run, account, since, max, now, env, e
|
|
|
49
48
|
loadEngine?: LoadEngine;
|
|
50
49
|
retryAttachments?: boolean;
|
|
51
50
|
indexThreads?: typeof embedChanged;
|
|
51
|
+
embedMail?: typeof embedMailChunks;
|
|
52
52
|
}) => Promise<ImportResult>;
|
|
53
53
|
//# sourceMappingURL=import.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/mail/import.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/mail/import.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7F,OAAO,KAAK,EAA6C,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3G,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGrF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAG7C,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,kGAAkG;IAClG,QAAQ,EAAE,OAAO,CAAA;IACjB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7G,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAClE;AASD,eAAO,MAAM,UAAU,iHAapB;IACD,KAAK,EAAE,YAAY,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,OAAO,EAAE,WAAW,CAAA;IACpB,KAAK,EAAE,IAAI,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,YAAY,CAAC,EAAE,OAAO,YAAY,CAAA;IAClC,SAAS,CAAC,EAAE,OAAO,eAAe,CAAA;CACnC,KAAG,OAAO,CAAC,YAAY,CA6KvB,CAAA"}
|
package/dist/mail/import.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { extractText, importEngine } from "@wirecat/cli-messaging/documents";
|
|
2
|
-
import { embedChanged } from "../notes/embed.js";
|
|
3
|
-
import { dropMissing } from "../store/gone.js";
|
|
2
|
+
import { embedChanged, embedMailChunks } from "../notes/embed.js";
|
|
3
|
+
import { dropMissing, tooManyGone } from "../store/gone.js";
|
|
4
4
|
import { listAllMail, listImapMail } from "./gmail.js";
|
|
5
5
|
import { parseMail } from "./parse.js";
|
|
6
6
|
const DAY = 86_400_000;
|
|
7
7
|
/** IMAP's SINCE counts whole days in the server's zone, so the window's first days are not trusted. */
|
|
8
8
|
const EDGE = 2 * DAY;
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
export const importMail = async ({ store, run, account, since, max = 200, now = Date.now, env, embed = false, loadEngine = importEngine, retryAttachments = false, indexThreads = embedChanged, }) => {
|
|
9
|
+
const MAX_ATTACHMENT_TEXT = 200_000;
|
|
10
|
+
const addressOf = ({ email, name }) => ({ address: email, name });
|
|
11
|
+
export const importMail = async ({ store, run, account, since, max = 200, now = Date.now, env, embed = false, loadEngine = importEngine, retryAttachments = false, indexThreads = embedChanged, embedMail = embedMailChunks, }) => {
|
|
12
12
|
const startedAt = now();
|
|
13
13
|
const key = { provider: "email", account: account.address.toLowerCase() };
|
|
14
|
-
await store.saveAccount(key, { name: account.address });
|
|
14
|
+
const accountId = await store.saveAccount(key, { name: account.address });
|
|
15
15
|
const folders = account.folders ?? [account.mode === "imap" ? "INBOX" : "[Gmail]/All Mail"];
|
|
16
16
|
if (folders.length < 1 || folders.length > 50)
|
|
17
17
|
throw new Error("select 1–50 mail folders");
|
|
@@ -25,8 +25,6 @@ export const importMail = async ({ store, run, account, since, max = 200, now =
|
|
|
25
25
|
scopeFolder: folder,
|
|
26
26
|
}))));
|
|
27
27
|
const listed = [...new Map(collected.map((item) => [item.messageId, item])).values()].sort((a, b) => b.receivedAt.localeCompare(a.receivedAt));
|
|
28
|
-
const changed = new Set();
|
|
29
|
-
const attachments = [];
|
|
30
28
|
const present = new Set(listed.map(({ messageId }) => messageId));
|
|
31
29
|
const foundFolders = new Map();
|
|
32
30
|
for (const item of collected) {
|
|
@@ -34,19 +32,39 @@ export const importMail = async ({ store, run, account, since, max = 200, now =
|
|
|
34
32
|
current.add(item.scopeFolder ?? item.folder ?? folders[0]);
|
|
35
33
|
foundFolders.set(item.messageId, current);
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
const mailbox = (folder) => ({ externalId: folder, name: folder, kind: null });
|
|
36
|
+
const allMailOnly = account.mode !== "imap" && folders.length === 1 && folders[0] === "[Gmail]/All Mail";
|
|
37
|
+
// Deletions are proved against the mailboxes as stored before this scan moves anything.
|
|
38
|
+
const scope = JSON.stringify({ mode: account.mode ?? "gmail", folders: [...folders].sort() });
|
|
39
|
+
const previousScope = await store.syncState(key, "mail_folder_scope");
|
|
40
|
+
const windowStart = new Date(since.getTime() + EDGE);
|
|
41
|
+
let deleted = 0;
|
|
42
|
+
let skipped;
|
|
43
|
+
if (previousScope !== undefined && previousScope.value !== scope)
|
|
44
|
+
skipped = "folder scope changed; missing mail is not proven deleted";
|
|
45
|
+
else {
|
|
46
|
+
const candidates = (await store.mail.emails({ accountId, since: windowStart.getTime() })).filter(({ mailboxes }) => mailboxes.length ? mailboxes.every(({ externalId }) => folders.includes(externalId)) : allMailOnly);
|
|
47
|
+
const gone = candidates.filter(({ externalId }) => !present.has(externalId)).map(({ externalId }) => externalId);
|
|
48
|
+
skipped = tooManyGone(gone.length, candidates.length);
|
|
49
|
+
if (!skipped && gone.length)
|
|
50
|
+
deleted = await store.mail.markDeleted(accountId, gone, startedAt);
|
|
51
|
+
// Mail an earlier import saved as messages keeps the rule it was saved under until those rows are removed.
|
|
52
|
+
const older = await dropMissing(store, key, { has: (id) => present.has(id.replace(/:attachment:\d+$/, "")) }, windowStart.toISOString(), async ({ id }) => {
|
|
53
|
+
const membership = await store.syncState(key, `mail_message_folders:${id.replace(/:attachment:\d+$/, "")}`);
|
|
54
|
+
if (membership === undefined)
|
|
55
|
+
return allMailOnly;
|
|
56
|
+
return JSON.parse(membership.value).every((folder) => folders.includes(folder));
|
|
57
|
+
});
|
|
58
|
+
deleted += older.deleted;
|
|
59
|
+
skipped ??= older.skipped;
|
|
41
60
|
}
|
|
61
|
+
await store.mail.setMailboxes(accountId, folders.map(mailbox), new Map([...foundFolders].map(([id, found]) => [id, [...found]])), startedAt);
|
|
62
|
+
const attachments = [];
|
|
42
63
|
let saved = 0;
|
|
43
64
|
let alreadyStored = 0;
|
|
44
65
|
let read = 0;
|
|
45
66
|
for (const item of listed) {
|
|
46
|
-
if (!retryAttachments && (await store.
|
|
47
|
-
const children = await store.syncState(key, `mail_attachments:${item.messageId}`);
|
|
48
|
-
for (const id of children === undefined ? [] : JSON.parse(children.value))
|
|
49
|
-
present.add(id);
|
|
67
|
+
if (!retryAttachments && (await store.mail.email(accountId, item.messageId)) !== null) {
|
|
50
68
|
alreadyStored++;
|
|
51
69
|
continue;
|
|
52
70
|
}
|
|
@@ -54,97 +72,70 @@ export const importMail = async ({ store, run, account, since, max = 200, now =
|
|
|
54
72
|
break;
|
|
55
73
|
read++;
|
|
56
74
|
const mail = parseMail(await run(["--json", "message", "read", "-a", account.name, "-m", item.folder ?? "archive", item.uid]));
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const members = [...new Set([...known, ...people.map(({ email }) => email)])];
|
|
60
|
-
const newest = (await store.find({ account: key, chatId: item.threadId, pattern: ANY, limit: 1 })).items[0]
|
|
61
|
-
?.timestamp;
|
|
62
|
-
// Saving a chat replaces its fields, so an older message read later must not move the time back.
|
|
63
|
-
const lastMessageAt = newest !== undefined && newest > item.receivedAt ? newest : item.receivedAt;
|
|
64
|
-
await store.applyDelta(key, {
|
|
65
|
-
chats: [
|
|
66
|
-
{
|
|
67
|
-
id: item.threadId,
|
|
68
|
-
title: titleOf(mail.subject),
|
|
69
|
-
kind: members.length > 2 ? "group" : "dialog",
|
|
70
|
-
unreadCount: null,
|
|
71
|
-
lastMessageAt,
|
|
72
|
-
participantsCount: members.length,
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
people: people.map(({ email, name }) => ({ id: email, name })),
|
|
76
|
-
members: new Map([[item.threadId, members]]),
|
|
77
|
-
});
|
|
78
|
-
const message = {
|
|
79
|
-
id: item.messageId,
|
|
80
|
-
chatId: item.threadId,
|
|
81
|
-
senderId: mail.from?.email ?? null,
|
|
82
|
-
senderName: mail.from?.name ?? null,
|
|
83
|
-
timestamp: item.receivedAt,
|
|
84
|
-
editedAt: null,
|
|
85
|
-
text: [mail.subject, mail.text].filter(Boolean).join("\n\n"),
|
|
86
|
-
outgoing: mail.from === null ? null : mail.from.email === key.account,
|
|
87
|
-
attachments: mail.attachments.map((part) => ({
|
|
88
|
-
kind: "file",
|
|
89
|
-
name: part.name,
|
|
90
|
-
...(part.mime === null ? {} : { mime: part.mime }),
|
|
91
|
-
...(part.bytes === null ? {} : { size: part.bytes.byteLength }),
|
|
92
|
-
providerRef: { message: item.messageId, part: part.id },
|
|
93
|
-
})),
|
|
94
|
-
providerMetadata: {
|
|
95
|
-
emailHeaders: { cc: mail.cc.map((address) => address.email), bcc: mail.bcc.map((address) => address.email) },
|
|
96
|
-
},
|
|
97
|
-
replyTo: null,
|
|
98
|
-
forwardedFrom: null,
|
|
99
|
-
reactions: null,
|
|
100
|
-
};
|
|
101
|
-
await store.saveMessages(key, item.threadId, [message], { via: "himalaya", seenAt: startedAt });
|
|
102
|
-
const children = [];
|
|
103
|
-
for (const part of mail.attachments) {
|
|
75
|
+
const files = [];
|
|
76
|
+
for (const [position, part] of mail.attachments.entries()) {
|
|
104
77
|
const extraction = part.bytes === null
|
|
105
78
|
? { status: "unavailable" }
|
|
106
79
|
: await extractText(part.bytes, { kind: "file", name: part.name, mime: part.mime, path: part.name }, loadEngine);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
80
|
+
attachments.push({ message: item.messageId, part: part.id, status: extraction.status });
|
|
81
|
+
const extracted = extraction.status === "extracted" ? extraction : undefined;
|
|
82
|
+
files.push({
|
|
83
|
+
position,
|
|
84
|
+
kind: "file",
|
|
85
|
+
mime: part.mime,
|
|
86
|
+
name: part.name,
|
|
87
|
+
title: null,
|
|
88
|
+
url: null,
|
|
89
|
+
size: part.bytes === null ? null : part.bytes.byteLength,
|
|
90
|
+
width: null,
|
|
91
|
+
height: null,
|
|
92
|
+
duration: null,
|
|
93
|
+
providerRef: { message: item.messageId, part: part.id },
|
|
94
|
+
localPath: null,
|
|
95
|
+
text: extracted ? extracted.text.slice(0, MAX_ATTACHMENT_TEXT) : null,
|
|
96
|
+
normalizedText: null,
|
|
97
|
+
extraction: extracted ? "text" : "failed",
|
|
98
|
+
extractor: extracted ? extracted.extractor : null,
|
|
99
|
+
extractionError: extracted ? null : extraction.status,
|
|
100
|
+
contentSha256: null,
|
|
101
|
+
extractedAt: startedAt,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
await store.mail.saveThread({
|
|
105
|
+
accountId,
|
|
106
|
+
externalId: item.threadId,
|
|
107
|
+
now: startedAt,
|
|
108
|
+
emails: [
|
|
113
109
|
{
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
110
|
+
externalId: item.messageId,
|
|
111
|
+
subject: mail.subject,
|
|
112
|
+
from: mail.from === null ? null : addressOf(mail.from),
|
|
113
|
+
to: mail.to.map(addressOf),
|
|
114
|
+
cc: mail.cc.map(addressOf),
|
|
115
|
+
bcc: mail.bcc.map(addressOf),
|
|
116
|
+
sentAt: null,
|
|
117
|
+
receivedAt: Date.parse(item.receivedAt),
|
|
118
|
+
bodyText: mail.text || null,
|
|
119
|
+
outgoing: mail.from === null ? null : mail.from.email === key.account,
|
|
120
|
+
mailboxes: [...(foundFolders.get(item.messageId) ?? [])].map(mailbox),
|
|
121
|
+
attachments: files,
|
|
121
122
|
},
|
|
122
|
-
],
|
|
123
|
-
|
|
124
|
-
present.add(id);
|
|
125
|
-
attachments.push({ message: item.messageId, part: part.id, status: "extracted", locatorId: id });
|
|
126
|
-
}
|
|
127
|
-
await store.setSyncState(key, `mail_attachments:${item.messageId}`, JSON.stringify(children));
|
|
123
|
+
],
|
|
124
|
+
});
|
|
128
125
|
saved++;
|
|
129
|
-
changed.add(item.threadId);
|
|
130
126
|
}
|
|
131
127
|
const complete = listed.length - alreadyStored - saved === 0;
|
|
132
|
-
const scope = JSON.stringify({ mode: account.mode ?? "gmail", folders: [...folders].sort() });
|
|
133
|
-
const previousScope = await store.syncState(key, "mail_folder_scope");
|
|
134
|
-
const { deleted, skipped } = previousScope !== undefined && previousScope.value !== scope
|
|
135
|
-
? { deleted: 0, skipped: "folder scope changed; missing mail is not proven deleted" }
|
|
136
|
-
: await dropMissing(store, key, present, new Date(since.getTime() + EDGE).toISOString(), async ({ id }) => {
|
|
137
|
-
const parent = id.replace(/:attachment:\d+$/, "");
|
|
138
|
-
const membership = await store.syncState(key, `mail_message_folders:${parent}`);
|
|
139
|
-
if (membership === undefined)
|
|
140
|
-
return account.mode !== "imap" && folders.length === 1 && folders[0] === "[Gmail]/All Mail";
|
|
141
|
-
return JSON.parse(membership.value).every((folder) => folders.includes(folder));
|
|
142
|
-
});
|
|
143
128
|
await store.setSyncState(key, "mail_folder_scope", scope);
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
129
|
+
const embedding = { embed: embed && account.embed !== false, ...(env === undefined ? {} : { env }) };
|
|
130
|
+
// Chats an earlier import saved as messages may still wait for vectors; the mail tables have their own.
|
|
131
|
+
const older = await indexThreads(store, key, [], embedding);
|
|
132
|
+
const mail = await embedMail(store, embedding);
|
|
133
|
+
const indexed = {
|
|
134
|
+
...older,
|
|
135
|
+
chunks: older.chunks + mail.chunks,
|
|
136
|
+
left: older.left || mail.left,
|
|
137
|
+
...(mail.notEmbedded === undefined ? {} : { notEmbedded: mail.notEmbedded }),
|
|
138
|
+
};
|
|
148
139
|
const coverage = {
|
|
149
140
|
folders,
|
|
150
141
|
since: since.toISOString(),
|
package/dist/mail/import.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/mail/import.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/mail/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/mcp/command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,eAAO,MAAM,UAAU,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAavF,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { serveStdio } from "@modelcontextprotocol/server/stdio";
|
|
2
|
+
import { createMemoServer } from "./server.js";
|
|
3
|
+
export const mcpCommand = (program, streams, env) => {
|
|
4
|
+
program
|
|
5
|
+
.command("mcp")
|
|
6
|
+
.description("Serve memories, proposed actions and the agent log to an agent over MCP, on stdin and stdout")
|
|
7
|
+
.action(async () => {
|
|
8
|
+
serveStdio(() => createMemoServer(env), { onerror: (error) => streams.diagnostic(`mcp: ${error.message}`) });
|
|
9
|
+
await new Promise((resolve) => {
|
|
10
|
+
process.stdin.once("end", resolve);
|
|
11
|
+
process.stdin.once("close", resolve);
|
|
12
|
+
process.once("SIGINT", resolve);
|
|
13
|
+
process.once("SIGTERM", resolve);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mcp/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,GAAsB,EAAQ,EAAE;IAC7F,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,8FAA8F,CAAC;SAC3G,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,UAAU,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAA;QAC5G,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YACpC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC/B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"}
|