@wirecat/cli-memo 0.131.74 → 0.131.75

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.
Files changed (89) hide show
  1. package/dist/bin/memo.js +2 -2
  2. package/dist/bundle/{app-server-2LQJZC7Z.js → app-server-TRRARE66.js} +6 -6
  3. package/dist/bundle/{auto-OCCPDCFY.js → auto-AQAKW55Z.js} +12 -12
  4. package/dist/bundle/{chunk-6Q3JHCU7.js → chunk-2QND7VJS.js} +3 -3
  5. package/dist/bundle/{chunk-3BEJUJEL.js → chunk-346PWQJF.js} +2 -2
  6. package/dist/bundle/{chunk-WM7MVKGU.js → chunk-4XI7S3PO.js} +2 -2
  7. package/dist/bundle/{chunk-GPXHGG67.js → chunk-5CTOWPOL.js} +1 -1
  8. package/dist/bundle/{chunk-P6FPRA3P.js → chunk-5RLCKP5E.js} +1 -1
  9. package/dist/bundle/{chunk-AHAW3TOS.js → chunk-6VMIMAZ2.js} +1 -1
  10. package/dist/bundle/{chunk-HEYIBJ5I.js → chunk-7Y4HUYI3.js} +17 -5
  11. package/dist/bundle/{chunk-VRL5WRRQ.js → chunk-AOHT5FNX.js} +3 -3
  12. package/dist/bundle/{chunk-WBCY7WHV.js → chunk-EWRHTZD3.js} +2 -2
  13. package/dist/bundle/{chunk-BNJ2XK7D.js → chunk-FGMFJUHR.js} +53 -10
  14. package/dist/bundle/{chunk-EML43XLJ.js → chunk-GFVSZY4J.js} +25 -1
  15. package/dist/bundle/{chunk-GWNLLQBD.js → chunk-OWUEEVF6.js} +1 -1
  16. package/dist/bundle/{chunk-WFXRR2JT.js → chunk-RZS24U4N.js} +2 -2
  17. package/dist/bundle/{chunk-3OVYPDT6.js → chunk-VFKCZJFT.js} +3 -3
  18. package/dist/bundle/{chunk-QCR5WJ7R.js → chunk-W64FO6DD.js} +6 -6
  19. package/dist/bundle/{chunk-BR4DCOA5.js → chunk-WKLF7CAM.js} +5 -5
  20. package/dist/bundle/{chunk-OOKMABOJ.js → chunk-ZISVFVQU.js} +2 -0
  21. package/dist/bundle/{chunk-CWWUZK2U.js → chunk-ZP2XI5DR.js} +3 -3
  22. package/dist/bundle/{entry-7EYT2OA3.js → entry-TBOYUMWB.js} +1 -1
  23. package/dist/bundle/{failure-YQJ43YFG.js → failure-EKMEAYZH.js} +10 -10
  24. package/dist/bundle/{first-run-C7L7IACA.js → first-run-HQ4GA4EF.js} +1 -1
  25. package/dist/bundle/{mcp-UCDMODSA.js → mcp-DEY765VA.js} +4 -4
  26. package/dist/bundle/memo.js +6 -6
  27. package/dist/bundle/{program-RHPSSKFA.js → program-OGDARQTX.js} +2930 -2445
  28. package/dist/bundle/{server-3TQJ47Q6.js → server-3UX245DY.js} +6 -6
  29. package/dist/bundle/{server-SHHKLBS2.js → server-6G5XF3V5.js} +4 -4
  30. package/dist/bundle/{server-FX7RKPL4.js → server-ADPO4V4B.js} +15 -15
  31. package/dist/bundle/{store-K45RFKGF.js → store-GSZAXU3A.js} +1 -1
  32. package/dist/bundle/{store-maintenance-command-EOTKQ3E5.js → store-maintenance-command-QMTALGSQ.js} +4 -4
  33. package/dist/bundle/{update-PW77Y4DM.js → update-HDJ23IV5.js} +11 -11
  34. package/dist/digest/backfill.d.ts +1 -1
  35. package/dist/digest/backfill.d.ts.map +1 -1
  36. package/dist/digest/backfill.js +71 -42
  37. package/dist/digest/backfill.js.map +1 -1
  38. package/dist/digest/brief.d.ts +14 -3
  39. package/dist/digest/brief.d.ts.map +1 -1
  40. package/dist/digest/brief.js +84 -34
  41. package/dist/digest/brief.js.map +1 -1
  42. package/dist/digest/command.d.ts +3 -0
  43. package/dist/digest/command.d.ts.map +1 -1
  44. package/dist/digest/command.js +23 -0
  45. package/dist/digest/command.js.map +1 -1
  46. package/dist/digest/digest-commands.d.ts +6 -0
  47. package/dist/digest/digest-commands.d.ts.map +1 -0
  48. package/dist/digest/digest-commands.js +241 -0
  49. package/dist/digest/digest-commands.js.map +1 -0
  50. package/dist/digest/digest.d.ts +5 -2
  51. package/dist/digest/digest.d.ts.map +1 -1
  52. package/dist/digest/digest.js +29 -8
  53. package/dist/digest/digest.js.map +1 -1
  54. package/dist/digest/digests.d.ts +72 -0
  55. package/dist/digest/digests.d.ts.map +1 -0
  56. package/dist/digest/digests.js +122 -0
  57. package/dist/digest/digests.js.map +1 -0
  58. package/dist/digest/tasks.d.ts +7 -4
  59. package/dist/digest/tasks.d.ts.map +1 -1
  60. package/dist/digest/tasks.js +13 -5
  61. package/dist/digest/tasks.js.map +1 -1
  62. package/dist/examples.d.ts.map +1 -1
  63. package/dist/examples.js +15 -1
  64. package/dist/examples.js.map +1 -1
  65. package/dist/people/command.d.ts +0 -1
  66. package/dist/people/command.d.ts.map +1 -1
  67. package/dist/people/command.js +114 -12
  68. package/dist/people/command.js.map +1 -1
  69. package/dist/program.d.ts +4 -1
  70. package/dist/program.d.ts.map +1 -1
  71. package/dist/program.js +9 -5
  72. package/dist/program.js.map +1 -1
  73. package/dist/reasons.d.ts.map +1 -1
  74. package/dist/reasons.js +24 -0
  75. package/dist/reasons.js.map +1 -1
  76. package/dist/rows.d.ts.map +1 -1
  77. package/dist/rows.js +13 -1
  78. package/dist/rows.js.map +1 -1
  79. package/dist/schedule/command.d.ts +8 -0
  80. package/dist/schedule/command.d.ts.map +1 -1
  81. package/dist/schedule/command.js +4 -2
  82. package/dist/schedule/command.js.map +1 -1
  83. package/dist/search/people.d.ts +2 -0
  84. package/dist/search/people.d.ts.map +1 -1
  85. package/dist/search/people.js +11 -4
  86. package/dist/search/people.js.map +1 -1
  87. package/dist/version.d.ts +1 -1
  88. package/dist/version.js +1 -1
  89. package/package.json +1 -1
@@ -4,27 +4,78 @@ import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { CliError } from "@wirecat/cli-base";
6
6
  import { annotate } from "@wirecat/cli-base/commands";
7
- import { grantsAuthority, LOCAL_READ, LOCAL_WRITE } from "@wirecat/cli-core/cli";
7
+ import { grantsAuthority, isCalendar, LOCAL_READ, LOCAL_WRITE, readSchedule, slotsOf, } from "@wirecat/cli-core/cli";
8
8
  import { storePath } from "@wirecat/cli-core/store";
9
9
  import { Command, Option } from "commander";
10
10
  import { itemAnswer, withStore } from "../answer.js";
11
11
  import { authorOf } from "../author.js";
12
- /** Kept in the templates table so the brief lives beside the digest's templates, with their history and undo. */
13
- const BRIEF = { key: "digest/brief", channel: "text", language: "any" };
12
+ import { agendaFlags, briefAddress, digestScheduleFile, isDigest, MORNING_DIGEST, readDefinition, runningDigest, windowStart, } from "./digests.js";
13
+ /** A digest's brief address; the brief is kept in the templates table, beside the templates, with history and undo. */
14
+ const addressOf = (env, name) => {
15
+ const digest = name ?? MORNING_DIGEST;
16
+ if (digest !== MORNING_DIGEST && !isDigest(env, digest))
17
+ throw new CliError("not_found", `no digest ${digest} — \`memo digest list\` names them`, {
18
+ reason: "digest.not-found",
19
+ });
20
+ return briefAddress(digest);
21
+ };
14
22
  /** The brief goes into every scheduled run's prompt, so its size is its cost. */
15
23
  export const BRIEF_LIMIT = 4000;
16
- /** The owner's brief, or undefined; a machine with no store yet has none, and reading it creates no store. */
17
- export const readBrief = async (env) => {
24
+ /** A digest's brief, or undefined; a machine with no store yet has none, and reading it creates no store. */
25
+ export const readBrief = async (env, name = MORNING_DIGEST) => {
18
26
  if (!existsSync(storePath(env)))
19
27
  return undefined;
20
- return withStore(env, async (store) => store.templates.get(BRIEF)?.body);
28
+ return withStore(env, async (store) => store.templates.get(briefAddress(name))?.body);
29
+ };
30
+ /** Checks a brief the owner gives and saves it; the body it replaces stays in the history. */
31
+ export const checkedBrief = (given, kept = "") => {
32
+ const body = given.trim();
33
+ if (!body)
34
+ throw new CliError("validation_error", `the brief is empty; memo digest brief reset removes it${kept}`, {
35
+ reason: "brief.empty",
36
+ });
37
+ if (body.length > BRIEF_LIMIT)
38
+ throw new CliError("validation_error", `the brief is ${body.length} characters; the limit is ${BRIEF_LIMIT}, because every run reads ` +
39
+ `it and pays for it. Nothing was saved${kept}`, { reason: "brief.too-long", chars: body.length, limit: BRIEF_LIMIT });
40
+ return body;
21
41
  };
22
42
  /** The morning-digest skill with the owner's brief after it, as the last word (NEED-2457). */
23
- export const withBrief = (skill, brief) => brief === undefined
24
- ? skill
25
- : `${skill}\n\n## The owner's brief\n\n` +
26
- "The owner wrote this himself: it adds to everything above, and where it contradicts a rule of this skill, " +
27
- `the brief wins.\n\n${brief.trim()}`;
43
+ export const withBrief = (skill, brief, digest) => {
44
+ const shown = digest === undefined ? skill : `${skill}\n\n${digest}`;
45
+ return brief === undefined
46
+ ? shown
47
+ : `${shown}\n\n## The owner's brief\n\n` +
48
+ "The owner wrote this himself: it adds to everything above, and where it contradicts a rule of this skill, " +
49
+ `the brief wins.\n\n${brief.trim()}`;
50
+ };
51
+ /**
52
+ * What `skill show morning-digest` adds for the digest a scheduled run belongs to (`MEMO_SCHEDULED`): its window and
53
+ * sources when it is a named digest, and its brief. The morning digest made before names existed gets its brief alone.
54
+ */
55
+ export const digestAddendum = async (env, now = Date.now()) => {
56
+ const name = runningDigest(env);
57
+ const brief = await readBrief(env, name);
58
+ const definition = readDefinition(env, name);
59
+ const file = digestScheduleFile(env, name);
60
+ if (!existsSync(file))
61
+ return { brief, digest: undefined };
62
+ const { when } = readSchedule(file);
63
+ const slots = isCalendar(when) ? slotsOf(when) : [];
64
+ // The skill's own `--since-time 1d` is already right for a morning digest that runs once a day.
65
+ if (!definition && !(slots.length > 1 || slots.some((slot) => slot.on)))
66
+ return { brief, digest: undefined };
67
+ const sources = definition?.sources ?? [];
68
+ const flags = agendaFlags(windowStart(when, now), sources);
69
+ return {
70
+ brief,
71
+ digest: `## This digest: ${definition?.title ?? "Morning digest"}\n\n` +
72
+ "Unless your input has a `backfill:` line, the agenda call is " +
73
+ `\`memo review agenda --compact ${flags}\`: this digest reads from its previous time` +
74
+ (sources.length ? `, and only ${sources.join(", ")}; leave everything else out of the report too.` : ".") +
75
+ " Where this skill says `--since-time 1d`, give that call the same `--since-time` instead. " +
76
+ `Keep \`"kind": "morning-digest"\` in the report: it names the report's shape, not the digest.`,
77
+ };
78
+ };
28
79
  const systemEditor = (path, env) => {
29
80
  const editor = env.VISUAL?.trim() || env.EDITOR?.trim();
30
81
  if (!editor)
@@ -36,14 +87,14 @@ const systemEditor = (path, env) => {
36
87
  if (ran.status !== 0)
37
88
  throw new CliError("validation_error", `the editor exited with ${ran.status ?? ran.signal}; nothing was saved`);
38
89
  };
39
- const refuseAgent = (env) => {
90
+ export const refuseAgent = (env) => {
40
91
  // The brief may override the digest skill's rules, so an agent writing it could steer every later run.
41
92
  if (authorOf(env) !== "owner")
42
93
  throw new CliError("permission_error", "only the owner changes the digest brief, not an agent", {
43
94
  reason: "brief.owner-only",
44
95
  });
45
96
  };
46
- const historyOf = (store) => store.templates.history(BRIEF).map((entry) => ({
97
+ const historyOf = (store, address) => store.templates.history(address).map((entry) => ({
47
98
  saved_at: new Date(entry.savedAt).toISOString(),
48
99
  saved_by: entry.savedBy,
49
100
  replaced_at: new Date(entry.replacedAt).toISOString(),
@@ -58,36 +109,40 @@ export const briefCommand = (digest, print, env, editor = systemEditor) => {
58
109
  `stays read only, with memo as its only tool and the schedule's cost cap. At most ${BRIEF_LIMIT} characters`);
59
110
  digest.addCommand(brief);
60
111
  annotate(brief.command("show"), { effects: LOCAL_READ })
61
- .summary("the brief the morning digest follows, and the bodies your changes replaced")
112
+ .summary("the brief a digest follows, and the bodies your changes replaced")
113
+ .argument("[digest]", `the digest's name, as \`memo digest list\` shows it; ${MORNING_DIGEST} when left out`)
62
114
  .option("--json", "print JSON")
63
- .action(async (given) => {
115
+ .action(async (name, given) => {
116
+ const address = addressOf(env, name);
64
117
  const item = existsSync(storePath(env))
65
118
  ? await withStore(env, async (store) => {
66
- const row = store.templates.get(BRIEF);
119
+ const row = store.templates.get(address);
67
120
  return {
68
121
  body: row?.body ?? null,
69
122
  chars: row?.body.length ?? 0,
70
123
  limit: BRIEF_LIMIT,
71
124
  updated_at: row ? new Date(row.updatedAt).toISOString() : null,
72
125
  updated_by: row?.updatedBy ?? null,
73
- history: historyOf(store),
126
+ history: historyOf(store, address),
74
127
  };
75
128
  })
76
129
  : { body: null, chars: 0, limit: BRIEF_LIMIT, updated_at: null, updated_by: null, history: [] };
77
- print(given.json, itemAnswer(item), item.body ?? "No brief: the morning digest follows its skill alone. `memo digest brief edit` writes one.");
130
+ print(given.json, itemAnswer(item), item.body ?? "No brief: the digest follows its skill alone. `memo digest brief edit` writes one.");
78
131
  });
79
132
  grantsAuthority(annotate(brief.command("edit"), { effects: LOCAL_WRITE }))
80
133
  .summary("write the brief in $EDITOR or from --file; only you, never an agent")
81
134
  .description(`write the brief in $EDITOR, or from --file; at most ${BRIEF_LIMIT} characters. The body it replaces is kept, ` +
82
135
  "and --undo puts it back. Only you change it, never an agent or a read-only run")
136
+ .argument("[digest]", `the digest's name, as \`memo digest list\` shows it; ${MORNING_DIGEST} when left out`)
83
137
  .option("--file <file>", "take the brief from this file instead of opening an editor; - reads stdin")
84
138
  .addOption(new Option("--undo", "put back the body your last change replaced").conflicts("file"))
85
139
  .option("--json", "print JSON")
86
- .action(async (given) => {
140
+ .action(async (name, given) => {
87
141
  refuseAgent(env);
142
+ const address = addressOf(env, name);
88
143
  const { current, previous } = await withStore(env, async (store) => ({
89
- current: store.templates.get(BRIEF)?.body,
90
- previous: store.templates.history(BRIEF, 1)[0]?.body,
144
+ current: store.templates.get(address)?.body,
145
+ previous: store.templates.history(address, 1)[0]?.body,
91
146
  }));
92
147
  let draft;
93
148
  let body;
@@ -108,35 +163,30 @@ export const briefCommand = (digest, print, env, editor = systemEditor) => {
108
163
  body = readFileSync(draft, "utf8");
109
164
  }
110
165
  const kept = draft ? `. Your text is in ${draft}; fix it and run again with --file ${draft}` : "";
111
- body = body.trim();
112
- if (!body)
113
- throw new CliError("validation_error", `the brief is empty; memo digest brief reset removes it${kept}`, {
114
- reason: "brief.empty",
115
- });
116
- if (body.length > BRIEF_LIMIT)
117
- throw new CliError("validation_error", `the brief is ${body.length} characters; the limit is ${BRIEF_LIMIT}, because every morning run reads ` +
118
- `it and pays for it. Nothing was saved${kept}`, { reason: "brief.too-long", chars: body.length, limit: BRIEF_LIMIT });
166
+ body = checkedBrief(body, kept);
119
167
  if (draft)
120
168
  rmSync(join(draft, ".."), { recursive: true, force: true });
121
169
  if (body === current) {
122
170
  print(given.json, itemAnswer({ changed: false, chars: body.length }), "The brief is unchanged; nothing saved.");
123
171
  return;
124
172
  }
125
- const saved = await withStore(env, async (store) => store.templates.save(BRIEF, body, "memo"));
173
+ const saved = await withStore(env, async (store) => store.templates.save(address, body, "memo"));
126
174
  print(given.json, itemAnswer({
127
175
  changed: true,
128
176
  chars: body.length,
129
177
  limit: BRIEF_LIMIT,
130
178
  updated_at: new Date(saved.updatedAt).toISOString(),
131
- }), `Saved the brief (${body.length} of ${BRIEF_LIMIT} characters); the next morning digest follows it.`);
179
+ }), `Saved the brief (${body.length} of ${BRIEF_LIMIT} characters); the digest's next run follows it.`);
132
180
  });
133
181
  grantsAuthority(annotate(brief.command("reset"), { effects: LOCAL_WRITE }))
134
182
  .summary("remove the brief; edit --undo brings it back")
135
- .description("remove the brief, so the morning digest follows its skill alone; edit --undo brings it back")
183
+ .description("remove the brief, so the digest follows its skill alone; edit --undo brings it back")
184
+ .argument("[digest]", `the digest's name, as \`memo digest list\` shows it; ${MORNING_DIGEST} when left out`)
136
185
  .option("--json", "print JSON")
137
- .action(async (given) => {
186
+ .action(async (name, given) => {
138
187
  refuseAgent(env);
139
- const changed = await withStore(env, async (store) => store.templates.reset(BRIEF));
188
+ const address = addressOf(env, name);
189
+ const changed = await withStore(env, async (store) => store.templates.reset(address));
140
190
  print(given.json, itemAnswer({ changed }), changed ? "Removed the brief; memo digest brief edit --undo brings it back." : "There was no brief.");
141
191
  });
142
192
  };
@@ -1 +1 @@
1
- {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/digest/brief.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/digest/brief.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import { type Streams } from "@wirecat/cli-base";
2
2
  import type { Body } from "@wirecat/cli-core/cli";
3
3
  import type { Command } from "commander";
4
+ import { type DigestSource } from "./digests.js";
5
+ /** `--source telegram,mail`, repeatable: what the agenda reads; each one a part it can leave out. */
6
+ export declare const sourcesOf: (value: string, before?: DigestSource[]) => DigestSource[];
4
7
  export declare const sinceOf: (value: string, now?: number) => number;
5
8
  /** A past moment, as an ISO time or a date (its local midnight); it must not be in the future. */
6
9
  export declare const beforeOf: (value: string, now?: number) => number;
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/digest/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBxC,eAAO,MAAM,OAAO,UAAW,MAAM,mBAAqB,MAOzD,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,QAAQ,UAAW,MAAM,mBAAqB,MAW1D,CAAA;AAED,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;AAE5D,8GAA8G;AAC9G,eAAO,MAAM,mBAAmB,WAAY,OAAO,SAAS,KAAK,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAuD7G,CAAA"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/digest/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,OAAO,EAAkB,KAAK,YAAY,EAA4B,MAAM,cAAc,CAAA;AAyB1F,qGAAqG;AACrG,eAAO,MAAM,SAAS,UAAW,MAAM,WAAU,YAAY,EAAE,KAAQ,YAAY,EAWlF,CAAA;AAED,eAAO,MAAM,OAAO,UAAW,MAAM,mBAAqB,MAOzD,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,QAAQ,UAAW,MAAM,mBAAqB,MAW1D,CAAA;AAED,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;AAE5D,8GAA8G;AAC9G,eAAO,MAAM,mBAAmB,WAAY,OAAO,SAAS,KAAK,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IA8D7G,CAAA"}
@@ -2,14 +2,34 @@ import { CliError } from "@wirecat/cli-base";
2
2
  import { annotate } from "@wirecat/cli-base/commands";
3
3
  import { LOCAL_READ, parseDuration } from "@wirecat/cli-core/cli";
4
4
  import { itemAnswer, withStore } from "../answer.js";
5
+ import { APP } from "../app.js";
5
6
  import { positive } from "../options.js";
6
7
  import { gatherDigest, WATCH_TAG } from "./digest.js";
8
+ import { DIGEST_SOURCES, isDigest, readDefinition } from "./digests.js";
7
9
  import { digestText, fitDigest } from "./text.js";
8
10
  /** Roughly 10k tokens of mixed Russian and English: Cyrillic takes two bytes a letter and fewer letters a token. */
9
11
  const COMPACT_BYTES = 40_000;
10
12
  const FULL_BYTES = 80_000;
11
13
  /** An owed reply older than this is left to `tasks agenda` and `mail review`, which read further back. */
12
14
  const OWED_WITHIN = 7 * 86_400_000;
15
+ /** A digest's run keeps to the digest's sources even when its agent leaves out `--source`; other schedules do not. */
16
+ const scheduledSources = (env) => {
17
+ const scheduled = env[`${APP.envPrefix}_SCHEDULED`];
18
+ return scheduled && isDigest(env, scheduled) ? (readDefinition(env, scheduled)?.sources ?? []) : [];
19
+ };
20
+ /** `--source telegram,mail`, repeatable: what the agenda reads; each one a part it can leave out. */
21
+ export const sourcesOf = (value, before = []) => {
22
+ const words = value
23
+ .split(",")
24
+ .map((word) => word.trim().toLowerCase())
25
+ .filter(Boolean);
26
+ const unknown = words.filter((word) => !DIGEST_SOURCES.includes(word));
27
+ if (unknown.length)
28
+ throw new CliError("validation_error", `--source takes ${DIGEST_SOURCES.join(", ")}; not ${unknown.join(", ")}`, {
29
+ param: "source",
30
+ });
31
+ return [...new Set([...before, ...words])];
32
+ };
13
33
  export const sinceOf = (value, now = Date.now()) => {
14
34
  const since = /^\d{4}-\d{2}-\d{2}/.test(value) ? Date.parse(value) : now - parseDuration(value, "--since-time");
15
35
  if (Number.isNaN(since))
@@ -52,6 +72,8 @@ export const reviewAgendaCommand = (review, print, streams, env) => {
52
72
  .option("--since-time <time>", "how far back: hours or days (12h, 7d) or a start date (2026-11-01)", "1d")
53
73
  .option("--before-time <time>", "build it as of this past ISO time or date, for a past day's digest: --since-time counts back from it, and " +
54
74
  "what came later is left out; a chat or thread answered since reads as answered")
75
+ .option("--source <accounts>", `only these, comma-separated or repeated: ${DIGEST_SOURCES.join(", ")}; watched items, projects and proposals stay. ` +
76
+ "A digest's run reads the digest's own sources without it", sourcesOf)
55
77
  .option("--limit <n>", "items per section before the size budget", positive, 25)
56
78
  .option("--max-output-bytes <bytes>", "the text answer's size budget in bytes; 40000 with --compact, else 80000", positive)
57
79
  .option("--compact", "one line per item, shorter excerpts, the smaller budget: for an agent")
@@ -70,6 +92,7 @@ export const reviewAgendaCommand = (review, print, streams, env) => {
70
92
  limit: given.limit,
71
93
  excerpt: given.compact ? 100 : 200,
72
94
  owedWithin: OWED_WITHIN,
95
+ sources: given.source ?? scheduledSources(env),
73
96
  }));
74
97
  const digest = fitDigest(gathered, given.maxOutputBytes ?? (given.compact ? COMPACT_BYTES : FULL_BYTES));
75
98
  // Not `print` for the text: its compact renderer would draw the answer generically, without the sections.
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/digest/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/digest/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type Body } from "@wirecat/cli-core/cli";
2
+ import type { Command } from "commander";
3
+ type Print = (json: boolean | undefined, body: Body, text?: string) => void;
4
+ export declare const digestCommands: (digest: Command, print: Print, env: NodeJS.ProcessEnv) => void;
5
+ export {};
6
+ //# sourceMappingURL=digest-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest-commands.d.ts","sourceRoot":"","sources":["../../src/digest/digest-commands.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,IAAI,EAmBV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAyBxC,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAoF3E,eAAO,MAAM,cAAc,WAAY,OAAO,SAAS,KAAK,OAAO,MAAM,CAAC,UAAU,KAAG,IAqPtF,CAAA"}
@@ -0,0 +1,241 @@
1
+ import { existsSync } from "node:fs";
2
+ import { CliError } from "@wirecat/cli-base";
3
+ import { annotate } from "@wirecat/cli-base/commands";
4
+ import { thisMachine } from "@wirecat/cli-core/background";
5
+ import { agentSchedule, calendarOf, environmentOf, grantsAuthority, LOCAL_READ, LOCAL_WRITE, parseRoute, pauseSchedule, queryTerms, removeSchedule, routeText, runScheduleNow, scheduleName, slotsOfAt, termField, withQuery, writeSchedule, } from "@wirecat/cli-core/cli";
6
+ import { itemAnswer, wholeList, withStore } from "../answer.js";
7
+ import { APP } from "../app.js";
8
+ import { fromAppOption, whoRuns } from "../author.js";
9
+ import { scheduleLimits } from "../config.js";
10
+ import { agentInputOf, MAIL_CLI } from "../schedule/command.js";
11
+ import { checkedBrief, readBrief, refuseAgent } from "./brief.js";
12
+ import { sourcesOf } from "./command.js";
13
+ import { briefAddress, DIGEST_PROMPT, DIGEST_SOURCES, digestNames, digestOf, digestScheduleFile, dropDefinition, MORNING_DIGEST, readDefinition, runCapOf, viewOf, writeDefinition, } from "./digests.js";
14
+ /** `--source all` and `--deliver-to none`: an edit's way to clear what an earlier one set. */
15
+ const ALL = "all";
16
+ const NONE = "none";
17
+ const usdOf = (flag, least) => (value) => {
18
+ const usd = Number(value);
19
+ if (!Number.isFinite(usd) || usd < 0 || (least === "above zero" && usd === 0))
20
+ throw new CliError("validation_error", `${flag} takes US dollars, ${least === "zero" ? "0 or more" : "more than 0"}; not "${value}"`, {
21
+ param: flag,
22
+ });
23
+ return usd;
24
+ };
25
+ const routeOf = (route, routes = []) => route === NONE ? [] : [...routes, routeText(parseRoute(route))];
26
+ const sourceOption = (value, before = []) => value.trim().toLowerCase() === ALL ? ALL : sourcesOf(value, before === ALL ? [] : before);
27
+ /** The options `add` and `edit` share; an edit replaces what each given option says and keeps the rest. */
28
+ const withDigestOptions = (command) => fromAppOption(command
29
+ .option("--title <title>", "the name the digest is shown under")
30
+ .option("--at <HH:MM>", "when it runs: HH:MM every day, or 'mon,fri 09:00' on those days; repeat it for more times, as 08:30 and 18:00", (at, all = []) => [...all, at])
31
+ .option("--source <accounts>", `what it reads, comma-separated or repeated: ${DIGEST_SOURCES.join(", ")}; ${ALL} (the default) reads everything`, sourceOption)
32
+ .option("--deliver-to <route>", `where each run is sent: telegram-bot:<profile>/<chat> or email:<profile>/<address>; repeat it for more, ${NONE} for nowhere`, routeOf)
33
+ .option("--text <text>", "your brief: what to collect, what to skip, how much; at most 4000 characters")
34
+ .option("--max-cost <usd>", "stop a run that costs more than this, in US dollars", usdOf("--max-cost", "above zero"))
35
+ .option("--max-cost-per-day <usd>", "start no run for the rest of the day once its runs cost this much, in US dollars; 0 for no cap", usdOf("--max-cost-per-day", "zero"))
36
+ .option("--json", "print JSON"));
37
+ /** The harness, model and per-run cap an existing schedule's argv was made with, so an edit keeps them. */
38
+ const kept = (schedule) => {
39
+ const { argv } = schedule;
40
+ const model = argv.indexOf("--model");
41
+ const cap = runCapOf(argv);
42
+ return {
43
+ harness: argv[1] === "exec" ? "codex" : "claude",
44
+ ...(model < 0 ? { model: "" } : { model: argv[model + 1] ?? "" }),
45
+ ...(cap === null ? {} : { maxCost: cap }),
46
+ };
47
+ };
48
+ export const digestCommands = (digest, print, env) => {
49
+ const siteOf = (command) => ({
50
+ app: APP,
51
+ system: environmentOf(command).system ?? thisMachine(),
52
+ env,
53
+ profile: "",
54
+ agentRuns: [MAIL_CLI],
55
+ limits: scheduleLimits(env),
56
+ });
57
+ // Each of these spends the owner's money, sets his timers or sends to his chats: he does it, never an agent.
58
+ const owner = async (command, question) => {
59
+ refuseAgent(env);
60
+ if ((await whoRuns(command, env, { question })) !== "owner")
61
+ throw new CliError("permission_error", "a digest spends your money and writes to your chats; you change or run it at a terminal or in WireCat Desktop", { reason: "digest.owner-only" });
62
+ };
63
+ const shown = async (name) => viewOf(env, name, { brief: (await readBrief(env, name)) ?? null, limits: scheduleLimits(env) });
64
+ const say = async (json, name, line) => print(json, itemAnswer(await shown(name)), line);
65
+ const saveBrief = async (name, text) => {
66
+ if (text === undefined)
67
+ return;
68
+ const body = checkedBrief(text);
69
+ await withStore(env, async (store) => store.templates.save(briefAddress(name), body, "memo"));
70
+ };
71
+ const listQuery = {
72
+ entity: "digest",
73
+ backend: "native",
74
+ fields: [termField("name", "kw", "name:weekly")],
75
+ };
76
+ withQuery(annotate(digest.command("list"), { effects: LOCAL_READ }).summary("your digests: when each runs, what it reads, where it goes, last and next run"), listQuery)
77
+ .option("--json", "print JSON")
78
+ .action(async (words, given) => {
79
+ const wanted = queryTerms(words, listQuery, "digest list").get("name");
80
+ const names = digestNames(env).filter((name) => wanted === undefined || name === wanted);
81
+ const items = await Promise.all(names.map(shown));
82
+ print(given.json, wholeList("digest list", items), items.length === 0
83
+ ? "No digests. `memo digest add <name> --title … --at 08:30` makes one."
84
+ : items
85
+ .map((one) => [
86
+ one.name,
87
+ one.title,
88
+ one.times.length
89
+ ? `${one.weekdays.length ? one.weekdays.join(",") : "daily"} ${one.times.join(", ")}`
90
+ : "no set time",
91
+ one.scheduled ? "on" : "paused",
92
+ one.sources.length ? `reads ${one.sources.join(", ")}` : "reads everything",
93
+ one.routes.length ? `to ${one.routes.join(", ")}` : "sent nowhere",
94
+ one.last ? `last ${one.last.at.slice(0, 16).replace("T", " ")} ${one.last.ok ? "ok" : "failed"}` : "",
95
+ ]
96
+ .filter(Boolean)
97
+ .join(" "))
98
+ .join("\n"));
99
+ });
100
+ withDigestOptions(grantsAuthority(annotate(digest.command("add"), { effects: LOCAL_WRITE }))
101
+ .summary("make a digest: its times, sources, routes and brief, on its timer")
102
+ .description("make a digest: an agent that runs memo's morning-digest skill at the given times, reading from its previous " +
103
+ "time (a weekly one reads the week) and only the sources given, and sends what it writes along the routes " +
104
+ "given. It runs read only. Each run is a paid model call; only you make one")
105
+ .argument("<name>", "lowercase letters, digits and dashes")
106
+ .option("--paused", "make it without putting it on its timer; `memo digest resume` does")).action(async (name, given, command) => {
107
+ const digestName = scheduleName(name);
108
+ if (existsSync(digestScheduleFile(env, digestName)))
109
+ throw new CliError("validation_error", `${digestName} already exists; \`memo digest edit ${digestName}\` changes it`, {
110
+ reason: "digest.exists",
111
+ });
112
+ if (!given.at?.length)
113
+ throw new CliError("validation_error", "say when: --at HH:MM, or --at 'mon 09:00'; repeat it for more times", {
114
+ param: "at",
115
+ });
116
+ const when = calendarOf(given.at.flatMap(slotsOfAt));
117
+ if (given.text !== undefined)
118
+ checkedBrief(given.text);
119
+ await owner(command, `make the digest ${digestName}, a paid model call at each of its times?`);
120
+ const site = siteOf(command);
121
+ const schedule = agentSchedule(site, {
122
+ name: digestName,
123
+ harness: "claude",
124
+ prompt: DIGEST_PROMPT,
125
+ when,
126
+ ...(given.maxCost ? { maxCost: given.maxCost } : {}),
127
+ ...(given.maxCostPerDay === undefined ? {} : { maxCostPerDay: given.maxCostPerDay }),
128
+ ...(given.deliverTo?.length ? { to: given.deliverTo } : {}),
129
+ ...(given.paused ? { paused: true } : {}),
130
+ });
131
+ writeDefinition(env, {
132
+ name: digestName,
133
+ title: given.title?.trim() || digestName,
134
+ sources: given.source === ALL || given.source === undefined ? [] : given.source,
135
+ createdAt: new Date().toISOString(),
136
+ });
137
+ await writeSchedule(site, schedule);
138
+ await saveBrief(digestName, given.text);
139
+ await say(given.json, digestName, `Added ${digestName}${given.paused ? ", paused" : ""}.`);
140
+ });
141
+ withDigestOptions(grantsAuthority(annotate(digest.command("edit"), { effects: LOCAL_WRITE }))
142
+ .summary("change a digest; each option given replaces what it says, the rest stays")
143
+ .description(`change a digest: each option given replaces what it set before (--at all its times, --source all its sources, ` +
144
+ `--deliver-to all its routes), and the rest stays as it was. --source ${ALL} reads everything again, ` +
145
+ `--deliver-to ${NONE} sends nowhere. A paused digest stays paused. Only you change one`)
146
+ .argument("<name>", "the digest's name, as `memo digest list` shows it")).action(async (name, given, command) => {
147
+ const { schedule } = digestOf(env, name);
148
+ if (!schedule.argv.includes(DIGEST_PROMPT))
149
+ throw new CliError("validation_error", `${name} runs a prompt of its own, made with \`memo schedule agent\`; an edit here would replace it — change it there`, { reason: "digest.own-prompt" });
150
+ const when = given.at?.length ? calendarOf(given.at.flatMap(slotsOfAt)) : schedule.when;
151
+ if (given.text !== undefined)
152
+ checkedBrief(given.text);
153
+ await owner(command, `change the digest ${name}?`);
154
+ const site = siteOf(command);
155
+ const previous = kept(schedule);
156
+ const maxCost = given.maxCost ?? previous.maxCost;
157
+ const to = given.deliverTo ?? schedule.to ?? [];
158
+ const maxCostPerDay = given.maxCostPerDay ?? schedule.maxCostPerDay;
159
+ const rebuilt = agentSchedule(site, {
160
+ name,
161
+ harness: previous.harness,
162
+ prompt: DIGEST_PROMPT,
163
+ when,
164
+ ...(previous.model === undefined ? {} : { model: previous.model }),
165
+ ...(maxCost ? { maxCost } : {}),
166
+ ...(maxCostPerDay === undefined ? {} : { maxCostPerDay }),
167
+ ...(schedule.notify ? { notify: schedule.notify } : {}),
168
+ ...(to.length ? { to } : {}),
169
+ ...(schedule.paused ? { paused: true } : {}),
170
+ });
171
+ const definition = readDefinition(env, name);
172
+ if (given.title !== undefined || given.source !== undefined || definition) {
173
+ writeDefinition(env, {
174
+ name,
175
+ title: given.title?.trim() || definition?.title || (name === MORNING_DIGEST ? "Morning digest" : name),
176
+ sources: given.source === ALL ? [] : (given.source ?? definition?.sources ?? []),
177
+ createdAt: definition?.createdAt || schedule.createdAt,
178
+ });
179
+ }
180
+ await writeSchedule(site, { ...rebuilt, createdAt: schedule.createdAt });
181
+ await saveBrief(name, given.text);
182
+ await say(given.json, name, `Changed ${name}.`);
183
+ });
184
+ fromAppOption(annotate(digest.command("run"), { effects: LOCAL_WRITE }))
185
+ .summary("build a digest now and send it along its routes, or only some, or none")
186
+ .description("build a digest now, as its timer would, paused or not, and keep the run with its others; it is sent along " +
187
+ "its routes, only along those --deliver-to names (each one of its own), or with --no-notify nowhere. A paid " +
188
+ "model call: the day's cost cap holds, and only you run it")
189
+ .argument("<name>", "the digest's name, as `memo digest list` shows it")
190
+ .option("--no-notify", "keep it here: send it nowhere")
191
+ .option("--deliver-to <route>", "send it only along this one of the digest's routes; repeat it for more", (route, routes = []) => [...routes, routeText(parseRoute(route))])
192
+ .option("--json", "print JSON")
193
+ .action(async (name, given, command) => {
194
+ const { file } = digestOf(env, name);
195
+ if (!given.notify && given.deliverTo)
196
+ throw new CliError("validation_error", "--no-notify sends nothing; leave out --deliver-to, or --no-notify", {
197
+ param: "deliver-to",
198
+ });
199
+ await owner(command, `run the digest ${name} now, a paid model call?`);
200
+ const routes = given.notify ? given.deliverTo : [];
201
+ const last = await runScheduleNow(command, siteOf(command), file, {
202
+ agentInput: agentInputOf(env),
203
+ ...(routes ? { routes } : {}),
204
+ });
205
+ if (!("exitCode" in last)) {
206
+ print(given.json, itemAnswer({ name, skipped: true, ...last.skipped }), `${name}: skipped — ${last.skipped.why}`);
207
+ return;
208
+ }
209
+ if (last.exitCode !== 0)
210
+ process.exitCode = 1;
211
+ print(given.json, itemAnswer({ name, ...last }), `${name}: ${last.exitCode === 0 ? "built" : `failed (exit ${last.exitCode})`} — ${last.output}`);
212
+ });
213
+ for (const [verb, paused] of [
214
+ ["pause", true],
215
+ ["resume", false],
216
+ ])
217
+ fromAppOption(grantsAuthority(annotate(digest.command(verb), { effects: LOCAL_WRITE })))
218
+ .summary(paused
219
+ ? "take a digest off its timer; it stays, and run still builds it"
220
+ : "put a paused digest back on its timer")
221
+ .argument("<name>", "the digest's name, as `memo digest list` shows it")
222
+ .option("--json", "print JSON")
223
+ .action(async (name, given, command) => {
224
+ digestOf(env, name);
225
+ await owner(command, `${verb} the digest ${name}?`);
226
+ await pauseSchedule(siteOf(command), name, paused);
227
+ await say(given.json, name, paused ? `Paused ${name}.` : `Resumed ${name}.`);
228
+ });
229
+ fromAppOption(grantsAuthority(annotate(digest.command("remove"), { effects: LOCAL_WRITE })))
230
+ .summary("remove a digest and its timer; its past runs, brief and templates stay")
231
+ .argument("<name>", "the digest's name, as `memo digest list` shows it")
232
+ .option("--json", "print JSON")
233
+ .action(async (name, given, command) => {
234
+ digestOf(env, name);
235
+ await owner(command, `remove the digest ${name}?`);
236
+ await removeSchedule(siteOf(command), name);
237
+ dropDefinition(env, name);
238
+ print(given.json, itemAnswer({ name, removed: true }), `Removed ${name}; its past runs stay.`);
239
+ });
240
+ };
241
+ //# sourceMappingURL=digest-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest-commands.js","sourceRoot":"","sources":["../../src/digest/digest-commands.ts"],"names":[],"mappings":"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"}