@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.
Files changed (94) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.d.ts +1 -1
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +1 -1
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/messenger/chats-command.d.ts.map +1 -1
  7. package/dist/cli/messenger/chats-command.js +2 -0
  8. package/dist/cli/messenger/chats-command.js.map +1 -1
  9. package/dist/cli/messenger/chats-members-command.d.ts +5 -0
  10. package/dist/cli/messenger/chats-members-command.d.ts.map +1 -0
  11. package/dist/cli/messenger/chats-members-command.js +18 -0
  12. package/dist/cli/messenger/chats-members-command.js.map +1 -0
  13. package/dist/cli/messenger/contacts-command.d.ts +11 -1
  14. package/dist/cli/messenger/contacts-command.d.ts.map +1 -1
  15. package/dist/cli/messenger/contacts-command.js +55 -0
  16. package/dist/cli/messenger/contacts-command.js.map +1 -1
  17. package/dist/cli/messenger/messages-command.d.ts +5 -1
  18. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  19. package/dist/cli/messenger/messages-command.js +45 -6
  20. package/dist/cli/messenger/messages-command.js.map +1 -1
  21. package/dist/cli/messenger/messages-pin-command.d.ts +20 -0
  22. package/dist/cli/messenger/messages-pin-command.d.ts.map +1 -0
  23. package/dist/cli/messenger/messages-pin-command.js +38 -0
  24. package/dist/cli/messenger/messages-pin-command.js.map +1 -0
  25. package/dist/cli/messenger/messages-scheduled-command.d.ts +5 -0
  26. package/dist/cli/messenger/messages-scheduled-command.d.ts.map +1 -0
  27. package/dist/cli/messenger/messages-scheduled-command.js +30 -0
  28. package/dist/cli/messenger/messages-scheduled-command.js.map +1 -0
  29. package/dist/cli/messenger/port.d.ts +24 -1
  30. package/dist/cli/messenger/port.d.ts.map +1 -1
  31. package/dist/cli/messenger/port.js.map +1 -1
  32. package/dist/cli/messenger/serve-command.d.ts +4 -0
  33. package/dist/cli/messenger/serve-command.d.ts.map +1 -1
  34. package/dist/cli/messenger/serve-command.js +18 -4
  35. package/dist/cli/messenger/serve-command.js.map +1 -1
  36. package/dist/cli/messenger/server-command.d.ts.map +1 -1
  37. package/dist/cli/messenger/server-command.js +8 -0
  38. package/dist/cli/messenger/server-command.js.map +1 -1
  39. package/dist/cli/messenger/stored.d.ts.map +1 -1
  40. package/dist/cli/messenger/stored.js +4 -1
  41. package/dist/cli/messenger/stored.js.map +1 -1
  42. package/dist/domain/models.d.ts +7 -0
  43. package/dist/domain/models.d.ts.map +1 -1
  44. package/dist/domain/send-time.d.ts +8 -0
  45. package/dist/domain/send-time.d.ts.map +1 -0
  46. package/dist/domain/send-time.js +29 -0
  47. package/dist/domain/send-time.js.map +1 -0
  48. package/dist/mcp/confirm.d.ts.map +1 -1
  49. package/dist/mcp/confirm.js +4 -1
  50. package/dist/mcp/confirm.js.map +1 -1
  51. package/dist/mcp/tools/chats.d.ts.map +1 -1
  52. package/dist/mcp/tools/chats.js +13 -0
  53. package/dist/mcp/tools/chats.js.map +1 -1
  54. package/dist/mcp/tools/contacts.d.ts.map +1 -1
  55. package/dist/mcp/tools/contacts.js +10 -1
  56. package/dist/mcp/tools/contacts.js.map +1 -1
  57. package/dist/mcp/tools/messages-actions.d.ts.map +1 -1
  58. package/dist/mcp/tools/messages-actions.js +29 -0
  59. package/dist/mcp/tools/messages-actions.js.map +1 -1
  60. package/dist/mcp/tools/messages-send.d.ts.map +1 -1
  61. package/dist/mcp/tools/messages-send.js +28 -6
  62. package/dist/mcp/tools/messages-send.js.map +1 -1
  63. package/dist/mcp/tools/messages.d.ts.map +1 -1
  64. package/dist/mcp/tools/messages.js +10 -0
  65. package/dist/mcp/tools/messages.js.map +1 -1
  66. package/dist/sends/index.d.ts +1 -0
  67. package/dist/sends/index.d.ts.map +1 -1
  68. package/dist/sends/index.js +1 -0
  69. package/dist/sends/index.js.map +1 -1
  70. package/dist/sends/upload.d.ts +14 -0
  71. package/dist/sends/upload.d.ts.map +1 -0
  72. package/dist/sends/upload.js +47 -0
  73. package/dist/sends/upload.js.map +1 -0
  74. package/dist/speech/install.d.ts +2 -2
  75. package/dist/speech/install.d.ts.map +1 -1
  76. package/dist/speech/install.js +3 -3
  77. package/dist/speech/install.js.map +1 -1
  78. package/dist/store/drivers/bun-sqlite.d.ts +15 -1
  79. package/dist/store/drivers/bun-sqlite.d.ts.map +1 -1
  80. package/dist/store/drivers/bun-sqlite.js +3 -1
  81. package/dist/store/drivers/bun-sqlite.js.map +1 -1
  82. package/dist/store/drivers/node-sqlite.d.ts +2 -0
  83. package/dist/store/drivers/node-sqlite.d.ts.map +1 -1
  84. package/dist/store/drivers/node-sqlite.js +2 -2
  85. package/dist/store/drivers/node-sqlite.js.map +1 -1
  86. package/dist/store/sqlite/open.d.ts +16 -0
  87. package/dist/store/sqlite/open.d.ts.map +1 -0
  88. package/dist/store/sqlite/open.js +30 -0
  89. package/dist/store/sqlite/open.js.map +1 -0
  90. package/dist/store/sqlite/schema.d.ts +1491 -0
  91. package/dist/store/sqlite/schema.d.ts.map +1 -0
  92. package/dist/store/sqlite/schema.js +150 -0
  93. package/dist/store/sqlite/schema.js.map +1 -0
  94. 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;AAEpE,OAAO,EAAgB,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEpF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAqB,EAA2B,EAAE;IAC9E,OAAO;QACL,aAAa,EAAE,IAAI,CAAC;YAClB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,uFAAuF;YACpG,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;gBACd,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,CAAC;gBAC7G,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;gBACjD,KAAK;gBACL,IAAI;aACL,CAAC;YACF,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE;gBAC9D,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;gBACvD,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;gBACxD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;gBACvG,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YACtC,CAAC;SACF,CAAC;QAEF,aAAa,EAAE,IAAI,CAAC;YAClB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,4CAA4C;YACzD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;gBACd,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAC;aACrG,CAAC;YACF,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;SACxD,CAAC;KACH,CAAA;AACH,CAAC,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;AAG/D,OAAO,EAAE,KAAK,OAAO,EAAyC,MAAM,YAAY,CAAA;AAEhF,uHAAuH;AACvH,eAAO,MAAM,kBAAkB,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAyC/E,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":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,EAAE,KAAK,OAAO,EAAiD,MAAM,YAAY,CAAA;AAExF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAsC7E,CAAA"}
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 text message as the owner. Only when the owner asked for this exact text to this exact chat. " +
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.minLength(1)),
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,wGAAwG;gBACxG,8FAA8F;gBAC9F,6DAA6D,IAAI,6CAA6C;YAChH,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;gBACd,IAAI;gBACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,CAAC;gBAClG,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACzG,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBACxF,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACpG,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAClB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,yEAAyE,CAAC,CAAC,CAC9G;aACF,CAAC;YACF,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;gBACzC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE;oBAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC/D,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClE,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjD,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxD,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtD,CAAC,CAAA;gBACF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;YACvD,CAAC;SACF,CAAC;KACH,CAAA;AACH,CAAC,CAAA"}
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,CAiF1E,CAAA"}
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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"}
@@ -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"}
@@ -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
@@ -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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"}
@@ -1,7 +1,7 @@
1
1
  import { type SpeechModel } from "./models.js";
2
2
  /**
3
- * One folder for every messenger CLI, so a model downloaded for one serves them all — hundreds of MB
4
- * each. `MESSAGING_CACHE_DIR` moves it, as `MESSAGING_STORE` moves the store.
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,MAC8B,CAAA;AAwBrG,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"}
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"}
@@ -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
- * One folder for every messenger CLI, so a model downloaded for one serves them all — hundreds of MB
11
- * each. `MESSAGING_CACHE_DIR` moves it, as `MESSAGING_STORE` moves the store.
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-messaging", prefix: "MESSAGING", env }).cache, "models", "audio");
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":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/speech/install.ts"],"names":[],"mappings":"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"}
@@ -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,EAAY,MAAM,cAAc,CAAA;AAc3D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,SAAgB,MAAM,KAAG,OAAO,CAAC,aAAa,CAiB3E,CAAA"}
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
- const database = new Database(path);
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,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEnC,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
+ {"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":"AACA,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,cAAc,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAU,MAAM,KAAG,aAejD,CAAA"}
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
- const database = new DatabaseSync(path);
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;IAChE,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;IAEvC,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"}
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"}