@leemour/max-cli 0.6.0 → 0.8.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 +201 -74
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +4 -4
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/schema.d.ts +13 -8
- package/dist/cache/schema.d.ts.map +1 -1
- package/dist/cache/schema.js +84 -23
- package/dist/cache/schema.js.map +1 -1
- package/dist/cache/store.d.ts +15 -0
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +32 -3
- package/dist/cache/store.js.map +1 -1
- package/dist/client.d.ts +205 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +866 -31
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +71 -3
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/chats.d.ts.map +1 -1
- package/dist/commands/chats.js +167 -0
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/complete.d.ts +10 -0
- package/dist/commands/complete.d.ts.map +1 -0
- package/dist/commands/complete.js +89 -0
- package/dist/commands/complete.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +10 -4
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contacts.d.ts +3 -0
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +85 -0
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/context.d.ts +22 -3
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +26 -7
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +83 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/folders.d.ts +4 -0
- package/dist/commands/folders.d.ts.map +1 -0
- package/dist/commands/folders.js +76 -0
- package/dist/commands/folders.js.map +1 -0
- package/dist/commands/inbox.js +2 -2
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +24 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +210 -5
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/models.d.ts +7 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +47 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/reactions.d.ts.map +1 -1
- package/dist/commands/reactions.js +17 -0
- package/dist/commands/reactions.js.map +1 -1
- package/dist/commands/serve.d.ts +10 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +98 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +16 -3
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +53 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/watch.d.ts +9 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +64 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config.d.ts +32 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +82 -5
- package/dist/config.js.map +1 -1
- package/dist/domain/map.d.ts +8 -1
- package/dist/domain/map.d.ts.map +1 -1
- package/dist/domain/map.js +47 -1
- package/dist/domain/map.js.map +1 -1
- package/dist/domain/models.d.ts +61 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/download.d.ts +2 -0
- package/dist/download.d.ts.map +1 -1
- package/dist/download.js +11 -0
- package/dist/download.js.map +1 -1
- package/dist/export.d.ts +26 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +75 -0
- package/dist/export.js.map +1 -0
- package/dist/generated/client.generated.d.ts +28 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +28 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +23 -13
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +23 -13
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +180 -6
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +29 -4
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/mcp/confirm.d.ts +31 -0
- package/dist/mcp/confirm.d.ts.map +1 -0
- package/dist/mcp/confirm.js +62 -0
- package/dist/mcp/confirm.js.map +1 -0
- package/dist/mcp/instructions.d.ts +14 -0
- package/dist/mcp/instructions.d.ts.map +1 -0
- package/dist/mcp/instructions.js +39 -0
- package/dist/mcp/instructions.js.map +1 -0
- package/dist/mcp/server.d.ts +25 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +57 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +28 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +91 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +351 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +23 -2
- package/dist/program.js.map +1 -1
- package/dist/protocol/connection.d.ts +10 -8
- package/dist/protocol/connection.d.ts.map +1 -1
- package/dist/protocol/connection.js +64 -7
- package/dist/protocol/connection.js.map +1 -1
- package/dist/protocol/frame.d.ts +2 -1
- package/dist/protocol/frame.d.ts.map +1 -1
- package/dist/protocol/frame.js.map +1 -1
- package/dist/rendering/messages.d.ts.map +1 -1
- package/dist/rendering/messages.js +17 -9
- package/dist/rendering/messages.js.map +1 -1
- package/dist/sends/guard.d.ts +8 -3
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +40 -15
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/journal.d.ts +20 -2
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js.map +1 -1
- package/dist/sends/permissions.d.ts +11 -0
- package/dist/sends/permissions.d.ts.map +1 -0
- package/dist/sends/permissions.js +47 -0
- package/dist/sends/permissions.js.map +1 -0
- package/dist/server/lines.d.ts +9 -0
- package/dist/server/lines.d.ts.map +1 -0
- package/dist/server/lines.js +25 -0
- package/dist/server/lines.js.map +1 -0
- package/dist/server/server-connection.d.ts +45 -0
- package/dist/server/server-connection.d.ts.map +1 -0
- package/dist/server/server-connection.js +201 -0
- package/dist/server/server-connection.js.map +1 -0
- package/dist/server/server.d.ts +69 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +360 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/start.d.ts +28 -0
- package/dist/server/start.d.ts.map +1 -0
- package/dist/server/start.js +80 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/subscribe.d.ts +9 -0
- package/dist/server/subscribe.d.ts.map +1 -0
- package/dist/server/subscribe.js +26 -0
- package/dist/server/subscribe.js.map +1 -0
- package/dist/session/adopt.d.ts.map +1 -1
- package/dist/session/adopt.js +4 -0
- package/dist/session/adopt.js.map +1 -1
- package/dist/session/browser.d.ts +1 -1
- package/dist/session/browser.d.ts.map +1 -1
- package/dist/session/browser.js +86 -59
- package/dist/session/browser.js.map +1 -1
- package/dist/session/handshake.d.ts +1 -1
- package/dist/session/store.d.ts +2 -0
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +4 -0
- package/dist/session/store.js.map +1 -1
- package/dist/spec/define.d.ts.map +1 -1
- package/dist/spec/define.js +14 -1
- package/dist/spec/define.js.map +1 -1
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +30 -7
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/account.d.ts +20 -0
- package/dist/spec/operations/account.d.ts.map +1 -0
- package/dist/spec/operations/account.js +62 -0
- package/dist/spec/operations/account.js.map +1 -0
- package/dist/spec/operations/chats.d.ts +66 -2
- package/dist/spec/operations/chats.d.ts.map +1 -1
- package/dist/spec/operations/chats.js +153 -5
- package/dist/spec/operations/chats.js.map +1 -1
- package/dist/spec/operations/contacts.d.ts +19 -1
- package/dist/spec/operations/contacts.d.ts.map +1 -1
- package/dist/spec/operations/contacts.js +49 -6
- package/dist/spec/operations/contacts.js.map +1 -1
- package/dist/spec/operations/folders.d.ts +24 -0
- package/dist/spec/operations/folders.d.ts.map +1 -0
- package/dist/spec/operations/folders.js +64 -0
- package/dist/spec/operations/folders.js.map +1 -0
- package/dist/spec/operations/messages.d.ts +56 -6
- package/dist/spec/operations/messages.d.ts.map +1 -1
- package/dist/spec/operations/messages.js +104 -21
- package/dist/spec/operations/messages.js.map +1 -1
- package/dist/spec/operations/session.d.ts +7 -0
- package/dist/spec/operations/session.d.ts.map +1 -1
- package/dist/spec/operations/session.js +17 -0
- package/dist/spec/operations/session.js.map +1 -1
- package/dist/spec/operations/uploads.d.ts +18 -0
- package/dist/spec/operations/uploads.d.ts.map +1 -0
- package/dist/spec/operations/uploads.js +35 -0
- package/dist/spec/operations/uploads.js.map +1 -0
- package/dist/testing/mock-max.d.ts +12 -2
- package/dist/testing/mock-max.d.ts.map +1 -1
- package/dist/testing/mock-max.js +15 -2
- package/dist/testing/mock-max.js.map +1 -1
- package/dist/testing/sandbox.js +2 -0
- package/dist/testing/sandbox.js.map +1 -1
- package/dist/transcribe/index.d.ts +34 -0
- package/dist/transcribe/index.d.ts.map +1 -0
- package/dist/transcribe/index.js +43 -0
- package/dist/transcribe/index.js.map +1 -0
- package/dist/transcribe/install.d.ts +18 -0
- package/dist/transcribe/install.d.ts.map +1 -0
- package/dist/transcribe/install.js +67 -0
- package/dist/transcribe/install.js.map +1 -0
- package/dist/transcribe/models.d.ts +32 -0
- package/dist/transcribe/models.d.ts.map +1 -0
- package/dist/transcribe/models.js +124 -0
- package/dist/transcribe/models.js.map +1 -0
- package/dist/transcribe/speech.d.ts +25 -0
- package/dist/transcribe/speech.d.ts.map +1 -0
- package/dist/transcribe/speech.js +105 -0
- package/dist/transcribe/speech.js.map +1 -0
- package/dist/update.d.ts +26 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +42 -0
- package/dist/update.js.map +1 -0
- package/dist/upload.d.ts +10 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +61 -0
- package/dist/upload.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +17 -3
- package/skills/max-cli/SKILL.md +28 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactions.js","sourceRoot":"","sources":["../../src/commands/reactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAY,EAAE;IAC5C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAA;IAEzE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAChD,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACrD,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;SACnC,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;SAChD,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,KAAK,WAA0B,IAAY,EAAE,SAAiB,EAAE,KAAa;QACnF,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAExD,MAAM,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC/C,QAAQ,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YACtF,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"reactions.js","sourceRoot":"","sources":["../../src/commands/reactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAY,EAAE;IAC5C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAA;IAEzE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SAChD,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACrD,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;SACnC,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;SAChD,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,KAAK,WAA0B,IAAY,EAAE,SAAiB,EAAE,KAAa;QACnF,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAExD,MAAM,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC/C,QAAQ,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YACtF,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;SACnD,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACrD,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;SACnC,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,KAAK,WAA0B,IAAY,EAAE,SAAiB;QACpE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAExD,MAAM,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC/C,QAAQ,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC1E,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* `max serve` — stays up, holding one logged-in connection, until Ctrl-C (`MAX-16`).
|
|
4
|
+
*
|
|
5
|
+
* Typed by hand it runs in the foreground until stopped. **Any command that needs MAX starts one
|
|
6
|
+
* in the background when none is running** (`serve` setting, `--no-serve` to decline), and that
|
|
7
|
+
* one is given `--idle`, so it does not outlive the work that started it.
|
|
8
|
+
*/
|
|
9
|
+
export declare const serveCommand: () => Command;
|
|
10
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAU3C;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,QAAO,OA+D1B,CAAA"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { writeFileSync } from "node:fs";
|
|
2
|
+
import { CliError } from "@leemour/cli-core";
|
|
3
|
+
import { Command, Option } from "commander";
|
|
4
|
+
import { openProfileCache } from "../cache/index.js";
|
|
5
|
+
import { parseDuration } from "../config.js";
|
|
6
|
+
import { asFirstWord } from "../profile.js";
|
|
7
|
+
import { MaxServer } from "../server/server.js";
|
|
8
|
+
import { serverStatus, stopServer } from "../server/server-connection.js";
|
|
9
|
+
import { logPath, refusedPath, startInBackground } from "../server/start.js";
|
|
10
|
+
import { forCommand } from "./context.js";
|
|
11
|
+
/**
|
|
12
|
+
* `max serve` — stays up, holding one logged-in connection, until Ctrl-C (`MAX-16`).
|
|
13
|
+
*
|
|
14
|
+
* Typed by hand it runs in the foreground until stopped. **Any command that needs MAX starts one
|
|
15
|
+
* in the background when none is running** (`serve` setting, `--no-serve` to decline), and that
|
|
16
|
+
* one is given `--idle`, so it does not outlive the work that started it.
|
|
17
|
+
*/
|
|
18
|
+
export const serveCommand = () => new Command("serve")
|
|
19
|
+
.description("stay connected to MAX and stream new messages to `max watch`, until Ctrl-C")
|
|
20
|
+
.option("--idle <duration>", "stop after this long with nobody using it — 15m, 1h is 60m")
|
|
21
|
+
.option("--detach", "run in the background instead; still stopped only by `max serve --stop`")
|
|
22
|
+
.option("--stop", "stop this profile's server, however it was started")
|
|
23
|
+
.addOption(new Option("--started-by-command").hideHelp())
|
|
24
|
+
.action(async function () {
|
|
25
|
+
const { idle, detach = false, stop: stopping = false, startedByCommand = false, } = this.opts();
|
|
26
|
+
const { renderer, settings, store, run } = forCommand(this);
|
|
27
|
+
const idleMs = idle === undefined ? undefined : parseDuration(idle, "--idle");
|
|
28
|
+
if (detach && stopping)
|
|
29
|
+
throw new CliError("validation_error", "--detach starts a server and --stop ends one; give one");
|
|
30
|
+
if (stopping) {
|
|
31
|
+
const outcome = await stopServer(store.socketPath(), { force: true });
|
|
32
|
+
renderer.result({ profile: store.profile, stopped: outcome === "stopped" });
|
|
33
|
+
if (outcome === "none")
|
|
34
|
+
renderer.note(`no server is running for profile "${store.profile}"`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (detach) {
|
|
38
|
+
renderer.result(await detached(store, idle));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const cache = await openProfileCache(settings.profile, { onProblem: (message) => renderer.note(message) });
|
|
42
|
+
await run("serve", async (events) => {
|
|
43
|
+
const server = new MaxServer({
|
|
44
|
+
store,
|
|
45
|
+
note: (line) => renderer.note(line),
|
|
46
|
+
...(events ? { events } : {}),
|
|
47
|
+
...(cache ? { cache } : {}),
|
|
48
|
+
...(settings.timeoutMs ? { timeoutMs: settings.timeoutMs } : {}),
|
|
49
|
+
...(idleMs === undefined ? {} : { idleMs }),
|
|
50
|
+
startedByCommand,
|
|
51
|
+
});
|
|
52
|
+
const stop = () => void server.stop();
|
|
53
|
+
process.once("SIGINT", stop);
|
|
54
|
+
process.once("SIGTERM", stop);
|
|
55
|
+
try {
|
|
56
|
+
await server.start();
|
|
57
|
+
renderer.note(`connected — \`max ${asFirstWord(settings.profile)}watch\` in another terminal shows new messages`);
|
|
58
|
+
await server.done;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
await server.stop();
|
|
62
|
+
if (error instanceof CliError && error.code === "authentication_error") {
|
|
63
|
+
writeFileSync(refusedPath(store), `${new Date().toISOString()}\n`, { mode: 0o600 });
|
|
64
|
+
}
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
process.off("SIGINT", stop);
|
|
69
|
+
process.off("SIGTERM", stop);
|
|
70
|
+
cache?.close();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
/** Logging in takes a second or two; a server that has not answered by now is not coming. */
|
|
75
|
+
const START_WAIT_MS = 15_000;
|
|
76
|
+
/**
|
|
77
|
+
* Starts a server by hand, in the background, and returns once it answers. A server a command
|
|
78
|
+
* started is replaced by it; one already started by hand is left as it is.
|
|
79
|
+
*/
|
|
80
|
+
const detached = async (store, idle) => {
|
|
81
|
+
const before = await serverStatus(store.socketPath());
|
|
82
|
+
const about = { profile: store.profile, socket: store.socketPath(), log: logPath(store) };
|
|
83
|
+
if (before?.byHand === true)
|
|
84
|
+
return { ...about, pid: before.pid, started: false };
|
|
85
|
+
const spawned = startInBackground(store, { serveArgs: idle === undefined ? [] : ["--idle", idle] });
|
|
86
|
+
if (spawned === undefined) {
|
|
87
|
+
throw new CliError("validation_error", "no session to start with, or a server is already being started — try again");
|
|
88
|
+
}
|
|
89
|
+
const until = Date.now() + START_WAIT_MS;
|
|
90
|
+
while (Date.now() < until) {
|
|
91
|
+
const status = await serverStatus(store.socketPath());
|
|
92
|
+
if (status?.byHand === true)
|
|
93
|
+
return { ...about, pid: status.pid, started: true };
|
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
95
|
+
}
|
|
96
|
+
throw new CliError("timeout", `the server did not start within ${START_WAIT_MS / 1000}s — see ${about.log}`);
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,WAAW,CAAA;AAgB7C,eAAO,MAAM,cAAc,QAAO,OA8GjC,CAAA"}
|
package/dist/commands/session.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Argument, Command } from "commander";
|
|
2
2
|
import { commandWords, refuseCommandName, rootOf } from "../profile.js";
|
|
3
|
+
import { stopServer } from "../server/server-connection.js";
|
|
3
4
|
import { adoptToken } from "../session/adopt.js";
|
|
4
5
|
import { serveQrPage } from "../session/browser.js";
|
|
5
6
|
import { readSecret } from "../session/prompt.js";
|
|
@@ -56,13 +57,18 @@ export const sessionCommand = () => {
|
|
|
56
57
|
return;
|
|
57
58
|
}
|
|
58
59
|
await run("session start", async (events) => {
|
|
60
|
+
// One connection per profile at any moment (`NEED-229`): a login needs one of its own — MAX
|
|
61
|
+
// logs in before there is a token to share — so the server holding the old session goes
|
|
62
|
+
// first, and comes back on the new one below.
|
|
63
|
+
if ((await context.stopServer()) === "stopped")
|
|
64
|
+
renderer.note("stopped `max serve`; it starts again on the new session");
|
|
59
65
|
const token = method === "token" ? String(pasted) : await obtain(method, context, events);
|
|
60
|
-
const client = createClient({ events });
|
|
66
|
+
const client = createClient({ events }, { own: true });
|
|
61
67
|
// No account on record means this profile has never logged in, or `session end` forgot it.
|
|
62
68
|
const firstLogin = store.readState().viewerId === undefined;
|
|
63
69
|
try {
|
|
64
70
|
await adoptToken(client, store, token);
|
|
65
|
-
const profile = client.account.me();
|
|
71
|
+
const profile = await client.account.me();
|
|
66
72
|
renderer.result({ profile, stored: true, method });
|
|
67
73
|
renderer.success(`logged in as ${profile.name ?? profile.id}`);
|
|
68
74
|
if (firstLogin)
|
|
@@ -71,6 +77,8 @@ export const sessionCommand = () => {
|
|
|
71
77
|
finally {
|
|
72
78
|
await client.close();
|
|
73
79
|
}
|
|
80
|
+
if (await context.shareServer())
|
|
81
|
+
renderer.note("`max serve` is up on the new session");
|
|
74
82
|
});
|
|
75
83
|
});
|
|
76
84
|
/**
|
|
@@ -89,7 +97,12 @@ export const sessionCommand = () => {
|
|
|
89
97
|
// It contacts nobody, so the run holds no events — but forgetting a session is an action, and
|
|
90
98
|
// "when did this profile stop working" is a question the record is kept to answer.
|
|
91
99
|
await run("session end", async () => {
|
|
100
|
+
// A server still logged in with the forgotten session would keep using it.
|
|
101
|
+
const server = await stopServer(store.socketPath());
|
|
92
102
|
const had = store.forget();
|
|
103
|
+
if (server === "refused") {
|
|
104
|
+
renderer.note("a `max serve` you started by hand is still running with that session — Ctrl-C it");
|
|
105
|
+
}
|
|
93
106
|
renderer.result({ profile: store.profile, forgotten: had, revokedOnServer: false });
|
|
94
107
|
if (had)
|
|
95
108
|
renderer.success(`forgot the session for "${store.profile}" on this machine`);
|
|
@@ -109,7 +122,7 @@ const obtain = async (method, { createClient, renderer, browser, track, ask, str
|
|
|
109
122
|
: "web.max.ru is opening in a separate browser window — choose to log in by phone number there");
|
|
110
123
|
return await browser.chromiumToken({ track, waitMs: BROWSER_WAIT_MS });
|
|
111
124
|
}
|
|
112
|
-
const client = createClient({ events });
|
|
125
|
+
const client = createClient({ events }, { own: true });
|
|
113
126
|
let page;
|
|
114
127
|
try {
|
|
115
128
|
return await client.login.byQr({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAuB,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9D,wGAAwG;AACxG,MAAM,YAAY,GAAG;IACnB,8GAA8G;IAC9G,8FAA8F;CAC/F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,CAAC,MAAM,cAAc,GAAG,GAAY,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAA;IAE7F;;;;;;;;;;;;;OAaG;IACH,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4BAA4B,CAAC;SACzC,WAAW,CACV,IAAI,QAAQ,CAAC,UAAU,EAAE,+CAA+C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAC5G;SACA,MAAM,CAAC,KAAK,WAA0B,MAAc;QACnD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;QAE7E,2FAA2F;QAC3F,qEAAqE;QACrE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE/D,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,MAAM,+DAA+D,CAAC,CAAA;YAC1G,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,yFAAyF;QACzF,8CAA8C;QAC9C,IAAI,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAChD,QAAQ,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAA;YAC3F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAElH,kFAAkF;QAClF,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;YACzF,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAuB,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9D,wGAAwG;AACxG,MAAM,YAAY,GAAG;IACnB,8GAA8G;IAC9G,8FAA8F;CAC/F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,MAAM,CAAC,MAAM,cAAc,GAAG,GAAY,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,yCAAyC,CAAC,CAAA;IAE7F;;;;;;;;;;;;;OAaG;IACH,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,4BAA4B,CAAC;SACzC,WAAW,CACV,IAAI,QAAQ,CAAC,UAAU,EAAE,+CAA+C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAC5G;SACA,MAAM,CAAC,KAAK,WAA0B,MAAc;QACnD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;QAE7E,2FAA2F;QAC3F,qEAAqE;QACrE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE/D,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,MAAM,+DAA+D,CAAC,CAAA;YAC1G,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,yFAAyF;QACzF,8CAA8C;QAC9C,IAAI,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YAChD,QAAQ,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAA;YAC3F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAElH,kFAAkF;QAClF,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;YACpB,OAAM;QACR,CAAC;QAED,MAAM,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1C,4FAA4F;YAC5F,wFAAwF;YACxF,8CAA8C;YAC9C,IAAI,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,SAAS;gBAC5C,QAAQ,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;YAC1E,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;YACzF,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;YAEtD,2FAA2F;YAC3F,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAA;YAE3D,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;gBACtC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAA;gBACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;gBAClD,QAAQ,CAAC,OAAO,CAAC,gBAAgB,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;gBAC9D,IAAI,UAAU;oBAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC7C,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACtB,CAAC;YACD,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;QACxF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ;;;;;;;OAOG;IACH,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAEjD,8FAA8F;QAC9F,mFAAmF;QACnF,MAAM,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAClC,2EAA2E;YAC3E,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAA;YACnD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAA;YAC1B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAA;YACnG,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAA;YACnF,IAAI,GAAG;gBAAE,QAAQ,CAAC,OAAO,CAAC,2BAA2B,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;;gBACjF,QAAQ,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAU,CAAA;AAG5D,kGAAkG;AAClG,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAA;AAElC,MAAM,MAAM,GAAG,KAAK,EAClB,MAAgC,EAChC,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAkB,EACjF,MAAkC,EACjB,EAAE;IACnB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CACX,MAAM,KAAK,WAAW;YACpB,CAAC,CAAC,sGAAsG;YACxG,CAAC,CAAC,6FAA6F,CAClG,CAAA;QACD,OAAO,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;IACtD,IAAI,IAAyD,CAAA;IAC7D,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7B,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACnB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;gBAC9B,+FAA+F;gBAC/F,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;oBACpD,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBAC9B,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;oBAC9D,OAAM;gBACR,CAAC;gBACD,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;gBAC9B,KAAK,CAAC,IAAI,CAAC,CAAA;gBACX,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC5B,QAAQ,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAA;YAC5G,CAAC;YACD,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC3B,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;gBAChG,MAAM,EAAE,IAAI;aACb,CAAC;SACL,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,EAAE,KAAK,EAAE,CAAA;QACnB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Updates `max` with the package manager that installed it. Never runs by itself: this program
|
|
4
|
+
* holds the token of a personal account, and code that replaces itself unasked is not wanted here.
|
|
5
|
+
*/
|
|
6
|
+
export declare const selfUpdateCommand: () => Command;
|
|
7
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWnC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,OA+B/B,CAAA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { isNewer, updateCommand } from "@leemour/cli-core/update";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { installer, latest, PACKAGE, runUpdate } from "../update.js";
|
|
4
|
+
import { VERSION } from "../version.js";
|
|
5
|
+
import { environmentOf, outputFor } from "./context.js";
|
|
6
|
+
const BY_HAND = {
|
|
7
|
+
checkout: "this is a checkout: `git pull && pnpm install && pnpm build`",
|
|
8
|
+
npx: "npx runs whatever version it is asked for: `npx @leemour/max-cli@latest`",
|
|
9
|
+
unknown: "cannot tell how max was installed, so nothing was run",
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Updates `max` with the package manager that installed it. Never runs by itself: this program
|
|
13
|
+
* holds the token of a personal account, and code that replaces itself unasked is not wanted here.
|
|
14
|
+
*/
|
|
15
|
+
export const selfUpdateCommand = () => new Command("update")
|
|
16
|
+
.description("update max with the package manager that installed it; --check only looks")
|
|
17
|
+
.option("--check", "say whether a newer version exists, and install nothing")
|
|
18
|
+
.action(async function ({ check }) {
|
|
19
|
+
const { renderer, format } = outputFor(this);
|
|
20
|
+
const environment = environmentOf(this).update ?? {};
|
|
21
|
+
const found = installer(environment);
|
|
22
|
+
const argv = updateCommand(found, PACKAGE);
|
|
23
|
+
const newest = await latest(environment);
|
|
24
|
+
const newer = newest !== undefined && isNewer(newest, VERSION);
|
|
25
|
+
const answer = {
|
|
26
|
+
current: VERSION,
|
|
27
|
+
latest: newest ?? null,
|
|
28
|
+
newer,
|
|
29
|
+
installer: found,
|
|
30
|
+
command: argv?.join(" ") ?? null,
|
|
31
|
+
};
|
|
32
|
+
if (check || !newer || !argv) {
|
|
33
|
+
if (!check && newest === undefined)
|
|
34
|
+
renderer.warn("npm did not answer, so nothing was run");
|
|
35
|
+
else if (!check && !newer)
|
|
36
|
+
renderer.note(`max ${VERSION} is the newest`);
|
|
37
|
+
else if (!check && !argv)
|
|
38
|
+
renderer.warn(BY_HAND[found] ?? BY_HAND.unknown ?? "");
|
|
39
|
+
renderer.result(format === "pretty" ? summary(answer) : { ...answer, updated: false });
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
renderer.note(`running: ${argv.join(" ")}`);
|
|
43
|
+
const code = runUpdate(argv, environment);
|
|
44
|
+
if (code !== 0)
|
|
45
|
+
throw new Error(`${argv[0]} exited with ${code}; max is still ${VERSION}`);
|
|
46
|
+
renderer.result(format === "pretty" ? `max ${VERSION} → ${newest}` : { ...answer, updated: true });
|
|
47
|
+
});
|
|
48
|
+
const summary = ({ current, latest, newer }) => latest === null
|
|
49
|
+
? `max ${current}; npm did not answer`
|
|
50
|
+
: newer
|
|
51
|
+
? `max ${latest} is out — you have ${current}`
|
|
52
|
+
: `max ${current} is the newest`;
|
|
53
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* `max watch` — new messages as they arrive, from a running `max serve`, until Ctrl-C.
|
|
4
|
+
*
|
|
5
|
+
* `--jsonl` gives one message per line in the shape `messages list` uses, which is what a script,
|
|
6
|
+
* an n8n node or an agent reads. It never marks anything read: the server only listens.
|
|
7
|
+
*/
|
|
8
|
+
export declare const watchCommand: () => Command;
|
|
9
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAAO,OAwD1B,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { renderMessages } from "../rendering/messages.js";
|
|
4
|
+
import { ensureServer } from "../server/start.js";
|
|
5
|
+
import { subscribe } from "../server/subscribe.js";
|
|
6
|
+
import { forCommand } from "./context.js";
|
|
7
|
+
/**
|
|
8
|
+
* `max watch` — new messages as they arrive, from a running `max serve`, until Ctrl-C.
|
|
9
|
+
*
|
|
10
|
+
* `--jsonl` gives one message per line in the shape `messages list` uses, which is what a script,
|
|
11
|
+
* an n8n node or an agent reads. It never marks anything read: the server only listens.
|
|
12
|
+
*/
|
|
13
|
+
export const watchCommand = () => new Command("watch")
|
|
14
|
+
.description("print new messages as they arrive, from a running `max serve`")
|
|
15
|
+
.action(async function () {
|
|
16
|
+
const context = forCommand(this);
|
|
17
|
+
const { renderer, settings, format, streams, store } = context;
|
|
18
|
+
const stop = new AbortController();
|
|
19
|
+
const end = () => stop.abort();
|
|
20
|
+
process.once("SIGINT", end);
|
|
21
|
+
process.once("SIGTERM", end);
|
|
22
|
+
let seen = false;
|
|
23
|
+
try {
|
|
24
|
+
const listen = () => subscribe(store.socketPath(), settings.profile, (event) => {
|
|
25
|
+
if (event.event === "status") {
|
|
26
|
+
// The first "not connected" is a server still logging in; only a later one is a drop.
|
|
27
|
+
renderer.note(event.connected
|
|
28
|
+
? "connected"
|
|
29
|
+
: seen
|
|
30
|
+
? "MAX dropped the connection; the server is reconnecting"
|
|
31
|
+
: "the server is logging in to MAX");
|
|
32
|
+
seen ||= event.connected;
|
|
33
|
+
}
|
|
34
|
+
else if (format === "pretty") {
|
|
35
|
+
streams.data(renderMessages([event.message], {
|
|
36
|
+
color: context.color,
|
|
37
|
+
senderColors: settings.senderColors,
|
|
38
|
+
verbosity: settings.detail,
|
|
39
|
+
width: process.stdout.columns ?? 80,
|
|
40
|
+
profile: settings.profile,
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
streams.data(JSON.stringify(event.message));
|
|
45
|
+
}, stop.signal);
|
|
46
|
+
try {
|
|
47
|
+
await listen();
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (!(error instanceof CliError && error.code === "not_found") || !settings.serve)
|
|
51
|
+
throw error;
|
|
52
|
+
renderer.note("no server was running — starting `max serve` in the background");
|
|
53
|
+
if (!(await ensureServer(store))) {
|
|
54
|
+
throw new CliError("not_found", "`max serve` did not start — its log is beside the profile's state");
|
|
55
|
+
}
|
|
56
|
+
await listen();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
process.off("SIGINT", end);
|
|
61
|
+
process.off("SIGTERM", end);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
|
+
import { type Permission } from "./sends/permissions.js";
|
|
2
3
|
declare const profileSettings: v.StrictObjectSchema<{
|
|
3
4
|
limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
4
5
|
timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
@@ -8,12 +9,17 @@ declare const profileSettings: v.StrictObjectSchema<{
|
|
|
8
9
|
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
9
10
|
keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
10
11
|
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
12
|
+
allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
11
13
|
sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
14
|
+
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
15
|
+
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
12
16
|
}, v.ErrorMessage<v.StrictObjectIssue>>;
|
|
13
17
|
export declare const configSchema: v.StrictObjectSchema<{
|
|
14
18
|
defaultProfile: v.OptionalSchema<v.StringSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
15
19
|
/** What every profile gets unless it says otherwise. */
|
|
16
20
|
defaults: v.OptionalSchema<v.StrictObjectSchema<{
|
|
21
|
+
updateCheck: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
22
|
+
transcribeModel: v.OptionalSchema<v.PicklistSchema<string[], `has to be one of ${string}`>, undefined>;
|
|
17
23
|
limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
18
24
|
timeoutMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
19
25
|
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
@@ -22,7 +28,10 @@ export declare const configSchema: v.StrictObjectSchema<{
|
|
|
22
28
|
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
23
29
|
keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
24
30
|
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
31
|
+
allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
25
32
|
sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
33
|
+
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
34
|
+
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
26
35
|
}, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
|
|
27
36
|
profiles: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
|
|
28
37
|
limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
@@ -33,12 +42,17 @@ export declare const configSchema: v.StrictObjectSchema<{
|
|
|
33
42
|
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
34
43
|
keepRunsForDays: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
35
44
|
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
45
|
+
allow: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<readonly ["send", "forward", "reaction", "edit", "pin", "read", "delete", "groups", "contacts", "profile", "folders", "sessions"], (issue: v.PicklistIssue) => string>, (issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
36
46
|
sendsPerHour: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<(issue: v.BaseIssue<unknown>) => string>, v.IntegerAction<number, (issue: v.BaseIssue<unknown>) => string>, v.MinValueAction<number, 1, (issue: v.BaseIssue<unknown>) => string>]>, undefined>;
|
|
47
|
+
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
48
|
+
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
37
49
|
}, v.ErrorMessage<v.StrictObjectIssue>>, "has to be an object of profiles, by name">, {}>;
|
|
38
50
|
}, v.ErrorMessage<v.StrictObjectIssue>>;
|
|
39
51
|
export type Config = v.InferOutput<typeof configSchema>;
|
|
40
52
|
export type ProfileSetting = keyof v.InferOutput<typeof profileSettings>;
|
|
41
53
|
export declare const PROFILE_SETTINGS: ProfileSetting[];
|
|
54
|
+
export declare const DEFAULTS_ONLY_SETTINGS: readonly ["updateCheck", "transcribeModel"];
|
|
55
|
+
export declare const ALL_SETTINGS: string[];
|
|
42
56
|
/** Whatever the command line carried. Everything is optional: absent means "not given here". */
|
|
43
57
|
export interface GlobalFlags {
|
|
44
58
|
profile?: string;
|
|
@@ -51,6 +65,7 @@ export interface GlobalFlags {
|
|
|
51
65
|
page?: number;
|
|
52
66
|
all?: boolean;
|
|
53
67
|
record?: boolean;
|
|
68
|
+
serve?: boolean;
|
|
54
69
|
/** Raw text from `--timeout`, parsed here so the unit rule lives in one place. */
|
|
55
70
|
timeout?: string;
|
|
56
71
|
}
|
|
@@ -88,9 +103,16 @@ export interface Settings {
|
|
|
88
103
|
*/
|
|
89
104
|
commandTimeoutMs: number | undefined;
|
|
90
105
|
record: boolean;
|
|
106
|
+
serve: boolean;
|
|
91
107
|
keepRunsForDays: number;
|
|
92
108
|
readOnly: boolean;
|
|
109
|
+
/** `undefined` is every action, as before `CLI-37`; a list is only those. */
|
|
110
|
+
allow: readonly Permission[] | undefined;
|
|
93
111
|
sendsPerHour: number;
|
|
112
|
+
/** Whether a person at a terminal hears, once a day, that a newer version exists. */
|
|
113
|
+
updateCheck: boolean;
|
|
114
|
+
/** Which speech model `max messages transcribe` uses unless `--model` says otherwise. */
|
|
115
|
+
transcribeModel: string;
|
|
94
116
|
/** Named in errors and in `max --help`, so a person can find the file that decided this. */
|
|
95
117
|
configPath: string;
|
|
96
118
|
configFound: boolean;
|
|
@@ -100,7 +122,7 @@ export interface Settings {
|
|
|
100
122
|
sources: Record<SourcedSetting, Source>;
|
|
101
123
|
}
|
|
102
124
|
export type Source = "first word" | "flag" | "MAX_PROFILE" | "MAX_TIMEOUT" | "config file" | "config defaults" | "default";
|
|
103
|
-
export type SourcedSetting = "profile" | "limit" | "timeoutMs" | "commandTimeoutMs" | "color" | "senderColors" | "record" | "keepRunsForDays" | "readOnly" | "sendsPerHour";
|
|
125
|
+
export type SourcedSetting = "profile" | "limit" | "timeoutMs" | "commandTimeoutMs" | "color" | "senderColors" | "record" | "serve" | "keepRunsForDays" | "readOnly" | "allow" | "sendsPerHour" | "updateCheck" | "transcribeModel";
|
|
104
126
|
export interface ResolveOptions {
|
|
105
127
|
env?: NodeJS.ProcessEnv;
|
|
106
128
|
/** Tests pass a temporary directory; nothing else should need this. */
|
|
@@ -129,6 +151,15 @@ export declare const resolveSettings: (flags?: GlobalFlags, { env, configDir }?:
|
|
|
129
151
|
* Whoever prints this has to say so, or it reads as a complete list and quietly is not.
|
|
130
152
|
*/
|
|
131
153
|
export declare const configuredProfiles: ({ env, configDir }?: ResolveOptions) => string[];
|
|
154
|
+
/** `30s`, `2m`, `500ms` — the one spelling of a duration, whatever it is for. */
|
|
155
|
+
export declare const parseDuration: (value: string, source: string) => number;
|
|
156
|
+
/**
|
|
157
|
+
* Rounded down to the minute: MAX drops the seconds and sends at the start of the minute (measured
|
|
158
|
+
* 2026-09-24, `FIND-141`), so the time we print is the time it goes. A time without an offset is
|
|
159
|
+
* local, which is how `Date.parse` reads one with a clock and no zone. The delay has hours and days,
|
|
160
|
+
* unlike `--timeout`: nobody schedules a message 90 seconds ahead.
|
|
161
|
+
*/
|
|
162
|
+
export declare const sendTime: (value: string, now?: number) => number;
|
|
132
163
|
/**
|
|
133
164
|
* Sets or removes one setting of one profile, or of `defaults`, and writes the file back.
|
|
134
165
|
*
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|