@leemour/max-cli 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -4
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +10 -4
- package/dist/cache/index.js.map +1 -1
- package/dist/client.d.ts +35 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +178 -44
- package/dist/client.js.map +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +6 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cache.d.ts.map +1 -1
- package/dist/commands/cache.js +6 -5
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/chats.js +2 -2
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/complete.d.ts.map +1 -1
- package/dist/commands/complete.js +28 -22
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +5 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context.d.ts +4 -0
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +6 -14
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/doctor.js +51 -39
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/mcp.js +3 -3
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +6 -4
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +29 -23
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/recipients.d.ts.map +1 -1
- package/dist/commands/recipients.js +25 -17
- package/dist/commands/recipients.js.map +1 -1
- package/dist/commands/sends.d.ts.map +1 -1
- package/dist/commands/sends.js +8 -6
- package/dist/commands/sends.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +43 -35
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +6 -10
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/watch.d.ts +17 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +73 -38
- package/dist/commands/watch.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -2
- package/dist/config.js.map +1 -1
- package/dist/diagnose.d.ts +4 -3
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +4 -4
- package/dist/diagnose.js.map +1 -1
- package/dist/domain/models.d.ts +20 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/download.d.ts +22 -3
- package/dist/download.d.ts.map +1 -1
- package/dist/download.js +133 -27
- package/dist/download.js.map +1 -1
- package/dist/export.d.ts +3 -0
- package/dist/export.d.ts.map +1 -1
- package/dist/export.js +13 -9
- package/dist/export.js.map +1 -1
- package/dist/generated/client.generated.d.ts +9 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +9 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +3 -0
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +3 -0
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +20 -0
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +6 -0
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/mcp/confirm.d.ts +21 -9
- package/dist/mcp/confirm.d.ts.map +1 -1
- package/dist/mcp/confirm.js +55 -29
- package/dist/mcp/confirm.js.map +1 -1
- package/dist/mcp/instructions.js +3 -3
- package/dist/mcp/instructions.js.map +1 -1
- package/dist/mcp/prompts.d.ts +7 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +45 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +12 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +42 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +4 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +143 -15
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +24 -2
- package/dist/output.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +51 -5
- package/dist/program.js.map +1 -1
- package/dist/protocol/connection.d.ts +2 -0
- package/dist/protocol/connection.d.ts.map +1 -1
- package/dist/protocol/connection.js +27 -5
- package/dist/protocol/connection.js.map +1 -1
- package/dist/protocol/frame.d.ts +2 -0
- package/dist/protocol/frame.d.ts.map +1 -1
- package/dist/protocol/frame.js +3 -1
- package/dist/protocol/frame.js.map +1 -1
- package/dist/protocol/lz4.js +8 -5
- package/dist/protocol/lz4.js.map +1 -1
- package/dist/rendering/messages.js +9 -10
- package/dist/rendering/messages.js.map +1 -1
- package/dist/report.d.ts +10 -6
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +45 -11
- package/dist/report.js.map +1 -1
- package/dist/resolve.d.ts +4 -3
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +9 -10
- package/dist/resolve.js.map +1 -1
- package/dist/runs/recording.d.ts +1 -0
- package/dist/runs/recording.d.ts.map +1 -1
- package/dist/runs/recording.js +13 -0
- package/dist/runs/recording.js.map +1 -1
- package/dist/sends/guard.d.ts +35 -4
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +128 -28
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/journal.d.ts +17 -3
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js +62 -2
- package/dist/sends/journal.js.map +1 -1
- package/dist/sends/recipients.d.ts +3 -1
- package/dist/sends/recipients.d.ts.map +1 -1
- package/dist/sends/recipients.js +7 -2
- package/dist/sends/recipients.js.map +1 -1
- package/dist/server/lines.d.ts +8 -2
- package/dist/server/lines.d.ts.map +1 -1
- package/dist/server/lines.js +13 -2
- package/dist/server/lines.js.map +1 -1
- package/dist/server/server-connection.d.ts +9 -6
- package/dist/server/server-connection.d.ts.map +1 -1
- package/dist/server/server-connection.js +16 -7
- package/dist/server/server-connection.js.map +1 -1
- package/dist/server/server.d.ts +11 -4
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +132 -20
- package/dist/server/server.js.map +1 -1
- package/dist/server/start.d.ts +2 -0
- package/dist/server/start.d.ts.map +1 -1
- package/dist/server/start.js +8 -3
- package/dist/server/start.js.map +1 -1
- package/dist/session/handshake.d.ts +12 -1
- package/dist/session/handshake.d.ts.map +1 -1
- package/dist/session/handshake.js +4 -2
- package/dist/session/handshake.js.map +1 -1
- package/dist/session/prompt.d.ts.map +1 -1
- package/dist/session/prompt.js +7 -1
- package/dist/session/prompt.js.map +1 -1
- package/dist/session/store.d.ts +9 -2
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +19 -4
- package/dist/session/store.js.map +1 -1
- package/dist/spec/define.d.ts +12 -0
- package/dist/spec/define.d.ts.map +1 -1
- package/dist/spec/define.js.map +1 -1
- package/dist/spec/guards.d.ts +16 -0
- package/dist/spec/guards.d.ts.map +1 -0
- package/dist/spec/guards.js +30 -0
- package/dist/spec/guards.js.map +1 -0
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +6 -0
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/account.d.ts.map +1 -1
- package/dist/spec/operations/account.js +3 -0
- package/dist/spec/operations/account.js.map +1 -1
- package/dist/spec/operations/assets.d.ts +10 -0
- package/dist/spec/operations/assets.d.ts.map +1 -0
- package/dist/spec/operations/assets.js +20 -0
- package/dist/spec/operations/assets.js.map +1 -0
- package/dist/spec/operations/attachments.d.ts.map +1 -1
- package/dist/spec/operations/attachments.js +2 -0
- package/dist/spec/operations/attachments.js.map +1 -1
- package/dist/spec/operations/banners.d.ts +7 -0
- package/dist/spec/operations/banners.d.ts.map +1 -0
- package/dist/spec/operations/banners.js +16 -0
- package/dist/spec/operations/banners.js.map +1 -0
- package/dist/spec/operations/calls.d.ts +8 -0
- package/dist/spec/operations/calls.d.ts.map +1 -0
- package/dist/spec/operations/calls.js +18 -0
- package/dist/spec/operations/calls.js.map +1 -0
- package/dist/spec/operations/chats.d.ts.map +1 -1
- package/dist/spec/operations/chats.js +46 -0
- package/dist/spec/operations/chats.js.map +1 -1
- package/dist/spec/operations/contacts.d.ts.map +1 -1
- package/dist/spec/operations/contacts.js +8 -0
- package/dist/spec/operations/contacts.js.map +1 -1
- package/dist/spec/operations/folders.d.ts.map +1 -1
- package/dist/spec/operations/folders.js +5 -0
- package/dist/spec/operations/folders.js.map +1 -1
- package/dist/spec/operations/login.d.ts.map +1 -1
- package/dist/spec/operations/login.js +6 -0
- package/dist/spec/operations/login.js.map +1 -1
- package/dist/spec/operations/messages.d.ts.map +1 -1
- package/dist/spec/operations/messages.js +50 -0
- package/dist/spec/operations/messages.js.map +1 -1
- package/dist/spec/operations/session.d.ts +5 -1
- package/dist/spec/operations/session.d.ts.map +1 -1
- package/dist/spec/operations/session.js +9 -1
- package/dist/spec/operations/session.js.map +1 -1
- package/dist/spec/operations/uploads.d.ts.map +1 -1
- package/dist/spec/operations/uploads.js +2 -0
- package/dist/spec/operations/uploads.js.map +1 -1
- package/dist/transcribe/index.d.ts.map +1 -1
- package/dist/transcribe/index.js +4 -1
- package/dist/transcribe/index.js.map +1 -1
- package/dist/transcribe/install.d.ts +3 -1
- package/dist/transcribe/install.d.ts.map +1 -1
- package/dist/transcribe/install.js +24 -1
- package/dist/transcribe/install.js.map +1 -1
- package/dist/upload.d.ts +3 -1
- package/dist/upload.d.ts.map +1 -1
- package/dist/upload.js +34 -4
- package/dist/upload.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +11 -11
- package/skills/max-cli/SKILL.md +6 -2
- package/dist/testing/mock-max.d.ts +0 -49
- package/dist/testing/mock-max.d.ts.map +0 -1
- package/dist/testing/mock-max.js +0 -80
- package/dist/testing/mock-max.js.map +0 -1
- package/dist/testing/sandbox.d.ts +0 -2
- package/dist/testing/sandbox.d.ts.map +0 -1
- package/dist/testing/sandbox.js +0 -36
- package/dist/testing/sandbox.js.map +0 -1
- package/dist/testing/unscripted.d.ts +0 -2
- package/dist/testing/unscripted.d.ts.map +0 -1
- package/dist/testing/unscripted.js +0 -18
- package/dist/testing/unscripted.js.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { script } from "@bomb.sh/tab";
|
|
3
|
-
import { CliError,
|
|
3
|
+
import { CliError, singleLine } from "@leemour/cli-core";
|
|
4
4
|
import { describeOptions, describeProgram } from "@leemour/cli-core/commands";
|
|
5
5
|
import { formatSuggestions, suggest } from "@leemour/cli-core/completion";
|
|
6
6
|
import { Command } from "commander";
|
|
7
7
|
import { openProfileCache, profileCacheFile } from "../cache/index.js";
|
|
8
8
|
import { configuredProfiles } from "../config.js";
|
|
9
|
-
import { commandWords, DEFAULT_PROFILE, liftProfile, rootOf } from "../profile.js";
|
|
9
|
+
import { commandWords, DEFAULT_PROFILE, liftProfile, rootOf, usableProfileName } from "../profile.js";
|
|
10
10
|
import { outputFor } from "./context.js";
|
|
11
11
|
const SHELLS = ["zsh", "bash", "fish", "powershell"];
|
|
12
12
|
/**
|
|
@@ -37,7 +37,7 @@ export const completeCommand = () => new Command("complete")
|
|
|
37
37
|
}
|
|
38
38
|
// The last word is still being typed, so it is never taken for a profile: `mess` is on its way to `messages`.
|
|
39
39
|
const { profile, rest } = words.length > 1 ? liftProfile(words, commandWords(root)) : { profile: undefined, rest: words };
|
|
40
|
-
const cache = await readableCache(profile ?? process.env.MAX_PROFILE ?? DEFAULT_PROFILE);
|
|
40
|
+
const cache = await readableCache(profile ?? process.env.MAX_PROFILE_LOCK ?? process.env.MAX_PROFILE ?? DEFAULT_PROFILE);
|
|
41
41
|
try {
|
|
42
42
|
const suggestions = suggest({
|
|
43
43
|
commands: describeProgram(root),
|
|
@@ -51,7 +51,19 @@ export const completeCommand = () => new Command("complete")
|
|
|
51
51
|
cache?.close();
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
|
-
|
|
54
|
+
/** A half-typed or odd first word, or another profile than a locked one, gets no names rather than an error. */
|
|
55
|
+
const readableCache = async (profile) => {
|
|
56
|
+
const lock = process.env.MAX_PROFILE_LOCK;
|
|
57
|
+
if (lock && profile !== lock)
|
|
58
|
+
return undefined;
|
|
59
|
+
try {
|
|
60
|
+
usableProfileName(profile);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return existsSync(profileCacheFile(profile)) ? openProfileCache(profile) : undefined;
|
|
66
|
+
};
|
|
55
67
|
const sourcesFrom = (cache, atTheStart) => {
|
|
56
68
|
const chats = () => (cache ? chatSuggestions(cache) : []);
|
|
57
69
|
return {
|
|
@@ -60,24 +72,18 @@ const sourcesFrom = (cache, atTheStart) => {
|
|
|
60
72
|
...(atTheStart ? { firstWord: profileNames } : {}),
|
|
61
73
|
};
|
|
62
74
|
};
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const username = person.username && visibleControls(person.username) === person.username ? person.username : null;
|
|
76
|
-
return [
|
|
77
|
-
{ value: person.id, description: name },
|
|
78
|
-
...(username ? [{ value: `@${username}`, description: name }] : []),
|
|
79
|
-
];
|
|
80
|
-
});
|
|
75
|
+
/**
|
|
76
|
+
* **Ids only, never a title or a name as the word.** bash's `compgen -W` expands `$(…)` in every
|
|
77
|
+
* word it is given, and a title is whatever somebody else typed — so the id is the word, and the
|
|
78
|
+
* title rides along as a description, on one line: bash splits the answer on newlines, so a
|
|
79
|
+
* newline in a title would become a word of its own.
|
|
80
|
+
*/
|
|
81
|
+
const chatSuggestions = (cache) => cache.chats
|
|
82
|
+
.page({ limit: 500, offset: 0 })
|
|
83
|
+
.map((chat) => ({ value: chat.id, description: singleLine(chat.title ?? "") }));
|
|
84
|
+
const personSuggestions = (cache) => cache.people
|
|
85
|
+
.page({ order: "name", limit: 500, offset: 0 })
|
|
86
|
+
.map((person) => ({ value: person.id, description: singleLine(person.name ?? "") }));
|
|
81
87
|
const profileNames = () => {
|
|
82
88
|
try {
|
|
83
89
|
return configuredProfiles();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmBnC,eAAO,MAAM,aAAa,QAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmBnC,eAAO,MAAM,aAAa,QAAO,OA0EhC,CAAA"}
|
package/dist/commands/config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, readdirSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { pathsAreOverridden, resolvePaths } from "@leemour/cli-core";
|
|
3
|
+
import { CliError, pathsAreOverridden, resolvePaths } from "@leemour/cli-core";
|
|
4
4
|
import { Command } from "commander";
|
|
5
5
|
import { ALL_SETTINGS, changeSetting } from "../config.js";
|
|
6
6
|
import { forCommand } from "./context.js";
|
|
@@ -64,6 +64,10 @@ export const configCommand = () => {
|
|
|
64
64
|
const value = action === "set" ? String(given) : undefined;
|
|
65
65
|
const { settings, renderer } = forCommand(this);
|
|
66
66
|
const defaults = this.opts().defaults === true;
|
|
67
|
+
if (defaults && process.env.MAX_PROFILE_LOCK) {
|
|
68
|
+
// The defaults are every other profile's settings too.
|
|
69
|
+
throw new CliError("permission_error", `this process is locked to profile ${settings.profile} (MAX_PROFILE_LOCK) — --defaults changes every profile`);
|
|
70
|
+
}
|
|
67
71
|
const saved = changeSetting(settings.configPath, {
|
|
68
72
|
profile: defaults ? undefined : settings.profile,
|
|
69
73
|
setting,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { Command } from "commander";
|
|
|
3
3
|
import { MaxClient, type MaxClientOptions } from "../client.js";
|
|
4
4
|
import { type GlobalFlags, type Settings } from "../config.js";
|
|
5
5
|
import { type Closeable } from "../deadline.js";
|
|
6
|
+
import { type Reach } from "../download.js";
|
|
6
7
|
import { type BrowserDoors } from "../session/browser.js";
|
|
7
8
|
import { SessionStore } from "../session/store.js";
|
|
8
9
|
import type { UpdateEnvironment } from "../update.js";
|
|
@@ -18,6 +19,8 @@ export interface Environment {
|
|
|
18
19
|
/** A fresh connection per client — to a scripted MAX in a test. */
|
|
19
20
|
connection?: () => NonNullable<MaxClientOptions["connection"]>;
|
|
20
21
|
browser?: BrowserDoors;
|
|
22
|
+
/** Where a download may go; a test serving files from this machine allows it. */
|
|
23
|
+
reach?: Reach;
|
|
21
24
|
ask?: Ask;
|
|
22
25
|
interactive?: boolean;
|
|
23
26
|
columns?: number;
|
|
@@ -66,6 +69,7 @@ export interface CommandContext {
|
|
|
66
69
|
/** Anything else holding the process open — a browser, a local page — for `--timeout` to shut too. */
|
|
67
70
|
track: (closeable: Closeable) => void;
|
|
68
71
|
browser: BrowserDoors;
|
|
72
|
+
reach: Reach;
|
|
69
73
|
ask: Ask;
|
|
70
74
|
/** Whether a person is there to scan a code or type one: both stdin and stderr are a terminal. */
|
|
71
75
|
interactive: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,KAAK,SAAS,EAAgB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/context.js
CHANGED
|
@@ -2,12 +2,11 @@ import { existsSync } from "node:fs";
|
|
|
2
2
|
import { MaxClient } from "../client.js";
|
|
3
3
|
import { resolveSettings } from "../config.js";
|
|
4
4
|
import { withDeadline } from "../deadline.js";
|
|
5
|
+
import { publicOnly } from "../download.js";
|
|
5
6
|
import { resolveOutput } from "../output.js";
|
|
6
7
|
import { rootOf } from "../profile.js";
|
|
7
8
|
import { recorded } from "../runs/recording.js";
|
|
8
|
-
import {
|
|
9
|
-
import { SendJournal, sendsPathFor } from "../sends/journal.js";
|
|
10
|
-
import { RecipientList, recipientsPathFor } from "../sends/recipients.js";
|
|
9
|
+
import { guardFor, sharedJournal } from "../sends/guard.js";
|
|
11
10
|
import { ServerConnection, stopServer } from "../server/server-connection.js";
|
|
12
11
|
import { ensureServer } from "../server/start.js";
|
|
13
12
|
import { realBrowser } from "../session/browser.js";
|
|
@@ -56,7 +55,8 @@ export const contextFor = (flags, environment = {}) => {
|
|
|
56
55
|
// on that is what makes the second one, some day, the leak that keeps the process alive.
|
|
57
56
|
const clients = [];
|
|
58
57
|
// Only for the real thing: a test hands in its own store, and must never start a process.
|
|
59
|
-
|
|
58
|
+
// A server does not take `MAX_TOKEN` along, so a token from there has no server to share.
|
|
59
|
+
const starts = !environment.store && !environment.connection && settings.serve && !process.env.MAX_TOKEN;
|
|
60
60
|
return {
|
|
61
61
|
settings,
|
|
62
62
|
renderer,
|
|
@@ -82,16 +82,7 @@ export const contextFor = (flags, environment = {}) => {
|
|
|
82
82
|
timeoutMs: settings.timeoutMs,
|
|
83
83
|
warn: renderer.note,
|
|
84
84
|
offline: flags.offline === true,
|
|
85
|
-
sends:
|
|
86
|
-
profile: settings.profile,
|
|
87
|
-
readOnly: settings.readOnly,
|
|
88
|
-
readOnlyFrom: settings.sources.readOnly,
|
|
89
|
-
...(settings.allow ? { allow: settings.allow, allowFrom: settings.sources.allow } : {}),
|
|
90
|
-
sendsPerHour: settings.sendsPerHour,
|
|
91
|
-
journal: new SendJournal(sendsPathFor(settings.profile)),
|
|
92
|
-
recipients: new RecipientList(recipientsPathFor(settings.profile)),
|
|
93
|
-
warn: renderer.warn,
|
|
94
|
-
}),
|
|
85
|
+
sends: sharedJournal(guardFor(settings, renderer.warn), wire),
|
|
95
86
|
...(environment.connection ? { connection: environment.connection() } : wire ? { connection: wire } : {}),
|
|
96
87
|
...extra,
|
|
97
88
|
});
|
|
@@ -102,6 +93,7 @@ export const contextFor = (flags, environment = {}) => {
|
|
|
102
93
|
clients.push(closeable);
|
|
103
94
|
},
|
|
104
95
|
browser: environment.browser ?? realBrowser,
|
|
96
|
+
reach: environment.reach ?? publicOnly,
|
|
105
97
|
ask: environment.ask ?? ((prompt, { secret = false } = {}) => readSecret(prompt, { echo: !secret })),
|
|
106
98
|
interactive: environment.interactive ?? (process.stdin.isTTY === true && process.stderr.isTTY === true),
|
|
107
99
|
columns: environment.columns ?? process.stderr.columns,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGpC,OAAO,EAAE,SAAS,EAAyB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAoB,eAAe,EAAiB,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAkB,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -2,7 +2,7 @@ import { resolve } from "node:path";
|
|
|
2
2
|
import { writeSecurely } from "@leemour/cli-core";
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import { diagnose } from "../diagnose.js";
|
|
5
|
-
import { buildReport,
|
|
5
|
+
import { buildReport, issueUrlFor, REPORT_URL, reportFileName } from "../report.js";
|
|
6
6
|
import { runsDirFor } from "../runs/run.js";
|
|
7
7
|
import { SendJournal, sendsPathFor } from "../sends/journal.js";
|
|
8
8
|
import { forCommand } from "./context.js";
|
|
@@ -61,12 +61,13 @@ const diagnoseProfile = (profile, store) => diagnose({
|
|
|
61
61
|
profile,
|
|
62
62
|
// Reading the keyring is the one thing here that can prompt or hang on a locked keyring,
|
|
63
63
|
// so its failure is "no token found" rather than a failed command.
|
|
64
|
-
|
|
64
|
+
storedToken: () => {
|
|
65
65
|
try {
|
|
66
|
-
|
|
66
|
+
const source = store.tokenSource();
|
|
67
|
+
return source === "keyring" || source === "file" ? source : undefined;
|
|
67
68
|
}
|
|
68
69
|
catch {
|
|
69
|
-
return
|
|
70
|
+
return undefined;
|
|
70
71
|
}
|
|
71
72
|
},
|
|
72
73
|
});
|
|
@@ -74,39 +75,20 @@ const INCLUDES = [
|
|
|
74
75
|
"версия max, среда (node или bun) и система",
|
|
75
76
|
"то же, что показывает `max doctor`; домашний каталог заменён на ~",
|
|
76
77
|
"последний запуск, который кончился ошибкой: команда, запросы к MAX, коды ошибок, время",
|
|
77
|
-
"последние 20 действий-записей (отправки, реакции, удаления):
|
|
78
|
+
"последние 20 действий-записей (отправки, реакции, удаления): исход, без текста",
|
|
79
|
+
"вместо номеров чатов и сообщений — метки: одинаковые внутри отчёта и разные в каждом новом",
|
|
78
80
|
];
|
|
79
81
|
const EXCLUDES = ["текстов сообщений", "названий чатов", "имён", "номеров телефонов", "токена"];
|
|
80
82
|
/**
|
|
81
|
-
* **A report is
|
|
82
|
-
*
|
|
83
|
-
*
|
|
83
|
+
* **A report is posted by the person, not by `max`**: there is no server of ours, and `max` holds
|
|
84
|
+
* no GitHub credentials. So `create` writes a file and prints a pre-filled new-issue link and the
|
|
85
|
+
* steps (`NEED-267`).
|
|
84
86
|
*/
|
|
85
87
|
const reportCommand = () => {
|
|
86
88
|
const report = new Command("report").description("what a problem report holds and where it goes; writes nothing");
|
|
87
|
-
report.action(function () {
|
|
88
|
-
const { renderer, format, streams } = forCommand(this);
|
|
89
|
-
|
|
90
|
-
renderer.result({
|
|
91
|
-
sendTo: REPORT_ADDRESS,
|
|
92
|
-
includes: INCLUDES,
|
|
93
|
-
excludes: EXCLUDES,
|
|
94
|
-
create: "max doctor report create",
|
|
95
|
-
});
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
streams.data([
|
|
99
|
-
`Отчёт о проблеме — один файл для автора max. Он отправляется письмом на ${REPORT_ADDRESS}.`,
|
|
100
|
-
"",
|
|
101
|
-
"В файле:",
|
|
102
|
-
...INCLUDES.map((line, index) => `- ${line}${index === INCLUDES.length - 1 ? "." : ";"}`),
|
|
103
|
-
"",
|
|
104
|
-
`В файле нет: ${EXCLUDES.join(", ")}.`,
|
|
105
|
-
"Номера чатов и сообщений в нём есть: без вашего входа в MAX они ничего не дают, но это ваши чаты.",
|
|
106
|
-
"",
|
|
107
|
-
"Создать отчёт: max doctor report create",
|
|
108
|
-
"Про определённый запуск: max doctor report create --run <id> (номера — max runs list)",
|
|
109
|
-
].join("\n"));
|
|
89
|
+
report.action(async function () {
|
|
90
|
+
const { renderer, format, streams, run } = forCommand(this);
|
|
91
|
+
await run("doctor report", async () => explain(renderer, format, streams));
|
|
110
92
|
});
|
|
111
93
|
report
|
|
112
94
|
.command("create")
|
|
@@ -128,18 +110,18 @@ const reportCommand = () => {
|
|
|
128
110
|
});
|
|
129
111
|
const path = resolve(options.output ?? reportFileName(now));
|
|
130
112
|
writeSecurely(path, `${JSON.stringify(built, null, 2)}\n`, 0o600);
|
|
131
|
-
const
|
|
113
|
+
const issue = issueUrlFor(built, path);
|
|
132
114
|
const steps = [
|
|
133
|
-
`Откройте ссылку:
|
|
134
|
-
|
|
115
|
+
`Откройте ссылку: GitHub откроет новую задачу с заголовком и заготовкой текста. Нужен аккаунт на GitHub.`,
|
|
116
|
+
`Перетащите в поле текста файл ${path} — GitHub приложит его.`,
|
|
135
117
|
"Напишите, что делали, что ожидали и что случилось.",
|
|
136
|
-
"
|
|
118
|
+
"Нажмите «Submit new issue». Задача будет видна всем.",
|
|
137
119
|
];
|
|
138
120
|
const noRun = built.run
|
|
139
121
|
? undefined
|
|
140
122
|
: "Неудачных запусков не записано. Если проблема повторяется, повторите команду, которая не работает, и создайте отчёт снова: неудачный запуск сохранится сам.";
|
|
141
123
|
if (format !== "pretty") {
|
|
142
|
-
renderer.result({ path, sendTo:
|
|
124
|
+
renderer.result({ path, sendTo: REPORT_URL, issue, run: built.run?.metadata.runId ?? null, steps });
|
|
143
125
|
if (noRun)
|
|
144
126
|
renderer.note(noRun);
|
|
145
127
|
return;
|
|
@@ -150,19 +132,49 @@ const reportCommand = () => {
|
|
|
150
132
|
"",
|
|
151
133
|
"Что сделать:",
|
|
152
134
|
`1. ${steps[0]}`,
|
|
153
|
-
` ${
|
|
135
|
+
` ${issue}`,
|
|
154
136
|
...steps.slice(1).map((step, index) => `${index + 2}. ${step}`),
|
|
155
137
|
"",
|
|
156
|
-
"Перед отправкой файл можно открыть и посмотреть: текстов
|
|
138
|
+
"Перед отправкой файл можно открыть и посмотреть: в нём нет текстов сообщений, а вместо номеров чатов и",
|
|
139
|
+
"сообщений — метки.",
|
|
157
140
|
].join("\n"));
|
|
158
141
|
});
|
|
159
142
|
});
|
|
160
143
|
return report;
|
|
161
144
|
};
|
|
145
|
+
const explain = (renderer, format, streams) => {
|
|
146
|
+
if (format !== "pretty") {
|
|
147
|
+
renderer.result({
|
|
148
|
+
sendTo: REPORT_URL,
|
|
149
|
+
includes: INCLUDES,
|
|
150
|
+
excludes: EXCLUDES,
|
|
151
|
+
create: "max doctor report create",
|
|
152
|
+
});
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
streams.data([
|
|
156
|
+
"Отчёт о проблеме — один файл для автора max. Он прикладывается к новой задаче на GitHub.",
|
|
157
|
+
"",
|
|
158
|
+
"В файле:",
|
|
159
|
+
...INCLUDES.map((line, index) => `- ${line}${index === INCLUDES.length - 1 ? "." : ";"}`),
|
|
160
|
+
"",
|
|
161
|
+
`В файле нет: ${EXCLUDES.join(", ")}.`,
|
|
162
|
+
"Задачи на GitHub видны всем — и приложенный файл тоже.",
|
|
163
|
+
"",
|
|
164
|
+
"Создать отчёт: max doctor report create",
|
|
165
|
+
"Про определённый запуск: max doctor report create --run <id> (номера — max runs list)",
|
|
166
|
+
].join("\n"));
|
|
167
|
+
};
|
|
168
|
+
const TOKEN_FROM = {
|
|
169
|
+
environment: "MAX_TOKEN",
|
|
170
|
+
keyring: "the keyring",
|
|
171
|
+
file: "credentials.json — there is no keyring here",
|
|
172
|
+
none: "nowhere",
|
|
173
|
+
};
|
|
162
174
|
/** One line per row: the pretty renderer prints a flat object and does not descend into one. */
|
|
163
175
|
const forPerson = (report, profile) => ({
|
|
164
176
|
profile,
|
|
165
|
-
token: report.token.present ? `yes, from
|
|
177
|
+
token: report.token.present ? `yes, from ${TOKEN_FROM[report.token.from]}` : "none",
|
|
166
178
|
keyring: report.keyring.movedByEnvironment
|
|
167
179
|
? `${report.keyring.service} (moved by the environment)`
|
|
168
180
|
: report.keyring.service,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -4,13 +4,13 @@ import { forCommand } from "./context.js";
|
|
|
4
4
|
export const mcpCommand = () => new Command("mcp")
|
|
5
5
|
.description("serve this profile to an agent over MCP, on stdin and stdout — `claude mcp add max -- max mcp`")
|
|
6
6
|
.option("--allow-send", "offer the send tool; without it the server can only read")
|
|
7
|
-
.option("--confirm-send", "show the owner
|
|
7
|
+
.option("--confirm-send", "show the owner every send, edit, forward, pin, mark-read and delete in a form from the server first")
|
|
8
8
|
.option("--allow-mark-read", "offer the tool that marks a chat read; the other person sees it")
|
|
9
9
|
.option("--allow-delete", "offer the tool that deletes messages for you only; it cannot be undone")
|
|
10
10
|
.action(async function () {
|
|
11
11
|
const { allowSend, confirmSend, allowMarkRead, allowDelete } = this.opts();
|
|
12
|
-
if (confirmSend && !allowSend) {
|
|
13
|
-
throw new CliError("validation_error", "`--confirm-send` confirms
|
|
12
|
+
if (confirmSend && !allowSend && !allowMarkRead && !allowDelete) {
|
|
13
|
+
throw new CliError("validation_error", "`--confirm-send` confirms writes, and without `--allow-send`, `--allow-mark-read` or `--allow-delete` there are none");
|
|
14
14
|
}
|
|
15
15
|
// Loaded here, not at the top: every other command would otherwise pay for the SDK and zod.
|
|
16
16
|
const { serveOverStdio } = await import("../mcp/server.js");
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,GAAY,EAAE,CACtC,IAAI,OAAO,CAAC,KAAK,CAAC;KACf,WAAW,CAAC,gGAAgG,CAAC;KAC7G,MAAM,CAAC,cAAc,EAAE,0DAA0D,CAAC;KAClF,MAAM,CACL,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GAAG,GAAY,EAAE,CACtC,IAAI,OAAO,CAAC,KAAK,CAAC;KACf,WAAW,CAAC,gGAAgG,CAAC;KAC7G,MAAM,CAAC,cAAc,EAAE,0DAA0D,CAAC;KAClF,MAAM,CACL,gBAAgB,EAChB,qGAAqG,CACtG;KACA,MAAM,CAAC,mBAAmB,EAAE,iEAAiE,CAAC;KAC9F,MAAM,CAAC,gBAAgB,EAAE,wEAAwE,CAAC;KAClG,MAAM,CAAC,KAAK;IACX,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,EAKpE,CAAA;IACJ,IAAI,WAAW,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC;QAChE,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,sHAAsH,CACvH,CAAA;IACH,CAAC;IACD,4FAA4F;IAC5F,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAC3D,MAAM,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACrC,SAAS,EAAE,SAAS,KAAK,IAAI;QAC7B,WAAW,EAAE,WAAW,KAAK,IAAI;QACjC,aAAa,EAAE,aAAa,KAAK,IAAI;QACrC,WAAW,EAAE,WAAW,KAAK,IAAI;KAClC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/commands/messages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcnC,eAAO,MAAM,eAAe,QAAO,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/commands/messages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAcnC,eAAO,MAAM,eAAe,QAAO,OA6ZlC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CliError } from "@leemour/cli-core";
|
|
1
|
+
import { CliError, singleLine } from "@leemour/cli-core";
|
|
2
2
|
import { annotate } from "@leemour/cli-core/commands";
|
|
3
3
|
import { Command } from "commander";
|
|
4
4
|
import { openProfileCache } from "../cache/index.js";
|
|
@@ -148,11 +148,11 @@ export const messagesCommand = () => {
|
|
|
148
148
|
const saved = [];
|
|
149
149
|
for (const [index, attachment] of links.entries()) {
|
|
150
150
|
if (attachment.unsafe)
|
|
151
|
-
renderer.note(`MAX marks ${attachment.name ?? "this file"} as possibly unsafe`);
|
|
152
|
-
saved.push(await save(attachment, output, `${id}-${index + 1}
|
|
151
|
+
renderer.note(`MAX marks ${singleLine(attachment.name ?? "this file")} as possibly unsafe`);
|
|
152
|
+
saved.push(await save(attachment, output, `${id}-${index + 1}`, context.reach));
|
|
153
153
|
}
|
|
154
154
|
if (format === "pretty")
|
|
155
|
-
streams.data(`${saved.map((file) => file.path).join("\n")}\n`);
|
|
155
|
+
streams.data(`${saved.map((file) => singleLine(file.path)).join("\n")}\n`);
|
|
156
156
|
else
|
|
157
157
|
renderer.result({ items: saved });
|
|
158
158
|
}
|
|
@@ -227,6 +227,7 @@ export const messagesCommand = () => {
|
|
|
227
227
|
.option("--silent", "deliver without a notification")
|
|
228
228
|
.option("--reply-to <message>", "answer this message id in the same chat")
|
|
229
229
|
.option("--file <path>", "attach a file; .jpg .png .webp .gif go as a photo. Repeat it for more than one", (value, previous = []) => [...previous, value])
|
|
230
|
+
.option("--allow-any-file", "send a --file even from a hidden folder, ~/.ssh or max's own folders")
|
|
230
231
|
.option("--md, --markdown", "read **bold**, _italic_, ~~struck~~ and `code` in the text; \\ keeps a mark literal")
|
|
231
232
|
.option("--at <time>", "let MAX send it later, even with this machine off: 2026-09-25T09:00 (local time), or 30m, 2h, 1d from now")
|
|
232
233
|
.action(async function (chat, text) {
|
|
@@ -248,6 +249,7 @@ export const messagesCommand = () => {
|
|
|
248
249
|
...(options.replyTo === undefined ? {} : { replyTo: String(options.replyTo).trim() }),
|
|
249
250
|
...(options.markdown === true ? { markdown: true } : {}),
|
|
250
251
|
...(files.length > 0 ? { files } : {}),
|
|
252
|
+
...(options.allowAnyFile === true ? { anyFile: true } : {}),
|
|
251
253
|
...(at === undefined ? {} : { at }),
|
|
252
254
|
});
|
|
253
255
|
if (at !== undefined) {
|