@wirecat/cli-core 0.397.0 → 0.399.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/CHANGELOG.md +65 -0
- package/README.md +12 -9
- package/dist/cli/analysis-choice.d.ts +1 -0
- package/dist/cli/analysis-choice.js +3 -0
- package/dist/cli/bot/admins.js +14 -4
- package/dist/cli/bot/command.js +38 -16
- package/dist/cli/bot/examples.d.ts +3 -0
- package/dist/cli/bot/examples.js +2 -0
- package/dist/cli/bot/mcp.js +4 -1
- package/dist/cli/bot/messages.js +17 -6
- package/dist/cli/bot/moderation.js +16 -4
- package/dist/cli/bot/people.js +16 -4
- package/dist/cli/bot/setup.js +27 -8
- package/dist/cli/bot/watch.js +7 -1
- package/dist/cli/commands-command.js +1 -1
- package/dist/cli/config-command.js +1 -1
- package/dist/cli/embedding-choice.d.ts +2 -1
- package/dist/cli/embedding-choice.js +4 -1
- package/dist/cli/guide.js +0 -1
- package/dist/cli/help/command-help.d.ts +9 -2
- package/dist/cli/help/command-help.js +22 -4
- package/dist/cli/help/first-screen.js +3 -3
- package/dist/cli/messenger/account-command.js +2 -1
- package/dist/cli/messenger/admin-commands.js +18 -9
- package/dist/cli/messenger/archive-commands.js +2 -2
- package/dist/cli/messenger/backfill-command.js +3 -3
- package/dist/cli/messenger/catch-up-answers.d.ts +4 -1
- package/dist/cli/messenger/catch-up-answers.js +11 -3
- package/dist/cli/messenger/chats-command.js +2 -1
- package/dist/cli/messenger/chats-stats-command.js +1 -1
- package/dist/cli/messenger/complete-command.js +5 -1
- package/dist/cli/messenger/contacts-command.js +4 -3
- package/dist/cli/messenger/context.d.ts +7 -0
- package/dist/cli/messenger/conversations-command.js +27 -13
- package/dist/cli/messenger/doctor-command.js +2 -2
- package/dist/cli/messenger/flood-command.js +1 -1
- package/dist/cli/messenger/hearing-command.d.ts +1 -1
- package/dist/cli/messenger/hearing-command.js +1 -1
- package/dist/cli/messenger/inbox.js +7 -4
- package/dist/cli/messenger/lacks.d.ts +7 -0
- package/dist/cli/messenger/lacks.js +18 -1
- package/dist/cli/messenger/media-archive-move-command.js +0 -1
- package/dist/cli/messenger/media-archive-timer-command.js +2 -2
- package/dist/cli/messenger/messages-command.js +2 -1
- package/dist/cli/messenger/messages-stats-command.js +1 -1
- package/dist/cli/messenger/metadata-command.js +1 -1
- package/dist/cli/messenger/models-command.js +5 -2
- package/dist/cli/messenger/private-people-command.js +5 -3
- package/dist/cli/messenger/replies-command.js +1 -1
- package/dist/cli/messenger/replies-edit-command.d.ts +1 -1
- package/dist/cli/messenger/replies-edit-command.js +13 -5
- package/dist/cli/messenger/retention-command.js +1 -1
- package/dist/cli/messenger/review.js +13 -6
- package/dist/cli/messenger/schedule-command.js +3 -3
- package/dist/cli/messenger/search-command.js +2 -2
- package/dist/cli/messenger/searches-command.js +1 -1
- package/dist/cli/messenger/serve-command.js +5 -1
- package/dist/cli/messenger/serve-relay.d.ts +2 -0
- package/dist/cli/messenger/server-command.js +12 -3
- package/dist/cli/messenger/stats-command.js +1 -1
- package/dist/cli/messenger/store-maintenance-command.js +3 -3
- package/dist/cli/messenger/tags-command.js +11 -5
- package/dist/cli/messenger/transcribe-command.js +1 -1
- package/dist/cli/messenger/watch-command.js +5 -1
- package/dist/cli/runs/command.js +2 -3
- package/dist/cli/skill-command.js +1 -1
- package/dist/domain/models.d.ts +2 -0
- package/dist/mcp/prompts.js +8 -2
- package/dist/services/deps.d.ts +1 -1
- package/dist/services/deps.js +1 -1
- package/dist/services/inbox.js +5 -5
- package/dist/services/search-kind.js +1 -1
- package/package.json +4 -4
- package/parity.json +134 -234
|
@@ -51,6 +51,7 @@ export declare const serveRelay: (command: Command, messenger: Messenger) => {
|
|
|
51
51
|
scheduledSends?: boolean;
|
|
52
52
|
autoReplies?: boolean;
|
|
53
53
|
lacks?: readonly (keyof MessengerAdapter)[];
|
|
54
|
+
never?: readonly (keyof MessengerAdapter)[];
|
|
54
55
|
deleteForMe?: boolean;
|
|
55
56
|
topics?: boolean;
|
|
56
57
|
topicShow?: boolean;
|
|
@@ -77,6 +78,7 @@ export declare const serveRelay: (command: Command, messenger: Messenger) => {
|
|
|
77
78
|
inviteLinkRevoke?: boolean;
|
|
78
79
|
inviteLinkUpdate?: boolean;
|
|
79
80
|
joinRequestsAll?: boolean;
|
|
81
|
+
joinRequestsByLink?: boolean;
|
|
80
82
|
channelComments?: boolean;
|
|
81
83
|
addsWithHistory?: boolean;
|
|
82
84
|
adminRights?: readonly import("../../domain/models.js").AdminRight[];
|
|
@@ -60,7 +60,7 @@ const lockProcess = (app, marker, serveArgv) => (context, system, logPath) => ({
|
|
|
60
60
|
*/
|
|
61
61
|
export const serverCommand = (messenger, options = {}) => {
|
|
62
62
|
const { app } = messenger;
|
|
63
|
-
const command =
|
|
63
|
+
const command = new Command("server")
|
|
64
64
|
.summary("manage this profile's background server")
|
|
65
65
|
.description(`\`${app.command} serve\` in the background: start, stop, restart, status, logs; install adds a systemd or launchd unit`);
|
|
66
66
|
const marker = (profile) => `${app.envPrefix}_SERVER=${profile}`;
|
|
@@ -183,17 +183,26 @@ export const serverCommand = (messenger, options = {}) => {
|
|
|
183
183
|
return ["--idle", idle];
|
|
184
184
|
};
|
|
185
185
|
const withIdle = (sub) => options.idle ? sub.option("--idle <duration>", "stop after this long with nobody using it — 15m, 1h") : sub;
|
|
186
|
-
withIdle(destroysNothing(annotate(command.command("start"), {
|
|
186
|
+
withIdle(destroysNothing(annotate(command.command("start"), {
|
|
187
|
+
effects: LOCAL_WRITE,
|
|
188
|
+
mcp: false,
|
|
189
|
+
examples: [`${app.command} personal server start`],
|
|
190
|
+
}))
|
|
187
191
|
.summary("start this profile's background server")
|
|
188
192
|
.description("start serve in the background — through the unit if one is installed — and answer once it connects")).action(async function () {
|
|
189
193
|
await start(prepare(this), idleArgs(this));
|
|
190
194
|
});
|
|
191
|
-
destroysNothing(annotate(command.command("stop"), {
|
|
195
|
+
destroysNothing(annotate(command.command("stop"), {
|
|
196
|
+
effects: LOCAL_WRITE,
|
|
197
|
+
mcp: false,
|
|
198
|
+
examples: [`${app.command} personal server stop`],
|
|
199
|
+
}))
|
|
192
200
|
.description("stop this profile's serve — through the unit if it runs under one")
|
|
193
201
|
.action(async function () {
|
|
194
202
|
await stop(prepare(this));
|
|
195
203
|
});
|
|
196
204
|
withIdle(destroysNothing(annotate(command.command("restart"), {
|
|
205
|
+
mcp: false,
|
|
197
206
|
effects: LOCAL_WRITE,
|
|
198
207
|
examples: [`${app.command} personal server restart`],
|
|
199
208
|
})).description("stop it and start it again")).action(async function () {
|
|
@@ -49,7 +49,7 @@ export const statsCommand = (messenger, loadRenderer = chartRenderer) => {
|
|
|
49
49
|
.description("a chart's data from a chat's statistics, and optionally a dark SVG or PNG image")
|
|
50
50
|
.argument("<chat>", messenger.chatArgument)
|
|
51
51
|
.option("--chart-kind <messages|active|membership>", "what to draw: messages, active authors, or joins and leaves", chartKindOf, "messages")
|
|
52
|
-
.option("--by <
|
|
52
|
+
.option("--by <group>", "one point per calendar day or week (weeks start on Monday)", chartPeriodOf, "day")
|
|
53
53
|
.option("--since-time <time>", `ISO 8601, or 2h / 1d ago; ${EVENTS_DAYS} days ago if not given`)
|
|
54
54
|
.option("--timezone <zone>", "the IANA timezone for calendar days")
|
|
55
55
|
.option("--output <file>", "write a dark image to a new .svg or .png file")
|
|
@@ -152,7 +152,7 @@ const copiesCommand = () => new Command("copies").description("the tables `store
|
|
|
152
152
|
const deleted = await reading(path, (database) => deleteCopy(database, name));
|
|
153
153
|
result(this, { path, deleted });
|
|
154
154
|
}));
|
|
155
|
-
const infoCommand = () => annotate(new Command("info"), { effects: LOCAL_READ
|
|
155
|
+
const infoCommand = () => annotate(new Command("info"), { effects: LOCAL_READ })
|
|
156
156
|
.summary("the local archive's format, size and contents")
|
|
157
157
|
.description("the store file: where it is, its size, its schema and how many rows it holds; changes nothing")
|
|
158
158
|
.action(async function () {
|
|
@@ -182,7 +182,7 @@ const infoCommand = () => annotate(new Command("info"), { effects: LOCAL_READ, m
|
|
|
182
182
|
* fetched" (NEED-399 A). Times are the chat's newest message by the messenger's list against the
|
|
183
183
|
* newest message held, not `sync_ranges`: those are in message ids, which a chat list does not give.
|
|
184
184
|
*/
|
|
185
|
-
const checkCommand = (messenger) => annotate(new Command("check"), { effects: LOCAL_READ
|
|
185
|
+
const checkCommand = (messenger) => annotate(new Command("check"), { effects: LOCAL_READ })
|
|
186
186
|
.summary("check the local archive for problems")
|
|
187
187
|
.description("whether the store is healthy — integrity, search indexes, disk, and which chats are behind")
|
|
188
188
|
.action(async function () {
|
|
@@ -431,7 +431,7 @@ const buildNoteIndex = (database, note, { reset = false } = {}) => {
|
|
|
431
431
|
note(`indexing ${pending} notes`);
|
|
432
432
|
return { notesIndexed: drainNoteIndex(database, stemmerCache()) };
|
|
433
433
|
};
|
|
434
|
-
const reindexCommand = (messenger) => destroysNothing(annotate(new Command("reindex"), { effects: LOCAL_WRITE
|
|
434
|
+
const reindexCommand = (messenger) => destroysNothing(annotate(new Command("reindex"), { effects: LOCAL_WRITE }))
|
|
435
435
|
.summary("rebuild the local archive's search indexes")
|
|
436
436
|
.description("rebuild the word index, its typo vocabulary, the stems, the files' word index, the notes' indexes and who took part in what, from what is stored; loses nothing")
|
|
437
437
|
.action(async function () {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CliError } from "@wirecat/cli-base";
|
|
2
2
|
import { annotate } from "@wirecat/cli-base/commands";
|
|
3
|
-
import { Command } from "commander";
|
|
3
|
+
import { Command, Option } from "commander";
|
|
4
4
|
import { TAGGING_QUERY } from "../../services/tags.js";
|
|
5
5
|
import { changesStore, FETCH, LOCAL_READ, LOCAL_WRITE } from "../effects.js";
|
|
6
6
|
import { itemOf, renderAnswer, snakeKeys } from "../envelope.js";
|
|
@@ -23,7 +23,7 @@ const describe = ({ type, chatId, personId, messageId, taskId }) => type === "ch
|
|
|
23
23
|
const line = (one) => `${one.tag} ${one.type} ${one.name ?? ""} (${one.target})`;
|
|
24
24
|
const sourceOf = (value) => {
|
|
25
25
|
if (value !== "manual" && value !== "auto")
|
|
26
|
-
throw new CliError("validation_error", "--
|
|
26
|
+
throw new CliError("validation_error", "--claim takes manual or auto");
|
|
27
27
|
return value;
|
|
28
28
|
};
|
|
29
29
|
/** The owner's labels, in the local store only: `tag:` in a search finds what they label. */
|
|
@@ -35,7 +35,7 @@ export const tagsCommand = (messenger) => {
|
|
|
35
35
|
changesStore(annotate(tags.command("auto"), { effects: FETCH, examples: [`${tool} tags auto --chat "Book club" --dry-run`] }))
|
|
36
36
|
.description("derive local group/channel tags from cached metadata using keyword rules")
|
|
37
37
|
.option("--chat <chat>", "a stored group/channel; repeat to select several", (value, previous) => [...previous, value], [])
|
|
38
|
-
.option("--limit <
|
|
38
|
+
.option("--limit <n>", "process at most 1–500 chats", positiveCount("--limit"), 50)
|
|
39
39
|
.option("--sync-first", "read current descriptions from the messenger before classifying")
|
|
40
40
|
.option("--dry-run", "preview cached classification without changing the store")
|
|
41
41
|
.action(async function () {
|
|
@@ -62,12 +62,18 @@ export const tagsCommand = (messenger) => {
|
|
|
62
62
|
effects: LOCAL_WRITE,
|
|
63
63
|
examples: [`${tool} tags remove reading --chat "Book club"`],
|
|
64
64
|
}).description("take tags off one chat, person, message or task"), messenger, "untag")
|
|
65
|
-
.
|
|
65
|
+
.addOption(new Option("--claim <claim>", "remove only this ownership claim: manual or auto")
|
|
66
|
+
.argParser(sourceOf)
|
|
67
|
+
.conflicts("source"))
|
|
68
|
+
.addOption(new Option("--source <manual|auto>", "compatibility alias for --claim")
|
|
69
|
+
.argParser(sourceOf)
|
|
70
|
+
.hideHelp()
|
|
71
|
+
.conflicts("claim"))
|
|
66
72
|
.action(async function (given) {
|
|
67
73
|
const context = messengerContext(this, messenger);
|
|
68
74
|
refuseLocalWrite(context, messenger.app.command, "tags.remove");
|
|
69
75
|
const target = this.opts();
|
|
70
|
-
const done = await context.withServices((services) => services.tags.remove(target, given, this.opts().source));
|
|
76
|
+
const done = await context.withServices((services) => services.tags.remove(target, given, this.opts().claim ?? this.opts().source));
|
|
71
77
|
renderAnswer(this, context, itemOf(snakeKeys(done)), () => done.removed.length ? `${describe(done.target)}: ${done.removed.join(", ")} removed\n` : "");
|
|
72
78
|
if (done.unchanged.length && context.format === "pretty")
|
|
73
79
|
context.renderer.note(`not there: ${done.unchanged.join(", ")}`);
|
|
@@ -17,7 +17,7 @@ export const transcribeSubcommand = (messages, messenger) => annotate(messages.c
|
|
|
17
17
|
.argument("<chat>", messenger.chatArgument)
|
|
18
18
|
.argument("<message>", "the id of a voice message")
|
|
19
19
|
.option("--local", "use the model on this machine, never the messenger")
|
|
20
|
-
.option("--model <
|
|
20
|
+
.option("--model <model>", "which downloaded model; implies --local (`models audio list`)")
|
|
21
21
|
.action(async function (chat, messageId) {
|
|
22
22
|
const context = messengerContext(this, messenger);
|
|
23
23
|
const choice = {
|
|
@@ -11,7 +11,11 @@ import { messengerContext } from "./context.js";
|
|
|
11
11
|
* for a minute is a complete answer. One `MessageHit` per line with `--jsonl`; `--json` is refused,
|
|
12
12
|
* because a stream is not one value. Nothing is marked read.
|
|
13
13
|
*/
|
|
14
|
-
export const watchCommand = (messenger) => annotate(new Command("watch"), {
|
|
14
|
+
export const watchCommand = (messenger) => annotate(new Command("watch"), {
|
|
15
|
+
effects: REMOTE_READ,
|
|
16
|
+
lifetime: "persistent",
|
|
17
|
+
examples: [`${messenger.app.command} personal watch --jsonl --timeout 30s`],
|
|
18
|
+
})
|
|
15
19
|
.summary("stream new messages until interrupted or timed out")
|
|
16
20
|
.description("print new messages as they arrive, until Ctrl-C or --timeout (either ends it normally)")
|
|
17
21
|
.option("--events", "also edits, deletions, reactions, poll votes and chat events; every line then names its event")
|
package/dist/cli/runs/command.js
CHANGED
|
@@ -20,7 +20,6 @@ export const runsCommand = (app) => {
|
|
|
20
20
|
};
|
|
21
21
|
annotate(command.command("list"), {
|
|
22
22
|
effects: LOCAL_READ,
|
|
23
|
-
mcp: false,
|
|
24
23
|
examples: [`${app.command} runs list --limit 10`],
|
|
25
24
|
})
|
|
26
25
|
.description("recorded runs, newest first")
|
|
@@ -36,7 +35,7 @@ export const runsCommand = (app) => {
|
|
|
36
35
|
if (runs.length === 0)
|
|
37
36
|
renderer.note("nothing recorded — a run is kept with `--record`, or when it fails");
|
|
38
37
|
});
|
|
39
|
-
annotate(command.command("show"), { effects: LOCAL_READ,
|
|
38
|
+
annotate(command.command("show"), { effects: LOCAL_READ, examples: [`${app.command} runs show run-101`] })
|
|
40
39
|
.argument("<run-id>", `an id from \`${app.command} runs list\``)
|
|
41
40
|
.description("one run: what it was, how it ended, and every event it logged")
|
|
42
41
|
.option("--problems", "only failed responses, warnings and crashes")
|
|
@@ -86,7 +85,7 @@ export const runsCommand = (app) => {
|
|
|
86
85
|
since_time: options.sinceTime,
|
|
87
86
|
}));
|
|
88
87
|
});
|
|
89
|
-
annotate(command.command("path"), { effects: NO_EFFECTS,
|
|
88
|
+
annotate(command.command("path"), { effects: NO_EFFECTS, examples: [`${app.command} runs path run-101`] })
|
|
90
89
|
.argument("<run-id>", `an id from \`${app.command} runs list\``)
|
|
91
90
|
.description("the directory holding one run")
|
|
92
91
|
.action(function (id) {
|
|
@@ -20,7 +20,7 @@ export const skillCommand = (app, skill) => {
|
|
|
20
20
|
const show = command.commands.find((sub) => sub.name() === "show");
|
|
21
21
|
if (show)
|
|
22
22
|
annotate(show, { examples: [`${app.command} skill show`, `${app.command} skill show follow-ups`] });
|
|
23
|
-
return
|
|
23
|
+
return command;
|
|
24
24
|
};
|
|
25
25
|
/** Skills this package ships for every CLI on it, printed by `skill show <name>`: `skills/` beside `dist/` and `src/`. */
|
|
26
26
|
const SHARED_SKILLS = {
|
package/dist/domain/models.d.ts
CHANGED
|
@@ -506,6 +506,8 @@ export interface Review {
|
|
|
506
506
|
closed: number;
|
|
507
507
|
review: number;
|
|
508
508
|
};
|
|
509
|
+
/** `--offline`: read from the local store, so it holds only what was already synced. */
|
|
510
|
+
offline?: true;
|
|
509
511
|
}
|
|
510
512
|
/** One change to who is in a chat, or to the chat itself, read from a service message. */
|
|
511
513
|
export interface ChatEvent {
|
package/dist/mcp/prompts.js
CHANGED
|
@@ -42,9 +42,15 @@ export const registerPrompts = (server, { command, name }) => {
|
|
|
42
42
|
?.split(",")
|
|
43
43
|
.map((one) => one.trim())
|
|
44
44
|
.filter((one) => one.length > 0);
|
|
45
|
+
const query = [
|
|
46
|
+
kinds?.length ? `kind:${JSON.stringify(kinds.join(","))}` : "",
|
|
47
|
+
mode === undefined || mode === "unread" || mode === "new" ? "" : after(mode),
|
|
48
|
+
]
|
|
49
|
+
.filter(Boolean)
|
|
50
|
+
.join(" ");
|
|
45
51
|
const args = {
|
|
46
|
-
...(
|
|
47
|
-
...(mode ===
|
|
52
|
+
...(query ? { query } : {}),
|
|
53
|
+
...(mode === "new" ? { new: true } : {}),
|
|
48
54
|
};
|
|
49
55
|
return asked([
|
|
50
56
|
`Catch me up on ${name}. Call ${call(`${command}_read`, "inbox", args)} once.`,
|
package/dist/services/deps.d.ts
CHANGED
|
@@ -70,7 +70,7 @@ export declare const fromStore: (deps: Pick<ServiceDeps, "offline" | "reads">) =
|
|
|
70
70
|
export declare const nothingStored: (messenger: MessengerTraits) => string;
|
|
71
71
|
/** Where a store-mode messenger's history comes from, for what it cannot do. */
|
|
72
72
|
export declare const PUSHED = "this messenger's history is read from the local store";
|
|
73
|
-
export declare const OFFLINE = "--offline answers only from what is kept locally: `chats list|show`, `messages list|show|context
|
|
73
|
+
export declare const OFFLINE = "--offline answers only from what is kept locally: `chats list|show`, `messages list|show|context`, `contacts list|show` and `review`";
|
|
74
74
|
/** Over a connection that is already open — an MCP session holds one for minutes. */
|
|
75
75
|
export declare const onlineDeps: (messenger: ServiceMessenger, adapter: MessengerAdapter, guard: SendGuard, where?: {
|
|
76
76
|
profile?: string;
|
package/dist/services/deps.js
CHANGED
|
@@ -55,7 +55,7 @@ export const fromStore = (deps) => deps.offline || deps.reads === "store";
|
|
|
55
55
|
export const nothingStored = (messenger) => `nothing stored for this chat yet — keep \`${typedCommand(messenger.app.command, "serve")}\` running`;
|
|
56
56
|
/** Where a store-mode messenger's history comes from, for what it cannot do. */
|
|
57
57
|
export const PUSHED = "this messenger's history is read from the local store";
|
|
58
|
-
export const OFFLINE = "--offline answers only from what is kept locally: `chats list|show`, `messages list|show|context
|
|
58
|
+
export const OFFLINE = "--offline answers only from what is kept locally: `chats list|show`, `messages list|show|context`, `contacts list|show` and `review`";
|
|
59
59
|
/** Over a connection that is already open — an MCP session holds one for minutes. */
|
|
60
60
|
export const onlineDeps = (messenger, adapter, guard, where = {}) => ({
|
|
61
61
|
messenger,
|
package/dist/services/inbox.js
CHANGED
|
@@ -234,7 +234,7 @@ export const reviewIn = async (adapter, { since, points, chat, kinds, all = fals
|
|
|
234
234
|
};
|
|
235
235
|
export const inboxService = (deps) => {
|
|
236
236
|
const reader = async () => {
|
|
237
|
-
if (deps.reads === "store")
|
|
237
|
+
if (deps.reads === "store" || deps.offline)
|
|
238
238
|
return storeReader(deps, await deps.store(), await deps.account());
|
|
239
239
|
const connection = await deps.connection();
|
|
240
240
|
return {
|
|
@@ -256,9 +256,7 @@ export const inboxService = (deps) => {
|
|
|
256
256
|
: newIn(from, { since, limit, all, ...only, ...(points === undefined ? {} : { points }) });
|
|
257
257
|
},
|
|
258
258
|
review: async (options) => {
|
|
259
|
-
|
|
260
|
-
throw new CliError("validation_error", "`review` asks the messenger what changed; with `--offline` nothing did");
|
|
261
|
-
}
|
|
259
|
+
const synced = deps.offline && deps.reads !== "store";
|
|
262
260
|
let tasks;
|
|
263
261
|
const found = await reviewIn(await reader(), {
|
|
264
262
|
...options,
|
|
@@ -272,7 +270,9 @@ export const inboxService = (deps) => {
|
|
|
272
270
|
});
|
|
273
271
|
},
|
|
274
272
|
});
|
|
275
|
-
|
|
273
|
+
// What was never synced may sit before `until`, so the next review must not start there.
|
|
274
|
+
const offline = synced ? { complete: false, offline: true } : {};
|
|
275
|
+
return { ...found, ...offline, ...(tasks ? { tasks } : {}) };
|
|
276
276
|
},
|
|
277
277
|
};
|
|
278
278
|
};
|
|
@@ -50,7 +50,7 @@ export const accountsOfKind = (kind, chosen, held, explicit, command = undefined
|
|
|
50
50
|
throw new CliError("validation_error", `search mail reads mail only — \`${command === undefined ? "" : `${command} `}search messages\` searches ${explicit}`);
|
|
51
51
|
const mail = (listed ? chosen : held).filter(({ provider }) => kindOf(provider) === "mail");
|
|
52
52
|
if (mail.length === 0)
|
|
53
|
-
throw new CliError("not_found", "no mail in the store yet — `memo sync --mail --since-time <time>` imports it", {
|
|
53
|
+
throw new CliError("not_found", "no mail in the store yet — `memo sync --only mail --since-time <time>` imports it", {
|
|
54
54
|
reason: NO_MAIL,
|
|
55
55
|
});
|
|
56
56
|
const address = mailAccount?.trim().toLowerCase();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wirecat/cli-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.399.0",
|
|
4
4
|
"description": "The messenger-neutral half of a messaging CLI: domain model, message locators, rendering, name resolution, the SQLite seam, the command skeleton and shared read commands, the send guard, run records and the message store",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Viacheslav Ptsarev",
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"@anthropic-ai/sdk": "0.131.0",
|
|
166
166
|
"@bomb.sh/tab": "0.0.22",
|
|
167
167
|
"@huggingface/tokenizers": "0.2.0",
|
|
168
|
-
"@modelcontextprotocol/server": "2.
|
|
168
|
+
"@modelcontextprotocol/server": "2.3.0",
|
|
169
169
|
"@resvg/resvg-js": "2.6.2",
|
|
170
170
|
"@valibot/to-json-schema": "1.8.0",
|
|
171
171
|
"@wirecat/cli-core-onnx": "1.0.1",
|
|
@@ -207,7 +207,7 @@
|
|
|
207
207
|
"@types/node": "^22.20.4",
|
|
208
208
|
"@types/pngjs": "6.0.5",
|
|
209
209
|
"@vitest/coverage-v8": "^5.0.2",
|
|
210
|
-
"@wirecat/cli-base": "0.50.
|
|
210
|
+
"@wirecat/cli-base": "0.50.2",
|
|
211
211
|
"commander": "15.0.0",
|
|
212
212
|
"cspell": "10.3.6",
|
|
213
213
|
"drizzle-kit": "1.0.0-rc.4",
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
},
|
|
228
228
|
"peerDependencies": {
|
|
229
229
|
"@napi-rs/canvas": ">=0.1.69 <2",
|
|
230
|
-
"@wirecat/cli-base": ">=0.50.
|
|
230
|
+
"@wirecat/cli-base": ">=0.50.2 <0.51.0",
|
|
231
231
|
"commander": ">=15"
|
|
232
232
|
},
|
|
233
233
|
"bin": {
|