@leemour/max-cli 0.15.0 → 0.17.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 +56 -37
- package/dist/bot/client.d.ts +6 -0
- package/dist/bot/client.d.ts.map +1 -1
- package/dist/bot/client.js +17 -3
- package/dist/bot/client.js.map +1 -1
- package/dist/bot/input.d.ts.map +1 -1
- package/dist/bot/input.js +7 -4
- package/dist/bot/input.js.map +1 -1
- package/dist/bot/joins.d.ts +26 -0
- package/dist/bot/joins.d.ts.map +1 -0
- package/dist/bot/joins.js +56 -0
- package/dist/bot/joins.js.map +1 -0
- package/dist/bot/keep.d.ts +2 -2
- package/dist/bot/keep.d.ts.map +1 -1
- package/dist/bot/keep.js +3 -2
- package/dist/bot/keep.js.map +1 -1
- package/dist/bot/map.d.ts +5 -2
- package/dist/bot/map.d.ts.map +1 -1
- package/dist/bot/map.js +7 -1
- package/dist/bot/map.js.map +1 -1
- package/dist/bot/transport.d.ts +4 -0
- package/dist/bot/transport.d.ts.map +1 -1
- package/dist/bot/transport.js +43 -3
- package/dist/bot/transport.js.map +1 -1
- package/dist/bot-mcp/instructions.d.ts +9 -0
- package/dist/bot-mcp/instructions.d.ts.map +1 -0
- package/dist/bot-mcp/instructions.js +22 -0
- package/dist/bot-mcp/instructions.js.map +1 -0
- package/dist/bot-mcp/server.d.ts +21 -0
- package/dist/bot-mcp/server.d.ts.map +1 -0
- package/dist/bot-mcp/server.js +213 -0
- package/dist/bot-mcp/server.js.map +1 -0
- package/dist/bot-mcp/tools.d.ts +27 -0
- package/dist/bot-mcp/tools.d.ts.map +1 -0
- package/dist/bot-mcp/tools.js +280 -0
- package/dist/bot-mcp/tools.js.map +1 -0
- package/dist/client.d.ts +43 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +207 -31
- package/dist/client.js.map +1 -1
- package/dist/commands/account.d.ts.map +1 -1
- package/dist/commands/account.js +7 -5
- package/dist/commands/account.js.map +1 -1
- package/dist/commands/backup.js +1 -1
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/bot-check.d.ts +11 -0
- package/dist/commands/bot-check.d.ts.map +1 -0
- package/dist/commands/bot-check.js +206 -0
- package/dist/commands/bot-check.js.map +1 -0
- package/dist/commands/bot-comments.d.ts.map +1 -1
- package/dist/commands/bot-comments.js +2 -1
- package/dist/commands/bot-comments.js.map +1 -1
- package/dist/commands/bot-context.d.ts +7 -0
- package/dist/commands/bot-context.d.ts.map +1 -1
- package/dist/commands/bot-context.js +32 -2
- package/dist/commands/bot-context.js.map +1 -1
- package/dist/commands/bot-mcp.d.ts +3 -0
- package/dist/commands/bot-mcp.d.ts.map +1 -0
- package/dist/commands/bot-mcp.js +69 -0
- package/dist/commands/bot-mcp.js.map +1 -0
- package/dist/commands/bot-members.d.ts.map +1 -1
- package/dist/commands/bot-members.js +7 -4
- package/dist/commands/bot-members.js.map +1 -1
- package/dist/commands/bot-people.d.ts +10 -0
- package/dist/commands/bot-people.d.ts.map +1 -0
- package/dist/commands/bot-people.js +156 -0
- package/dist/commands/bot-people.js.map +1 -0
- package/dist/commands/bot-reads.d.ts.map +1 -1
- package/dist/commands/bot-reads.js +25 -14
- package/dist/commands/bot-reads.js.map +1 -1
- package/dist/commands/bot-sends.d.ts.map +1 -1
- package/dist/commands/bot-sends.js +6 -5
- package/dist/commands/bot-sends.js.map +1 -1
- package/dist/commands/bot-setup.d.ts.map +1 -1
- package/dist/commands/bot-setup.js +5 -4
- package/dist/commands/bot-setup.js.map +1 -1
- package/dist/commands/bot-updates.d.ts.map +1 -1
- package/dist/commands/bot-updates.js +16 -2
- package/dist/commands/bot-updates.js.map +1 -1
- package/dist/commands/bot.d.ts.map +1 -1
- package/dist/commands/bot.js +13 -4
- package/dist/commands/bot.js.map +1 -1
- package/dist/commands/chats.d.ts.map +1 -1
- package/dist/commands/chats.js +15 -30
- package/dist/commands/chats.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +7 -6
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/complete.d.ts.map +1 -1
- package/dist/commands/complete.js +27 -3
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +29 -27
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contacts.d.ts.map +1 -1
- package/dist/commands/contacts.js +21 -0
- package/dist/commands/contacts.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +75 -21
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.js +1 -1
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/folders.d.ts.map +1 -1
- package/dist/commands/folders.js +3 -2
- package/dist/commands/folders.js.map +1 -1
- package/dist/commands/inbox.d.ts.map +1 -1
- package/dist/commands/inbox.js +1 -1
- package/dist/commands/inbox.js.map +1 -1
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +9 -11
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +2 -1
- package/dist/commands/models.js.map +1 -1
- package/dist/commands/paging.d.ts +17 -1
- package/dist/commands/paging.d.ts.map +1 -1
- package/dist/commands/paging.js +22 -2
- package/dist/commands/paging.js.map +1 -1
- package/dist/commands/polls.d.ts +3 -0
- package/dist/commands/polls.d.ts.map +1 -0
- package/dist/commands/polls.js +103 -0
- package/dist/commands/polls.js.map +1 -0
- package/dist/commands/recipients.d.ts.map +1 -1
- package/dist/commands/recipients.js +3 -2
- package/dist/commands/recipients.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +1 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/runs.d.ts.map +1 -1
- package/dist/commands/runs.js +4 -3
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/sends.d.ts.map +1 -1
- package/dist/commands/sends.js +3 -2
- package/dist/commands/sends.js.map +1 -1
- package/dist/config.d.ts +78 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +143 -72
- package/dist/config.js.map +1 -1
- package/dist/diagnose.d.ts +47 -1
- package/dist/diagnose.d.ts.map +1 -1
- package/dist/diagnose.js +56 -5
- package/dist/diagnose.js.map +1 -1
- package/dist/domain/map.d.ts +9 -1
- package/dist/domain/map.d.ts.map +1 -1
- package/dist/domain/map.js +57 -0
- package/dist/domain/map.js.map +1 -1
- package/dist/domain/models.d.ts +29 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/models.js.map +1 -1
- package/dist/export.d.ts.map +1 -1
- package/dist/export.js +2 -1
- package/dist/export.js.map +1 -1
- package/dist/generated/client.generated.d.ts +1 -0
- package/dist/generated/client.generated.d.ts.map +1 -1
- package/dist/generated/client.generated.js +1 -0
- package/dist/generated/client.generated.js.map +1 -1
- package/dist/generated/opcodes.generated.d.ts +1 -0
- package/dist/generated/opcodes.generated.d.ts.map +1 -1
- package/dist/generated/opcodes.generated.js +1 -0
- package/dist/generated/opcodes.generated.js.map +1 -1
- package/dist/generated/operations.generated.d.ts +25 -10
- package/dist/generated/operations.generated.d.ts.map +1 -1
- package/dist/generated/operations.generated.js +2 -1
- package/dist/generated/operations.generated.js.map +1 -1
- package/dist/mcp/confirm.d.ts +6 -2
- package/dist/mcp/confirm.d.ts.map +1 -1
- package/dist/mcp/confirm.js +2 -2
- package/dist/mcp/confirm.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +83 -17
- package/dist/mcp/tools.js.map +1 -1
- package/dist/moderation/check.d.ts +15 -9
- package/dist/moderation/check.d.ts.map +1 -1
- package/dist/moderation/check.js +14 -45
- package/dist/moderation/check.js.map +1 -1
- package/dist/moderation/rules.d.ts +57 -7
- package/dist/moderation/rules.d.ts.map +1 -1
- package/dist/moderation/rules.js +13 -11
- package/dist/moderation/rules.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +11 -3
- package/dist/program.js.map +1 -1
- package/dist/rendering/messages.d.ts +6 -1
- package/dist/rendering/messages.d.ts.map +1 -1
- package/dist/rendering/messages.js +24 -3
- package/dist/rendering/messages.js.map +1 -1
- package/dist/runs/events.d.ts +5 -2
- package/dist/runs/events.d.ts.map +1 -1
- package/dist/runs/events.js +4 -1
- package/dist/runs/events.js.map +1 -1
- package/dist/runs/recording.d.ts +11 -0
- package/dist/runs/recording.d.ts.map +1 -1
- package/dist/runs/recording.js +28 -12
- package/dist/runs/recording.js.map +1 -1
- package/dist/sends/guard.d.ts +2 -2
- package/dist/sends/guard.d.ts.map +1 -1
- package/dist/sends/guard.js +2 -1
- package/dist/sends/guard.js.map +1 -1
- package/dist/sends/journal.d.ts +2 -2
- package/dist/sends/journal.d.ts.map +1 -1
- package/dist/sends/journal.js.map +1 -1
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js +3 -0
- package/dist/sends/permissions.js.map +1 -1
- package/dist/server/server-connection.d.ts +8 -1
- package/dist/server/server-connection.d.ts.map +1 -1
- package/dist/server/server-connection.js +27 -1
- package/dist/server/server-connection.js.map +1 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +7 -1
- package/dist/server/server.js.map +1 -1
- package/dist/server/start.d.ts +1 -1
- package/dist/server/start.d.ts.map +1 -1
- package/dist/server/start.js +5 -3
- package/dist/server/start.js.map +1 -1
- package/dist/session/store.d.ts +2 -0
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +5 -1
- package/dist/session/store.js.map +1 -1
- package/dist/spec/index.d.ts.map +1 -1
- package/dist/spec/index.js +2 -1
- package/dist/spec/index.js.map +1 -1
- package/dist/spec/operations/account.d.ts +3 -0
- package/dist/spec/operations/account.d.ts.map +1 -1
- package/dist/spec/operations/account.js +5 -1
- package/dist/spec/operations/account.js.map +1 -1
- package/dist/spec/operations/chats.d.ts +4 -3
- package/dist/spec/operations/chats.d.ts.map +1 -1
- package/dist/spec/operations/chats.js +12 -7
- package/dist/spec/operations/chats.js.map +1 -1
- package/dist/spec/operations/contacts.d.ts +8 -3
- package/dist/spec/operations/contacts.d.ts.map +1 -1
- package/dist/spec/operations/contacts.js +26 -5
- 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 +1 -0
- package/dist/spec/operations/folders.js.map +1 -1
- package/dist/spec/operations/messages.d.ts +14 -4
- package/dist/spec/operations/messages.d.ts.map +1 -1
- package/dist/spec/operations/messages.js +30 -3
- package/dist/spec/operations/messages.js.map +1 -1
- package/dist/spec/operations/uploads.d.ts +1 -1
- package/dist/spec/operations/uploads.d.ts.map +1 -1
- package/dist/spec/operations/uploads.js +2 -1
- package/dist/spec/operations/uploads.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -2
- package/skills/max-cli/SKILL.md +19 -9
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Renderer, type RenderFormat, type Streams } from "@leemour/cli-core";
|
|
2
2
|
import type { Command } from "commander";
|
|
3
3
|
import type { Settings } from "../config.js";
|
|
4
4
|
import type { Page } from "../domain/models.js";
|
|
5
|
+
/** Checked while parsing, so the error can quote what was typed rather than the `NaN` it became. */
|
|
6
|
+
export declare const wholeNumber: (flag: string) => (value: string) => number;
|
|
5
7
|
/**
|
|
6
8
|
* The three flags every listing shares, so no command invents its own spelling of them.
|
|
7
9
|
*
|
|
@@ -20,6 +22,20 @@ export declare const window: ({ limit, page, all }: Settings) => {
|
|
|
20
22
|
limit?: number;
|
|
21
23
|
offset: number;
|
|
22
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* A list with no pages — folders, members, runs, everything a bot lists — in the envelope a paged
|
|
27
|
+
* one uses (`NEED-358`), so an agent reads one shape. `--jsonl` streams it and a person gets the table.
|
|
28
|
+
* `extra` goes beside it: a Bot API list paged by `marker` carries its marker and `hasMore`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const renderList: (renderer: Renderer, format: RenderFormat, items: readonly unknown[], extra?: {
|
|
31
|
+
hasMore?: boolean;
|
|
32
|
+
} & Record<string, unknown>) => void;
|
|
33
|
+
export declare const listed: (items: readonly unknown[]) => {
|
|
34
|
+
items: readonly unknown[];
|
|
35
|
+
page: number;
|
|
36
|
+
limit: number;
|
|
37
|
+
hasMore: boolean;
|
|
38
|
+
};
|
|
23
39
|
/**
|
|
24
40
|
* **One shape for every listing**, and the caller never has to work out which one it got.
|
|
25
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"paging.d.ts","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,oGAAoG;AACpG,eAAO,MAAM,WAAW,SACf,MAAM,aACL,MAAM,KAAG,MAKhB,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,UAAU,YAAa,OAAO,KAAG,OAIF,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,yBAA0B,QAAQ,KAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAC3B,CAAA;AAE7D;;;;GAIG;AACH,eAAO,MAAM,UAAU,aACX,QAAQ,UACV,YAAY,SACb,SAAS,OAAO,EAAE,UAClB;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACrD,IAGF,CAAA;AAED,eAAO,MAAM,MAAM,UAAW,SAAS,OAAO,EAAE;;;;;CAA8D,CAAA;AAE9G;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,4CAMvB;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,sBACjE,IAAI,CAAC,CAAC,CAAC,SACpB,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,MAAM;AAC7B,4EAA4E;OACrE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,MAAM;AAC7B,0CAA0C;QACnC,MAAM,KACZ,IAuBF,CAAA"}
|
package/dist/commands/paging.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
2
|
+
/** Checked while parsing, so the error can quote what was typed rather than the `NaN` it became. */
|
|
3
|
+
export const wholeNumber = (flag) => (value) => {
|
|
4
|
+
if (!/^\d+$/.test(value.trim()) || Number(value) < 1) {
|
|
5
|
+
throw new CliError("validation_error", `${flag} takes a whole number from 1 upwards, not "${value}"`);
|
|
6
|
+
}
|
|
7
|
+
return Number(value);
|
|
8
|
+
};
|
|
1
9
|
/**
|
|
2
10
|
* The three flags every listing shares, so no command invents its own spelling of them.
|
|
3
11
|
*
|
|
@@ -5,8 +13,8 @@
|
|
|
5
13
|
* configured `limit` could never win it; the number lives once, in `resolveSettings`.
|
|
6
14
|
*/
|
|
7
15
|
export const withPaging = (command) => command
|
|
8
|
-
.option("--limit <n>", "how many to show", (
|
|
9
|
-
.option("--page <n>", "which page, starting at 1", (
|
|
16
|
+
.option("--limit <n>", "how many to show", wholeNumber("--limit"))
|
|
17
|
+
.option("--page <n>", "which page, starting at 1", wholeNumber("--page"))
|
|
10
18
|
.option("--all", "every row, no paging");
|
|
11
19
|
/**
|
|
12
20
|
* Which rows to ask the store for. `--all` means no limit, which the store reads as "everything".
|
|
@@ -16,6 +24,18 @@ export const withPaging = (command) => command
|
|
|
16
24
|
* CLI that pages this way has this; it is in `--help` rather than engineered away.
|
|
17
25
|
*/
|
|
18
26
|
export const window = ({ limit, page, all }) => all ? { offset: 0 } : { limit, offset: (page - 1) * limit };
|
|
27
|
+
/**
|
|
28
|
+
* A list with no pages — folders, members, runs, everything a bot lists — in the envelope a paged
|
|
29
|
+
* one uses (`NEED-358`), so an agent reads one shape. `--jsonl` streams it and a person gets the table.
|
|
30
|
+
* `extra` goes beside it: a Bot API list paged by `marker` carries its marker and `hasMore`.
|
|
31
|
+
*/
|
|
32
|
+
export const renderList = (renderer, format, items, extra = {}) => {
|
|
33
|
+
if (format === "json")
|
|
34
|
+
renderer.result({ ...listed(items), ...extra });
|
|
35
|
+
else
|
|
36
|
+
renderer.stream(items);
|
|
37
|
+
};
|
|
38
|
+
export const listed = (items) => ({ items, page: 1, limit: items.length, hasMore: false });
|
|
19
39
|
/**
|
|
20
40
|
* **One shape for every listing**, and the caller never has to work out which one it got.
|
|
21
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paging.js","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paging.js","sourceRoot":"","sources":["../../src/commands/paging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkD,MAAM,mBAAmB,CAAA;AAK5F,oGAAoG;AACpG,MAAM,CAAC,MAAM,WAAW,GACtB,CAAC,IAAY,EAAE,EAAE,CACjB,CAAC,KAAa,EAAU,EAAE;IACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,IAAI,8CAA8C,KAAK,GAAG,CAAC,CAAA;IACvG,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAW,EAAE,CACtD,OAAO;KACJ,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;KACjE,MAAM,CAAC,YAAY,EAAE,2BAA2B,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;KACxE,MAAM,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAY,EAAsC,EAAE,CAC3F,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,QAAkB,EAClB,MAAoB,EACpB,KAAyB,EACzB,KAAK,GAAoD,EAAE,EACrD,EAAE;IACR,IAAI,MAAM,KAAK,MAAM;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAA;;QACjE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAyB,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;AAE9G;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,EACE,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,GAC4E,EACrF,EAAE,KAAK,EAAE,OAAO,EAAW,EAC3B,IAA6B;AAC7B,4EAA4E;AAC5E,IAA6B;AAC7B,0CAA0C;AAC1C,KAAK,GAAW,EAAE,EACZ,EAAE;IACR,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO;YAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC3F,OAAM;IACR,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC;YACd,KAAK;YACL,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;YACtC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;YACnD,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;YACvC,GAAG,KAAK;SACT,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IAED,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;;QAC9B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO;QAC1B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,uBAAuB,QAAQ,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAA;AACtH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polls.d.ts","sourceRoot":"","sources":["../../src/commands/polls.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWnC,eAAO,MAAM,YAAY,QAAO,OA+F/B,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
2
|
+
import { annotate } from "@leemour/cli-core/commands";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { openProfileCache } from "../cache/index.js";
|
|
5
|
+
import { pollLines } from "../rendering/messages.js";
|
|
6
|
+
import { forCommand } from "./context.js";
|
|
7
|
+
const show = ({ renderer, format, streams }, answer) => {
|
|
8
|
+
if (format === "pretty")
|
|
9
|
+
streams.data(`${pollLines(answer.poll).join("\n")}\n`);
|
|
10
|
+
else
|
|
11
|
+
renderer.result(answer);
|
|
12
|
+
};
|
|
13
|
+
export const pollsCommand = () => {
|
|
14
|
+
const command = new Command("polls").description("vote in polls, close your own, create one");
|
|
15
|
+
annotate(command.command("vote"), { mutates: true })
|
|
16
|
+
.argument("<chat>", "chat id, or part of a chat name")
|
|
17
|
+
.argument("<message>", "id of the message that carries the poll")
|
|
18
|
+
.argument("[answers...]", "answer ids, as `messages list` prints them in [brackets]")
|
|
19
|
+
.option("--retract", "take your vote back, where the poll allows it")
|
|
20
|
+
.description("vote in a poll, or take your vote back; the others see it unless the poll is anonymous")
|
|
21
|
+
.action(async function (chat, messageId, answers) {
|
|
22
|
+
const retract = this.opts().retract === true;
|
|
23
|
+
if (retract && answers.length > 0) {
|
|
24
|
+
throw new CliError("validation_error", "`--retract` takes no answers: it removes the vote you have");
|
|
25
|
+
}
|
|
26
|
+
if (!retract && answers.length === 0) {
|
|
27
|
+
throw new CliError("validation_error", "name at least one answer id, or pass `--retract`");
|
|
28
|
+
}
|
|
29
|
+
const context = forCommand(this);
|
|
30
|
+
const cache = await openProfileCache(context.settings.profile, {
|
|
31
|
+
onProblem: (message) => context.renderer.note(message),
|
|
32
|
+
});
|
|
33
|
+
await context.run("polls vote", async (events) => {
|
|
34
|
+
const client = context.createClient({ events, ...(cache ? { cache } : {}) });
|
|
35
|
+
try {
|
|
36
|
+
const chatId = await client.chats.resolve(chat);
|
|
37
|
+
const ids = answers.map((answer) => answer.trim());
|
|
38
|
+
show(context, await client.polls.vote(chatId, messageId.trim(), ids));
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
await client.close();
|
|
42
|
+
cache?.close();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
annotate(command.command("close"), { mutates: true })
|
|
47
|
+
.argument("<chat>", "chat id, or part of a chat name")
|
|
48
|
+
.argument("<message>", "id of your own message that carries the poll")
|
|
49
|
+
.description("close your own poll; nobody can vote in it after that, and it cannot be reopened")
|
|
50
|
+
.action(async function (chat, messageId) {
|
|
51
|
+
const context = forCommand(this);
|
|
52
|
+
const cache = await openProfileCache(context.settings.profile, {
|
|
53
|
+
onProblem: (message) => context.renderer.note(message),
|
|
54
|
+
});
|
|
55
|
+
await context.run("polls close", async (events) => {
|
|
56
|
+
const client = context.createClient({ events, ...(cache ? { cache } : {}) });
|
|
57
|
+
try {
|
|
58
|
+
const chatId = await client.chats.resolve(chat);
|
|
59
|
+
show(context, await client.polls.close(chatId, messageId.trim()));
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
await client.close();
|
|
63
|
+
cache?.close();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
annotate(command.command("create"), { mutates: true })
|
|
68
|
+
.argument("<chat>", "chat id, or part of a chat name")
|
|
69
|
+
.argument("<question>", "the question")
|
|
70
|
+
.argument("<answers...>", "two answers or more")
|
|
71
|
+
.option("--multiple", "people may pick several answers")
|
|
72
|
+
.option("--anonymous", "nobody sees who voted for what")
|
|
73
|
+
.option("--revote", "people may change their vote")
|
|
74
|
+
.option("--silent", "send without a notification")
|
|
75
|
+
.description("send a poll to a chat, as a message of its own")
|
|
76
|
+
.action(async function (chat, question, answers) {
|
|
77
|
+
const options = this.opts();
|
|
78
|
+
const context = forCommand(this);
|
|
79
|
+
const cache = await openProfileCache(context.settings.profile, {
|
|
80
|
+
onProblem: (message) => context.renderer.note(message),
|
|
81
|
+
});
|
|
82
|
+
await context.run("polls create", async (events) => {
|
|
83
|
+
const client = context.createClient({ events, ...(cache ? { cache } : {}) });
|
|
84
|
+
try {
|
|
85
|
+
const chatId = await client.chats.resolve(chat);
|
|
86
|
+
const sent = await client.polls.create(chatId, question, answers, {
|
|
87
|
+
multiple: options.multiple === true,
|
|
88
|
+
anonymous: options.anonymous === true,
|
|
89
|
+
revote: options.revote === true,
|
|
90
|
+
...(options.silent === true ? { notify: false } : {}),
|
|
91
|
+
});
|
|
92
|
+
context.renderer.note("web.max.ru does not show polls: anyone reading this chat in a browser sees «Обновите MAX…»");
|
|
93
|
+
context.renderer.result(sent);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
await client.close();
|
|
97
|
+
cache?.close();
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
return command;
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=polls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polls.js","sourceRoot":"","sources":["../../src/commands/polls.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAiEpC,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { CliError } from "@leemour/cli-core";
|
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { RecipientList, recipientsPathFor } from "../sends/recipients.js";
|
|
4
4
|
import { forCommand } from "./context.js";
|
|
5
|
+
import { renderList } from "./paging.js";
|
|
5
6
|
/**
|
|
6
7
|
* The chats this profile may send to. Off until the first `add`; `off` turns it off again.
|
|
7
8
|
*
|
|
@@ -14,10 +15,10 @@ export const recipientsCommand = () => {
|
|
|
14
15
|
.command("list")
|
|
15
16
|
.description("the chats on the list; empty and off until the first add")
|
|
16
17
|
.action(async function () {
|
|
17
|
-
const { settings, renderer, run } = forCommand(this);
|
|
18
|
+
const { settings, renderer, format, run } = forCommand(this);
|
|
18
19
|
await run("recipients list", async () => {
|
|
19
20
|
const chats = listFor(settings.profile).read();
|
|
20
|
-
renderer
|
|
21
|
+
renderList(renderer, format, chats ?? []);
|
|
21
22
|
if (!chats)
|
|
22
23
|
renderer.note("the recipient list is off — this profile may send to any chat");
|
|
23
24
|
else if (chats.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/commands/recipients.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAQnC;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OAgE3B,CAAA"}
|
package/dist/commands/review.js
CHANGED
|
@@ -12,7 +12,7 @@ import { forCommand } from "./context.js";
|
|
|
12
12
|
*/
|
|
13
13
|
export const reviewCommand = () => new Command("review")
|
|
14
14
|
.description("every message, yours too, in chats that changed since a point — for reviewing who owes what")
|
|
15
|
-
.option("--since <id-or-time>", `where the last review ended; ${REVIEW_DAYS} days ago if not given`)
|
|
15
|
+
.option("--since <id-or-time>", `where the last review ended — a message id, ISO 8601 time, or 2h / 1d ago; ${REVIEW_DAYS} days ago if not given`)
|
|
16
16
|
.option("--transcribe", "transcribe voice messages not heard yet; slow, and the model must be downloaded")
|
|
17
17
|
.option("--chat <chat>", "only this chat: an id, or part of a chat name")
|
|
18
18
|
.option("--unanswered [hours]", `only questions to you or a group's admins that nobody answered, asked at least this long ago; ${UNANSWERED_HOURS} hours if not given`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,EAAE,CACzC,IAAI,OAAO,CAAC,QAAQ,CAAC;KAClB,WAAW,CAAC,6FAA6F,CAAC;KAC1G,MAAM,
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,OA8C9B,CAAA"}
|
package/dist/commands/runs.js
CHANGED
|
@@ -2,6 +2,7 @@ import { CliError } from "@leemour/cli-core";
|
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { findRun, listRuns, readEvents, runsDirFor } from "../runs/run.js";
|
|
4
4
|
import { outputFor } from "./context.js";
|
|
5
|
+
import { renderList, wholeNumber } from "./paging.js";
|
|
5
6
|
/**
|
|
6
7
|
* What this tool did, when it was asked to keep the record.
|
|
7
8
|
*
|
|
@@ -13,12 +14,12 @@ export const runsCommand = () => {
|
|
|
13
14
|
command
|
|
14
15
|
.command("list")
|
|
15
16
|
.description("recorded runs, newest first")
|
|
16
|
-
.option("--limit <n>", "how many to show", (
|
|
17
|
+
.option("--limit <n>", "how many to show", wholeNumber("--limit"), 20)
|
|
17
18
|
.action(function () {
|
|
18
19
|
const options = this.optsWithGlobals();
|
|
19
|
-
const { renderer } = outputFor(this);
|
|
20
|
+
const { renderer, format } = outputFor(this);
|
|
20
21
|
const runs = listRuns(runsDirFor());
|
|
21
|
-
renderer
|
|
22
|
+
renderList(renderer, format, runs.slice(0, options.limit));
|
|
22
23
|
// An empty list reads as broken otherwise, and the reason is that nothing asked for a
|
|
23
24
|
// record — recording is off unless it is asked for (`NEED-52`). The explanation is a
|
|
24
25
|
// diagnostic, so stdout still carries one JSON value and nothing else.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sends.d.ts","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"sends.d.ts","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,8FAA8F;AAC9F,eAAO,MAAM,YAAY,QAAO,OAkB/B,CAAA"}
|
package/dist/commands/sends.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { SendJournal, sendsPathFor } from "../sends/journal.js";
|
|
3
3
|
import { forCommand } from "./context.js";
|
|
4
|
+
import { renderList } from "./paging.js";
|
|
4
5
|
/** Every attempt to send from this profile, kept whatever `--record` says. Never the text. */
|
|
5
6
|
export const sendsCommand = () => {
|
|
6
7
|
const command = new Command("sends").description("every attempt to send from this profile — never the text");
|
|
@@ -10,10 +11,10 @@ export const sendsCommand = () => {
|
|
|
10
11
|
.option("--limit <n>", "how many to show", (value) => Number.parseInt(value, 10), 20)
|
|
11
12
|
.action(async function () {
|
|
12
13
|
const { limit } = this.opts();
|
|
13
|
-
const { settings, renderer, run } = forCommand(this);
|
|
14
|
+
const { settings, renderer, format, run } = forCommand(this);
|
|
14
15
|
await run("sends list", async () => {
|
|
15
16
|
const entries = new SendJournal(sendsPathFor(settings.profile)).entries().reverse();
|
|
16
|
-
renderer
|
|
17
|
+
renderList(renderer, format, entries.slice(0, limit));
|
|
17
18
|
if (entries.length === 0)
|
|
18
19
|
renderer.note(`profile ${settings.profile} has not tried to send anything`);
|
|
19
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sends.js","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"sends.js","sourceRoot":"","sources":["../../src/commands/sends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,0DAA0D,CAAC,CAAA;IAE5G,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SACpF,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAqB,CAAA;QAChD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YACjC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAA;YACnF,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,OAAO,iCAAiC,CAAC,CAAA;QACvG,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
package/dist/config.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ declare const profileSettings: v.StrictObjectSchema<{
|
|
|
4
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>;
|
|
5
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>;
|
|
6
6
|
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
7
|
-
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
8
7
|
/** The run log reads these two; nothing records anything until it exists. */
|
|
9
8
|
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
10
9
|
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>;
|
|
11
10
|
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
12
11
|
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>;
|
|
13
12
|
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>;
|
|
13
|
+
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
14
14
|
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
15
15
|
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
16
16
|
}, v.ErrorMessage<v.StrictObjectIssue>>;
|
|
@@ -21,13 +21,13 @@ export declare const configSchema: v.StrictObjectSchema<{
|
|
|
21
21
|
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>;
|
|
22
22
|
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>;
|
|
23
23
|
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
24
|
-
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
25
24
|
/** The run log reads these two; nothing records anything until it exists. */
|
|
26
25
|
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
27
26
|
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>;
|
|
28
27
|
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
29
28
|
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>;
|
|
30
29
|
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>;
|
|
30
|
+
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
31
31
|
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
32
32
|
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
33
33
|
updateCheck: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
@@ -37,20 +37,77 @@ export declare const configSchema: v.StrictObjectSchema<{
|
|
|
37
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>;
|
|
38
38
|
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>;
|
|
39
39
|
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
40
|
-
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
41
40
|
/** The run log reads these two; nothing records anything until it exists. */
|
|
42
41
|
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
43
42
|
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>;
|
|
44
43
|
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
45
44
|
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>;
|
|
46
45
|
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>;
|
|
46
|
+
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
47
47
|
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
48
48
|
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
49
49
|
}, v.ErrorMessage<v.StrictObjectIssue>>, "has to be an object of profiles, by name">, {}>;
|
|
50
|
+
personal: v.OptionalSchema<v.StrictObjectSchema<{
|
|
51
|
+
defaults: v.OptionalSchema<v.StrictObjectSchema<{
|
|
52
|
+
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>;
|
|
53
|
+
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>;
|
|
54
|
+
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
55
|
+
/** The run log reads these two; nothing records anything until it exists. */
|
|
56
|
+
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
57
|
+
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>;
|
|
58
|
+
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
59
|
+
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>;
|
|
60
|
+
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>;
|
|
61
|
+
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
62
|
+
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
63
|
+
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
64
|
+
}, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
|
|
65
|
+
profiles: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
|
|
66
|
+
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>;
|
|
67
|
+
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>;
|
|
68
|
+
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
69
|
+
/** The run log reads these two; nothing records anything until it exists. */
|
|
70
|
+
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
71
|
+
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>;
|
|
72
|
+
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
73
|
+
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>;
|
|
74
|
+
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>;
|
|
75
|
+
senderColors: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
76
|
+
/** Start `max serve` in the background when a command needs MAX and none is running (`MAX-35`). */
|
|
77
|
+
serve: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
78
|
+
}, v.ErrorMessage<v.StrictObjectIssue>>, "has to be an object of profiles, by name">, undefined>;
|
|
79
|
+
}, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
|
|
80
|
+
bot: v.OptionalSchema<v.StrictObjectSchema<{
|
|
81
|
+
defaults: v.OptionalSchema<v.StrictObjectSchema<{
|
|
82
|
+
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>;
|
|
83
|
+
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>;
|
|
84
|
+
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
85
|
+
/** The run log reads these two; nothing records anything until it exists. */
|
|
86
|
+
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
87
|
+
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>;
|
|
88
|
+
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
89
|
+
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>;
|
|
90
|
+
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>;
|
|
91
|
+
}, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
|
|
92
|
+
profiles: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.StrictObjectSchema<{
|
|
93
|
+
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>;
|
|
94
|
+
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>;
|
|
95
|
+
color: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
96
|
+
/** The run log reads these two; nothing records anything until it exists. */
|
|
97
|
+
record: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
98
|
+
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>;
|
|
99
|
+
readOnly: v.OptionalSchema<v.BooleanSchema<(issue: v.BaseIssue<unknown>) => string>, undefined>;
|
|
100
|
+
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>;
|
|
101
|
+
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>;
|
|
102
|
+
}, v.ErrorMessage<v.StrictObjectIssue>>, "has to be an object of profiles, by name">, undefined>;
|
|
103
|
+
}, v.ErrorMessage<v.StrictObjectIssue>>, undefined>;
|
|
50
104
|
}, v.ErrorMessage<v.StrictObjectIssue>>;
|
|
51
105
|
export type Config = v.InferOutput<typeof configSchema>;
|
|
106
|
+
/** Which side of a profile a command speaks for: `max <p> bot …` is the bot, everything else the account. */
|
|
107
|
+
export type ProfileKind = "personal" | "bot";
|
|
52
108
|
export type ProfileSetting = keyof v.InferOutput<typeof profileSettings>;
|
|
53
109
|
export declare const PROFILE_SETTINGS: ProfileSetting[];
|
|
110
|
+
export declare const PERSONAL_ONLY_SETTINGS: ProfileSetting[];
|
|
54
111
|
export declare const DEFAULTS_ONLY_SETTINGS: readonly ["updateCheck", "transcribeModel"];
|
|
55
112
|
export declare const ALL_SETTINGS: string[];
|
|
56
113
|
/** Whatever the command line carried. Everything is optional: absent means "not given here". */
|
|
@@ -118,15 +175,19 @@ export interface Settings {
|
|
|
118
175
|
/** Named in errors and in `max --help`, so a person can find the file that decided this. */
|
|
119
176
|
configPath: string;
|
|
120
177
|
configFound: boolean;
|
|
178
|
+
kind: ProfileKind;
|
|
121
179
|
/** Profiles the configuration file names, whether or not anyone has logged in to them. */
|
|
122
180
|
configuredProfiles: string[];
|
|
123
181
|
/** Where each value came from — `max config show` prints it. */
|
|
124
182
|
sources: Record<SourcedSetting, Source>;
|
|
125
183
|
}
|
|
126
|
-
|
|
184
|
+
/** A value from the configuration file names the key it was read from: `config file: bot.profiles.test`. */
|
|
185
|
+
export type Source = "first word" | "flag" | "MAX_PROFILE" | "MAX_PROFILE_LOCK" | "MAX_TIMEOUT" | `config file: ${string}` | "default";
|
|
127
186
|
export type SourcedSetting = "profile" | "limit" | "timeoutMs" | "commandTimeoutMs" | "color" | "senderColors" | "record" | "serve" | "keepRunsForDays" | "readOnly" | "allow" | "sendsPerHour" | "updateCheck" | "transcribeModel";
|
|
128
187
|
export interface ResolveOptions {
|
|
129
188
|
env?: NodeJS.ProcessEnv;
|
|
189
|
+
/** Personal unless the command is under `max bot`. */
|
|
190
|
+
kind?: ProfileKind;
|
|
130
191
|
/** Tests pass a temporary directory; nothing else should need this. */
|
|
131
192
|
configDir?: string;
|
|
132
193
|
}
|
|
@@ -144,7 +205,7 @@ export interface ResolveOptions {
|
|
|
144
205
|
* `MAX_STATE_DIR` or `MAX_CACHE_DIR` move the whole installation — including which keyring entry
|
|
145
206
|
* a profile means (`ARCHITECTURE.md` §14).
|
|
146
207
|
*/
|
|
147
|
-
export declare const resolveSettings: (flags?: GlobalFlags, { env, configDir }?: ResolveOptions) => Settings;
|
|
208
|
+
export declare const resolveSettings: (flags?: GlobalFlags, { env, configDir, kind }?: ResolveOptions) => Settings;
|
|
148
209
|
/**
|
|
149
210
|
* The profile names written in the configuration file.
|
|
150
211
|
*
|
|
@@ -155,6 +216,8 @@ export declare const resolveSettings: (flags?: GlobalFlags, { env, configDir }?:
|
|
|
155
216
|
export declare const configuredProfiles: ({ env, configDir }?: ResolveOptions) => string[];
|
|
156
217
|
/** `30s`, `2m`, `500ms` — the one spelling of a duration, whatever it is for. */
|
|
157
218
|
export declare const parseDuration: (value: string, source: string) => number;
|
|
219
|
+
/** `30m`, `2h`, `1d` as milliseconds; anything else is `undefined`. */
|
|
220
|
+
export declare const delayMs: (value: string) => number | undefined;
|
|
158
221
|
/**
|
|
159
222
|
* Rounded down to the minute: MAX drops the seconds and sends at the start of the minute (measured
|
|
160
223
|
* 2026-09-24, `FIND-141`), so the time we print is the time it goes. A time without an offset is
|
|
@@ -162,14 +225,22 @@ export declare const parseDuration: (value: string, source: string) => number;
|
|
|
162
225
|
* unlike `--timeout`: nobody schedules a message 90 seconds ahead.
|
|
163
226
|
*/
|
|
164
227
|
export declare const sendTime: (value: string, now?: number) => number;
|
|
228
|
+
/** Where `config set` writes: one profile, or everyone, optionally narrowed to one kind. */
|
|
229
|
+
export interface SettingScope {
|
|
230
|
+
profile: string | undefined;
|
|
231
|
+
kind?: ProfileKind | undefined;
|
|
232
|
+
}
|
|
233
|
+
export declare const scopePath: ({ profile, kind }: SettingScope) => string;
|
|
234
|
+
/** The `config set` that writes where a value came from, so a refusal can say what to type. */
|
|
235
|
+
export declare const setCommandFor: (from: Source, profile: string, setting: string) => string;
|
|
165
236
|
/**
|
|
166
237
|
* Sets or removes one setting of one profile, or of `defaults`, and writes the file back.
|
|
238
|
+
* `defaultProfile` is the one top-level key, and takes no scope.
|
|
167
239
|
*
|
|
168
240
|
* **The value is checked by the same schema that reads the file**, on the whole result, before
|
|
169
241
|
* anything is written — so `config set` cannot produce a file the next command refuses to load.
|
|
170
242
|
*/
|
|
171
|
-
export declare const changeSetting: (path: string, { profile, setting, value }: {
|
|
172
|
-
profile: string | undefined;
|
|
243
|
+
export declare const changeSetting: (path: string, { profile, kind, setting, value }: SettingScope & {
|
|
173
244
|
setting: string;
|
|
174
245
|
value: string | undefined;
|
|
175
246
|
}) => unknown;
|
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;AAE5B,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|