@leemour/cli-messaging 0.41.0 → 0.43.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 +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/chats-command.d.ts.map +1 -1
- package/dist/cli/messenger/chats-command.js +2 -0
- package/dist/cli/messenger/chats-command.js.map +1 -1
- package/dist/cli/messenger/chats-members-command.d.ts +5 -0
- package/dist/cli/messenger/chats-members-command.d.ts.map +1 -0
- package/dist/cli/messenger/chats-members-command.js +18 -0
- package/dist/cli/messenger/chats-members-command.js.map +1 -0
- package/dist/cli/messenger/contacts-command.d.ts +11 -1
- package/dist/cli/messenger/contacts-command.d.ts.map +1 -1
- package/dist/cli/messenger/contacts-command.js +55 -0
- package/dist/cli/messenger/contacts-command.js.map +1 -1
- package/dist/cli/messenger/messages-command.d.ts +5 -1
- package/dist/cli/messenger/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +45 -6
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/messages-pin-command.d.ts +20 -0
- package/dist/cli/messenger/messages-pin-command.d.ts.map +1 -0
- package/dist/cli/messenger/messages-pin-command.js +38 -0
- package/dist/cli/messenger/messages-pin-command.js.map +1 -0
- package/dist/cli/messenger/messages-scheduled-command.d.ts +5 -0
- package/dist/cli/messenger/messages-scheduled-command.d.ts.map +1 -0
- package/dist/cli/messenger/messages-scheduled-command.js +30 -0
- package/dist/cli/messenger/messages-scheduled-command.js.map +1 -0
- package/dist/cli/messenger/port.d.ts +24 -1
- package/dist/cli/messenger/port.d.ts.map +1 -1
- package/dist/cli/messenger/port.js.map +1 -1
- package/dist/cli/messenger/serve-command.d.ts +4 -0
- package/dist/cli/messenger/serve-command.d.ts.map +1 -1
- package/dist/cli/messenger/serve-command.js +18 -4
- package/dist/cli/messenger/serve-command.js.map +1 -1
- package/dist/cli/messenger/server-command.d.ts.map +1 -1
- package/dist/cli/messenger/server-command.js +8 -0
- package/dist/cli/messenger/server-command.js.map +1 -1
- package/dist/cli/messenger/stored.d.ts.map +1 -1
- package/dist/cli/messenger/stored.js +4 -1
- package/dist/cli/messenger/stored.js.map +1 -1
- package/dist/domain/models.d.ts +7 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/send-time.d.ts +8 -0
- package/dist/domain/send-time.d.ts.map +1 -0
- package/dist/domain/send-time.js +29 -0
- package/dist/domain/send-time.js.map +1 -0
- package/dist/mcp/confirm.d.ts.map +1 -1
- package/dist/mcp/confirm.js +4 -1
- package/dist/mcp/confirm.js.map +1 -1
- package/dist/mcp/tools/chats.d.ts.map +1 -1
- package/dist/mcp/tools/chats.js +13 -0
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/mcp/tools/contacts.d.ts.map +1 -1
- package/dist/mcp/tools/contacts.js +10 -1
- package/dist/mcp/tools/contacts.js.map +1 -1
- package/dist/mcp/tools/messages-actions.d.ts.map +1 -1
- package/dist/mcp/tools/messages-actions.js +29 -0
- package/dist/mcp/tools/messages-actions.js.map +1 -1
- package/dist/mcp/tools/messages-send.d.ts.map +1 -1
- package/dist/mcp/tools/messages-send.js +28 -6
- package/dist/mcp/tools/messages-send.js.map +1 -1
- package/dist/mcp/tools/messages.d.ts.map +1 -1
- package/dist/mcp/tools/messages.js +10 -0
- package/dist/mcp/tools/messages.js.map +1 -1
- package/dist/sends/index.d.ts +1 -0
- package/dist/sends/index.d.ts.map +1 -1
- package/dist/sends/index.js +1 -0
- package/dist/sends/index.js.map +1 -1
- package/dist/sends/upload.d.ts +14 -0
- package/dist/sends/upload.d.ts.map +1 -0
- package/dist/sends/upload.js +47 -0
- package/dist/sends/upload.js.map +1 -0
- package/dist/speech/install.d.ts +2 -2
- package/dist/speech/install.d.ts.map +1 -1
- package/dist/speech/install.js +3 -3
- package/dist/speech/install.js.map +1 -1
- package/dist/store/drivers/bun-sqlite.d.ts +15 -1
- package/dist/store/drivers/bun-sqlite.d.ts.map +1 -1
- package/dist/store/drivers/bun-sqlite.js +3 -1
- package/dist/store/drivers/bun-sqlite.js.map +1 -1
- package/dist/store/drivers/node-sqlite.d.ts +2 -0
- package/dist/store/drivers/node-sqlite.d.ts.map +1 -1
- package/dist/store/drivers/node-sqlite.js +2 -2
- package/dist/store/drivers/node-sqlite.js.map +1 -1
- package/dist/store/sqlite/open.d.ts +16 -0
- package/dist/store/sqlite/open.d.ts.map +1 -0
- package/dist/store/sqlite/open.js +30 -0
- package/dist/store/sqlite/open.js.map +1 -0
- package/dist/store/sqlite/schema.d.ts +1491 -0
- package/dist/store/sqlite/schema.d.ts.map +1 -0
- package/dist/store/sqlite/schema.js +150 -0
- package/dist/store/sqlite/schema.js.map +1 -0
- package/package.json +4 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
|
-
import { contactsIn } from "../../cli/messenger/contacts-command.js";
|
|
2
|
+
import { contactsIn, phoneOf } from "../../cli/messenger/contacts-command.js";
|
|
3
|
+
import { capability } from "../../cli/messenger/port.js";
|
|
3
4
|
import { envelope, limit, page, paging, READ, tool } from "../tool.js";
|
|
4
5
|
export const contactsTools = (_messenger) => {
|
|
5
6
|
return {
|
|
@@ -20,6 +21,14 @@ export const contactsTools = (_messenger) => {
|
|
|
20
21
|
return envelope(found, number, size);
|
|
21
22
|
},
|
|
22
23
|
}),
|
|
24
|
+
contacts_lookup: tool({
|
|
25
|
+
title: "Find a person by phone",
|
|
26
|
+
description: "Who has this phone number, where their privacy lets the owner find them: { id, name, username }. " +
|
|
27
|
+
"not_found otherwise. Nothing is added to the owner's contacts.",
|
|
28
|
+
input: v.object({ phone: v.pipe(v.string(), v.description("with the country code; spaces and + are fine")) }),
|
|
29
|
+
annotations: READ,
|
|
30
|
+
online: (adapter, args) => capability(adapter, "lookup", "find a person by phone")(phoneOf(args.phone)),
|
|
31
|
+
}),
|
|
23
32
|
contacts_show: tool({
|
|
24
33
|
title: "Show a person",
|
|
25
34
|
description: "One person and the chats shared with them.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../../src/mcp/tools/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../../src/mcp/tools/contacts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages-actions.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"messages-actions.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAI/D,OAAO,EAAE,KAAK,OAAO,EAAyC,MAAM,YAAY,CAAA;AAEhF,uHAAuH;AACvH,eAAO,MAAM,kBAAkB,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAwE/E,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
2
|
import { guardedEdit } from "../../cli/messenger/messages-edit-command.js";
|
|
3
3
|
import { guardedForward } from "../../cli/messenger/messages-forward-command.js";
|
|
4
|
+
import { guardedPin } from "../../cli/messenger/messages-pin-command.js";
|
|
4
5
|
import { APPROVE, chatOf, message, tool, WRITE } from "../tool.js";
|
|
5
6
|
/** What changes a message others already have, offered with `--allow-send`, each behind its own `allow` permission. */
|
|
6
7
|
export const messageActionTools = (messenger) => {
|
|
@@ -41,6 +42,34 @@ export const messageActionTools = (messenger) => {
|
|
|
41
42
|
}),
|
|
42
43
|
}),
|
|
43
44
|
}),
|
|
45
|
+
messages_pin: tool({
|
|
46
|
+
title: "Pin a message",
|
|
47
|
+
description: "Pin one message in a chat, quietly unless notify is true. Only when the owner asked for this pin. " +
|
|
48
|
+
"In a one-to-one chat the pin is on the owner's side only.",
|
|
49
|
+
input: v.object({
|
|
50
|
+
chat,
|
|
51
|
+
message,
|
|
52
|
+
notify: v.optional(v.pipe(v.boolean(), v.description("tell the chat's members"))),
|
|
53
|
+
}),
|
|
54
|
+
annotations: WRITE,
|
|
55
|
+
_meta: APPROVE,
|
|
56
|
+
permission: "pin",
|
|
57
|
+
online: (adapter, args, { guard }) => guardedPin(guard, adapter, {
|
|
58
|
+
chat: args.chat,
|
|
59
|
+
message: args.message,
|
|
60
|
+
pinned: true,
|
|
61
|
+
notify: args.notify === true,
|
|
62
|
+
}),
|
|
63
|
+
}),
|
|
64
|
+
messages_unpin: tool({
|
|
65
|
+
title: "Unpin a message",
|
|
66
|
+
description: "Unpin one message in a chat. Only when the owner asked for it.",
|
|
67
|
+
input: v.object({ chat, message }),
|
|
68
|
+
annotations: WRITE,
|
|
69
|
+
_meta: APPROVE,
|
|
70
|
+
permission: "pin",
|
|
71
|
+
online: (adapter, args, { guard }) => guardedPin(guard, adapter, { chat: args.chat, message: args.message, pinned: false, notify: false }),
|
|
72
|
+
}),
|
|
44
73
|
};
|
|
45
74
|
};
|
|
46
75
|
//# sourceMappingURL=messages-actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages-actions.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAA;AAChF,OAAO,EAAgB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhF,uHAAuH;AACvH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAA2B,EAAE;IAClF,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IAC9B,OAAO;QACL,aAAa,EAAE,IAAI,CAAC;YAClB,KAAK,EAAE,gBAAgB;YACvB,WAAW,EACT,wGAAwG;gBACxG,6FAA6F;YAC/F,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,MAAM;YAClB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,OAAO,EAAE,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;aACxG,CAAC;SACH,CAAC;QACF,gBAAgB,EAAE,IAAI,CAAC;YACrB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EACT,yGAAyG;gBACzG,4GAA4G;gBAC5G,mBAAmB;YACrB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;gBACrF,OAAO;gBACP,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,kBAAkB,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;gBACjG,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,CAAC;aACzF,CAAC;YACF,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,SAAS;YACrB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,OAAO,EAAE,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;oBAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI;iBAC7B,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAA;AACH,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"messages-actions.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages-send.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages-send.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages-send.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages-send.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAI/D,OAAO,EAAE,KAAK,OAAO,EAAiD,MAAM,YAAY,CAAA;AAExF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAkE7E,CAAA"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
1
2
|
import * as v from "valibot";
|
|
2
3
|
import { guardedSend } from "../../cli/messenger/messages-command.js";
|
|
4
|
+
import { sendTime } from "../../domain/send-time.js";
|
|
5
|
+
import { readUpload } from "../../sends/upload.js";
|
|
3
6
|
import { APPROVE, chatOf, message, nameOf, tool, WRITE } from "../tool.js";
|
|
4
7
|
/**
|
|
5
8
|
* Registered only with `--allow-send`, so a server started without it has no way to write at all —
|
|
@@ -12,32 +15,51 @@ export const messageSendTools = (messenger) => {
|
|
|
12
15
|
return {
|
|
13
16
|
messages_send: tool({
|
|
14
17
|
title: "Send a message",
|
|
15
|
-
description: "Send one
|
|
18
|
+
description: "Send one message as the owner — text, or a file or photo from the owner's machine with the text as its " +
|
|
19
|
+
"caption. Only when the owner asked for this exact message to this exact chat. Hidden files and folders, " +
|
|
20
|
+
`~/.ssh and ${messenger.app.command}'s own folders are refused, with no way around it here. ` +
|
|
16
21
|
"A name that matches several chats is refused with the candidates — pick an id, never guess. " +
|
|
17
|
-
`On outcome_unknown, retry with the send_id it returns and ${name} drops the duplicate; never with a new one
|
|
22
|
+
`On outcome_unknown, retry with the send_id it returns and ${name} drops the duplicate; never with a new one. ` +
|
|
23
|
+
`With \`at\`, ${name} sends it later and the answer carries scheduledFor; never retry a scheduled send — ` +
|
|
24
|
+
"read messages_scheduled instead.",
|
|
18
25
|
input: v.object({
|
|
19
26
|
chat,
|
|
20
|
-
text: v.pipe(v.string(), v.
|
|
27
|
+
text: v.optional(v.pipe(v.string(), v.description("the message, or the caption of a file or photo"))),
|
|
28
|
+
file: v.optional(v.pipe(v.string(), v.minLength(1), v.description("a path on the owner's machine to attach as a file"))),
|
|
29
|
+
photo: v.optional(v.pipe(v.string(), v.minLength(1), v.description("a .jpg, .png or .webp to attach as a photo"))),
|
|
21
30
|
reply_to: v.optional(v.pipe(message, v.description("the message this answers, in the same chat"))),
|
|
22
31
|
send_id: v.optional(v.pipe(v.string(), v.minLength(1), v.description("from an earlier outcome_unknown"))),
|
|
23
32
|
silent: v.optional(v.pipe(v.boolean(), v.description("deliver without a notification"))),
|
|
24
33
|
no_preview: v.optional(v.pipe(v.boolean(), v.description("no preview card for a link in the text"))),
|
|
25
34
|
markdown: v.optional(v.pipe(v.boolean(), v.description("read **bold**, _italic_, ~~struck~~ and `code`; \\ keeps a mark literal"))),
|
|
35
|
+
at: v.optional(v.pipe(v.string(), v.description("send it later: 2026-09-25T09:00 (the owner's local time), or 30m, 2h, 1d from now"))),
|
|
26
36
|
}),
|
|
27
37
|
annotations: WRITE,
|
|
28
38
|
_meta: APPROVE,
|
|
29
39
|
permission: "send",
|
|
30
|
-
online: async (adapter, args, { guard }) => {
|
|
40
|
+
online: async (adapter, args, { guard, env }) => {
|
|
41
|
+
const at = args.at === undefined ? undefined : sendTime(args.at);
|
|
42
|
+
// Never anyFile here: a path an agent was talked into is how a key would leave the machine.
|
|
43
|
+
const read = { app: messenger.app, env };
|
|
44
|
+
const attachments = [
|
|
45
|
+
...(args.photo === undefined ? [] : [await readUpload("photo", args.photo, read)]),
|
|
46
|
+
...(args.file === undefined ? [] : [await readUpload("file", args.file, read)]),
|
|
47
|
+
];
|
|
48
|
+
if ((args.text ?? "").trim() === "" && attachments.length === 0) {
|
|
49
|
+
throw new CliError("validation_error", "nothing to send — give text, a file or a photo");
|
|
50
|
+
}
|
|
31
51
|
const sent = await guardedSend(guard, adapter, {
|
|
32
52
|
chat: args.chat,
|
|
33
|
-
text: args.text,
|
|
53
|
+
text: args.text ?? "",
|
|
54
|
+
...(attachments.length === 0 ? {} : { attachments }),
|
|
34
55
|
...(args.send_id === undefined ? {} : { sendId: args.send_id }),
|
|
35
56
|
...(args.reply_to === undefined ? {} : { replyTo: args.reply_to }),
|
|
36
57
|
...(args.silent === true ? { silent: true } : {}),
|
|
37
58
|
...(args.no_preview === true ? { noPreview: true } : {}),
|
|
38
59
|
...(args.markdown === true ? { markdown: true } : {}),
|
|
60
|
+
...(at === undefined ? {} : { at }),
|
|
39
61
|
});
|
|
40
|
-
return { sendId: sent.sendId, message: sent.message };
|
|
62
|
+
return { sendId: sent.sendId, message: sent.message, ...(at === undefined ? {} : { scheduledFor: at }) };
|
|
41
63
|
},
|
|
42
64
|
}),
|
|
43
65
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages-send.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,EAAgB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAExF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAoB,EAA2B,EAAE;IAChF,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IAC9B,OAAO;QACL,aAAa,EAAE,IAAI,CAAC;YAClB,KAAK,EAAE,gBAAgB;YACvB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"messages-send.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-send.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,EAAE,KAAK,OAAO,EAA8C,MAAM,YAAY,CAAA;AAErF,eAAO,MAAM,aAAa,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,EAAE,KAAK,OAAO,EAA8C,MAAM,YAAY,CAAA;AAErF,eAAO,MAAM,aAAa,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA6F1E,CAAA"}
|
|
@@ -49,6 +49,16 @@ export const messagesTools = (messenger) => {
|
|
|
49
49
|
items: await adapter.around(args.chat, args.message, { before: args.before ?? 0, after: args.after ?? 0 }),
|
|
50
50
|
}),
|
|
51
51
|
}),
|
|
52
|
+
messages_scheduled: tool({
|
|
53
|
+
title: "Messages scheduled in a chat",
|
|
54
|
+
description: "Messages waiting to be sent later in a chat, soonest first, each with scheduledFor. Look here after a " +
|
|
55
|
+
`scheduled send ended in outcome_unknown. Cancelling one is done in the ${name} app. Returns { items }.`,
|
|
56
|
+
input: v.object({ chat }),
|
|
57
|
+
annotations: READ,
|
|
58
|
+
online: async (adapter, args) => ({
|
|
59
|
+
items: await capability(adapter, "scheduled", "list scheduled messages")(args.chat),
|
|
60
|
+
}),
|
|
61
|
+
}),
|
|
52
62
|
messages_search: tool({
|
|
53
63
|
title: "Search messages",
|
|
54
64
|
description: `Find messages in what this machine has kept — it never asks ${name}, so an empty answer means ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/sends/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { type AccountAction, type ChatAction, type SendEntry, SendJournal, type
|
|
|
4
4
|
export { PERMISSIONS, type Permission, permissionFor } from "./permissions.js";
|
|
5
5
|
export { type Recipient, RecipientList, recipientsPathFor } from "./recipients.js";
|
|
6
6
|
export { newSendId } from "./send-id.js";
|
|
7
|
+
export { readUpload, type Upload, type UploadKind } from "./upload.js";
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sends/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,SAAS,EACT,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAE,KAAK,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sends/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,SAAS,EACT,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,YAAY,GACb,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAE,KAAK,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/sends/index.js
CHANGED
|
@@ -4,4 +4,5 @@ export { SendJournal, sendsPathFor, } from "./journal.js";
|
|
|
4
4
|
export { PERMISSIONS, permissionFor } from "./permissions.js";
|
|
5
5
|
export { RecipientList, recipientsPathFor } from "./recipients.js";
|
|
6
6
|
export { newSendId } from "./send-id.js";
|
|
7
|
+
export { readUpload } from "./upload.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/dist/sends/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sends/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAGR,SAAS,EACT,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAIL,WAAW,EAGX,YAAY,GACb,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAmB,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAkB,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sends/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAGR,SAAS,EACT,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAIL,WAAW,EAGX,YAAY,GACb,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAmB,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAkB,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,UAAU,EAAgC,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AppIdentity } from "../cli/app.js";
|
|
2
|
+
export type UploadKind = "photo" | "file";
|
|
3
|
+
/** A file read for sending. Its name goes to the messenger and never to the journal. */
|
|
4
|
+
export interface Upload {
|
|
5
|
+
kind: UploadKind;
|
|
6
|
+
name: string;
|
|
7
|
+
bytes: Uint8Array;
|
|
8
|
+
}
|
|
9
|
+
export declare const readUpload: (kind: UploadKind, path: string, { app, env, anyFile }: {
|
|
10
|
+
app: AppIdentity;
|
|
11
|
+
env?: NodeJS.ProcessEnv;
|
|
12
|
+
anyFile?: boolean;
|
|
13
|
+
}) => Promise<Upload>;
|
|
14
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/sends/upload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,CAAA;AAEzC,wFAAwF;AACxF,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,UAAU,CAAA;CAClB;AA+BD,eAAO,MAAM,UAAU,SACf,UAAU,QACV,MAAM,yBACiC;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAC5G,OAAO,CAAC,MAAM,CAkBhB,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { realpathSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { basename, extname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { CliError, resolvePaths } from "@leemour/cli-core";
|
|
5
|
+
import { storePath } from "../store/path.js";
|
|
6
|
+
const PHOTO = new Set([".jpg", ".jpeg", ".png", ".webp"]);
|
|
7
|
+
/**
|
|
8
|
+
* A file somebody talked an agent into sending would be a key or a token: those live in hidden
|
|
9
|
+
* files and folders, `~/.ssh` among them, in the CLI's own folders — the session is there — and in
|
|
10
|
+
* the message store (max-cli `NEED-274`). The real path is checked as well as the typed one, so a
|
|
11
|
+
* link does not hide where it points.
|
|
12
|
+
*/
|
|
13
|
+
const refusedPlace = (path, app, env) => {
|
|
14
|
+
const own = Object.values(resolvePaths({ appName: app.appName, prefix: app.envPrefix, env }));
|
|
15
|
+
// The store file and its -wal and -shm, not its folder: MESSAGING_STORE may sit in the home folder.
|
|
16
|
+
const store = resolve(storePath(env));
|
|
17
|
+
let real = resolve(path);
|
|
18
|
+
try {
|
|
19
|
+
real = realpathSync(path);
|
|
20
|
+
}
|
|
21
|
+
catch { }
|
|
22
|
+
return [resolve(path), real].some((candidate) => candidate.split(sep).some((part) => part.startsWith(".") && part !== "." && part !== "..") ||
|
|
23
|
+
own.some((dir) => inside(candidate, dir)) ||
|
|
24
|
+
candidate.startsWith(store));
|
|
25
|
+
};
|
|
26
|
+
const inside = (path, dir) => {
|
|
27
|
+
const way = relative(resolve(dir), path);
|
|
28
|
+
return way === "" || (!way.startsWith("..") && !isAbsolute(way));
|
|
29
|
+
};
|
|
30
|
+
export const readUpload = async (kind, path, { app, env = process.env, anyFile = false }) => {
|
|
31
|
+
if (kind === "photo" && !PHOTO.has(extname(path).toLowerCase())) {
|
|
32
|
+
throw new CliError("validation_error", `a photo is a .jpg, .png or .webp — send ${path} as a file instead`);
|
|
33
|
+
}
|
|
34
|
+
if (!anyFile && refusedPlace(path, app, env)) {
|
|
35
|
+
throw new CliError("validation_error", `cannot send ${path}: hidden files and folders, ~/.ssh, ${app.command}'s own folders and the message store ` +
|
|
36
|
+
`are not sent — the owner adds --allow-any-file to \`${app.command} messages send\` if this file is meant to go`);
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
return { kind, name: basename(path), bytes: await readFile(path) };
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const code = error.code;
|
|
43
|
+
const reason = code === "ENOENT" ? "no such file" : code === "EISDIR" ? "it is a folder" : "it cannot be read";
|
|
44
|
+
throw new CliError("validation_error", `cannot send ${path}: ${reason}`);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/sends/upload.ts"],"names":[],"mappings":"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"}
|
package/dist/speech/install.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type SpeechModel } from "./models.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* `~/.cache/cli-common`: one folder for what every CLI of the family shares, whatever it talks to — a
|
|
4
|
+
* model is hundreds of MB and is downloaded once. `CLI_COMMON_CACHE_DIR` moves it.
|
|
5
5
|
*/
|
|
6
6
|
export declare const modelsDirectory: (env?: NodeJS.ProcessEnv) => string;
|
|
7
7
|
export declare const modelPath: (directory: string, model: SpeechModel) => (name: string) => string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/speech/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,WAAW,EAAO,MAAM,aAAa,CAAA;AAEnE;;;GAGG;AACH,eAAO,MAAM,eAAe,SAAS,MAAM,CAAC,UAAU,KAAiB,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/speech/install.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,WAAW,EAAO,MAAM,aAAa,CAAA;AAEnE;;;GAGG;AACH,eAAO,MAAM,eAAe,SAAS,MAAM,CAAC,UAAU,KAAiB,MAC4B,CAAA;AAwBnG,eAAO,MAAM,SAAS,cAAe,MAAM,SAAS,WAAW,YAAY,MAAM,WAAoC,CAAA;AAErH,eAAO,MAAM,OAAO,cAAe,MAAM,KAAG,MAAmC,CAAA;AAO/E;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAW,WAAW,aAAa,MAAM,KAAG,OACW,CAAA;AAU/E,eAAO,MAAM,cAAc,UAAW,WAAW,KAAG,MAAgE,CAAA;AAEpH,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEvF,eAAO,MAAM,OAAO,UACX,WAAW,aACP,MAAM,6BACiB;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,KACrF,OAAO,CAAC,IAAI,CAOd,CAAA;AA4DD,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,MACgC,CAAA"}
|
package/dist/speech/install.js
CHANGED
|
@@ -7,10 +7,10 @@ import { pipeline } from "node:stream/promises";
|
|
|
7
7
|
import { CliError, resolvePaths } from "@leemour/cli-core";
|
|
8
8
|
import { VAD } from "./models.js";
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* `~/.cache/cli-common`: one folder for what every CLI of the family shares, whatever it talks to — a
|
|
11
|
+
* model is hundreds of MB and is downloaded once. `CLI_COMMON_CACHE_DIR` moves it.
|
|
12
12
|
*/
|
|
13
|
-
export const modelsDirectory = (env = process.env) => join(resolvePaths({ appName: "cli-
|
|
13
|
+
export const modelsDirectory = (env = process.env) => join(resolvePaths({ appName: "cli-common", prefix: "CLI_COMMON", env }).cache, "models", "audio");
|
|
14
14
|
/** No byte for this long and the download is given up — however large the file, it is moving or not. */
|
|
15
15
|
const STALL_MS = 60_000;
|
|
16
16
|
const watchdog = (ms) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/speech/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAoC,GAAG,EAAE,MAAM,aAAa,CAAA;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAU,EAAE,CAC9E,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/speech/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAoC,GAAG,EAAE,MAAM,aAAa,CAAA;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAU,EAAE,CAC9E,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AAEnG,wGAAwG;AACxG,MAAM,QAAQ,GAAG,MAAM,CAAA;AAQvB,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAY,EAAE;IACxC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IACpD,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,IAAI,EAAE,GAAG,EAAE;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;KAChC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,KAAkB,EAAE,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AAErH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;AAE/E,MAAM,MAAM,GAAG,CAAC,KAAkB,EAAE,SAAiB,EAAyB,EAAE,CAAC;IAC/E,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAuB,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjG,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CAC1B,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAE,SAAiB,EAAW,EAAE,CAC5E,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAA;AAE/E,MAAM,MAAM,GAAG,CAAC,IAAY,EAAsB,EAAE;IAClD,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAU,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;AAIpH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,KAAkB,EAClB,SAAiB,EACjB,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAyD,EAAE,EAC5E,EAAE;IACjB,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACtE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;YAAE,SAAQ;QACzC,QAAQ,EAAE,CAAC,eAAe,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjE,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,KAAK,EAAE,IAAe,EAAE,IAAY,EAAE,GAAU,EAAiB,EAAE;IACvF,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAClC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,4BAA4B,QAAQ,GAAG,IAAI,4BAA4B,CAAC,CAAA;QACpH,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,IAAI,EAAE,CAAA;IAChB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,KAAK,EAAE,IAAe,EAAE,IAAY,EAAE,GAAU,EAAE,OAAiB,EAAiB,EAAE;IACtG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAChE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAA;QAC7B,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,IAAI,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACtG,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,OAAO,CAAA;IAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC;QAC5B,SAAS,CAAC,KAAa,EAAE,SAAS,EAAE,IAAI;YACtC,OAAO,CAAC,IAAI,EAAE,CAAA;YACd,KAAK,IAAI,KAAK,CAAC,MAAM,CAAA;YACrB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,CACF,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,IAAI,8DAA8D,CAAC,CAC7G,CAAA;gBACD,OAAM;YACR,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACnB,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,CACZ,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAgD,CAAC,EAC3E,OAAO,EACP,iBAAiB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAC5C,CAAA;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,GAAG,IAAI,CAAC,IAAI,iDAAiD,MAAM,2BAA2B,CAC/F,CAAA;QACH,CAAC;QACD,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACpC,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CACjD,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAA"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
import type { CacheDatabase } from "../driver.js";
|
|
1
|
+
import type { CacheDatabase, SqlValue } from "../driver.js";
|
|
2
|
+
interface BunStatement {
|
|
3
|
+
run(...parameters: SqlValue[]): {
|
|
4
|
+
changes: number;
|
|
5
|
+
};
|
|
6
|
+
get(...parameters: SqlValue[]): unknown;
|
|
7
|
+
all(...parameters: SqlValue[]): unknown[];
|
|
8
|
+
}
|
|
9
|
+
export interface BunDatabase {
|
|
10
|
+
exec(sql: string): void;
|
|
11
|
+
query(sql: string): BunStatement;
|
|
12
|
+
close(): void;
|
|
13
|
+
}
|
|
2
14
|
/**
|
|
3
15
|
* The specifier is a variable on purpose: written inline, TypeScript tries to resolve `bun:sqlite`
|
|
4
16
|
* and fails, because Bun's types are not installed and would only be right for one of the two
|
|
5
17
|
* runtimes anyway. The import is reached only under Bun, so Node never evaluates it.
|
|
6
18
|
*/
|
|
7
19
|
export declare const openWithBunSqlite: (path: string) => Promise<CacheDatabase>;
|
|
20
|
+
export declare const cacheOverBunSqlite: (database: BunDatabase) => CacheDatabase;
|
|
21
|
+
export {};
|
|
8
22
|
//# sourceMappingURL=bun-sqlite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sqlite.d.ts","sourceRoot":"","sources":["../../../src/store/drivers/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"bun-sqlite.d.ts","sourceRoot":"","sources":["../../../src/store/drivers/bun-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE3D,UAAU,YAAY;IACpB,GAAG,CAAC,GAAG,UAAU,EAAE,QAAQ,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,GAAG,CAAC,GAAG,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IACvC,GAAG,CAAC,GAAG,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAA;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;IAChC,KAAK,IAAI,IAAI,CAAA;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAgB,MAAM,KAAG,OAAO,CAAC,aAAa,CAI3E,CAAA;AAED,eAAO,MAAM,kBAAkB,aAAc,WAAW,KAAG,aAa1D,CAAA"}
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
export const openWithBunSqlite = async (path) => {
|
|
7
7
|
const specifier = "bun:sqlite";
|
|
8
8
|
const { Database } = (await import(specifier));
|
|
9
|
-
|
|
9
|
+
return cacheOverBunSqlite(new Database(path));
|
|
10
|
+
};
|
|
11
|
+
export const cacheOverBunSqlite = (database) => {
|
|
10
12
|
return {
|
|
11
13
|
exec: (sql) => database.exec(sql),
|
|
12
14
|
prepare: (sql) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sqlite.js","sourceRoot":"","sources":["../../../src/store/drivers/bun-sqlite.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IAC9E,MAAM,SAAS,GAAG,YAAY,CAAA;IAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAoD,CAAA;IACjG,
|
|
1
|
+
{"version":3,"file":"bun-sqlite.js","sourceRoot":"","sources":["../../../src/store/drivers/bun-sqlite.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAY,EAA0B,EAAE;IAC9E,MAAM,SAAS,GAAG,YAAY,CAAA;IAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAoD,CAAA;IACjG,OAAO,kBAAkB,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAqB,EAAiB,EAAE;IACzE,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO;gBACL,GAAG,EAAE,CAAC,GAAG,UAAsB,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/F,GAAG,EAAE,CAAC,GAAG,UAAsB,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAwC;gBACvG,GAAG,EAAE,CAAC,GAAG,UAAsB,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAA8B;aAC9F,CAAA;QACH,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE;KAC9B,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DatabaseSync } from "node:sqlite";
|
|
1
2
|
import type { CacheDatabase } from "../driver.js";
|
|
2
3
|
/**
|
|
3
4
|
* ⚠ On Node 22 the import itself prints `ExperimentalWarning: SQLite is an experimental feature`
|
|
@@ -5,4 +6,5 @@ import type { CacheDatabase } from "../driver.js";
|
|
|
5
6
|
* process-wide to hide one line costs more than it saves.
|
|
6
7
|
*/
|
|
7
8
|
export declare const openWithNodeSqlite: (path: string) => CacheDatabase;
|
|
9
|
+
export declare const cacheOverNodeSqlite: (database: DatabaseSync) => CacheDatabase;
|
|
8
10
|
//# sourceMappingURL=node-sqlite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-sqlite.d.ts","sourceRoot":"","sources":["../../../src/store/drivers/node-sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-sqlite.d.ts","sourceRoot":"","sources":["../../../src/store/drivers/node-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,cAAc,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,aAA4D,CAAA;AAE9G,eAAO,MAAM,mBAAmB,aAAc,YAAY,KAAG,aAa5D,CAAA"}
|
|
@@ -4,8 +4,8 @@ import { DatabaseSync } from "node:sqlite";
|
|
|
4
4
|
* to stderr. Node 24 is silent. Left alone deliberately (`NEED-59`): suppressing warnings
|
|
5
5
|
* process-wide to hide one line costs more than it saves.
|
|
6
6
|
*/
|
|
7
|
-
export const openWithNodeSqlite = (path) =>
|
|
8
|
-
|
|
7
|
+
export const openWithNodeSqlite = (path) => cacheOverNodeSqlite(new DatabaseSync(path));
|
|
8
|
+
export const cacheOverNodeSqlite = (database) => {
|
|
9
9
|
return {
|
|
10
10
|
exec: (sql) => database.exec(sql),
|
|
11
11
|
prepare: (sql) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-sqlite.js","sourceRoot":"","sources":["../../../src/store/drivers/node-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAiB,EAAE
|
|
1
|
+
{"version":3,"file":"node-sqlite.js","sourceRoot":"","sources":["../../../src/store/drivers/node-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAiB,EAAE,CAAC,mBAAmB,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;AAE9G,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAsB,EAAiB,EAAE;IAC3E,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACvC,OAAO;gBACL,GAAG,EAAE,CAAC,GAAG,UAAsB,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/F,GAAG,EAAE,CAAC,GAAG,UAAsB,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAAwC;gBACvG,GAAG,EAAE,CAAC,GAAG,UAAsB,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,UAAU,CAA8B;aAC9F,CAAA;QACH,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE;KAC9B,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SQLiteAsyncDatabase } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import { type CacheDatabase } from "../driver.js";
|
|
3
|
+
/** Drizzle over the store's connection. Synchronous inside: a transaction never awaits (plan D3). */
|
|
4
|
+
export type Orm = SQLiteAsyncDatabase<"sync", unknown>;
|
|
5
|
+
export interface OpenedSqlite {
|
|
6
|
+
database: CacheDatabase;
|
|
7
|
+
orm: Orm;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* One SQLite connection, seen two ways: the `CacheDatabase` seam the hand-written SQL and the
|
|
11
|
+
* migration runner use, and Drizzle. Each Drizzle driver imports its runtime at the top of its
|
|
12
|
+
* file, so both are loaded by dynamic `import()` in the branch that has that runtime — see
|
|
13
|
+
* `../open.ts` for why a static import breaks the other runtime.
|
|
14
|
+
*/
|
|
15
|
+
export declare const openSqlite: (path: string) => Promise<OpenedSqlite>;
|
|
16
|
+
//# sourceMappingURL=open.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/open.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,cAAc,CAAA;AAG1D,qGAAqG;AACrG,MAAM,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,CAAA;IACvB,GAAG,EAAE,GAAG,CAAA;CACT;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,SAAgB,MAAM,KAAG,OAAO,CAAC,YAAY,CAInE,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PRAGMAS } from "../driver.js";
|
|
2
|
+
/**
|
|
3
|
+
* One SQLite connection, seen two ways: the `CacheDatabase` seam the hand-written SQL and the
|
|
4
|
+
* migration runner use, and Drizzle. Each Drizzle driver imports its runtime at the top of its
|
|
5
|
+
* file, so both are loaded by dynamic `import()` in the branch that has that runtime — see
|
|
6
|
+
* `../open.ts` for why a static import breaks the other runtime.
|
|
7
|
+
*/
|
|
8
|
+
export const openSqlite = async (path) => {
|
|
9
|
+
const opened = "Bun" in globalThis ? await openUnderBun(path) : await openUnderNode(path);
|
|
10
|
+
opened.database.exec(PRAGMAS);
|
|
11
|
+
return opened;
|
|
12
|
+
};
|
|
13
|
+
const openUnderNode = async (path) => {
|
|
14
|
+
const { DatabaseSync } = await import("node:sqlite");
|
|
15
|
+
const { drizzle } = await import("drizzle-orm/node-sqlite");
|
|
16
|
+
const { cacheOverNodeSqlite } = await import("../drivers/node-sqlite.js");
|
|
17
|
+
const client = new DatabaseSync(path);
|
|
18
|
+
return { database: cacheOverNodeSqlite(client), orm: drizzle({ client }) };
|
|
19
|
+
};
|
|
20
|
+
const openUnderBun = async (path) => {
|
|
21
|
+
// Variables, not literals: TypeScript would resolve `bun:sqlite`, whose types are not installed.
|
|
22
|
+
const runtime = "bun:sqlite";
|
|
23
|
+
const driver = "drizzle-orm/bun-sqlite";
|
|
24
|
+
const { Database } = (await import(runtime));
|
|
25
|
+
const { drizzle } = (await import(driver));
|
|
26
|
+
const { cacheOverBunSqlite } = await import("../drivers/bun-sqlite.js");
|
|
27
|
+
const client = new Database(path);
|
|
28
|
+
return { database: cacheOverBunSqlite(client), orm: drizzle({ client }) };
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../../src/store/sqlite/open.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,OAAO,EAAE,MAAM,cAAc,CAAA;AAW1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAyB,EAAE;IACtE,MAAM,MAAM,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;IACzF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAyB,EAAE;IAClE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IAC3D,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAmB,EAAE,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAAyB,EAAE;IACjE,iGAAiG;IACjG,MAAM,OAAO,GAAG,YAAY,CAAA;IAC5B,MAAM,MAAM,GAAG,wBAAwB,CAAA;IACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAoD,CAAA;IAC/F,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAA0D,CAAA;IACnG,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IACjC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAQ,EAAE,CAAA;AAClF,CAAC,CAAA"}
|