@wirecat/cli-core 0.340.0 → 0.341.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/dist/cli/author.d.ts +6 -0
- package/dist/cli/author.d.ts.map +1 -1
- package/dist/cli/author.js +15 -0
- package/dist/cli/author.js.map +1 -1
- package/dist/cli/context.d.ts +2 -1
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +2 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/effects.d.ts +2 -1
- package/dist/cli/effects.d.ts.map +1 -1
- package/dist/cli/effects.js +3 -2
- package/dist/cli/effects.js.map +1 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +0 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/attachments-command.d.ts.map +1 -1
- package/dist/cli/messenger/attachments-command.js +10 -3
- package/dist/cli/messenger/attachments-command.js.map +1 -1
- package/dist/cli/messenger/catch-up.d.ts +8 -2
- package/dist/cli/messenger/catch-up.d.ts.map +1 -1
- package/dist/cli/messenger/catch-up.js +11 -3
- package/dist/cli/messenger/catch-up.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +2 -0
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js +5 -1
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/conversations-command.d.ts.map +1 -1
- package/dist/cli/messenger/conversations-command.js +25 -1
- package/dist/cli/messenger/conversations-command.js.map +1 -1
- package/dist/cli/messenger/inbox.d.ts.map +1 -1
- package/dist/cli/messenger/inbox.js +11 -6
- package/dist/cli/messenger/inbox.js.map +1 -1
- package/dist/cli/messenger/mcp-command.js +1 -1
- package/dist/cli/messenger/mcp-command.js.map +1 -1
- package/dist/cli/messenger/mentions-command.d.ts.map +1 -1
- package/dist/cli/messenger/mentions-command.js +6 -7
- package/dist/cli/messenger/mentions-command.js.map +1 -1
- package/dist/cli/messenger/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +2 -2
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/messages-send-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-send-command.js +2 -2
- package/dist/cli/messenger/messages-send-command.js.map +1 -1
- package/dist/cli/messenger/private-people-command.d.ts.map +1 -1
- package/dist/cli/messenger/private-people-command.js +5 -4
- package/dist/cli/messenger/private-people-command.js.map +1 -1
- package/dist/cli/messenger/review.js +6 -6
- package/dist/cli/messenger/review.js.map +1 -1
- package/dist/cli/messenger/tasks-command.d.ts.map +1 -1
- package/dist/cli/messenger/tasks-command.js +11 -9
- package/dist/cli/messenger/tasks-command.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +3 -2
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/stdin-field.d.ts +11 -0
- package/dist/cli/stdin-field.d.ts.map +1 -0
- package/dist/cli/stdin-field.js +7 -0
- package/dist/cli/stdin-field.js.map +1 -0
- package/dist/domain/tag-consolidation.d.ts +78 -0
- package/dist/domain/tag-consolidation.d.ts.map +1 -0
- package/dist/domain/tag-consolidation.js +2 -0
- package/dist/domain/tag-consolidation.js.map +1 -0
- package/dist/errors/reasons.d.ts.map +1 -1
- package/dist/errors/reasons.js +7 -1
- package/dist/errors/reasons.js.map +1 -1
- package/dist/mcp/agent.d.ts +10 -1
- package/dist/mcp/agent.d.ts.map +1 -1
- package/dist/mcp/agent.js +65 -20
- package/dist/mcp/agent.js.map +1 -1
- package/dist/mcp/prompts.js +1 -1
- package/dist/mcp/prompts.js.map +1 -1
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +278 -32
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +2 -0
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +2 -0
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/surface.d.ts +5 -2
- package/dist/mcp/surface.d.ts.map +1 -1
- package/dist/mcp/surface.js +7 -4
- package/dist/mcp/surface.js.map +1 -1
- package/dist/mcp/tool.d.ts +3 -6
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js +3 -36
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/tools/attachments.d.ts.map +1 -1
- package/dist/mcp/tools/attachments.js +3 -138
- package/dist/mcp/tools/attachments.js.map +1 -1
- package/dist/mcp/tools.d.ts +4 -21
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +4 -97
- package/dist/mcp/tools.js.map +1 -1
- package/dist/meetings/mcp/index.d.ts +15 -15
- package/dist/meetings/mcp/index.d.ts.map +1 -1
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js +2 -1
- package/dist/sends/permissions.js.map +1 -1
- package/dist/store/drivers/node-sqlite.d.ts +2 -3
- package/dist/store/drivers/node-sqlite.d.ts.map +1 -1
- package/dist/store/drivers/node-sqlite.js +2 -3
- package/dist/store/drivers/node-sqlite.js.map +1 -1
- package/dist/store/index.d.ts +1 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/open.d.ts.map +1 -1
- package/dist/store/open.js +2 -0
- package/dist/store/open.js.map +1 -1
- package/dist/store/sqlite/open.d.ts.map +1 -1
- package/dist/store/sqlite/open.js +2 -0
- package/dist/store/sqlite/open.js.map +1 -1
- package/dist/store/sqlite/tag-consolidation.d.ts +5 -0
- package/dist/store/sqlite/tag-consolidation.d.ts.map +1 -0
- package/dist/store/sqlite/tag-consolidation.js +178 -0
- package/dist/store/sqlite/tag-consolidation.js.map +1 -0
- package/dist/store/sqlite/tags.js +1 -1
- package/dist/store/sqlite/tags.js.map +1 -1
- package/dist/store/sqlite/vocabulary.d.ts +2 -1
- package/dist/store/sqlite/vocabulary.d.ts.map +1 -1
- package/dist/store/sqlite/vocabulary.js +2 -0
- package/dist/store/sqlite/vocabulary.js.map +1 -1
- package/dist/store/sqlite-warning.d.ts +8 -0
- package/dist/store/sqlite-warning.d.ts.map +1 -0
- package/dist/store/sqlite-warning.js +26 -0
- package/dist/store/sqlite-warning.js.map +1 -0
- package/package.json +2 -2
- package/parity.json +12 -0
- package/dist/mcp/search-sync.d.ts +0 -12
- package/dist/mcp/search-sync.d.ts.map +0 -1
- package/dist/mcp/search-sync.js +0 -18
- package/dist/mcp/search-sync.js.map +0 -1
- package/dist/mcp/thread-options.d.ts +0 -19
- package/dist/mcp/thread-options.d.ts.map +0 -1
- package/dist/mcp/thread-options.js +0 -20
- package/dist/mcp/thread-options.js.map +0 -1
- package/dist/mcp/tools/account.d.ts +0 -4
- package/dist/mcp/tools/account.d.ts.map +0 -1
- package/dist/mcp/tools/account.js +0 -31
- package/dist/mcp/tools/account.js.map +0 -1
- package/dist/mcp/tools/admin-statistics.d.ts +0 -4
- package/dist/mcp/tools/admin-statistics.d.ts.map +0 -1
- package/dist/mcp/tools/admin-statistics.js +0 -163
- package/dist/mcp/tools/admin-statistics.js.map +0 -1
- package/dist/mcp/tools/admin.d.ts +0 -5
- package/dist/mcp/tools/admin.d.ts.map +0 -1
- package/dist/mcp/tools/admin.js +0 -262
- package/dist/mcp/tools/admin.js.map +0 -1
- package/dist/mcp/tools/chats-read.d.ts +0 -4
- package/dist/mcp/tools/chats-read.d.ts.map +0 -1
- package/dist/mcp/tools/chats-read.js +0 -28
- package/dist/mcp/tools/chats-read.js.map +0 -1
- package/dist/mcp/tools/chats-state.d.ts +0 -5
- package/dist/mcp/tools/chats-state.d.ts.map +0 -1
- package/dist/mcp/tools/chats-state.js +0 -58
- package/dist/mcp/tools/chats-state.js.map +0 -1
- package/dist/mcp/tools/chats.d.ts +0 -4
- package/dist/mcp/tools/chats.d.ts.map +0 -1
- package/dist/mcp/tools/chats.js +0 -194
- package/dist/mcp/tools/chats.js.map +0 -1
- package/dist/mcp/tools/contacts-write.d.ts +0 -5
- package/dist/mcp/tools/contacts-write.d.ts.map +0 -1
- package/dist/mcp/tools/contacts-write.js +0 -53
- package/dist/mcp/tools/contacts-write.js.map +0 -1
- package/dist/mcp/tools/contacts.d.ts +0 -4
- package/dist/mcp/tools/contacts.d.ts.map +0 -1
- package/dist/mcp/tools/contacts.js +0 -196
- package/dist/mcp/tools/contacts.js.map +0 -1
- package/dist/mcp/tools/conversations.d.ts +0 -5
- package/dist/mcp/tools/conversations.d.ts.map +0 -1
- package/dist/mcp/tools/conversations.js +0 -265
- package/dist/mcp/tools/conversations.js.map +0 -1
- package/dist/mcp/tools/folders.d.ts +0 -5
- package/dist/mcp/tools/folders.d.ts.map +0 -1
- package/dist/mcp/tools/folders.js +0 -103
- package/dist/mcp/tools/folders.js.map +0 -1
- package/dist/mcp/tools/inbox.d.ts +0 -6
- package/dist/mcp/tools/inbox.d.ts.map +0 -1
- package/dist/mcp/tools/inbox.js +0 -65
- package/dist/mcp/tools/inbox.js.map +0 -1
- package/dist/mcp/tools/messages-actions.d.ts +0 -5
- package/dist/mcp/tools/messages-actions.d.ts.map +0 -1
- package/dist/mcp/tools/messages-actions.js +0 -129
- package/dist/mcp/tools/messages-actions.js.map +0 -1
- package/dist/mcp/tools/messages-delete.d.ts +0 -4
- package/dist/mcp/tools/messages-delete.d.ts.map +0 -1
- package/dist/mcp/tools/messages-delete.js +0 -39
- package/dist/mcp/tools/messages-delete.js.map +0 -1
- package/dist/mcp/tools/messages-send.d.ts +0 -8
- package/dist/mcp/tools/messages-send.d.ts.map +0 -1
- package/dist/mcp/tools/messages-send.js +0 -107
- package/dist/mcp/tools/messages-send.js.map +0 -1
- package/dist/mcp/tools/messages-transcribe.d.ts +0 -4
- package/dist/mcp/tools/messages-transcribe.d.ts.map +0 -1
- package/dist/mcp/tools/messages-transcribe.js +0 -32
- package/dist/mcp/tools/messages-transcribe.js.map +0 -1
- package/dist/mcp/tools/messages.d.ts +0 -4
- package/dist/mcp/tools/messages.d.ts.map +0 -1
- package/dist/mcp/tools/messages.js +0 -207
- package/dist/mcp/tools/messages.js.map +0 -1
- package/dist/mcp/tools/moderation.d.ts +0 -8
- package/dist/mcp/tools/moderation.d.ts.map +0 -1
- package/dist/mcp/tools/moderation.js +0 -36
- package/dist/mcp/tools/moderation.js.map +0 -1
- package/dist/mcp/tools/polls.d.ts +0 -6
- package/dist/mcp/tools/polls.d.ts.map +0 -1
- package/dist/mcp/tools/polls.js +0 -140
- package/dist/mcp/tools/polls.js.map +0 -1
- package/dist/mcp/tools/private-people.d.ts +0 -4
- package/dist/mcp/tools/private-people.d.ts.map +0 -1
- package/dist/mcp/tools/private-people.js +0 -121
- package/dist/mcp/tools/private-people.js.map +0 -1
- package/dist/mcp/tools/rankings.d.ts +0 -4
- package/dist/mcp/tools/rankings.d.ts.map +0 -1
- package/dist/mcp/tools/rankings.js +0 -112
- package/dist/mcp/tools/rankings.js.map +0 -1
- package/dist/mcp/tools/reactions.d.ts +0 -5
- package/dist/mcp/tools/reactions.d.ts.map +0 -1
- package/dist/mcp/tools/reactions.js +0 -33
- package/dist/mcp/tools/reactions.js.map +0 -1
- package/dist/mcp/tools/review.d.ts +0 -4
- package/dist/mcp/tools/review.d.ts.map +0 -1
- package/dist/mcp/tools/review.js +0 -68
- package/dist/mcp/tools/review.js.map +0 -1
- package/dist/mcp/tools/runs.d.ts +0 -4
- package/dist/mcp/tools/runs.d.ts.map +0 -1
- package/dist/mcp/tools/runs.js +0 -28
- package/dist/mcp/tools/runs.js.map +0 -1
- package/dist/mcp/tools/search-tools.d.ts +0 -5
- package/dist/mcp/tools/search-tools.d.ts.map +0 -1
- package/dist/mcp/tools/search-tools.js +0 -132
- package/dist/mcp/tools/search-tools.js.map +0 -1
- package/dist/mcp/tools/search.d.ts +0 -154
- package/dist/mcp/tools/search.d.ts.map +0 -1
- package/dist/mcp/tools/search.js +0 -163
- package/dist/mcp/tools/search.js.map +0 -1
- package/dist/mcp/tools/searches.d.ts +0 -4
- package/dist/mcp/tools/searches.d.ts.map +0 -1
- package/dist/mcp/tools/searches.js +0 -108
- package/dist/mcp/tools/searches.js.map +0 -1
- package/dist/mcp/tools/store.d.ts +0 -4
- package/dist/mcp/tools/store.d.ts.map +0 -1
- package/dist/mcp/tools/store.js +0 -163
- package/dist/mcp/tools/store.js.map +0 -1
- package/dist/mcp/tools/tags.d.ts +0 -4
- package/dist/mcp/tools/tags.d.ts.map +0 -1
- package/dist/mcp/tools/tags.js +0 -64
- package/dist/mcp/tools/tags.js.map +0 -1
- package/dist/mcp/tools/tasks.d.ts +0 -4
- package/dist/mcp/tools/tasks.d.ts.map +0 -1
- package/dist/mcp/tools/tasks.js +0 -369
- package/dist/mcp/tools/tasks.js.map +0 -1
- package/dist/mcp/tools/topics.d.ts +0 -5
- package/dist/mcp/tools/topics.d.ts.map +0 -1
- package/dist/mcp/tools/topics.js +0 -134
- package/dist/mcp/tools/topics.js.map +0 -1
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
import { itemOf, snakeKeys } from "../../cli/envelope.js";
|
|
3
|
-
import { selfOf } from "../../cli/messenger/message-items.js";
|
|
4
|
-
import { writtenAnswer } from "../../cli/messenger/message-writes.js";
|
|
5
|
-
import { pinDurationOf, pinLengthHelp } from "../../domain/pin-duration.js";
|
|
6
|
-
import { onlineDeps, servicesFor } from "../../services/index.js";
|
|
7
|
-
import { chatOf, message, tool, WRITE } from "../tool.js";
|
|
8
|
-
import { HTML_TOOL_HELP } from "./messages-send.js";
|
|
9
|
-
/** What changes a message others already have, offered by the profile's permissions, each behind its own `allow` permission. */
|
|
10
|
-
export const messageActionTools = (messenger) => {
|
|
11
|
-
const chat = chatOf(messenger);
|
|
12
|
-
const messages = (adapter, guard) => servicesFor({ ...onlineDeps(messenger, adapter, guard) }).messages;
|
|
13
|
-
const forwardInput = {
|
|
14
|
-
chat: v.pipe(v.string(), v.minLength(1), v.description("the chat the message is in")),
|
|
15
|
-
message,
|
|
16
|
-
to: v.pipe(v.string(), v.minLength(1), v.description(`where it goes: ${messenger.chatArgument}`)),
|
|
17
|
-
silent: v.optional(v.pipe(v.boolean(), v.description("deliver without a notification"))),
|
|
18
|
-
send_as: v.optional(v.pipe(v.string(), v.minLength(1), v.description("an id from `chats send-as` to post as; required where the chat posts as someone else by default"))),
|
|
19
|
-
operation_id: v.optional(v.pipe(v.string(), v.minLength(1), v.description("from an earlier outcome_unknown"))),
|
|
20
|
-
topic: v.optional(v.pipe(v.string(), v.minLength(1), v.description("a forum topic id of the to chat, from `topics list`"))),
|
|
21
|
-
};
|
|
22
|
-
const quietPins = messenger.quietPins !== false;
|
|
23
|
-
const durations = messenger.pinDurations?.length ? messenger.pinDurations : undefined;
|
|
24
|
-
const pinInput = {
|
|
25
|
-
chat,
|
|
26
|
-
message,
|
|
27
|
-
notify: v.optional(v.pipe(v.boolean(), v.description("tell the chat's members"))),
|
|
28
|
-
expire_time: v.optional(v.pipe(v.string(), v.minLength(1), v.description(pinLengthHelp(durations ?? [], messenger.pinDefaultDuration)))),
|
|
29
|
-
};
|
|
30
|
-
// Refused rather than dropped: a quiet pin asked for here would otherwise go out loud.
|
|
31
|
-
if (!quietPins)
|
|
32
|
-
delete pinInput.notify;
|
|
33
|
-
if (!durations)
|
|
34
|
-
delete pinInput.expire_time;
|
|
35
|
-
if (!messenger.forwardTopic)
|
|
36
|
-
delete forwardInput.topic;
|
|
37
|
-
if (messenger.silentSends === false)
|
|
38
|
-
delete forwardInput.silent;
|
|
39
|
-
if (messenger.sendAs === false)
|
|
40
|
-
delete forwardInput.send_as;
|
|
41
|
-
return {
|
|
42
|
-
messages_edit: tool({
|
|
43
|
-
title: "Edit a message",
|
|
44
|
-
description: "Replace the text of one of the owner's own messages. Only when the owner asked for this exact change. " +
|
|
45
|
-
"The other side may have read the old text already. Repeating the same edit changes nothing.",
|
|
46
|
-
input: v.object({
|
|
47
|
-
chat,
|
|
48
|
-
message,
|
|
49
|
-
text: v.pipe(v.string(), v.minLength(1)),
|
|
50
|
-
md: v.optional(v.pipe(v.boolean(), v.description("read **bold**, _italic_, ~~struck~~ and `code`; \\ keeps a mark literal"))),
|
|
51
|
-
html: v.optional(v.pipe(v.boolean(), v.description(HTML_TOOL_HELP))),
|
|
52
|
-
}),
|
|
53
|
-
annotations: WRITE,
|
|
54
|
-
permission: "edit",
|
|
55
|
-
online: async (adapter, args, { guard }) => {
|
|
56
|
-
const reader = selfOf(messenger, adapter);
|
|
57
|
-
return writtenAnswer(await messages(adapter, guard).edit({
|
|
58
|
-
chat: args.chat,
|
|
59
|
-
message: args.message,
|
|
60
|
-
text: args.text,
|
|
61
|
-
markdown: args.md === true,
|
|
62
|
-
...(args.html === true ? { html: true } : {}),
|
|
63
|
-
}), reader);
|
|
64
|
-
},
|
|
65
|
-
}),
|
|
66
|
-
messages_forward: tool({
|
|
67
|
-
title: "Forward a message",
|
|
68
|
-
description: "Forward one message to another chat, where new people will read it. Only when the owner asked for this " +
|
|
69
|
-
"message to go to this chat. On outcome_unknown, retry with the operation_id it returns, never a new one: " +
|
|
70
|
-
"a repeat without it is a second copy.",
|
|
71
|
-
input: v.object(forwardInput),
|
|
72
|
-
annotations: WRITE,
|
|
73
|
-
permission: "forward",
|
|
74
|
-
online: async (adapter, args, { guard }) => {
|
|
75
|
-
const reader = selfOf(messenger, adapter);
|
|
76
|
-
return writtenAnswer(await messages(adapter, guard).forward({
|
|
77
|
-
chat: args.chat,
|
|
78
|
-
message: args.message,
|
|
79
|
-
to: args.to,
|
|
80
|
-
silent: args.silent === true,
|
|
81
|
-
...(args.operation_id === undefined ? {} : { sendId: args.operation_id }),
|
|
82
|
-
...(args.send_as === undefined ? {} : { sendAs: args.send_as }),
|
|
83
|
-
...(args.topic === undefined ? {} : { threadId: args.topic }),
|
|
84
|
-
}), reader);
|
|
85
|
-
},
|
|
86
|
-
}),
|
|
87
|
-
messages_pin: tool({
|
|
88
|
-
title: "Pin a message",
|
|
89
|
-
description: quietPins
|
|
90
|
-
? "Pin one message in a chat, quietly unless notify is true. Only when the owner asked for this pin. " +
|
|
91
|
-
"In a one-to-one chat the pin is on the owner's side only."
|
|
92
|
-
: "Pin one message in a chat; every member sees the pin and is told. Only when the owner asked for this pin.",
|
|
93
|
-
input: v.object(pinInput),
|
|
94
|
-
annotations: WRITE,
|
|
95
|
-
permission: "pin",
|
|
96
|
-
check: (args) => pinDurationOf(args.expire_time, durations, "expire_time"),
|
|
97
|
-
online: async (adapter, args, { guard }) => {
|
|
98
|
-
const duration = pinDurationOf(args.expire_time, durations, "expire_time");
|
|
99
|
-
return itemOf(snakeKeys(await messages(adapter, guard).pin({
|
|
100
|
-
chat: args.chat,
|
|
101
|
-
message: args.message,
|
|
102
|
-
notify: args.notify === true,
|
|
103
|
-
...(duration === undefined ? {} : { duration }),
|
|
104
|
-
})));
|
|
105
|
-
},
|
|
106
|
-
}),
|
|
107
|
-
messages_unpin: tool({
|
|
108
|
-
title: "Unpin a message",
|
|
109
|
-
description: "Unpin one message in a chat. Only when the owner asked for it.",
|
|
110
|
-
input: v.object({ chat, message }),
|
|
111
|
-
annotations: WRITE,
|
|
112
|
-
permission: "pin",
|
|
113
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await messages(adapter, guard).unpin({ chat: args.chat, message: args.message }))),
|
|
114
|
-
}),
|
|
115
|
-
...Object.fromEntries((messenger.messageStars === true ? [true, false] : []).map((starred) => [
|
|
116
|
-
starred ? "messages_star" : "messages_unstar",
|
|
117
|
-
tool({
|
|
118
|
-
title: starred ? "Star a message" : "Take the star off a message",
|
|
119
|
-
description: (starred ? "Star one message so the owner finds it again. " : "Take the owner's star off one message. ") +
|
|
120
|
-
"Only the owner sees a star; nobody in the chat is told. Only when the owner asked for it.",
|
|
121
|
-
input: v.object({ chat, message }),
|
|
122
|
-
annotations: WRITE,
|
|
123
|
-
permission: "profile",
|
|
124
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await messages(adapter, guard).star({ chat: args.chat, message: args.message, starred }))),
|
|
125
|
-
}),
|
|
126
|
-
])),
|
|
127
|
-
};
|
|
128
|
-
};
|
|
129
|
-
//# sourceMappingURL=messages-actions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages-actions.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages-delete.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages-delete.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,EAAE,KAAK,OAAO,EAAgC,MAAM,YAAY,CAAA;AAEvE,eAAO,MAAM,kBAAkB,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA2C/E,CAAA"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { CliError } from "@wirecat/cli-base";
|
|
2
|
-
import * as v from "valibot";
|
|
3
|
-
import { itemOf, snakeKeys } from "../../cli/envelope.js";
|
|
4
|
-
import { DELETE_AT_ONCE, onlineDeps, servicesFor } from "../../services/index.js";
|
|
5
|
-
import { chatOf, message, tool, WRITE } from "../tool.js";
|
|
6
|
-
export const messageDeleteTools = (messenger) => {
|
|
7
|
-
const ownerOnly = `\`${messenger.app.command} messages delete --for-everyone\``;
|
|
8
|
-
const definition = {
|
|
9
|
-
title: "Delete messages",
|
|
10
|
-
description: `Delete up to ${DELETE_AT_ONCE} messages from the owner's view of a chat; the other people still see them. ` +
|
|
11
|
-
`Never for everyone: that is the owner's own ${ownerOnly}. ` +
|
|
12
|
-
"Cannot be undone. Only when the owner asked for these exact messages to be deleted.",
|
|
13
|
-
input: v.object({
|
|
14
|
-
chat: chatOf(messenger),
|
|
15
|
-
messages: v.pipe(v.array(message), v.minLength(1), v.maxLength(DELETE_AT_ONCE)),
|
|
16
|
-
}),
|
|
17
|
-
annotations: WRITE,
|
|
18
|
-
permission: "delete",
|
|
19
|
-
};
|
|
20
|
-
return {
|
|
21
|
-
messages_delete: messenger.deleteForMe === false
|
|
22
|
-
? tool({
|
|
23
|
-
...definition,
|
|
24
|
-
local: async () => {
|
|
25
|
-
throw new CliError("permission_error", `${messenger.name ?? messenger.provider} deletes only for everyone, and an agent never deletes for ` +
|
|
26
|
-
`everyone — the owner can run ${ownerOnly}`, { permission: "messages.delete" });
|
|
27
|
-
},
|
|
28
|
-
})
|
|
29
|
-
: tool({
|
|
30
|
-
...definition,
|
|
31
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await servicesFor(onlineDeps(messenger, adapter, guard)).messages.delete({
|
|
32
|
-
chat: args.chat,
|
|
33
|
-
messages: args.messages,
|
|
34
|
-
forEveryone: false,
|
|
35
|
-
}))),
|
|
36
|
-
}),
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=messages-delete.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages-delete.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EAAgB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAA2B,EAAE;IAClF,MAAM,SAAS,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,OAAO,mCAAmC,CAAA;IAC/E,MAAM,UAAU,GAAG;QACjB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,gBAAgB,cAAc,8EAA8E;YAC5G,+CAA+C,SAAS,IAAI;YAC5D,qFAAqF;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;YACvB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;SAChF,CAAC;QACF,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,QAAiB;KAC9B,CAAA;IACD,OAAO;QACL,eAAe,EACb,SAAS,CAAC,WAAW,KAAK,KAAK;YAC7B,CAAC,CAAC,IAAI,CAAC;gBACH,GAAG,UAAU;gBACb,KAAK,EAAE,KAAK,IAAI,EAAE;oBAChB,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,6DAA6D;wBAClG,gCAAgC,SAAS,EAAE,EAC7C,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAClC,CAAA;gBACH,CAAC;aACF,CAAC;YACJ,CAAC,CAAC,IAAI,CAAC;gBACH,GAAG,UAAU;gBACb,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CACzC,MAAM,CACJ,SAAS,CACP,MAAM,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACvE,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW,EAAE,KAAK;iBACnB,CAAC,CACH,CACF;aACJ,CAAC;KACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Messenger } from "../../cli/messenger/context.js";
|
|
2
|
-
import { type AnyTool } from "../tool.js";
|
|
3
|
-
export declare const HTML_TOOL_HELP = "the text is HTML: <b>, <i>, <u>, <s>, <a href>, <code>, <pre>; not with md";
|
|
4
|
-
/**
|
|
5
|
-
* The same guard as the command: profile permissions, recipients, hourly limits and the journal.
|
|
6
|
-
*/
|
|
7
|
-
export declare const messageSendTools: (messenger: Messenger) => Record<string, AnyTool>;
|
|
8
|
-
//# sourceMappingURL=messages-send.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AAM/D,OAAO,EAAE,KAAK,OAAO,EAAwC,MAAM,YAAY,CAAA;AAE/E,eAAO,MAAM,cAAc,+EAA+E,CAAA;AAE1G;;GAEG;AACH,eAAO,MAAM,gBAAgB,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAyH7E,CAAA"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { CliError } from "@wirecat/cli-base";
|
|
2
|
-
import * as v from "valibot";
|
|
3
|
-
import { selfOf } from "../../cli/messenger/message-items.js";
|
|
4
|
-
import { writtenAnswer } from "../../cli/messenger/message-writes.js";
|
|
5
|
-
import { sendTime } from "../../domain/send-time.js";
|
|
6
|
-
import { readAttachments, readStickerFile } from "../../sends/upload.js";
|
|
7
|
-
import { onlineDeps, servicesFor } from "../../services/index.js";
|
|
8
|
-
import { chatOf, message, nameOf, tool, WRITE } from "../tool.js";
|
|
9
|
-
export const HTML_TOOL_HELP = "the text is HTML: <b>, <i>, <u>, <s>, <a href>, <code>, <pre>; not with md";
|
|
10
|
-
/**
|
|
11
|
-
* The same guard as the command: profile permissions, recipients, hourly limits and the journal.
|
|
12
|
-
*/
|
|
13
|
-
export const messageSendTools = (messenger) => {
|
|
14
|
-
const chat = chatOf(messenger);
|
|
15
|
-
const name = nameOf(messenger);
|
|
16
|
-
const sendInput = {
|
|
17
|
-
chat,
|
|
18
|
-
text: v.optional(v.pipe(v.string(), v.description("the message, or the caption of a file or photo"))),
|
|
19
|
-
file: v.optional(v.pipe(v.string(), v.minLength(1), v.description("a path on the owner's machine to attach as a file"))),
|
|
20
|
-
photo: v.optional(v.pipe(v.string(), v.minLength(1), v.description("a .jpg, .png or .webp to attach as a photo"))),
|
|
21
|
-
as_file: v.optional(v.pipe(v.boolean(), v.description("send the file as a file to download, a video included"))),
|
|
22
|
-
filename: v.optional(v.pipe(v.string(), v.minLength(1), v.description("the name others see for the file, instead of its own"))),
|
|
23
|
-
spoiler: v.optional(v.pipe(v.boolean(), v.description("hide the photo or video behind a spoiler"))),
|
|
24
|
-
caption_above: v.optional(v.pipe(v.boolean(), v.description("show the text above the photo or file"))),
|
|
25
|
-
voice: v.optional(v.pipe(v.string(), v.minLength(1), v.description("an Ogg Opus file to send as a voice message, alone"))),
|
|
26
|
-
sticker_file: v.optional(v.pipe(v.string(), v.minLength(1), v.description("a .webp file to send as a sticker, alone, with no text"))),
|
|
27
|
-
reply_to: v.optional(v.pipe(message, v.description("the message this answers, in the same chat"))),
|
|
28
|
-
comment_to: v.optional(v.pipe(message, v.description("a post of this channel to comment on; the comment goes to its discussion"))),
|
|
29
|
-
topic: v.optional(v.pipe(v.string(), v.minLength(1), v.description("the forum topic id; unsupported without topics"))),
|
|
30
|
-
send_as: v.optional(v.pipe(v.string(), v.minLength(1), v.description("an id from `chats send-as` to post as; required where the chat posts as someone else by default"))),
|
|
31
|
-
operation_id: v.optional(v.pipe(v.string(), v.minLength(1), v.description("from an earlier outcome_unknown"))),
|
|
32
|
-
silent: v.optional(v.pipe(v.boolean(), v.description("deliver without a notification"))),
|
|
33
|
-
no_preview: v.optional(v.pipe(v.boolean(), v.description("no preview card for a link in the text"))),
|
|
34
|
-
md: v.optional(v.pipe(v.boolean(), v.description("read **bold**, _italic_, ~~struck~~ and `code`; \\ keeps a mark literal"))),
|
|
35
|
-
html: v.optional(v.pipe(v.boolean(), v.description(HTML_TOOL_HELP))),
|
|
36
|
-
at_time: 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"))),
|
|
37
|
-
};
|
|
38
|
-
if (messenger.sendAs === false)
|
|
39
|
-
delete sendInput.send_as;
|
|
40
|
-
if (messenger.silentSends === false)
|
|
41
|
-
delete sendInput.silent;
|
|
42
|
-
if (messenger.scheduledSends === false)
|
|
43
|
-
delete sendInput.at_time;
|
|
44
|
-
if (messenger.stickerFileBytes === undefined)
|
|
45
|
-
delete sendInput.sticker_file;
|
|
46
|
-
return {
|
|
47
|
-
messages_send: tool({
|
|
48
|
-
title: "Send a message",
|
|
49
|
-
description: "Send one message as the owner — text, or a file or photo from the owner's machine with the text as its " +
|
|
50
|
-
`caption${messenger.stickerFileBytes === undefined ? "" : ", or a .webp sticker alone"}. ` +
|
|
51
|
-
"Only when the owner asked for this exact message to this exact chat. Known credential files " +
|
|
52
|
-
"(~/.ssh, ~/.netrc, cloud and git tokens, keyrings, browser profiles), the WireCat apps' own folders and " +
|
|
53
|
-
"the message store are refused, with no way around it here; other files, hidden ones included, are sent. " +
|
|
54
|
-
"A name that matches several chats is refused with the candidates — pick an id, never guess. " +
|
|
55
|
-
`On outcome_unknown, retry with the operation_id it returns and ${name} drops the duplicate; never with a new one. ` +
|
|
56
|
-
(messenger.scheduledSends === false
|
|
57
|
-
? ""
|
|
58
|
-
: `With \`at_time\`, ${name} sends it later and the answer carries scheduled_for; never retry a scheduled ` +
|
|
59
|
-
"send — read `messages scheduled` instead."),
|
|
60
|
-
input: v.object(sendInput),
|
|
61
|
-
annotations: WRITE,
|
|
62
|
-
permission: "send",
|
|
63
|
-
online: async (adapter, args, { guard, env }) => {
|
|
64
|
-
const at = args.at_time === undefined ? undefined : sendTime(args.at_time);
|
|
65
|
-
// Never anyFile here: a path an agent was talked into is how a key would leave the machine.
|
|
66
|
-
const read = { app: messenger.app, env };
|
|
67
|
-
if (args.filename !== undefined && !messenger.mediaOptions?.includes("fileName"))
|
|
68
|
-
throw new CliError("validation_error", "this messenger has no --filename");
|
|
69
|
-
const attachments = await readAttachments({
|
|
70
|
-
...(args.photo === undefined ? {} : { photo: args.photo }),
|
|
71
|
-
...(args.file === undefined ? {} : { file: args.file }),
|
|
72
|
-
...(args.voice === undefined ? {} : { voice: args.voice }),
|
|
73
|
-
...(args.text === undefined ? {} : { text: args.text }),
|
|
74
|
-
asFile: args.as_file === true,
|
|
75
|
-
...(args.filename === undefined ? {} : { filename: args.filename }),
|
|
76
|
-
}, read);
|
|
77
|
-
const stickerFile = args.sticker_file === undefined || messenger.stickerFileBytes === undefined
|
|
78
|
-
? undefined
|
|
79
|
-
: await readStickerFile(args.sticker_file, messenger.stickerFileBytes, read);
|
|
80
|
-
if ((args.text ?? "").trim() === "" && attachments.length === 0 && stickerFile === undefined) {
|
|
81
|
-
throw new CliError("validation_error", "nothing to send — give text, a file or a photo");
|
|
82
|
-
}
|
|
83
|
-
const reader = selfOf(messenger, adapter);
|
|
84
|
-
const sent = await servicesFor({ ...onlineDeps(messenger, adapter, guard) }).messages.send({
|
|
85
|
-
chat: args.chat,
|
|
86
|
-
text: args.text ?? "",
|
|
87
|
-
...(attachments.length === 0 ? {} : { attachments }),
|
|
88
|
-
...(stickerFile === undefined ? {} : { stickerFile }),
|
|
89
|
-
...(args.spoiler === true ? { spoiler: true } : {}),
|
|
90
|
-
...(args.caption_above === true ? { captionAbove: true } : {}),
|
|
91
|
-
...(args.operation_id === undefined ? {} : { sendId: args.operation_id }),
|
|
92
|
-
...(args.topic === undefined ? {} : { threadId: args.topic }),
|
|
93
|
-
...(args.send_as === undefined ? {} : { sendAs: args.send_as }),
|
|
94
|
-
...(args.reply_to === undefined ? {} : { replyTo: args.reply_to }),
|
|
95
|
-
...(args.comment_to === undefined ? {} : { commentTo: args.comment_to }),
|
|
96
|
-
...(args.silent === true ? { silent: true } : {}),
|
|
97
|
-
...(args.no_preview === true ? { noPreview: true } : {}),
|
|
98
|
-
...(args.md === true ? { markdown: true } : {}),
|
|
99
|
-
...(args.html === true ? { html: true } : {}),
|
|
100
|
-
...(at === undefined ? {} : { at }),
|
|
101
|
-
});
|
|
102
|
-
return writtenAnswer({ ...sent, ...(at === undefined ? {} : { scheduledFor: at }) }, reader);
|
|
103
|
-
},
|
|
104
|
-
}),
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
//# sourceMappingURL=messages-send.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages-send.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-send.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages-transcribe.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages-transcribe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,EAAE,KAAK,OAAO,EAAuC,MAAM,YAAY,CAAA;AAE9E,eAAO,MAAM,uBAAuB,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CA+BnF,CAAA"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
import { heardAnswer } from "../../cli/messenger/message-answers.js";
|
|
3
|
-
import { choose, hearLocally, hearOnline } from "../../speech/transcribe.js";
|
|
4
|
-
import { chatOf, message, nameOf, READ, tool } from "../tool.js";
|
|
5
|
-
export const messagesTranscribeTools = (messenger) => ({
|
|
6
|
-
messages_transcribe: tool({
|
|
7
|
-
title: "Read a voice message",
|
|
8
|
-
description: `A voice message as text — by ${nameOf(messenger)} where the account allows it, else by a speech model ` +
|
|
9
|
-
"on this machine. Can take up to a minute; pending: true means it was not finished yet — ask again later. " +
|
|
10
|
-
"Never downloads a model: a missing one is refused with the command the owner runs. " +
|
|
11
|
-
"Answers item { message_id, text, pending, via, model? }.",
|
|
12
|
-
input: v.object({
|
|
13
|
-
chat: chatOf(messenger),
|
|
14
|
-
message,
|
|
15
|
-
local: v.optional(v.pipe(v.boolean(), v.description("use the model on this machine, never the messenger"))),
|
|
16
|
-
model: v.optional(v.pipe(v.string(), v.minLength(1), v.description("which downloaded speech model hears it"))),
|
|
17
|
-
}),
|
|
18
|
-
annotations: READ,
|
|
19
|
-
online: async (adapter, args, defaults) => {
|
|
20
|
-
const choice = choose(messenger, defaults.settings, {
|
|
21
|
-
local: args.local === true,
|
|
22
|
-
...(args.model === undefined ? {} : { model: args.model }),
|
|
23
|
-
}, defaults.env);
|
|
24
|
-
const heard = await hearOnline(messenger, adapter, args.chat, args.message, choice);
|
|
25
|
-
if (!(heard instanceof Uint8Array))
|
|
26
|
-
return heardAnswer(heard, args.chat);
|
|
27
|
-
await defaults.release?.();
|
|
28
|
-
return heardAnswer(await hearLocally(heard, args.message, choice), args.chat);
|
|
29
|
-
},
|
|
30
|
-
}),
|
|
31
|
-
});
|
|
32
|
-
//# sourceMappingURL=messages-transcribe.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages-transcribe.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages-transcribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5E,OAAO,EAAgB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,CAAC;IACzF,mBAAmB,EAAE,IAAI,CAAC;QACxB,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,gCAAgC,MAAM,CAAC,SAAS,CAAC,uDAAuD;YACxG,2GAA2G;YAC3G,qFAAqF;YACrF,0DAA0D;QAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;YACvB,OAAO;YACP,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAC3G,KAAK,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,wCAAwC,CAAC,CAAC,CAAC;SAC/G,CAAC;QACF,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,CACnB,SAAS,EACT,QAAQ,CAAC,QAAQ,EACjB;gBACE,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;gBAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;aAC3D,EACD,QAAQ,CAAC,GAAG,CACb,CAAA;YACD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YACnF,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;gBAAE,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YACxE,MAAM,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAA;YAC1B,OAAO,WAAW,CAAC,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/E,CAAC;KACF,CAAC;CACH,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAW/D,OAAO,EAAE,KAAK,OAAO,EAA8C,MAAM,YAAY,CAAA;AAcrF,eAAO,MAAM,aAAa,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAI1E,CAAA"}
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { CliError } from "@wirecat/cli-base";
|
|
2
|
-
import * as v from "valibot";
|
|
3
|
-
import { itemOf, listOf } from "../../cli/envelope.js";
|
|
4
|
-
import { COMMENTS_QUERY, cursorOf, historyQuery, historyWindow } from "../../cli/messenger/history-query.js";
|
|
5
|
-
import { evidenceAnswer, threadAnswer } from "../../cli/messenger/message-answers.js";
|
|
6
|
-
import { messageItems, selfOf } from "../../cli/messenger/message-items.js";
|
|
7
|
-
import { isLocator, parseLocator } from "../../domain/locator.js";
|
|
8
|
-
import { capability } from "../../ports/messenger.js";
|
|
9
|
-
import { readEvidencePacket, readMail } from "../../services/index.js";
|
|
10
|
-
import { heard, hearForTool, hearingMissing, modelWith } from "../../speech/hearing.js";
|
|
11
|
-
import { searchServices } from "../search-sync.js";
|
|
12
|
-
import { threadArgs, threadInputs } from "../thread-options.js";
|
|
13
|
-
import { chatOf, limit, message, nameOf, READ, tool } from "../tool.js";
|
|
14
|
-
import { answerMessagesStats, messagesStatsDescription, messagesStatsInput } from "./search.js";
|
|
15
|
-
const windowOf = (found, reader, window) => listOf("messages context", {
|
|
16
|
-
items: messageItems(found, reader),
|
|
17
|
-
limit: window.before + window.after + 1,
|
|
18
|
-
has_more: false,
|
|
19
|
-
});
|
|
20
|
-
/** Mail lives in the store's mail tables, whichever messenger serves the tool. */
|
|
21
|
-
const isMail = (chat, message) => message === undefined && isLocator(chat) && parseLocator(chat).provider === "email";
|
|
22
|
-
export const messagesTools = (messenger) => {
|
|
23
|
-
const tools = messageTools(messenger);
|
|
24
|
-
if (messenger.scheduledSends === false)
|
|
25
|
-
delete tools.messages_scheduled;
|
|
26
|
-
return tools;
|
|
27
|
-
};
|
|
28
|
-
const messageTools = (messenger) => {
|
|
29
|
-
const chat = chatOf(messenger);
|
|
30
|
-
const name = nameOf(messenger);
|
|
31
|
-
const topics = messenger.topics !== false;
|
|
32
|
-
return {
|
|
33
|
-
messages_evidence: tool({
|
|
34
|
-
title: "Prepare stored chat evidence",
|
|
35
|
-
description: "A chat evidence packet from the current profile's local archive, newest first. Never connects or marks " +
|
|
36
|
-
"read. Whole messages fill at most 64 KiB of JSON items; the packet envelope is additional. Returns " +
|
|
37
|
-
"the packet as item: source locators, fingerprints and coverage (history unknown). When older messages " +
|
|
38
|
-
"exist, next has page.next: pass its cursor. An oversized first message returns an empty, byte-truncated " +
|
|
39
|
-
"packet with no next step; handle that obstruction explicitly. Prepares evidence, not a generated summary.",
|
|
40
|
-
input: v.object({
|
|
41
|
-
chat,
|
|
42
|
-
limit,
|
|
43
|
-
cursor: v.optional(v.pipe(v.string(), v.minLength(1), v.description("page.next's cursor"))),
|
|
44
|
-
}),
|
|
45
|
-
annotations: { ...READ, openWorldHint: false },
|
|
46
|
-
stored: async (store, account, args, defaults) => {
|
|
47
|
-
const limit = args.limit ?? defaults.limit;
|
|
48
|
-
const packet = await readEvidencePacket(store, account, { chat: args.chat, limit, ...(args.cursor === undefined ? {} : { before: args.cursor }) }, messenger);
|
|
49
|
-
return evidenceAnswer(packet, args.chat, limit);
|
|
50
|
-
},
|
|
51
|
-
}),
|
|
52
|
-
messages_list: tool({
|
|
53
|
-
title: "Read a chat",
|
|
54
|
-
description: "Recent messages in a chat, oldest first. Does not mark anything read. `query` says where to start" +
|
|
55
|
-
(topics ? " and which topic" : "") +
|
|
56
|
-
", all terms together: id<42 or date<2h reads back, id>42 or date>2026-10-01 forward" +
|
|
57
|
-
(topics ? ", topic:12 one forum topic" : "") +
|
|
58
|
-
(messenger.messageStars === true ? ", starred:true only the ones the owner starred" : "") +
|
|
59
|
-
". When more exist, next has page.next: pass its cursor. A voice message carries " +
|
|
60
|
-
"`transcript` once heard; `transcribe` hears the rest.",
|
|
61
|
-
input: v.object({
|
|
62
|
-
chat,
|
|
63
|
-
query: v.optional(v.pipe(v.string(), v.description(topics ? "id<42, date>2026-10-01, topic:12" : "id<42, date>2026-10-01"))),
|
|
64
|
-
cursor: v.optional(v.pipe(v.string(), v.minLength(1), v.description("page.next's cursor"))),
|
|
65
|
-
limit,
|
|
66
|
-
transcribe: v.optional(v.pipe(v.boolean(), v.description("turn voice messages not heard yet into text; can take minutes"))),
|
|
67
|
-
model: v.optional(v.pipe(v.string(), v.minLength(1), v.description("which downloaded speech model hears them, with transcribe"))),
|
|
68
|
-
}),
|
|
69
|
-
annotations: READ,
|
|
70
|
-
output: { entity: "message", list: true },
|
|
71
|
-
served: async (services, args, defaults, connect) => {
|
|
72
|
-
const size = args.limit ?? defaults.limit;
|
|
73
|
-
const window = historyWindow(args.query, args.cursor, "messages list", historyQuery(messenger));
|
|
74
|
-
const found = await services.messages.list(args.chat, { limit: size, ...window });
|
|
75
|
-
const hearing = await hearForTool(messenger, connect, found.items, args.transcribe === true, defaults, modelWith(args.transcribe, args.model));
|
|
76
|
-
const cursor = found.hasMore
|
|
77
|
-
? cursorOf(window, { first: found.items[0]?.id, last: found.items.at(-1)?.id })
|
|
78
|
-
: undefined;
|
|
79
|
-
return listOf("messages list", {
|
|
80
|
-
items: messageItems(heard(found.items, hearing), await services.messages.reader()),
|
|
81
|
-
limit: size,
|
|
82
|
-
has_more: found.hasMore,
|
|
83
|
-
paging: "cursor",
|
|
84
|
-
...(cursor === undefined ? {} : { cursor }),
|
|
85
|
-
args: { chat: args.chat, ...(args.query === undefined ? {} : { query: args.query }) },
|
|
86
|
-
missing: hearingMissing(hearing, args.transcribe === true),
|
|
87
|
-
});
|
|
88
|
-
},
|
|
89
|
-
}),
|
|
90
|
-
messages_comments: tool({
|
|
91
|
-
title: "Comments under a channel post",
|
|
92
|
-
description: "The comments under one channel post, oldest to newest, read from the messenger. They live in the " +
|
|
93
|
-
"channel's discussion group, which each item's chat_id names. `query` id<42 reads back from a comment; " +
|
|
94
|
-
"page.next's cursor goes on. A post that takes no comments is not_found. Does not mark read.",
|
|
95
|
-
input: v.object({
|
|
96
|
-
chat,
|
|
97
|
-
post: v.pipe(message, v.description("the post's message id in the channel")),
|
|
98
|
-
query: v.optional(v.pipe(v.string(), v.description("id<42"))),
|
|
99
|
-
cursor: v.optional(v.pipe(v.string(), v.minLength(1), v.description("page.next's cursor"))),
|
|
100
|
-
limit,
|
|
101
|
-
}),
|
|
102
|
-
annotations: READ,
|
|
103
|
-
output: { entity: "message", list: true },
|
|
104
|
-
served: async (services, args, defaults) => {
|
|
105
|
-
const size = args.limit ?? defaults.limit;
|
|
106
|
-
const window = historyWindow(args.query, args.cursor, "messages comments", COMMENTS_QUERY);
|
|
107
|
-
const found = await services.messages.comments(args.chat, args.post, {
|
|
108
|
-
limit: size,
|
|
109
|
-
...(window.before === undefined ? {} : { before: window.before }),
|
|
110
|
-
});
|
|
111
|
-
const cursor = found.hasMore ? cursorOf(window, { first: found.items[0]?.id }) : undefined;
|
|
112
|
-
return listOf("messages comments", {
|
|
113
|
-
items: messageItems(found.items, await services.messages.reader()),
|
|
114
|
-
limit: size,
|
|
115
|
-
has_more: found.hasMore,
|
|
116
|
-
paging: "cursor",
|
|
117
|
-
...(cursor === undefined ? {} : { cursor }),
|
|
118
|
-
args: { chat: args.chat, post: args.post, ...(args.query === undefined ? {} : { query: args.query }) },
|
|
119
|
-
});
|
|
120
|
-
},
|
|
121
|
-
}),
|
|
122
|
-
messages_link: tool({
|
|
123
|
-
title: "Get a message link",
|
|
124
|
-
description: "An account-scoped locator (ref) and optional provider permalink, without message content; access describes the link audience, not permission granted to its reader. Does not mark read. A locator can replace chat and message.",
|
|
125
|
-
input: v.object({ chat, message: v.optional(message) }),
|
|
126
|
-
annotations: READ,
|
|
127
|
-
output: { entity: "message_link", list: false },
|
|
128
|
-
served: async (services, args) => {
|
|
129
|
-
const { locator, ...link } = await services.messages.link(args.chat, args.message);
|
|
130
|
-
return itemOf({ ref: locator, ...link });
|
|
131
|
-
},
|
|
132
|
-
}),
|
|
133
|
-
messages_context: tool({
|
|
134
|
-
title: "Show a message",
|
|
135
|
-
description: "One message by id, and optionally the messages either side of it, oldest first. The one asked for " +
|
|
136
|
-
"carries anchor: true; `before_n` and `after_n` say how many either side. " +
|
|
137
|
-
"With thread=true, reads the stored parent chain and replies without connecting: returns locator, mode, items, links with provenance/stale labels, chain, stale, stopped and bounds. " +
|
|
138
|
-
"thread_hops (8), thread_messages (50), thread_bytes (65536) and thread_within (1d) bound it; no graph gives a labelled local time fallback. " +
|
|
139
|
-
"A msg: locator in chat needs no message argument; it must belong to the active account. offline=true reads ordinary context from this account's local store without connecting. " +
|
|
140
|
-
"A msg:email/… locator reads the whole email and its thread from the stored mail, with people, labels and thread references.",
|
|
141
|
-
input: v.object({
|
|
142
|
-
...threadInputs,
|
|
143
|
-
offline: v.optional(v.boolean()),
|
|
144
|
-
chat,
|
|
145
|
-
message: v.optional(message),
|
|
146
|
-
before_n: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(100))),
|
|
147
|
-
after_n: v.optional(v.pipe(v.number(), v.integer(), v.minValue(0), v.maxValue(100))),
|
|
148
|
-
}),
|
|
149
|
-
annotations: READ,
|
|
150
|
-
storedWhen: (args) => {
|
|
151
|
-
if (args.thread || args.offline || isMail(args.chat, args.message))
|
|
152
|
-
return true;
|
|
153
|
-
if (args.message === undefined && !isLocator(args.chat))
|
|
154
|
-
throw new CliError("validation_error", "give a message id, or a msg: locator");
|
|
155
|
-
return false;
|
|
156
|
-
},
|
|
157
|
-
stored: async (store, account, args, defaults) => {
|
|
158
|
-
const window = { before: args.before_n ?? 0, after: args.after_n ?? 0 };
|
|
159
|
-
if (isMail(args.chat, args.message))
|
|
160
|
-
return windowOf(await readMail(store, args.chat, window), parseLocator(args.chat), window);
|
|
161
|
-
const services = searchServices(messenger, store, account, defaults);
|
|
162
|
-
if (!args.thread)
|
|
163
|
-
return windowOf(await services.messages.around(args.chat, args.message, window), account, window);
|
|
164
|
-
return threadAnswer(await services.messages.thread(args.chat, args.message, {
|
|
165
|
-
...threadArgs(args).thread,
|
|
166
|
-
before: args.before_n ?? 5,
|
|
167
|
-
after: args.after_n ?? 5,
|
|
168
|
-
signal: defaults.signal,
|
|
169
|
-
}), account);
|
|
170
|
-
},
|
|
171
|
-
served: async (services, args) => {
|
|
172
|
-
if (args.message === undefined && !isLocator(args.chat))
|
|
173
|
-
throw new CliError("validation_error", "give a message id, or a msg: locator");
|
|
174
|
-
const window = { before: args.before_n ?? 0, after: args.after_n ?? 0 };
|
|
175
|
-
return windowOf(await services.messages.around(args.chat, args.message, window), await services.messages.reader(), window);
|
|
176
|
-
},
|
|
177
|
-
}),
|
|
178
|
-
messages_scheduled: tool({
|
|
179
|
-
title: "Messages scheduled in a chat",
|
|
180
|
-
description: "Messages waiting to be sent later in a chat, soonest first, each with scheduled_for. Look here after a " +
|
|
181
|
-
`scheduled send ended in outcome_unknown. Cancelling one is done in the ${name} app.`,
|
|
182
|
-
input: v.object({ chat }),
|
|
183
|
-
annotations: READ,
|
|
184
|
-
output: { entity: "message", list: true },
|
|
185
|
-
online: async (adapter, args) => {
|
|
186
|
-
const items = await capability(adapter, "scheduled", "list scheduled messages")(args.chat);
|
|
187
|
-
return listOf("messages scheduled", {
|
|
188
|
-
items: messageItems(items, selfOf(messenger, adapter)),
|
|
189
|
-
limit: Math.max(items.length, 1),
|
|
190
|
-
has_more: false,
|
|
191
|
-
});
|
|
192
|
-
},
|
|
193
|
-
}),
|
|
194
|
-
stats_messages_show: tool({
|
|
195
|
-
title: "Count messages",
|
|
196
|
-
description: messagesStatsDescription(messenger),
|
|
197
|
-
input: messagesStatsInput(messenger),
|
|
198
|
-
annotations: { ...READ, openWorldHint: false },
|
|
199
|
-
output: { entity: "message_counts", list: false },
|
|
200
|
-
stored: (store, account, args, defaults, connect) => {
|
|
201
|
-
const services = searchServices(messenger, store, account, defaults, args.sync_first ? connect : undefined);
|
|
202
|
-
return answerMessagesStats(services.messages, args, defaults, services.searches);
|
|
203
|
-
},
|
|
204
|
-
}),
|
|
205
|
-
};
|
|
206
|
-
};
|
|
207
|
-
//# sourceMappingURL=messages.js.map
|