@cotal-ai/cli 0.139.0 → 0.140.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.
@@ -1,16 +1,24 @@
1
- import { type ChatHistoryLimit } from "@cotal-ai/core";
1
+ import { type HistoryLimit, type HistoryLimitStream } from "@cotal-ai/core";
2
2
  interface Values {
3
3
  space?: string;
4
4
  "max-age"?: string;
5
5
  "per-sender"?: string;
6
+ "inbox-max-age"?: string;
7
+ "inbox-per-agent"?: string;
8
+ "dm-max-age"?: string;
9
+ "dm-per-sender"?: string;
6
10
  yes?: boolean;
7
11
  json?: boolean;
8
12
  plain?: boolean;
9
13
  }
10
- /** The requested parts of the limit, refused as usage before any connection. */
11
- export declare function historyLimitRequest(values: Values): Partial<ChatHistoryLimit>;
12
- /** `cotal history limit`: set how long the space's chat stream keeps channel posts. The space root's
13
- * signing material mints a one-shot provisioner, so this runs on the broker host, from the root. */
14
+ /** Every limit flag, for the refusals that name them. */
15
+ export declare const HISTORY_LIMIT_FLAGS: ("max-age" | "per-sender" | "inbox-max-age" | "inbox-per-agent" | "dm-max-age" | "dm-per-sender")[];
16
+ /** The requested parts of each stream's limit, refused as usage before any connection. Empty when no
17
+ * limit flag is given, which reads the limits instead. `none` is no age (0) or no count (-1). */
18
+ export declare function historyLimitRequest(values: Values): Map<HistoryLimitStream, Partial<HistoryLimit>>;
19
+ /** `cotal history limit`: show or set how long the space keeps channel posts, the delivery daemon's
20
+ * inbox and stored copies, and DMs. The space root's signing material mints a one-shot provisioner,
21
+ * so this runs on the broker host, from the root. With no limit flag it only reads. */
14
22
  export declare function historyLimit(values: Values): Promise<void>;
15
23
  export {};
16
24
  //# sourceMappingURL=history-limit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"history-limit.d.ts","sourceRoot":"","sources":["../../src/commands/history-limit.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAOxB,UAAU,MAAM;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;AAgB9H,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAe7E;AAwBD;qGACqG;AACrG,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEhE"}
1
+ {"version":3,"file":"history-limit.d.ts","sourceRoot":"","sources":["../../src/commands/history-limit.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,YAAY,EAAE,KAAK,kBAAkB,EAC3C,MAAM,gBAAgB,CAAC;AAOxB,UAAU,MAAM;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAChD,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAChD;AAQD,yDAAyD;AACzD,eAAO,MAAM,mBAAmB,qGAAkD,CAAC;AAmCnF;kGACkG;AAClG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CA6BlG;AAkFD;;wFAEwF;AACxF,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2GhE"}
@@ -1,69 +1,159 @@
1
1
  import * as prompts from "../lib/prompts.js";
2
- import { ChatHistoryChanged, ChatHistoryUpdateUnknown, chatHistoryLimitOf, chatHistoryLimitProblem, chatStream, describeChatHistory, dialerFor, formatChatAge, isPrincipalOwnerToken, isPublishPermissionDenied, isStreamNotFound, mintCreds, newIdentity, parseDuration, parseSubject, requireBrokerFloor, setChatHistoryLimit, standaloneConnectOpts, validateCanonicalBackupStreamConfig, } from "@cotal-ai/core";
2
+ import { HISTORY_NO_COUNT, HistoryLimitChanged, HistoryLimitUpdateUnknown, describeHistoryLimit, dialerFor, dlvDurable, formatChatAge, historyAgeProblem, historyLimitOf, historyLimitProblem, historyLimitStreamName, isPrincipalOwnerToken, isPublishPermissionDenied, isStreamNotFound, mintCreds, newIdentity, parseDinboxPrincipal, parseDuration, parseSubject, requireBrokerFloor, setHistoryLimit, standaloneConnectOpts, validateCanonicalBackupStreamConfig, } from "@cotal-ai/core";
3
3
  import { JetStreamApiError, jetstreamManager } from "@nats-io/jetstream";
4
4
  import { ConfirmationRequired, CommandFailure, authDir, brokerAddressForDisplay, getSpaceAuth, oneLine, presentationOf, recordOperationSpace, resolveMeshTarget, workspaceSecretStore, writeResult } from "@cotal-ai/workspace";
5
5
  import { canPrompt } from "./meshes-wizard.js";
6
6
  import { yesRequired } from "../lib/confirmation-required.js";
7
7
  import { noticeOnInterrupt } from "../lib/interrupt-notice.js";
8
+ /** The flag pairs this command takes, and the streams each sets. One pair sets INBOX and DLV. */
9
+ const PAIRS = [
10
+ { age: "max-age", count: "per-sender", streams: ["chat"] },
11
+ { age: "inbox-max-age", count: "inbox-per-agent", streams: ["inbox", "dlv"] },
12
+ { age: "dm-max-age", count: "dm-per-sender", streams: ["dm"] },
13
+ ];
14
+ /** Every limit flag, for the refusals that name them. */
15
+ export const HISTORY_LIMIT_FLAGS = PAIRS.flatMap((pair) => [pair.age, pair.count]);
16
+ /** The streams in the order a change writes them. */
17
+ const ORDER = ["chat", "inbox", "dlv", "dm"];
18
+ const LABEL = { chat: "Channel posts", inbox: "Inbox", dlv: "Stored copies", dm: "DMs" };
19
+ const view = (limit) => ({ maxAgeMs: limit.maxAgeMs === 0 ? null : limit.maxAgeMs, perSubject: limit.perSubject === HISTORY_NO_COUNT ? null : limit.perSubject });
8
20
  const usage = (message) => new CommandFailure("refused", "USAGE_INVALID", message);
9
21
  const brokerLabel = (server) => brokerAddressForDisplay(server) ?? "selected broker (address unavailable)";
10
- /** The requested parts of the limit, refused as usage before any connection. */
22
+ /** The requested parts of each stream's limit, refused as usage before any connection. Empty when no
23
+ * limit flag is given, which reads the limits instead. `none` is no age (0) or no count (-1). */
11
24
  export function historyLimitRequest(values) {
12
- if (values["max-age"] === undefined && values["per-sender"] === undefined)
13
- throw usage("history limit needs --max-age, --per-sender or both");
14
- const request = {};
15
- if (values["max-age"] !== undefined) {
16
- try {
17
- request.maxAgeMs = parseDuration(values["max-age"]);
25
+ const request = new Map();
26
+ for (const pair of PAIRS) {
27
+ const age = values[pair.age], count = values[pair.count];
28
+ if (age === undefined && count === undefined)
29
+ continue;
30
+ const part = {};
31
+ if (age !== undefined) {
32
+ if (age === "none")
33
+ part.maxAgeMs = 0;
34
+ else {
35
+ try {
36
+ part.maxAgeMs = parseDuration(age);
37
+ }
38
+ catch {
39
+ throw usage(`--${pair.age} takes an age such as 30d, 12h or 90m, or none, not "${age}"`);
40
+ }
41
+ }
18
42
  }
19
- catch {
20
- throw usage(`--max-age takes an age such as 30d, 12h or 90m, not "${values["max-age"]}"`);
43
+ if (count !== undefined) {
44
+ if (count === "none")
45
+ part.perSubject = HISTORY_NO_COUNT;
46
+ else if (/^\d+$/.test(count))
47
+ part.perSubject = Number(count);
48
+ else
49
+ throw usage(`--${pair.count} takes a whole number of at least 1, or none, not "${count}"`);
50
+ }
51
+ for (const stream of pair.streams) {
52
+ // Each given part is checked alone, so its own problem is the one named. A given age is checked
53
+ // as an age, so 0s is refused as below the floor and only none asks for no age.
54
+ const ageProblem = part.maxAgeMs === undefined || age === "none" ? undefined : historyAgeProblem(stream, part.maxAgeMs);
55
+ if (ageProblem)
56
+ throw usage(`--${pair.age}: ${ageProblem}`);
57
+ const countProblem = part.perSubject === undefined ? undefined : historyLimitProblem(stream, { maxAgeMs: 0, perSubject: part.perSubject });
58
+ if (countProblem)
59
+ throw usage(`--${pair.count}: ${countProblem}`);
60
+ request.set(stream, part);
21
61
  }
22
62
  }
23
- if (values["per-sender"] !== undefined) {
24
- if (!/^\d+$/.test(values["per-sender"]))
25
- throw usage(`--per-sender takes a whole number of at least 1, not "${values["per-sender"]}"`);
26
- request.perSender = Number(values["per-sender"]);
27
- }
28
- // Each given part is checked against a valid other half, so its own problem is the one named.
29
- const problem = chatHistoryLimitProblem({ maxAgeMs: request.maxAgeMs ?? 86_400_000, perSender: request.perSender ?? 1 });
30
- if (problem)
31
- throw usage(`history limit: ${problem}`);
32
63
  return request;
33
64
  }
34
- function lowering(from, to, info, readAt) {
35
- const ageDrops = from.maxAgeMs === 0 || to.maxAgeMs < from.maxAgeMs;
36
- const countDrops = to.perSender < from.perSender;
37
- if (!ageDrops && !countDrops)
65
+ const ageDrops = (from, to) => to.maxAgeMs !== 0 && (from.maxAgeMs === 0 || to.maxAgeMs < from.maxAgeMs);
66
+ const countDrops = (from, to) => to.perSubject !== HISTORY_NO_COUNT && (from.perSubject === HISTORY_NO_COUNT || to.perSubject < from.perSubject);
67
+ /** The lifecycle a dinbox or dlv subject is addressed to, or null. */
68
+ function lifecycleOf(subject, kind) {
69
+ if (kind === "inbox")
70
+ return parseDinboxPrincipal(subject);
71
+ const parts = subject.split(".");
72
+ return parts.length === 6 && parts[2] === "dlv" ? { owner: parts[3], actor: parts[4], lifecycleUid: parts[5] } : null;
73
+ }
74
+ /** Who one subject's entries belong to, as the preview names them. */
75
+ function subjectLabel(kind, subject) {
76
+ if (kind === "chat" || kind === "dm") {
77
+ const p = parseSubject(subject);
78
+ if (!p || !isPrincipalOwnerToken(p.owner))
79
+ return null;
80
+ return kind === "chat" && p.kind === "chat" ? `#${p.rest} from ${p.sender}` : kind === "dm" && p.kind === "inst" ? `to ${p.rest} from ${p.sender}` : null;
81
+ }
82
+ const life = lifecycleOf(subject, kind);
83
+ return life && `${life.owner}.${life.actor} (lifecycle ${life.lifecycleUid})`;
84
+ }
85
+ /** The DLV copies of one lifecycle its own durable has not delivered yet, or null when its info
86
+ * cannot be read. A delivered copy the agent has not acknowledged is not counted: acknowledgements
87
+ * may come in any order, so nothing says which copies those are. */
88
+ async function undeliveredOf(jsm, stream, subject) {
89
+ const life = lifecycleOf(subject, "dlv");
90
+ if (!life)
91
+ return null;
92
+ try {
93
+ const info = await jsm.consumers.info(stream, dlvDurable(life.owner, life.actor, life.lifecycleUid));
94
+ return info.num_pending;
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ async function lowering(jsm, row, readAt) {
101
+ const age = ageDrops(row.from, row.to), count = countDrops(row.from, row.to);
102
+ if (!age && !count)
38
103
  return undefined;
39
104
  const overCount = [];
40
- if (countDrops)
41
- for (const [subject, count] of Object.entries(info.state.subjects ?? {})) {
42
- const p = parseSubject(subject);
43
- if (count > to.perSender && p?.kind === "chat" && isPrincipalOwnerToken(p.owner))
44
- overCount.push({ channel: p.rest, sender: p.sender, dropped: count - to.perSender });
105
+ if (count)
106
+ for (const [subject, held] of Object.entries(row.info.state.subjects ?? {})) {
107
+ const label = subjectLabel(row.kind, subject);
108
+ if (held <= row.to.perSubject || label === null)
109
+ continue;
110
+ const dropped = held - row.to.perSubject;
111
+ // The durable delivers in stream order, so the copies it has not delivered are the newest, and
112
+ // those among the oldest ones the count removes are the ones past what the count keeps.
113
+ const undelivered = row.kind === "dlv" ? await undeliveredOf(jsm, row.stream, subject) : undefined;
114
+ overCount.push({ subject: label, dropped, ...(undelivered !== undefined ? { undelivered: undelivered === null ? null : Math.min(dropped, Math.max(0, undelivered - row.to.perSubject)) } : {}) });
45
115
  }
46
- overCount.sort((a, b) => a.channel.localeCompare(b.channel) || a.sender.localeCompare(b.sender));
47
- return { readAt: readAt.toISOString(), overCount, olderThan: ageDrops ? formatChatAge(to.maxAgeMs) : null, oldestPostAt: info.state.messages > 0 ? info.state.first_ts : null };
116
+ overCount.sort((a, b) => a.subject.localeCompare(b.subject));
117
+ return { stream: row.stream, readAt: readAt.toISOString(), overCount, olderThan: age ? formatChatAge(row.to.maxAgeMs) : null, oldestAt: row.info.state.messages > 0 ? row.info.state.first_ts : null };
48
118
  }
49
- function loweringLines(snapshot) {
50
- const dropped = snapshot.overCount.reduce((sum, row) => sum + row.dropped, 0);
119
+ const ENTRY = { chat: "post", inbox: "entry", dlv: "stored copy", dm: "DM" };
120
+ const ENTRIES = { chat: "posts", inbox: "entries", dlv: "stored copies", dm: "DMs" };
121
+ function loweringLines(row, snapshot) {
122
+ const dropped = snapshot.overCount.reduce((sum, item) => sum + item.dropped, 0);
123
+ const lost = {
124
+ chat: [],
125
+ inbox: [" These may include entries the delivery daemon has not passed on to their agents yet."],
126
+ dlv: [" These may also include copies delivered to their agents and not acknowledged yet."],
127
+ dm: [" These may include DMs their recipients have not read yet."],
128
+ }[row.kind];
51
129
  return [
52
- `As read at ${snapshot.readAt}:`,
53
- ...(snapshot.olderThan !== null ? [` every post older than ${snapshot.olderThan} (the oldest retained post is from ${snapshot.oldestPostAt ?? "no time; the stream holds no posts"})`] : []),
54
- ...(snapshot.overCount.length ? [` ${dropped} posts past the new per-sender count:`, ...snapshot.overCount.map((row) => ` #${row.channel}: ${row.dropped} from ${row.sender}`)] : []),
130
+ `${LABEL[row.kind]} (${snapshot.stream}), as read at ${snapshot.readAt}:`,
131
+ ...(snapshot.olderThan !== null ? [` every ${ENTRY[row.kind]} older than ${snapshot.olderThan} (the oldest is from ${snapshot.oldestAt ?? "no time; the stream holds none"})`] : []),
132
+ ...(snapshot.overCount.length ? [
133
+ ` ${dropped} ${ENTRIES[row.kind]} past the new count:`,
134
+ ...snapshot.overCount.map((item) => ` ${item.subject}: ${item.dropped}${item.undelivered === undefined ? "" : item.undelivered === null ? ", not delivered yet: unknown" : `, ${item.undelivered} not delivered yet`}`),
135
+ ] : []),
136
+ ...(snapshot.olderThan !== null || snapshot.overCount.length ? lost : []),
55
137
  ];
56
138
  }
57
- /** `cotal history limit`: set how long the space's chat stream keeps channel posts. The space root's
58
- * signing material mints a one-shot provisioner, so this runs on the broker host, from the root. */
139
+ /** What a change left behind, named per stream, for a failure that changed some of them. */
140
+ function outcomeLines(rows) {
141
+ return rows.filter((row) => row.outcome !== "unchanged").map((row) => `${row.stream} ${row.outcome}`).join(", ");
142
+ }
143
+ const READ_REMEDY = "run `cotal history limit` with no limit flags to read the limits the streams hold";
144
+ const READ_HINT = "`cotal history limit` with no limit flags shows the limits the streams hold.";
145
+ /** `cotal history limit`: show or set how long the space keeps channel posts, the delivery daemon's
146
+ * inbox and stored copies, and DMs. The space root's signing material mints a one-shot provisioner,
147
+ * so this runs on the broker host, from the root. With no limit flag it only reads. */
59
148
  export async function historyLimit(values) {
60
149
  const presentation = presentationOf(values);
61
150
  const request = historyLimitRequest(values);
62
- if (!values.yes && (!canPrompt() || presentation === "json"))
63
- throw new ConfirmationRequired(yesRequired("history limit", presentation === "json"), { remedy: "add --yes to set the limit without a prompt; a lower limit deletes the posts it no longer keeps" });
151
+ const readOnly = request.size === 0;
152
+ if (!readOnly && !values.yes && (!canPrompt() || presentation === "json"))
153
+ throw new ConfirmationRequired(yesRequired("history limit", presentation === "json"), { remedy: "add --yes to set the limit without a prompt; a lower limit deletes the entries it no longer keeps" });
64
154
  const selected = resolveMeshTarget(process.cwd(), { ...(values.space ? { space: values.space } : {}) });
65
- const stream = chatStream(selected.space);
66
- const target = { space: selected.space, broker: brokerLabel(selected.server), stream };
155
+ const kinds = readOnly ? ORDER : ORDER.filter((kind) => request.has(kind));
156
+ const target = { space: selected.space, broker: brokerLabel(selected.server), streams: kinds.map((kind) => historyLimitStreamName(selected.space, kind)) };
67
157
  recordOperationSpace(selected.space);
68
158
  let provisioner;
69
159
  if (selected.mode !== "open") {
@@ -83,66 +173,98 @@ export async function historyLimit(values) {
83
173
  try {
84
174
  requireBrokerFloor(nc);
85
175
  const jsm = await jetstreamManager(nc, { checkAPI: false });
86
- let info;
87
- try {
88
- info = await jsm.streams.info(stream, { subjects_filter: ">" });
89
- }
90
- catch (error) {
91
- if (isStreamNotFound(error))
92
- throw new CommandFailure("refused", "TARGET_NOT_FOUND", `space ${selected.space} has no chat stream; nothing was changed`, { target, remedy: "start the space with `cotal up`, which creates it" });
93
- if (isPublishPermissionDenied(error))
94
- throw new CommandFailure("refused", "PERMISSION_DENIED", "the provisioner was refused a read of the chat stream; nothing was changed", { target });
95
- throw new CommandFailure("refused", "TARGET_UNAVAILABLE", `the chat stream could not be read (${error.message}); nothing was changed`, { target });
176
+ // Every requested stream is read and checked before the first write, so a refusal on a later
177
+ // stream never comes after an earlier one changed.
178
+ const rows = [];
179
+ for (const kind of kinds) {
180
+ const stream = historyLimitStreamName(selected.space, kind);
181
+ const part = request.get(kind);
182
+ let info;
183
+ try {
184
+ // A subject listing only where a count may drop: it names every sender, agent or DM pair.
185
+ info = await jsm.streams.info(stream, part?.perSubject !== undefined ? { subjects_filter: ">" } : undefined);
186
+ }
187
+ catch (error) {
188
+ if (isStreamNotFound(error))
189
+ throw new CommandFailure("refused", "TARGET_NOT_FOUND", `space ${selected.space} has no ${stream} stream; nothing was changed`, { target, remedy: "start the space with `cotal up`, which creates it" });
190
+ if (isPublishPermissionDenied(error))
191
+ throw new CommandFailure("refused", "PERMISSION_DENIED", `the provisioner was refused a read of ${stream}; nothing was changed`, { target });
192
+ throw new CommandFailure("refused", "TARGET_UNAVAILABLE", `${stream} could not be read (${error.message}); nothing was changed`, { target });
193
+ }
194
+ try {
195
+ validateCanonicalBackupStreamConfig(selected.space, stream, info.config);
196
+ }
197
+ catch (error) {
198
+ throw new CommandFailure("refused", "CONFLICT", `${stream} has settings this command does not manage (${error.message}); nothing was changed`, { target });
199
+ }
200
+ const from = historyLimitOf(info.config);
201
+ rows.push({ kind, stream, info, from, to: { maxAgeMs: part?.maxAgeMs ?? from.maxAgeMs, perSubject: part?.perSubject ?? from.perSubject } });
96
202
  }
97
203
  const readAt = new Date();
98
- try {
99
- validateCanonicalBackupStreamConfig(selected.space, stream, info.config);
100
- }
101
- catch (error) {
102
- throw new CommandFailure("refused", "CONFLICT", `the chat stream has settings this command does not manage (${error.message}); nothing was changed`, { target });
204
+ const limitRows = (rowsOf, pick) => rowsOf.map((row) => [LABEL[row.kind], describeHistoryLimit(row.kind, pick(row))]);
205
+ if (readOnly) {
206
+ writeResult(presentation, { command: "history", target, result: { kind: "history-limits", streams: rows.map((row) => ({ stream: row.stream, limit: row.kind, holds: view(row.from) })) } }, () => ({ sections: [{ title: "History limits", blocks: [{ kind: "fields", rows: [["Space", selected.space], ...limitRows(rows, (row) => row.from)] }] }] }));
207
+ return;
103
208
  }
104
- const from = chatHistoryLimitOf(info.config);
105
- if (from.maxAgeMs === 0 && request.maxAgeMs === undefined)
106
- throw usage(`the chat stream of ${selected.space} keeps posts with no age limit, which this command does not set; pass --max-age as well`);
107
- const to = { maxAgeMs: request.maxAgeMs ?? from.maxAgeMs, perSender: request.perSender ?? from.perSender };
108
- const problem = chatHistoryLimitProblem(to);
109
- if (problem)
110
- throw usage(`history limit: ${problem}`);
111
- if (from.maxAgeMs === to.maxAgeMs && from.perSender === to.perSender) {
112
- writeResult(presentation, { command: "history", target, result: { kind: "history-limit", from, to, changed: false }, noOp: true }, () => ({ sections: [{ title: "History limit unchanged", blocks: [{ kind: "fields", rows: [["Space", selected.space], ["Limit", describeChatHistory(to)]] }, { kind: "lines", lines: ["The chat stream already holds this limit. Nothing was written."] }] }] }));
209
+ const resultOf = (changed, extra = {}) => ({ kind: "history-limit", changed, streams: rows.map((row) => ({ stream: row.stream, limit: row.kind, from: view(row.from), to: view(row.to), outcome: row.outcome ?? "unchanged" })), ...extra });
210
+ const changing = rows.filter((row) => row.from.maxAgeMs !== row.to.maxAgeMs || row.from.perSubject !== row.to.perSubject);
211
+ if (changing.length === 0) {
212
+ writeResult(presentation, { command: "history", target, result: resultOf(false), noOp: true }, () => ({ sections: [{ title: "History limits unchanged", blocks: [{ kind: "fields", rows: [["Space", selected.space], ...limitRows(rows, (row) => row.to)] }, { kind: "lines", lines: ["The streams already hold these limits. Nothing was written."] }] }] }));
113
213
  return;
114
214
  }
115
- const snapshot = lowering(from, to, info, readAt);
116
- if (!values.yes && snapshot) {
117
- for (const line of loweringLines(snapshot))
118
- process.stderr.write(`${line}\n`);
119
- const answer = await prompts.confirm({ message: `Lower the chat history limit of ${oneLine(selected.space)} from ${describeChatHistory(from)} to ${describeChatHistory(to)}? The broker deletes these posts at once.`, initialValue: false });
215
+ const snapshots = [];
216
+ for (const row of changing) {
217
+ const snapshot = await lowering(jsm, row, readAt);
218
+ if (snapshot)
219
+ snapshots.push(snapshot);
220
+ }
221
+ if (!values.yes && snapshots.length) {
222
+ if (snapshots.some((snapshot) => snapshot.stream !== historyLimitStreamName(selected.space, "chat")))
223
+ process.stderr.write("As the space's operator you see every agent and DM pair these streams hold entries for.\n");
224
+ for (const row of changing) {
225
+ const snapshot = snapshots.find((item) => item.stream === row.stream);
226
+ if (snapshot)
227
+ for (const line of loweringLines(row, snapshot))
228
+ process.stderr.write(`${line}\n`);
229
+ }
230
+ const answer = await prompts.confirm({ message: `Change the history limits of ${oneLine(selected.space)}: ${changing.map((row) => `${row.stream} to ${describeHistoryLimit(row.kind, row.to)}`).join("; ")}? The broker deletes these entries at once.`, initialValue: false });
120
231
  if (prompts.isCancel(answer) || !answer) {
121
- writeResult(presentation, { command: "history", target, result: { kind: "history-limit", from, to: from, changed: false, confirmed: false }, noOp: true }, () => ({ sections: [{ title: "History limit kept", blocks: [{ kind: "lines", lines: [`The chat stream keeps ${describeChatHistory(from)}. Nothing was written.`] }] }] }));
232
+ for (const row of rows)
233
+ row.to = row.from;
234
+ writeResult(presentation, { command: "history", target, result: { ...resultOf(false), confirmed: false }, noOp: true }, () => ({ sections: [{ title: "History limits kept", blocks: [{ kind: "fields", rows: [["Space", selected.space], ...limitRows(rows, (row) => row.from)] }, { kind: "lines", lines: ["Nothing was written."] }] }] }));
122
235
  return;
123
236
  }
124
237
  }
125
- release = noticeOnInterrupt(() => "Interrupted while the history limit update ran; it may or may not have taken effect. `cotal history` shows the limit the stream holds.");
126
- let change;
127
- try {
128
- change = await setChatHistoryLimit(jsm, selected.space, to, from);
129
- }
130
- catch (error) {
131
- if (error instanceof ChatHistoryChanged)
132
- throw new CommandFailure("refused", "CONFLICT", `${error.message}; nothing was changed`, { target, remedy: "run the command again to act on the limit the stream holds now" });
133
- if (error instanceof ChatHistoryUpdateUnknown)
134
- throw new CommandFailure("unknown", "OPERATION_UNKNOWN", `${error.message}; it was not retried`, { target, native: { outcome: "unknown" }, remedy: "read the limit with `cotal history` before another change; an unknown result does not mean nothing changed" });
135
- if (isPublishPermissionDenied(error))
136
- throw new CommandFailure("refused", "PERMISSION_DENIED", "the broker refused the history limit update; nothing was changed", { target });
137
- if (error instanceof JetStreamApiError)
138
- throw new CommandFailure("refused", "CONFLICT", `the broker refused the history limit update (${error.message}); nothing was changed`, { target });
139
- throw new CommandFailure("refused", "TARGET_UNAVAILABLE", `the chat stream could not be read again before the update (${error.message}); nothing was changed`, { target });
238
+ release = noticeOnInterrupt(() => `Interrupted while the history limit updates ran; each may or may not have taken effect. ${READ_HINT}`);
239
+ for (const row of rows)
240
+ row.outcome = changing.includes(row) ? "not-attempted" : "unchanged";
241
+ for (const row of changing) {
242
+ try {
243
+ const change = await setHistoryLimit(jsm, selected.space, row.kind, row.to, row.from);
244
+ row.outcome = change ? "changed" : "unchanged";
245
+ }
246
+ catch (error) {
247
+ const before = rows.filter((item) => item.outcome === "changed");
248
+ if (error instanceof HistoryLimitUpdateUnknown) {
249
+ row.outcome = "unknown";
250
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", `${error.message}; it was not retried (${outcomeLines(rows)})`, { target, native: { outcome: "unknown" }, changed: before.map((item) => item.stream), remedy: `${READ_REMEDY}; an unknown result does not mean nothing changed` });
251
+ }
252
+ row.outcome = "refused";
253
+ const reason = error instanceof HistoryLimitChanged ? error.message
254
+ : isPublishPermissionDenied(error) ? `the broker refused the history limit update of ${row.stream}`
255
+ : error instanceof JetStreamApiError ? `the broker refused the history limit update of ${row.stream} (${error.message})`
256
+ : `${row.stream} could not be read again before the update (${error.message})`;
257
+ if (before.length === 0)
258
+ throw new CommandFailure("refused", error instanceof HistoryLimitChanged || error instanceof JetStreamApiError ? "CONFLICT" : isPublishPermissionDenied(error) ? "PERMISSION_DENIED" : "TARGET_UNAVAILABLE", `${reason}; nothing was changed`, { target, remedy: "run the command again to act on the limits the streams hold now" });
259
+ throw new CommandFailure("partial", "OPERATION_PARTIAL", `${reason}; ${outcomeLines(rows)}`, { target, changed: before.map((item) => item.stream), remedy: READ_REMEDY });
260
+ }
140
261
  }
141
262
  const lines = [
142
- `The broker now deletes posts older than ${formatChatAge(to.maxAgeMs)}, and each sender's oldest posts on a channel past ${to.perSender}.`,
143
- "Posts it deleted under an earlier limit do not come back.",
263
+ ...changing.map((row) => `${row.stream} now keeps ${describeHistoryLimit(row.kind, row.to)}.`),
264
+ ...(changing.some((row) => row.to.maxAgeMs === 0 && row.to.perSubject === HISTORY_NO_COUNT) ? ["With no age and no count limit, only the server's storage limit bounds a stream; a full store refuses new messages."] : []),
265
+ "Entries the broker deleted under an earlier limit do not come back.",
144
266
  ];
145
- writeResult(presentation, { command: "history", target, result: { kind: "history-limit", from: change?.from ?? from, to, changed: change !== undefined, ...(snapshot ? { lowered: snapshot } : {}) } }, () => ({ sections: [{ title: "History limit changed", blocks: [{ kind: "fields", rows: [["Space", selected.space], ["Broker", target.broker], ["Before", describeChatHistory(from)], ["Now", describeChatHistory(to)]] }, { kind: "lines", lines }] }] }));
267
+ writeResult(presentation, { command: "history", target, result: resultOf(true, snapshots.length ? { lowered: snapshots } : {}) }, () => ({ sections: [{ title: "History limits changed", blocks: [{ kind: "fields", rows: [["Space", selected.space], ["Broker", target.broker], ...changing.flatMap((row) => [[`${LABEL[row.kind]} before`, describeHistoryLimit(row.kind, row.from)], [`${LABEL[row.kind]} now`, describeHistoryLimit(row.kind, row.to)]])] }, { kind: "lines", lines }] }] }));
146
268
  }
147
269
  finally {
148
270
  release?.();
@@ -1 +1 @@
1
- {"version":3,"file":"history-limit.js","sourceRoot":"","sources":["../../src/commands/history-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history-limit.js","sourceRoot":"","sources":["../../src/commands/history-limit.ts"],"names":[],"mappings":"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"}
@@ -61,13 +61,33 @@ export declare const historyFlags: readonly [{
61
61
  }, {
62
62
  readonly name: "max-age";
63
63
  readonly type: "string";
64
- readonly value: "<age>";
65
- readonly description: "limit: delete a channel post once it is older than this, such as 30d or 12h (at least 2m)";
64
+ readonly value: "<age|none>";
65
+ readonly description: "limit: delete a channel post once it is older than this, such as 30d or 12h (at least 2m), or none";
66
66
  }, {
67
67
  readonly name: "per-sender";
68
68
  readonly type: "string";
69
- readonly value: "<n>";
70
- readonly description: "limit: keep this many of each sender's newest posts on each channel";
69
+ readonly value: "<n|none>";
70
+ readonly description: "limit: keep this many of each sender's newest posts on each channel, or none";
71
+ }, {
72
+ readonly name: "inbox-max-age";
73
+ readonly type: "string";
74
+ readonly value: "<age|none>";
75
+ readonly description: "limit: delete an agent's stored copy of a channel post once it is older than this (at least 2h), or none";
76
+ }, {
77
+ readonly name: "inbox-per-agent";
78
+ readonly type: "string";
79
+ readonly value: "<n|none>";
80
+ readonly description: "limit: keep this many of each agent's newest stored copies, or none";
81
+ }, {
82
+ readonly name: "dm-max-age";
83
+ readonly type: "string";
84
+ readonly value: "<age|none>";
85
+ readonly description: "limit: delete a DM once it is older than this (at least 2m), or none";
86
+ }, {
87
+ readonly name: "dm-per-sender";
88
+ readonly type: "string";
89
+ readonly value: "<n|none>";
90
+ readonly description: "limit: keep this many of each sender's newest DMs to each agent, or none";
71
91
  }, {
72
92
  readonly name: "json";
73
93
  readonly short: "j";
@@ -94,16 +114,25 @@ export declare const historySubcommands: readonly [{
94
114
  readonly prepareMeshTarget: false;
95
115
  }, {
96
116
  readonly name: "limit";
97
- readonly flagNames: readonly ["space", "max-age", "per-sender", "yes", "json", "plain"];
98
- readonly summary: "set how long the space keeps channel posts, by age and per sender; run it from the space root on the broker host";
117
+ readonly flagNames: readonly ["space", "max-age", "per-sender", "inbox-max-age", "inbox-per-agent", "dm-max-age", "dm-per-sender", "yes", "json", "plain"];
118
+ readonly summary: "show or set how long the space keeps channel posts, stored copies and DMs, by age and count; run it from the space root on the broker host";
99
119
  readonly examples: readonly [{
120
+ readonly command: "cotal history limit";
121
+ readonly note: "show the limits the space holds";
122
+ }, {
100
123
  readonly command: "cotal history limit --max-age 7d";
101
124
  readonly note: "delete channel posts once they are a week old";
102
125
  }, {
103
126
  readonly command: "cotal history limit --per-sender 500 --yes";
104
127
  readonly note: "keep each sender's newest 500 posts on each channel, without a prompt";
128
+ }, {
129
+ readonly command: "cotal history limit --inbox-per-agent 5000";
130
+ readonly note: "keep each agent's newest 5000 stored copies";
131
+ }, {
132
+ readonly command: "cotal history limit --dm-max-age 90d";
133
+ readonly note: "delete DMs once they are 90 days old";
105
134
  }];
106
- readonly usage: "cotal history limit [--max-age <age>] [--per-sender <n>] [-y|--yes] [--json|--plain]";
135
+ readonly usage: "cotal history limit [--max-age <age|none>] [--per-sender <n|none>] [--inbox-max-age <age|none>] [--inbox-per-agent <n|none>] [--dm-max-age <age|none>] [--dm-per-sender <n|none>] [-y|--yes] [--json|--plain]";
107
136
  readonly outputs: readonly ["json", "plain"];
108
137
  readonly prepareMeshTarget: false;
109
138
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}