@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
package/dist/mcp/tools/tasks.js
DELETED
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
import { holderOf } from "../../cli/author.js";
|
|
3
|
-
import { itemOf, listOf, snakeKeys } from "../../cli/envelope.js";
|
|
4
|
-
import { listQuery, queryArgument, queryTerms } from "../../cli/list-query.js";
|
|
5
|
-
import { taskStatsAnswer } from "../../cli/messenger/stats-answers.js";
|
|
6
|
-
import { readOnlyLockOf } from "../../ports/app.js";
|
|
7
|
-
import { AGENDA_QUERY, agendaItem } from "../../services/agenda.js";
|
|
8
|
-
import { servicesFor, storedDeps } from "../../services/index.js";
|
|
9
|
-
import { storedChatId } from "../../services/message-resolution.js";
|
|
10
|
-
import { aheadOf, momentOf } from "../../services/moment.js";
|
|
11
|
-
import { DEFAULT_TASK_CATEGORIES } from "../../services/task-categories.js";
|
|
12
|
-
import { ARRIVAL_WINDOW, applyTaskRulesToChats } from "../../services/task-rules.js";
|
|
13
|
-
import { CLAIM_LEASE_MS, TASK_LINK_KINDS, TASK_PAIR_QUERY, TASK_QUERY, } from "../../services/tasks.js";
|
|
14
|
-
import { TASK_KINDS } from "../../tasks/index.js";
|
|
15
|
-
import { chatOf, limit, page, paging, READ, tool } from "../tool.js";
|
|
16
|
-
const LOCAL = { readOnlyHint: false, openWorldHint: false };
|
|
17
|
-
const ROW = "{ item: { id, key, source, source_kind, account, group, kind, category, state, reason?, origin, created_at, due_at?, " +
|
|
18
|
-
"closed_at?, closed_by?, message: { sender_name, text, timestamp } | null, note?: { id, title, text, updated_at } | null } }";
|
|
19
|
-
const ROW_CLOSED = "{ item: { id, key, state, kind, reason?, closed_at?, closed_by?, close_certainty, close_suggestion: { as, by, " +
|
|
20
|
-
"certainty, reason, at } | null, … } } — state open with close_suggestion set means the close waits on the owner";
|
|
21
|
-
const type = v.picklist(TASK_KINDS);
|
|
22
|
-
const CARD = "{ item: { id, ref, key, project, title, description, type, status, priority, parent, source, due_at, " +
|
|
23
|
-
"next_check_at, closed_at, reason, verdict, category, claimed_by, claimed_until, close_certainty, close_suggestion, " +
|
|
24
|
-
"assignments, created_at, updated_at, " +
|
|
25
|
-
"links: [{ id, from, to, kind, target_text, origin, … }], " +
|
|
26
|
-
"linked_from: [{ id, from, to, kind, … }] — other tasks' relations to this one, as a follow-up-of } }";
|
|
27
|
-
const text = (max, what) => v.pipe(v.string(), v.minLength(1), v.maxLength(max), v.description(what));
|
|
28
|
-
const ahead = (what) => v.optional(v.nullable(v.pipe(v.string(), v.minLength(1), v.description(`${what}: an ISO 8601 time or 2h, 3d from now; null clears it`))));
|
|
29
|
-
// The owner edits the list (the shared config file, or config set task_categories.*), so the store checks the name.
|
|
30
|
-
// Names only: with each meaning the default list is ~1.9k characters in two tool schemas; tasks_categories has them.
|
|
31
|
-
const category = text(30, "what it is about, a name from `tasks categories` (it says what each means) — by default " +
|
|
32
|
-
DEFAULT_TASK_CATEGORIES.map(({ name }) => name).join(", "));
|
|
33
|
-
const PLAN = {
|
|
34
|
-
title: v.optional(text(300, "one line: the action and its object — send Alex the API token")),
|
|
35
|
-
description: v.optional(v.nullable(text(20000, "Markdown: who owes whom, the counterpart, done when, next step, search keywords. Never paste message text — link the message"))),
|
|
36
|
-
due: ahead("when it must be done"),
|
|
37
|
-
remind_time: ahead("when to look at it again"),
|
|
38
|
-
assignee: v.optional(v.nullable(v.pipe(v.array(v.pipe(v.string(), v.minLength(1), v.maxLength(40))), v.maxLength(10), v.description("who does it: sender (whoever sent the task's message) or person:<id>; null clears it. Leave it out when " +
|
|
39
|
-
"unsure: a task with no assignee is better than none")))),
|
|
40
|
-
};
|
|
41
|
-
const planOf = (args) => ({
|
|
42
|
-
...(args.assignee === undefined ? {} : { assignees: args.assignee }),
|
|
43
|
-
...(args.category === undefined ? {} : { category: args.category }),
|
|
44
|
-
...(args.title === undefined ? {} : { title: args.title }),
|
|
45
|
-
...(args.description === undefined ? {} : { description: args.description }),
|
|
46
|
-
...(args.due === undefined ? {} : { dueAt: args.due === null ? null : new Date(aheadOf(args.due, "due")) }),
|
|
47
|
-
...(args.remind_time === undefined
|
|
48
|
-
? {}
|
|
49
|
-
: { nextCheckAt: args.remind_time === null ? null : new Date(aheadOf(args.remind_time, "remind_time")) }),
|
|
50
|
-
});
|
|
51
|
-
const span = (what) => v.optional(v.pipe(v.string(), v.regex(/^\d+(m|h|d)$/), v.description(`${what}: 30m, 2h, 7d`)));
|
|
52
|
-
const spanMs = (typed) => (typed === undefined ? undefined : Date.now() - momentOf(typed, "span"));
|
|
53
|
-
export const tasksTools = (messenger) => {
|
|
54
|
-
const tasks = (store, account, guard) => servicesFor(storedDeps(messenger, store, account, guard)).tasks;
|
|
55
|
-
return {
|
|
56
|
-
tasks_list: tool({
|
|
57
|
-
title: "List tasks",
|
|
58
|
-
description: "What waits on the owner — questions nobody answered, mentions, requests, promises — oldest first. review " +
|
|
59
|
-
"and serve open and close them; `source_message` is the message to read for the context.",
|
|
60
|
-
input: v.object({ query: queryArgument(TASK_QUERY), limit, page }),
|
|
61
|
-
annotations: { ...READ, openWorldHint: false },
|
|
62
|
-
output: { entity: "task", list: true },
|
|
63
|
-
stored: async (store, account, args, defaults) => {
|
|
64
|
-
const { size, number, window } = paging(args, defaults);
|
|
65
|
-
const query = listQuery(args.query ?? "", TASK_QUERY, "tasks list");
|
|
66
|
-
const found = await tasks(store, account, defaults.guard).list({ ...window, ...(query ? { query } : {}) });
|
|
67
|
-
return listOf("tasks list", { items: found.items, limit: size, has_more: found.has_more, page: number });
|
|
68
|
-
},
|
|
69
|
-
}),
|
|
70
|
-
tasks_add: tool({
|
|
71
|
-
title: "Add a task",
|
|
72
|
-
description: 'Adds a task for a message the rules cannot see — "I\'ll send it tomorrow" has no question mark. `message` ' +
|
|
73
|
-
"accepts a msg: locator or note:<id> in the selected account. A source that already has a task of this type keeps it (`created: " +
|
|
74
|
-
"false`). When an open task may be the same job it refuses (reason task.duplicate-candidates) and " +
|
|
75
|
-
"lists up to 5 in `candidates` with score and reasons: read them, then call again with `into` (that task's " +
|
|
76
|
-
"key: the message is linked to it, no task opens) or `new: true` (open it anyway). When only tasks closed in " +
|
|
77
|
-
"the last 14 days match, it opens the task and links it follow-up-of the best one, which stays closed " +
|
|
78
|
-
"(`follow_up_of`); new: true does the same. Writes only to the local store; nothing is sent. After into, the " +
|
|
79
|
-
"task now reads that message too, so tasks it may duplicate go to `tasks duplicates`. Returns " +
|
|
80
|
-
`${ROW} with created, follow_up_of { ref, key, title, status } when it follows one up and, after into, ` +
|
|
81
|
-
"attached and review (how many pairs went there).",
|
|
82
|
-
input: v.object({
|
|
83
|
-
message: v.pipe(v.string(), v.minLength(1), v.description("a msg: locator or note:<id>")),
|
|
84
|
-
type,
|
|
85
|
-
category,
|
|
86
|
-
...PLAN,
|
|
87
|
-
into: v.optional(text(200, "a listed candidate's key: link the message to it instead of opening a task")),
|
|
88
|
-
new: v.optional(v.pipe(v.boolean(), v.description("open the task although candidates were listed"))),
|
|
89
|
-
}),
|
|
90
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
91
|
-
stored: async (store, account, args, defaults) => {
|
|
92
|
-
const { task, created, attached, review, followUpOf, card } = await tasks(store, account, defaults.guard).add(args.message, args.type, "agent", planOf(args), { ...(args.into === undefined ? {} : { attach: args.into }), ...(args.new ? { new: true } : {}) });
|
|
93
|
-
return itemOf(snakeKeys({
|
|
94
|
-
...task,
|
|
95
|
-
created,
|
|
96
|
-
...(attached ? { attached, review } : {}),
|
|
97
|
-
...(followUpOf ? { followUpOf } : {}),
|
|
98
|
-
...(card ? { card } : {}),
|
|
99
|
-
}));
|
|
100
|
-
},
|
|
101
|
-
}),
|
|
102
|
-
tasks_close: tool({
|
|
103
|
-
title: "Close a task",
|
|
104
|
-
description: "Closes a task as done, or as dismissed when it needs no answer; `reason` is kept with it. State your " +
|
|
105
|
-
"`certainty` that the task needs nothing more: when the owner allows agent closes and it is at least the " +
|
|
106
|
-
"owner's threshold (config task_agent_close_min, default 0.8), the task closes; otherwise it stays open " +
|
|
107
|
-
"with `close_suggestion` set, and the owner confirms or refuses it — do not ask again. Under the read-only " +
|
|
108
|
-
"lock every close waits on the owner this way. A closed task stays " +
|
|
109
|
-
"closed, and the rules never reopen it; only `tasks unmerge` reopens a merged one. Writes only to the local " +
|
|
110
|
-
`store; nothing is sent. Returns ${ROW_CLOSED}.`,
|
|
111
|
-
input: v.object({
|
|
112
|
-
task: v.pipe(v.string(), v.minLength(1), v.description("the task's id or key, from `tasks list`")),
|
|
113
|
-
as: v.picklist(["done", "dismissed"]),
|
|
114
|
-
certainty: v.pipe(v.number(), v.minValue(0), v.maxValue(1), v.description("how sure you are, 0 to 1, that the task needs nothing more; be honest — below the threshold the owner decides")),
|
|
115
|
-
reason: v.optional(v.pipe(v.string(), v.minLength(1), v.description("why — no-reply-needed, for example"))),
|
|
116
|
-
}),
|
|
117
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: false },
|
|
118
|
-
stored: async (store, account, args, defaults) => {
|
|
119
|
-
return itemOf(snakeKeys(await tasks(store, account, defaults.guard).close(args.task, {
|
|
120
|
-
as: args.as,
|
|
121
|
-
by: "agent",
|
|
122
|
-
certainty: args.certainty,
|
|
123
|
-
...(readOnlyLockOf(messenger.app, defaults.env) ? { suggestOnly: true } : {}),
|
|
124
|
-
...(args.reason === undefined ? {} : { reason: args.reason }),
|
|
125
|
-
})));
|
|
126
|
-
},
|
|
127
|
-
}),
|
|
128
|
-
tasks_plan: tool({
|
|
129
|
-
title: "Plan a task",
|
|
130
|
-
description: "Sets a task's title, description, due date, category and remind_time — when you should look at it again " +
|
|
131
|
-
"(next_check_at). It is yours: nothing reaches the owner. Writes only to the local store; nothing is sent. " +
|
|
132
|
-
`Returns ${CARD}.`,
|
|
133
|
-
input: v.object({
|
|
134
|
-
task: text(200, "the task's id or key, from `tasks list` or `tasks agenda`"),
|
|
135
|
-
...PLAN,
|
|
136
|
-
category: v.optional(category),
|
|
137
|
-
}),
|
|
138
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
139
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).plan(args.task, planOf(args), "agent"))),
|
|
140
|
-
}),
|
|
141
|
-
tasks_link: tool({
|
|
142
|
-
title: "Link a task",
|
|
143
|
-
description: "Links a task to what it concerns, so the next look starts from there: msg: locators, chats, person:<id>, " +
|
|
144
|
-
"document:<id>, note:<id>, or a URL. A message the store has not saved yet is kept as written. A linked " +
|
|
145
|
-
"message is read when tasks are compared, so after a msg: target the tasks this one may now duplicate go to " +
|
|
146
|
-
"`tasks duplicates` and `review` counts them; the link stands either way. Writes only to the local store; " +
|
|
147
|
-
`nothing is sent. Returns ${CARD}, with review after a msg: target.`,
|
|
148
|
-
input: v.object({
|
|
149
|
-
task: text(200, "the task's id or key"),
|
|
150
|
-
targets: v.optional(v.array(text(500, "a reference, a msg: locator or a URL"))),
|
|
151
|
-
chats: v.optional(v.array(chatOf(messenger))),
|
|
152
|
-
kind: v.optional(v.picklist(TASK_LINK_KINDS)),
|
|
153
|
-
}),
|
|
154
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
155
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).link(args.task, { references: args.targets ?? [], chats: args.chats ?? [] }, { kind: args.kind ?? "related-to", by: "agent" }))),
|
|
156
|
-
}),
|
|
157
|
-
tasks_show: tool({
|
|
158
|
-
title: "Show a task",
|
|
159
|
-
description: `One task with its plan and everything linked to it. Returns ${CARD}.`,
|
|
160
|
-
input: v.object({ task: text(200, "the task's id or key") }),
|
|
161
|
-
annotations: { ...READ, openWorldHint: false },
|
|
162
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).show(args.task))),
|
|
163
|
-
}),
|
|
164
|
-
tasks_related: tool({
|
|
165
|
-
title: "Tasks like this one",
|
|
166
|
-
description: "Open tasks, and tasks closed in the last 14 days, that may be the same job as this one: found by shared " +
|
|
167
|
-
"words, the same person, the same category or one reply chain — never by the same chat alone — and scored " +
|
|
168
|
-
"field by field, best first. `band` is likely, maybe or different; nothing merges on it. Returns " +
|
|
169
|
-
"{ items: [{ ref, key, title, status, created_at, found_by, score, band, levels, reasons, text }] }.",
|
|
170
|
-
input: v.object({
|
|
171
|
-
task: text(200, "the task's id or key"),
|
|
172
|
-
limit: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(40), v.description("how many"))),
|
|
173
|
-
}),
|
|
174
|
-
annotations: { ...READ, openWorldHint: false },
|
|
175
|
-
stored: async (store, account, args, defaults) => {
|
|
176
|
-
const size = args.limit ?? 10;
|
|
177
|
-
const found = await tasks(store, account, defaults.guard).similar(args.task, { limit: size });
|
|
178
|
-
return listOf("tasks related", { items: found.map(snakeKeys), limit: size, has_more: false });
|
|
179
|
-
},
|
|
180
|
-
}),
|
|
181
|
-
tasks_duplicates: tool({
|
|
182
|
-
title: "Pairs to review",
|
|
183
|
-
description: "Pairs of tasks a rule opened that may be one job, newest first: `task` is the newer one, `other` the one it " +
|
|
184
|
-
"may duplicate, with score, band, levels and reasons. Decide each: `tasks merge` when they are one job, " +
|
|
185
|
-
"`tasks duplicates reject` when they are not, `tasks duplicates defer` when the meaning cannot tell — the owner " +
|
|
186
|
-
"then lists it with query decision:unsure. Returns { items: [{ task, source, other, score, band, levels, reasons, " +
|
|
187
|
-
"decision, decided_at, created_at }] }.",
|
|
188
|
-
input: v.object({
|
|
189
|
-
query: queryArgument(TASK_PAIR_QUERY),
|
|
190
|
-
limit,
|
|
191
|
-
page,
|
|
192
|
-
}),
|
|
193
|
-
annotations: { ...READ, openWorldHint: false },
|
|
194
|
-
stored: async (store, account, args, defaults) => {
|
|
195
|
-
const { size, number, window } = paging(args, defaults);
|
|
196
|
-
const rows = await tasks(store, account, defaults.guard).duplicates({
|
|
197
|
-
decision: queryTerms(args.query ?? "", TASK_PAIR_QUERY, "tasks duplicates").get("decision"),
|
|
198
|
-
limit: window.limit + 1,
|
|
199
|
-
offset: window.offset,
|
|
200
|
-
});
|
|
201
|
-
return listOf("tasks duplicates", {
|
|
202
|
-
items: rows.slice(0, window.limit).map(snakeKeys),
|
|
203
|
-
limit: size,
|
|
204
|
-
has_more: rows.length > window.limit,
|
|
205
|
-
page: number,
|
|
206
|
-
});
|
|
207
|
-
},
|
|
208
|
-
}),
|
|
209
|
-
tasks_duplicates_reject: tool({
|
|
210
|
-
title: "Not the same job",
|
|
211
|
-
description: "Records that two tasks are different jobs: the pair leaves the review list and is never offered again. " +
|
|
212
|
-
"Writes only to the local store. Returns { item: pair }.",
|
|
213
|
-
input: v.object({ dup: text(200, "the task listed as `task`"), task: text(200, "the task listed as `other`") }),
|
|
214
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
215
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).decideDuplicate(args.dup, args.task, "rejected", "agent"))),
|
|
216
|
-
}),
|
|
217
|
-
tasks_duplicates_defer: tool({
|
|
218
|
-
title: "Leave a pair to the owner",
|
|
219
|
-
description: "Marks a pair the fields and the text cannot decide — a gift for mum or for dad — so the owner decides it; " +
|
|
220
|
-
"it leaves your list and shows under `tasks duplicates` with query decision:unsure. Writes only to the local store. " +
|
|
221
|
-
"Returns { item: pair }.",
|
|
222
|
-
input: v.object({ dup: text(200, "the task listed as `task`"), task: text(200, "the task listed as `other`") }),
|
|
223
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
224
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).decideDuplicate(args.dup, args.task, "unsure", "agent"))),
|
|
225
|
-
}),
|
|
226
|
-
tasks_merge: tool({
|
|
227
|
-
title: "Merge a duplicate task",
|
|
228
|
-
description: "One job seen twice: links every message of `dup` to `into`, closes `dup` dismissed with a duplicate-of " +
|
|
229
|
-
"relation, and records the decision. Nothing is deleted; `tasks unmerge` undoes it. Writes only to the local " +
|
|
230
|
-
"store. Returns { item: { pair, linked, review, task } }: `linked` counts the messages added to `into`, " +
|
|
231
|
-
"`review` the pairs its new messages sent to `tasks duplicates`, `task` is its card.",
|
|
232
|
-
input: v.object({
|
|
233
|
-
dup: text(200, "the duplicate's key; it must be open"),
|
|
234
|
-
into: text(200, "the task that stays"),
|
|
235
|
-
}),
|
|
236
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: false },
|
|
237
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).merge(args.dup, args.into, "agent"))),
|
|
238
|
-
}),
|
|
239
|
-
tasks_unmerge: tool({
|
|
240
|
-
title: "Undo a merge",
|
|
241
|
-
description: "Reopens a merged task and removes its duplicate-of relation; the messages the merge linked stay linked. " +
|
|
242
|
-
"Writes only to the local store. Returns { item: { pair, task } }.",
|
|
243
|
-
input: v.object({ dup: text(200, "the merged task's key") }),
|
|
244
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: false },
|
|
245
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).unmerge(args.dup, "agent"))),
|
|
246
|
-
}),
|
|
247
|
-
tasks_categories: tool({
|
|
248
|
-
title: "Task categories",
|
|
249
|
-
description: "The categories a task takes, with what each means and the words a rule picks it by. The owner edits the list " +
|
|
250
|
-
"in `file` (its task_categories section) or with config set task_categories.<name>; `tasks add` and `tasks plan` " +
|
|
251
|
-
"refuse a name not on it. `unlisted` names the " +
|
|
252
|
-
"categories tasks still carry after they left the list; `tasks plan` moves such a task to a listed one. " +
|
|
253
|
-
"Returns { item: { categories: [{ name, meaning, triggers }], unlisted: [{ name, open, total }], file } }.",
|
|
254
|
-
input: v.object({}),
|
|
255
|
-
annotations: { ...READ, openWorldHint: false },
|
|
256
|
-
stored: async (store, account, _args, defaults) => {
|
|
257
|
-
const service = tasks(store, account, defaults.guard);
|
|
258
|
-
const list = await service.categories();
|
|
259
|
-
return itemOf({
|
|
260
|
-
categories: list.map(({ name, meaning, triggers }) => ({ name, meaning, triggers })),
|
|
261
|
-
unlisted: await service.unlistedCategories(),
|
|
262
|
-
file: (await service.categoriesFile()) ?? null,
|
|
263
|
-
});
|
|
264
|
-
},
|
|
265
|
-
}),
|
|
266
|
-
tasks_scan: tool({
|
|
267
|
-
title: "Build tasks from a chat's history",
|
|
268
|
-
description: "The task rules over a chat's newest stored messages: a question nobody answered and a mention of the owner " +
|
|
269
|
-
"open a task, the owner's answer closes one. A first sync opens none from history (config " +
|
|
270
|
-
"task_first_pass_per_chat, 0 by default): ask the owner before building a chat's tasks. Without yes it " +
|
|
271
|
-
"changes nothing and lists what would open; with yes it opens them through the duplicate check. Reads only " +
|
|
272
|
-
"the local store. Returns { items: [{ chat, messages, added, closed, review, tasks: [{ source, kind, " +
|
|
273
|
-
"category }] }] }.",
|
|
274
|
-
input: v.object({
|
|
275
|
-
chats: v.pipe(v.array(chatOf(messenger)), v.minLength(1), v.maxLength(20)),
|
|
276
|
-
last: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(1000), v.description(`read the newest n stored messages of each chat (default ${ARRIVAL_WINDOW})`))),
|
|
277
|
-
yes: v.optional(v.pipe(v.boolean(), v.description("open the tasks instead of listing them"))),
|
|
278
|
-
}),
|
|
279
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
280
|
-
stored: async (store, account, args) => {
|
|
281
|
-
const ids = [];
|
|
282
|
-
for (const chat of args.chats)
|
|
283
|
-
ids.push(await storedChatId(messenger, chat, store, account));
|
|
284
|
-
const passes = await applyTaskRulesToChats(store, account, ids, {
|
|
285
|
-
...(args.last === undefined ? {} : { last: args.last }),
|
|
286
|
-
yes: args.yes ?? false,
|
|
287
|
-
});
|
|
288
|
-
return listOf("tasks scan", { items: passes.map(snakeKeys), limit: passes.length, has_more: false });
|
|
289
|
-
},
|
|
290
|
-
}),
|
|
291
|
-
tasks_claim: tool({
|
|
292
|
-
title: "Claim a task",
|
|
293
|
-
description: "Takes an open task so no other agent works it at once; the claim lapses by itself (default 30m), and " +
|
|
294
|
-
"claiming again extends your own. Refused, naming the holder and until when (reason task.claimed), while " +
|
|
295
|
-
"someone else holds it. `holder` is who you are — a session or chat id; left out, WIRECAT_HOLDER, else " +
|
|
296
|
-
`Claude Code's session, else the agent's name. Writes only to the local store. Returns ${CARD}.`,
|
|
297
|
-
input: v.object({
|
|
298
|
-
task: text(200, "the task's id or key"),
|
|
299
|
-
lease: span("how long the claim lasts (default 30m)"),
|
|
300
|
-
holder: v.optional(text(200, "who you are for claims: a session or chat id")),
|
|
301
|
-
}),
|
|
302
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
303
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).claim(args.task, holderOf(defaults.env, args.holder), spanMs(args.lease) ?? CLAIM_LEASE_MS))),
|
|
304
|
-
}),
|
|
305
|
-
tasks_release: tool({
|
|
306
|
-
title: "Release a task",
|
|
307
|
-
description: "Gives back a task you claimed, before the claim lapses; only its holder or the owner may. Writes only to " +
|
|
308
|
-
`the local store. Returns ${CARD}.`,
|
|
309
|
-
input: v.object({
|
|
310
|
-
task: text(200, "the task's id or key"),
|
|
311
|
-
holder: v.optional(text(200, "who you are for claims, as `tasks claim` named you")),
|
|
312
|
-
}),
|
|
313
|
-
annotations: { ...LOCAL, destructiveHint: false, idempotentHint: true },
|
|
314
|
-
stored: async (store, account, args, defaults) => itemOf(snakeKeys(await tasks(store, account, defaults.guard).release(args.task, holderOf(defaults.env, args.holder)))),
|
|
315
|
-
}),
|
|
316
|
-
tasks_agenda: tool({
|
|
317
|
-
title: "Today's agenda",
|
|
318
|
-
description: "What needs a look, from the local store and without message text: open tasks overdue, due soon, due a " +
|
|
319
|
-
"check, or never planned; chats where someone else wrote last and the owner has not answered (`owed`); " +
|
|
320
|
-
"chats where the owner wrote last and nobody answered (`waiting`); chats that moved and whose newest " +
|
|
321
|
-
"message is not stored (`unsynced`: read them first); open tasks someone else does, oldest first, with " +
|
|
322
|
-
"their `assignees` (`assigned`: what others owe the owner). Read only what it names. `stale` means the store " +
|
|
323
|
-
"saved nothing for a day, so a chat may look quiet only because nothing was synced. `query` narrows " +
|
|
324
|
-
"the chats by chat_kind:channel (default chat_kind:(dialog OR group)) and the tasks by tag:, category: and " +
|
|
325
|
-
"claimed:none|mine|others|any (default claimed:(none OR mine)); `holder` says who you are.",
|
|
326
|
-
input: v.object({
|
|
327
|
-
due_within: span("list tasks due within this (default 1d)"),
|
|
328
|
-
unanswered: span("list chats someone else wrote last in this long ago (default 1d)"),
|
|
329
|
-
waiting: span("list chats the owner wrote last in this long ago (default 7d)"),
|
|
330
|
-
within: span("leave out chats silent longer than this (default 30d)"),
|
|
331
|
-
query: queryArgument(AGENDA_QUERY),
|
|
332
|
-
holder: v.optional(text(200, "who you are for claims, as tasks claim --holder names you; yours stay listed")),
|
|
333
|
-
}),
|
|
334
|
-
annotations: { ...READ, openWorldHint: false },
|
|
335
|
-
output: { entity: "agenda", list: false },
|
|
336
|
-
stored: async (store, account, args, defaults) => {
|
|
337
|
-
const [dueWithin, unanswered, waiting, within] = [
|
|
338
|
-
args.due_within,
|
|
339
|
-
args.unanswered,
|
|
340
|
-
args.waiting,
|
|
341
|
-
args.within,
|
|
342
|
-
].map(spanMs);
|
|
343
|
-
const query = listQuery(args.query ?? "", AGENDA_QUERY, "tasks agenda");
|
|
344
|
-
const shown = await servicesFor(storedDeps(messenger, store, account, defaults.guard)).agenda.show({
|
|
345
|
-
...(dueWithin === undefined ? {} : { dueWithin }),
|
|
346
|
-
...(unanswered === undefined ? {} : { unanswered }),
|
|
347
|
-
...(waiting === undefined ? {} : { waiting }),
|
|
348
|
-
...(within === undefined ? {} : { within }),
|
|
349
|
-
...(query ? { query } : {}),
|
|
350
|
-
holder: holderOf(defaults.env, args.holder),
|
|
351
|
-
});
|
|
352
|
-
return itemOf(agendaItem(shown));
|
|
353
|
-
},
|
|
354
|
-
}),
|
|
355
|
-
stats_tasks_show: tool({
|
|
356
|
-
title: "Task statistics",
|
|
357
|
-
description: "Per chat: how many tasks are open, when the oldest open one was opened, and the median time to close. " +
|
|
358
|
-
"Returns { item: { rows: [{ chat, open, oldest_open_at, median_close_ms }] } }.",
|
|
359
|
-
input: v.object({ chat: v.optional(chatOf(messenger)), type: v.optional(type) }),
|
|
360
|
-
annotations: { ...READ, openWorldHint: false },
|
|
361
|
-
output: { entity: "task_stats", list: false },
|
|
362
|
-
stored: async (store, account, args, defaults) => taskStatsAnswer(await tasks(store, account, defaults.guard).stats({
|
|
363
|
-
...(args.chat === undefined ? {} : { chat: args.chat }),
|
|
364
|
-
...(args.type === undefined ? {} : { type: args.type }),
|
|
365
|
-
}), account),
|
|
366
|
-
}),
|
|
367
|
-
};
|
|
368
|
-
};
|
|
369
|
-
//# sourceMappingURL=tasks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/mcp/tools/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { Messenger } from "../../cli/messenger/context.js";
|
|
2
|
-
import { type AnyTool } from "../tool.js";
|
|
3
|
-
export declare const topicsTools: (messenger: Messenger) => Record<string, AnyTool>;
|
|
4
|
-
export declare const topicWriteTools: (messenger: Messenger) => Record<string, AnyTool>;
|
|
5
|
-
//# sourceMappingURL=topics.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/topics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,EAAE,KAAK,OAAO,EAAiE,MAAM,YAAY,CAAA;AA2BxG,eAAO,MAAM,WAAW,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CACZ,CAAA;AAE7D,eAAO,MAAM,eAAe,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CACf,CAAA"}
|
package/dist/mcp/tools/topics.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import * as v from "valibot";
|
|
2
|
-
import { itemOf, listOf, snakeKeys } from "../../cli/envelope.js";
|
|
3
|
-
import { topicAnswer } from "../../cli/messenger/chat-answers.js";
|
|
4
|
-
import { capability } from "../../ports/messenger.js";
|
|
5
|
-
import { onlineDeps, servicesFor } from "../../services/index.js";
|
|
6
|
-
import { chatOf, limit, page, paging, READ, tool, WRITE } from "../tool.js";
|
|
7
|
-
const topicsPage = async (adapter, chat, search, rest, defaults) => {
|
|
8
|
-
const { size, number, window } = paging(rest, defaults);
|
|
9
|
-
const found = await capability(adapter, "topics", "list forum topics")(chat, {
|
|
10
|
-
...window,
|
|
11
|
-
...(search === undefined ? {} : { search }),
|
|
12
|
-
});
|
|
13
|
-
return listOf(search === undefined ? "topics list" : "search topics", {
|
|
14
|
-
items: found.items.map(topicAnswer),
|
|
15
|
-
limit: size,
|
|
16
|
-
has_more: found.hasMore,
|
|
17
|
-
page: number,
|
|
18
|
-
args: { chat, ...(search === undefined ? {} : { text: search }) },
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
export const topicsTools = (messenger) => messenger.topics === false ? {} : readTopicTools(messenger);
|
|
22
|
-
export const topicWriteTools = (messenger) => messenger.topics === false ? {} : writeTopicTools(messenger);
|
|
23
|
-
const readTopicTools = (messenger) => ({
|
|
24
|
-
topics_list: tool({
|
|
25
|
-
title: "A forum group's topics",
|
|
26
|
-
description: "The topics of a forum group, newest activity first. A message in a topic carries its id as its thread. " +
|
|
27
|
-
"`search topics` matches titles.",
|
|
28
|
-
input: v.object({ chat: chatOf(messenger), limit, page }),
|
|
29
|
-
annotations: READ,
|
|
30
|
-
output: { entity: "topic", list: true },
|
|
31
|
-
online: async (adapter, { chat, ...rest }, defaults) => topicsPage(adapter, chat, undefined, rest, defaults),
|
|
32
|
-
}),
|
|
33
|
-
search_topics: tool({
|
|
34
|
-
title: "Find a forum group's topics by title",
|
|
35
|
-
description: "A forum group's topics whose title matches, asked of the messenger, newest activity first.",
|
|
36
|
-
input: v.object({
|
|
37
|
-
chat: chatOf(messenger),
|
|
38
|
-
text: v.pipe(v.string(), v.minLength(1), v.description("words from the topic's title")),
|
|
39
|
-
limit,
|
|
40
|
-
page,
|
|
41
|
-
}),
|
|
42
|
-
annotations: READ,
|
|
43
|
-
output: { entity: "topic", list: true },
|
|
44
|
-
online: async (adapter, { chat, text, ...rest }, defaults) => topicsPage(adapter, chat, text, rest, defaults),
|
|
45
|
-
}),
|
|
46
|
-
...(messenger.topicShow
|
|
47
|
-
? {
|
|
48
|
-
topics_show: tool({
|
|
49
|
-
title: "One forum topic",
|
|
50
|
-
description: "One topic of a forum group. Reading changes nothing.",
|
|
51
|
-
input: v.object({
|
|
52
|
-
chat: chatOf(messenger),
|
|
53
|
-
topic: v.pipe(v.string(), v.minLength(1), v.description("the topic id, from `topics list`")),
|
|
54
|
-
}),
|
|
55
|
-
annotations: { ...READ, idempotentHint: true },
|
|
56
|
-
output: { entity: "topic", list: false },
|
|
57
|
-
online: async (adapter, args, { guard }) => itemOf(topicAnswer(await servicesFor(onlineDeps(messenger, adapter, guard)).topics.show(args.chat, args.topic))),
|
|
58
|
-
}),
|
|
59
|
-
}
|
|
60
|
-
: {}),
|
|
61
|
-
});
|
|
62
|
-
const writeTopicTools = (messenger) => ({
|
|
63
|
-
topics_enable: tool({
|
|
64
|
-
title: "Enable forum topics",
|
|
65
|
-
description: "Only when the owner requested this change. A basic group requires explicit upgrade; its id changes. A partial failure reports the new chat id. Only the group owner can enable topics.",
|
|
66
|
-
input: v.object({ chat: chatOf(messenger), upgrade: v.optional(v.boolean()) }),
|
|
67
|
-
annotations: WRITE,
|
|
68
|
-
permission: "groups",
|
|
69
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await servicesFor(onlineDeps(messenger, adapter, guard)).topics.enable(args.chat, {
|
|
70
|
-
upgrade: args.upgrade === true,
|
|
71
|
-
}))),
|
|
72
|
-
}),
|
|
73
|
-
topics_create: tool({
|
|
74
|
-
title: "Create a forum topic",
|
|
75
|
-
description: "Only when the owner requested this topic. The group must already have topics enabled. On outcome_unknown, check `topics list` and do not repeat the creation, even with the same operation_id.",
|
|
76
|
-
input: v.object({
|
|
77
|
-
chat: chatOf(messenger),
|
|
78
|
-
title: v.pipe(v.string(), v.minLength(1)),
|
|
79
|
-
operation_id: v.optional(v.pipe(v.string(), v.minLength(1))),
|
|
80
|
-
}),
|
|
81
|
-
annotations: WRITE,
|
|
82
|
-
permission: "groups",
|
|
83
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await servicesFor(onlineDeps(messenger, adapter, guard)).topics.create(args.chat, args.title, {
|
|
84
|
-
...(args.operation_id === undefined ? {} : { sendId: args.operation_id }),
|
|
85
|
-
}))),
|
|
86
|
-
}),
|
|
87
|
-
topics_delete: tool({
|
|
88
|
-
title: "Delete a forum topic",
|
|
89
|
-
description: "Only when the owner asked to delete this topic. Deletes the topic and every message in it, for everyone; it " +
|
|
90
|
-
"cannot be undone, and asks first unless topics.delete is allow. The General topic (1) cannot be deleted. " +
|
|
91
|
-
"Returns { operation_id, chat_id, topic_id }. On outcome_unknown, read `topics list`: a topic that is gone was deleted.",
|
|
92
|
-
input: v.object({
|
|
93
|
-
chat: chatOf(messenger),
|
|
94
|
-
topic: v.pipe(v.string(), v.minLength(1), v.description("the topic id, from `topics list`")),
|
|
95
|
-
}),
|
|
96
|
-
annotations: WRITE,
|
|
97
|
-
permission: "groups",
|
|
98
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await servicesFor(onlineDeps(messenger, adapter, guard)).topics.delete(args.chat, args.topic))),
|
|
99
|
-
}),
|
|
100
|
-
topics_edit: tool({
|
|
101
|
-
title: "Rename, close, reopen, pin or unpin a forum topic",
|
|
102
|
-
description: "Only when the owner requested this change. title renames the topic; closed: true closes it to new messages, " +
|
|
103
|
-
"false reopens it; pinned: true pins it, false unpins it; hidden hides or shows the General topic. Returns { operation_id, chat_id, topic }. On outcome_unknown, repeating it is safe.",
|
|
104
|
-
input: v.object({
|
|
105
|
-
chat: chatOf(messenger),
|
|
106
|
-
topic: v.pipe(v.string(), v.minLength(1), v.description("the topic id, from `topics list`")),
|
|
107
|
-
title: v.optional(v.pipe(v.string(), v.minLength(1))),
|
|
108
|
-
closed: v.optional(v.boolean()),
|
|
109
|
-
pinned: v.optional(v.boolean()),
|
|
110
|
-
hidden: v.optional(v.pipe(v.boolean(), v.description("the General topic only"))),
|
|
111
|
-
}),
|
|
112
|
-
annotations: WRITE,
|
|
113
|
-
permission: "groups",
|
|
114
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await servicesFor(onlineDeps(messenger, adapter, guard)).topics.edit(args.chat, args.topic, {
|
|
115
|
-
...(args.title === undefined ? {} : { title: args.title }),
|
|
116
|
-
...(args.closed === undefined ? {} : { closed: args.closed }),
|
|
117
|
-
...(args.pinned === undefined ? {} : { pinned: args.pinned }),
|
|
118
|
-
...(args.hidden === undefined ? {} : { hidden: args.hidden }),
|
|
119
|
-
}))),
|
|
120
|
-
}),
|
|
121
|
-
topics_order: tool({
|
|
122
|
-
title: "Order the pinned forum topics",
|
|
123
|
-
description: "Only when the owner requested this order. Puts the pinned topics in the order given; it pins and unpins " +
|
|
124
|
-
"nothing. Returns { operation_id, chat_id, order }. On outcome_unknown, repeating it is safe.",
|
|
125
|
-
input: v.object({
|
|
126
|
-
chat: chatOf(messenger),
|
|
127
|
-
topics: v.pipe(v.array(v.pipe(v.string(), v.minLength(1))), v.minLength(1)),
|
|
128
|
-
}),
|
|
129
|
-
annotations: WRITE,
|
|
130
|
-
permission: "groups",
|
|
131
|
-
online: async (adapter, args, { guard }) => itemOf(snakeKeys(await servicesFor(onlineDeps(messenger, adapter, guard)).topics.order(args.chat, args.topics))),
|
|
132
|
-
}),
|
|
133
|
-
});
|
|
134
|
-
//# sourceMappingURL=topics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"topics.js","sourceRoot":"","sources":["../../../src/mcp/tools/topics.ts"],"names":[],"mappings":"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"}
|