@wirecat/cli-memo 0.131.74 → 0.131.76
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/dist/actions/actions.d.ts +1 -0
- package/dist/actions/actions.d.ts.map +1 -1
- package/dist/actions/actions.js +3 -3
- package/dist/actions/actions.js.map +1 -1
- package/dist/actions/command.d.ts.map +1 -1
- package/dist/actions/command.js +3 -1
- package/dist/actions/command.js.map +1 -1
- package/dist/agents/command.d.ts.map +1 -1
- package/dist/agents/command.js +3 -2
- package/dist/agents/command.js.map +1 -1
- package/dist/agents/log.d.ts +1 -1
- package/dist/agents/log.d.ts.map +1 -1
- package/dist/agents/log.js +5 -4
- package/dist/agents/log.js.map +1 -1
- package/dist/bin/memo.js +2 -2
- package/dist/bin/memo.js.map +1 -1
- package/dist/bundle/{all-profiles-LUGN5BHP.js → all-profiles-CGQTLFDM.js} +5 -5
- package/dist/bundle/{anthropic-W7JXDZPL.js → anthropic-C744EPRR.js} +2 -2
- package/dist/bundle/{app-server-2LQJZC7Z.js → app-server-LOH7WXAB.js} +36 -36
- package/dist/bundle/auto-R3ABUML7.js +89 -0
- package/dist/bundle/{bun-S3JZIN4S.js → bun-SQWZDSWT.js} +2 -2
- package/dist/bundle/{bun-sqlite-X3WQN3CV.js → bun-sqlite-YVBFXNWB.js} +2 -2
- package/dist/bundle/{chunk-OOKMABOJ.js → chunk-2KGYREGD.js} +365 -362
- package/dist/bundle/{chunk-SCYHDYLI.js → chunk-3NCRQMEN.js} +1 -1
- package/dist/bundle/{chunk-BDVM5652.js → chunk-3PLYUZAR.js} +1 -1
- package/dist/bundle/{chunk-YLYZNPAZ.js → chunk-42UNPXTC.js} +1 -1
- package/dist/bundle/{chunk-GPXHGG67.js → chunk-47WS4BML.js} +4 -4
- package/dist/bundle/{chunk-HEYIBJ5I.js → chunk-4DTJF6E7.js} +19 -7
- package/dist/bundle/chunk-4IWOPJL4.js +185 -0
- package/dist/bundle/{chunk-E2PSOSTN.js → chunk-5AQIET5P.js} +1 -1
- package/dist/bundle/{chunk-WFXRR2JT.js → chunk-5NY7U6CM.js} +8 -8
- package/dist/bundle/{chunk-3OVYPDT6.js → chunk-6RPLAGAL.js} +20 -20
- package/dist/bundle/{chunk-4KDORB7C.js → chunk-6YRVBXFH.js} +7 -7
- package/dist/bundle/{chunk-KDBAY5JZ.js → chunk-7OZEQIK7.js} +1 -1
- package/dist/bundle/{chunk-WZHCQ4VZ.js → chunk-7PSGKP3R.js} +6 -6
- package/dist/bundle/{chunk-VB4OLJHK.js → chunk-7XFJRX6F.js} +2 -2
- package/dist/bundle/{chunk-CWWUZK2U.js → chunk-AI6PMW7L.js} +4 -4
- package/dist/bundle/{chunk-BR4DCOA5.js → chunk-AUCXJVUI.js} +29 -29
- package/dist/bundle/{chunk-UIAGASGP.js → chunk-C7OOLF5J.js} +5 -5
- package/dist/bundle/{chunk-NR633L2N.js → chunk-DDSKTPU7.js} +3 -3
- package/dist/bundle/{chunk-MPZBV5RL.js → chunk-DUON3SRD.js} +7 -7
- package/dist/bundle/{chunk-XQHOMQNZ.js → chunk-EVLOYNXC.js} +3 -3
- package/dist/bundle/{chunk-LPGE6ACC.js → chunk-FH753LZS.js} +1 -1
- package/dist/bundle/{chunk-JINEHQ2T.js → chunk-FUATAPSB.js} +93 -80
- package/dist/bundle/{chunk-AHAW3TOS.js → chunk-GB64N6DP.js} +297 -294
- package/dist/bundle/{chunk-XQ3RZU3J.js → chunk-GBU4U55M.js} +1 -1
- package/dist/bundle/{chunk-XPSXVUZG.js → chunk-H3WELZYK.js} +2 -2
- package/dist/bundle/{chunk-6FTZ53TT.js → chunk-HAMGOLFU.js} +1 -1
- package/dist/bundle/{chunk-KYJBGCTC.js → chunk-KYLKZKQ7.js} +1 -1
- package/dist/bundle/{chunk-SJD4KTK2.js → chunk-LLBZDBPT.js} +2 -2
- package/dist/bundle/{chunk-QCR5WJ7R.js → chunk-MFQTOOHR.js} +397 -34
- package/dist/bundle/{chunk-P6FPRA3P.js → chunk-MODHP5VA.js} +12 -12
- package/dist/bundle/{chunk-LX3OSTBD.js → chunk-N2FIIVJV.js} +4 -4
- package/dist/bundle/{chunk-V7BDQIZS.js → chunk-NE3UIK5P.js} +2 -2
- package/dist/bundle/{chunk-ZTZLAGZA.js → chunk-NM4QMIOQ.js} +2 -2
- package/dist/bundle/{chunk-G45BLLDR.js → chunk-O3KNZVDZ.js} +2 -2
- package/dist/bundle/{chunk-XMHWGHID.js → chunk-ODCHYVTW.js} +173 -152
- package/dist/bundle/{chunk-6I4DOBSD.js → chunk-OEH5JUAL.js} +12 -12
- package/dist/bundle/{chunk-SIQDO5DN.js → chunk-OJU774SG.js} +3 -3
- package/dist/bundle/{chunk-ZL63GL3Y.js → chunk-PFNEOHCY.js} +2 -2
- package/dist/bundle/{chunk-C6MWOBEL.js → chunk-RLRKBPLJ.js} +15 -9
- package/dist/bundle/{chunk-3BEJUJEL.js → chunk-RTSRESGX.js} +5 -5
- package/dist/bundle/{chunk-KUFOM3SB.js → chunk-S54Z74G2.js} +1 -1
- package/dist/bundle/{chunk-UU3OAPGO.js → chunk-SF2OLWBU.js} +6 -6
- package/dist/bundle/{chunk-6AOPUQTC.js → chunk-TD4HM7XL.js} +1 -1
- package/dist/bundle/{chunk-EML43XLJ.js → chunk-TGURQ4YH.js} +31 -1
- package/dist/bundle/{chunk-E74VWHZ2.js → chunk-TPWAXJUQ.js} +1 -1
- package/dist/bundle/{chunk-4QGUBKN5.js → chunk-TXVXEE7L.js} +4 -4
- package/dist/bundle/{chunk-BNJ2XK7D.js → chunk-V6CRCAWN.js} +711 -367
- package/dist/bundle/{chunk-YB4KGUXY.js → chunk-VFJAGY3L.js} +2 -2
- package/dist/bundle/{chunk-YDTGYYOR.js → chunk-W5ARY4U2.js} +4 -4
- package/dist/bundle/{chunk-VRL5WRRQ.js → chunk-XGPSFPLH.js} +45 -45
- package/dist/bundle/{chunk-QYJJBE56.js → chunk-Y7YXXWQI.js} +3 -3
- package/dist/bundle/{chunk-SIOPF2UG.js → chunk-YD7XTYEC.js} +5 -5
- package/dist/bundle/{chunk-GWNLLQBD.js → chunk-YNXQAB4X.js} +11 -10
- package/dist/bundle/{chunk-WBCY7WHV.js → chunk-YRJ2576I.js} +10 -10
- package/dist/bundle/{chunk-WM7MVKGU.js → chunk-YSOTOUHJ.js} +13 -13
- package/dist/bundle/{chunk-IQIM4UC7.js → chunk-YU7KZW5I.js} +4 -4
- package/dist/bundle/{chunk-ZXW5FPH2.js → chunk-Z3NRIW4M.js} +1 -1
- package/dist/bundle/{chunk-6Q3JHCU7.js → chunk-ZHAHSVQO.js} +5 -5
- package/dist/bundle/{chunk-QKWM4VK4.js → chunk-ZIA7AU7L.js} +2 -2
- package/dist/bundle/{command-contract-QQG343ZQ.js → command-contract-IEUSFI3B.js} +11 -11
- package/dist/bundle/{command-server-entry-XVUPTSSH.js → command-server-entry-472XWNSN.js} +66 -50
- package/dist/bundle/{decode-METZOSMG.js → decode-SFZ67QJN.js} +2 -2
- package/dist/bundle/{echarts-EBSP4VCK.js → echarts-3U34KH7O.js} +2 -2
- package/dist/bundle/{embed-GVVU7N7W.js → embed-ZEZXJ45Q.js} +3 -3
- package/dist/bundle/{embedder-6BZOYAXV.js → embedder-AASO2I4Z.js} +6 -6
- package/dist/bundle/{entry-7EYT2OA3.js → entry-7VHMR3LD.js} +5 -5
- package/dist/bundle/failure-DJSK3LGN.js +69 -0
- package/dist/bundle/{first-run-C7L7IACA.js → first-run-YL3TIUU3.js} +5 -5
- package/dist/bundle/{first-screen-6T65PQ37.js → first-screen-OQVOWRYM.js} +12 -12
- package/dist/bundle/{instructions-VDKK3Y5Z.js → instructions-HG2ZZ7AP.js} +1 -1
- package/dist/bundle/{mcp-UCDMODSA.js → mcp-EUFDOVMI.js} +35 -35
- package/dist/bundle/memo.js +8 -8
- package/dist/bundle/{node-HWGZYNUX.js → node-7AQN6OTR.js} +2 -2
- package/dist/bundle/{node-sqlite-PSYENWGS.js → node-sqlite-55KMFPGI.js} +3 -3
- package/dist/bundle/{oauth-TQGMUJK2.js → oauth-S2GLD4PY.js} +4 -4
- package/dist/bundle/{open-KDDJDKCE.js → open-6R4UPST5.js} +2 -2
- package/dist/bundle/{openai-QPGCUM4T.js → openai-JK5GCSDK.js} +7 -7
- package/dist/bundle/{process-APNTXJJE.js → process-C7J3IT7Q.js} +1 -1
- package/dist/bundle/{program-RHPSSKFA.js → program-KWI6M5IB.js} +3251 -2563
- package/dist/bundle/{prompt-BMBZCLGF.js → prompt-EEFKVWSA.js} +2 -2
- package/dist/bundle/{recognize-3SEY2MAR.js → recognize-STYHVWQ6.js} +1 -1
- package/dist/bundle/{remote-ODH54UXO.js → remote-6MXZXHYY.js} +4 -4
- package/dist/bundle/{rerank-JQHBNTUK.js → rerank-IMX2ONZG.js} +4 -4
- package/dist/bundle/{serve-C22ZONSM.js → serve-ZNN464BH.js} +6 -6
- package/dist/bundle/server-4CHUUMVI.js +48 -0
- package/dist/bundle/{server-FX7RKPL4.js → server-L6OS2MJ5.js} +53 -52
- package/dist/bundle/server-VCZCAQOB.js +62 -0
- package/dist/bundle/{state-M3VGXSV4.js → state-7MP4KKPG.js} +3 -3
- package/dist/bundle/{store-K45RFKGF.js → store-EMAKEEYI.js} +9 -9
- package/dist/bundle/store-maintenance-command-LWN6OUFA.js +47 -0
- package/dist/bundle/update-I4X2UO6J.js +72 -0
- package/dist/digest/backfill.d.ts +1 -1
- package/dist/digest/backfill.d.ts.map +1 -1
- package/dist/digest/backfill.js +73 -43
- package/dist/digest/backfill.js.map +1 -1
- package/dist/digest/brief.d.ts +14 -3
- package/dist/digest/brief.d.ts.map +1 -1
- package/dist/digest/brief.js +84 -34
- package/dist/digest/brief.js.map +1 -1
- package/dist/digest/command.d.ts +3 -0
- package/dist/digest/command.d.ts.map +1 -1
- package/dist/digest/command.js +23 -0
- package/dist/digest/command.js.map +1 -1
- package/dist/digest/digest-commands.d.ts +6 -0
- package/dist/digest/digest-commands.d.ts.map +1 -0
- package/dist/digest/digest-commands.js +242 -0
- package/dist/digest/digest-commands.js.map +1 -0
- package/dist/digest/digest.d.ts +5 -2
- package/dist/digest/digest.d.ts.map +1 -1
- package/dist/digest/digest.js +29 -8
- package/dist/digest/digest.js.map +1 -1
- package/dist/digest/digests.d.ts +72 -0
- package/dist/digest/digests.d.ts.map +1 -0
- package/dist/digest/digests.js +122 -0
- package/dist/digest/digests.js.map +1 -0
- package/dist/digest/tasks.d.ts +7 -4
- package/dist/digest/tasks.d.ts.map +1 -1
- package/dist/digest/tasks.js +13 -5
- package/dist/digest/tasks.js.map +1 -1
- package/dist/doctor/command.d.ts.map +1 -1
- package/dist/doctor/command.js +2 -1
- package/dist/doctor/command.js.map +1 -1
- package/dist/examples.d.ts.map +1 -1
- package/dist/examples.js +28 -2
- package/dist/examples.js.map +1 -1
- package/dist/exit-code.d.ts +7 -0
- package/dist/exit-code.d.ts.map +1 -0
- package/dist/exit-code.js +19 -0
- package/dist/exit-code.js.map +1 -0
- package/dist/facts/command.d.ts.map +1 -1
- package/dist/facts/command.js +3 -2
- package/dist/facts/command.js.map +1 -1
- package/dist/facts/fact.d.ts +1 -1
- package/dist/facts/fact.d.ts.map +1 -1
- package/dist/facts/fact.js +3 -3
- package/dist/facts/fact.js.map +1 -1
- package/dist/mcp/catalogue.d.ts +3 -0
- package/dist/mcp/catalogue.d.ts.map +1 -1
- package/dist/mcp/catalogue.js +1 -0
- package/dist/mcp/catalogue.js.map +1 -1
- package/dist/memories/command.d.ts.map +1 -1
- package/dist/memories/command.js +3 -2
- package/dist/memories/command.js.map +1 -1
- package/dist/memories/memory.d.ts +1 -1
- package/dist/memories/memory.d.ts.map +1 -1
- package/dist/memories/memory.js +2 -2
- package/dist/memories/memory.js.map +1 -1
- package/dist/page.d.ts +14 -5
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +11 -5
- package/dist/page.js.map +1 -1
- package/dist/people/command.d.ts +0 -1
- package/dist/people/command.d.ts.map +1 -1
- package/dist/people/command.js +114 -12
- package/dist/people/command.js.map +1 -1
- package/dist/program.d.ts +6 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +15 -5
- package/dist/program.js.map +1 -1
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +30 -0
- package/dist/reasons.js.map +1 -1
- package/dist/records/import.d.ts.map +1 -1
- package/dist/records/import.js +60 -5
- package/dist/records/import.js.map +1 -1
- package/dist/records/input.d.ts +6 -2
- package/dist/records/input.d.ts.map +1 -1
- package/dist/records/input.js +87 -3
- package/dist/records/input.js.map +1 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +13 -1
- package/dist/rows.js.map +1 -1
- package/dist/run/import.d.ts.map +1 -1
- package/dist/run/import.js +2 -1
- package/dist/run/import.js.map +1 -1
- package/dist/schedule/command.d.ts +8 -0
- package/dist/schedule/command.d.ts.map +1 -1
- package/dist/schedule/command.js +4 -2
- package/dist/schedule/command.js.map +1 -1
- package/dist/search/people.d.ts +2 -0
- package/dist/search/people.d.ts.map +1 -1
- package/dist/search/people.js +11 -4
- package/dist/search/people.js.map +1 -1
- package/dist/sources/command.d.ts.map +1 -1
- package/dist/sources/command.js +27 -2
- package/dist/sources/command.js.map +1 -1
- package/dist/sources/read.d.ts +13 -0
- package/dist/sources/read.d.ts.map +1 -1
- package/dist/sources/read.js +27 -1
- package/dist/sources/read.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/dist/bundle/auto-OCCPDCFY.js +0 -89
- package/dist/bundle/chunk-XPCTY6XV.js +0 -116
- package/dist/bundle/failure-YQJ43YFG.js +0 -69
- package/dist/bundle/server-3TQJ47Q6.js +0 -62
- package/dist/bundle/server-SHHKLBS2.js +0 -48
- package/dist/bundle/store-maintenance-command-EOTKQ3E5.js +0 -47
- package/dist/bundle/update-PW77Y4DM.js +0 -72
- /package/dist/bundle/{chunk-IXSUVHW6.js → chunk-IKIYW7FW.js} +0 -0
package/dist/digest/backfill.js
CHANGED
|
@@ -2,14 +2,19 @@ import { existsSync, readdirSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { CliError } from "@wirecat/cli-base";
|
|
4
4
|
import { annotate } from "@wirecat/cli-base/commands";
|
|
5
|
-
import { backfillScheduleRun, LOCAL_WRITE, readSchedule, SCHEDULE_DEFAULTS, scheduleFile, spentToday, } from "@wirecat/cli-core/cli";
|
|
5
|
+
import { backfillScheduleRun, isCalendar, LOCAL_WRITE, nextRun, readSchedule, runsBetween, SCHEDULE_DEFAULTS, scheduleFile, slotsOf, spentToday, } from "@wirecat/cli-core/cli";
|
|
6
|
+
import { Option } from "commander";
|
|
6
7
|
import { answers, itemAnswer } from "../answer.js";
|
|
7
8
|
import { APP } from "../app.js";
|
|
8
9
|
import { fromAppOption, whoRuns } from "../author.js";
|
|
9
10
|
import { scheduleLimits } from "../config.js";
|
|
11
|
+
import { setExitCode } from "../exit-code.js";
|
|
10
12
|
import { briefCommand } from "./brief.js";
|
|
13
|
+
import { digestCommands } from "./digest-commands.js";
|
|
14
|
+
import { agendaFlags, isDigest, readDefinition, windowStart } from "./digests.js";
|
|
11
15
|
import { DIGEST_SCHEDULE, digestSchedule, runTime } from "./tasks.js";
|
|
12
16
|
const DAY = 86_400_000;
|
|
17
|
+
const MINUTE = 60_000;
|
|
13
18
|
const DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
14
19
|
const localDate = (at) => {
|
|
15
20
|
const day = new Date(at);
|
|
@@ -22,20 +27,25 @@ const dateOf = (value, flag) => {
|
|
|
22
27
|
throw new CliError("validation_error", `${flag} takes a date, YYYY-MM-DD, not "${value}"`, { param: flag });
|
|
23
28
|
return date;
|
|
24
29
|
};
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return
|
|
30
|
+
/**
|
|
31
|
+
* Each run the digest's timer would have started from the first day to the last, with the window it reads: from its
|
|
32
|
+
* previous time, so a weekly digest reads a week and one at 08:30 and 18:00 reads since the other time.
|
|
33
|
+
*/
|
|
34
|
+
const runsOf = (when, from, to) => {
|
|
35
|
+
const end = new Date(to);
|
|
36
|
+
end.setDate(end.getDate() + 1);
|
|
37
|
+
// Two runs on one day are told apart by their time; a digest that runs once a day keeps the plain date.
|
|
38
|
+
const timed = new Set(slotsOf(when).map((slot) => slot.at)).size > 1;
|
|
39
|
+
return runsBetween(when, from.getTime(), end.getTime()).map((at) => ({
|
|
40
|
+
date: localDate(at),
|
|
41
|
+
label: timed ? `${localDate(at)} ${new Date(at).toTimeString().slice(0, 5)}` : localDate(at),
|
|
42
|
+
at,
|
|
43
|
+
since: windowStart(when, at),
|
|
44
|
+
next: nextRun(when, at) ?? at + DAY,
|
|
45
|
+
}));
|
|
35
46
|
};
|
|
36
47
|
/** What the agent reads first: which day it writes and the window its agenda reads, as the skill expects them. */
|
|
37
|
-
const inputOf = (date, at) => `backfill: ${date}\n
|
|
38
|
-
`window: --since-time ${new Date(at - DAY).toISOString()} --before-time ${new Date(at).toISOString()}\n`;
|
|
48
|
+
const inputOf = (date, at, since, sources) => `backfill: ${date}\nwindow: ${agendaFlags(since, sources)} --before-time ${new Date(at).toISOString()}\n`;
|
|
39
49
|
const usd = (value) => `$${value.toFixed(2)}`;
|
|
40
50
|
const cents = (value) => Math.round(value * 100) / 100;
|
|
41
51
|
/**
|
|
@@ -47,51 +57,71 @@ export const digestCommand = (program, streams, env) => {
|
|
|
47
57
|
const { print } = answers(program, streams, env);
|
|
48
58
|
const digest = program
|
|
49
59
|
.command("digest")
|
|
50
|
-
.description("
|
|
51
|
-
|
|
60
|
+
.description("your digests: each a name, its times, what it reads, where it is sent and your brief; run one now, pause it, " +
|
|
61
|
+
"and build past days")
|
|
62
|
+
.summary("your digests: times, sources, routes, brief, past days");
|
|
52
63
|
briefCommand(digest, print, env);
|
|
64
|
+
digestCommands(digest, print, env);
|
|
53
65
|
fromAppOption(annotate(digest.command("backfill"), { effects: LOCAL_WRITE }))
|
|
54
|
-
.summary("build
|
|
55
|
-
.description("build
|
|
56
|
-
"
|
|
57
|
-
"kept as that
|
|
58
|
-
"or mail. A
|
|
59
|
-
"the estimate: the
|
|
60
|
-
"today's runs cost the schedule's daily cap or a
|
|
66
|
+
.summary("build a digest's past runs, without sending them")
|
|
67
|
+
.description("build each past run a digest would have had: its schedule's agent runs as its timer does (the same skill, " +
|
|
68
|
+
"flags and cost caps), reading the agenda as of that run's time and from the digest's previous time, and the " +
|
|
69
|
+
"result is kept as that run, marked backfill, for WireCat Desktop's digests screen. It is never sent to " +
|
|
70
|
+
"Telegram or mail. A run that already has a digest is skipped. Without --yes it only prints what it would " +
|
|
71
|
+
"build and the estimate: the runs times the last run's cost. Each run is a paid model call: it stops once " +
|
|
72
|
+
"today's runs cost the schedule's daily cap or a run fails, and only you run it, never an agent. The store " +
|
|
61
73
|
"keeps what holds now, so a chat answered since reads as answered")
|
|
62
|
-
.
|
|
63
|
-
.
|
|
74
|
+
.argument("[digest]", `the digest's name, as \`memo digest list\` shows it; ${DIGEST_SCHEDULE} when left out`)
|
|
75
|
+
.option("--since-time <time>", "the first day, YYYY-MM-DD")
|
|
76
|
+
.option("--until-time <time>", "the last day, YYYY-MM-DD; not a day whose run time is still ahead")
|
|
77
|
+
// WireCat Desktop before 0.131.73's rename sends these; kept so an older app still builds past days.
|
|
78
|
+
.addOption(new Option("--from <date>").hideHelp())
|
|
79
|
+
.addOption(new Option("--to <date>").hideHelp())
|
|
64
80
|
.option("--yes", "build them; without it, only the estimate is printed")
|
|
65
81
|
.option("--json", "print JSON")
|
|
66
|
-
.action(async (given, command) => {
|
|
67
|
-
const
|
|
68
|
-
const
|
|
82
|
+
.action(async (name, given, command) => {
|
|
83
|
+
const since = given.sinceTime ?? given.from;
|
|
84
|
+
const until = given.untilTime ?? given.to;
|
|
85
|
+
if (since === undefined || until === undefined)
|
|
86
|
+
throw new CliError("validation_error", "say which days: --since-time YYYY-MM-DD --until-time YYYY-MM-DD", {
|
|
87
|
+
param: since === undefined ? "--since-time" : "--until-time",
|
|
88
|
+
});
|
|
89
|
+
const from = dateOf(since, "--since-time");
|
|
90
|
+
const to = dateOf(until, "--until-time");
|
|
69
91
|
if (from > to)
|
|
70
92
|
throw new CliError("validation_error", "--since-time is after --until-time", { param: "--since-time" });
|
|
71
|
-
const
|
|
93
|
+
const digestName = name ?? DIGEST_SCHEDULE;
|
|
94
|
+
if (digestName !== DIGEST_SCHEDULE && !isDigest(env, digestName))
|
|
95
|
+
throw new CliError("not_found", `no digest ${digestName} — \`memo digest list\` names them`, {
|
|
96
|
+
reason: "digest.not-found",
|
|
97
|
+
});
|
|
98
|
+
const { state, schedule } = digestSchedule(env, digestName);
|
|
72
99
|
if (!schedule)
|
|
73
|
-
throw new CliError("not_found", `no ${
|
|
100
|
+
throw new CliError("not_found", `no ${digestName} schedule to build from — memo skill show morning-digest says how to make one`, { reason: "backfill.no-schedule" });
|
|
74
101
|
const file = scheduleFile(state, schedule.name);
|
|
75
102
|
const when = readSchedule(file).when;
|
|
76
|
-
if (!(
|
|
77
|
-
throw new CliError("validation_error", `${schedule.name} does not run at
|
|
103
|
+
if (!isCalendar(when))
|
|
104
|
+
throw new CliError("validation_error", `${schedule.name} does not run at set times, so it has no past runs`, {
|
|
78
105
|
reason: "backfill.not-daily",
|
|
79
106
|
schedule: schedule.name,
|
|
80
107
|
});
|
|
81
|
-
const
|
|
108
|
+
const sources = readDefinition(env, digestName)?.sources ?? [];
|
|
109
|
+
const all = runsOf(when, from, to);
|
|
82
110
|
if ((all.at(-1)?.at ?? 0) > Date.now())
|
|
83
|
-
throw new CliError("validation_error", `the ${
|
|
111
|
+
throw new CliError("validation_error", `the ${until} digest's time has not come yet; --until-time an earlier day`, {
|
|
84
112
|
param: "--until-time",
|
|
85
113
|
});
|
|
86
114
|
const runs = join(file, "..", "runs");
|
|
87
|
-
const
|
|
88
|
-
.filter((
|
|
89
|
-
.map(
|
|
90
|
-
|
|
91
|
-
const
|
|
115
|
+
const reported = (existsSync(runs) ? readdirSync(runs) : [])
|
|
116
|
+
.filter((file) => file.endsWith(".report.json"))
|
|
117
|
+
.map(runTime);
|
|
118
|
+
// A run its timer started late, or a backfill a minute off, still counts as that time's digest.
|
|
119
|
+
const done = (run) => reported.some((at) => at >= run.at - MINUTE && at < run.next);
|
|
120
|
+
const days = all.filter((day) => !done(day));
|
|
121
|
+
const skipped = all.filter(done).map((day) => day.label);
|
|
92
122
|
const lastCost = schedule.last?.costUsd;
|
|
93
123
|
const estimate = {
|
|
94
|
-
days: days.map((day) => day.
|
|
124
|
+
days: days.map((day) => day.label),
|
|
95
125
|
skipped,
|
|
96
126
|
estimateUsd: typeof lastCost === "number" ? cents(days.length * lastCost) : null,
|
|
97
127
|
};
|
|
@@ -119,18 +149,18 @@ export const digestCommand = (program, streams, env) => {
|
|
|
119
149
|
for (const day of days) {
|
|
120
150
|
const failed = built.some((one) => one.exitCode !== 0);
|
|
121
151
|
if (left.length || failed || (cap > 0 && spentToday(file) >= cap)) {
|
|
122
|
-
left.push(day.
|
|
152
|
+
left.push(day.label);
|
|
123
153
|
continue;
|
|
124
154
|
}
|
|
125
155
|
const run = await backfillScheduleRun(command, APP, env, file, {
|
|
126
156
|
at: new Date(day.at),
|
|
127
|
-
input: inputOf(day.date, day.at),
|
|
157
|
+
input: inputOf(day.date, day.at, day.since, sources),
|
|
128
158
|
});
|
|
129
|
-
built.push({ date: day.
|
|
159
|
+
built.push({ date: day.label, at: run.at, exitCode: run.exitCode, costUsd: run.costUsd ?? null });
|
|
130
160
|
}
|
|
131
161
|
const costUsd = cents(built.reduce((sum, one) => sum + (one.costUsd ?? 0), 0));
|
|
132
162
|
if (built.some((one) => one.exitCode !== 0))
|
|
133
|
-
|
|
163
|
+
setExitCode(command, 1);
|
|
134
164
|
print(given.json, itemAnswer({ ...estimate, built, left, costUsd }), [
|
|
135
165
|
...built.map((one) => `${one.date}: ${one.exitCode === 0 ? "built" : `failed (exit ${one.exitCode})`}${one.costUsd === null ? "" : `, ${usd(one.costUsd)}`}`),
|
|
136
166
|
...(skipped.length ? [`Skipped, a digest exists: ${skipped.join(", ")}.`] : []),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../src/digest/backfill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAgB,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../src/digest/backfill.ts"],"names":[],"mappings":"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"}
|
package/dist/digest/brief.d.ts
CHANGED
|
@@ -3,11 +3,22 @@ import { Command } from "commander";
|
|
|
3
3
|
/** The brief goes into every scheduled run's prompt, so its size is its cost. */
|
|
4
4
|
export declare const BRIEF_LIMIT = 4000;
|
|
5
5
|
type Print = (json: boolean | undefined, body: Body, text?: string) => void;
|
|
6
|
-
/**
|
|
7
|
-
export declare const readBrief: (env: NodeJS.ProcessEnv) => Promise<string | undefined>;
|
|
6
|
+
/** A digest's brief, or undefined; a machine with no store yet has none, and reading it creates no store. */
|
|
7
|
+
export declare const readBrief: (env: NodeJS.ProcessEnv, name?: string) => Promise<string | undefined>;
|
|
8
|
+
/** Checks a brief the owner gives and saves it; the body it replaces stays in the history. */
|
|
9
|
+
export declare const checkedBrief: (given: string, kept?: string) => string;
|
|
8
10
|
/** The morning-digest skill with the owner's brief after it, as the last word (NEED-2457). */
|
|
9
|
-
export declare const withBrief: (skill: string, brief: string | undefined) => string;
|
|
11
|
+
export declare const withBrief: (skill: string, brief: string | undefined, digest?: string) => string;
|
|
12
|
+
/**
|
|
13
|
+
* What `skill show morning-digest` adds for the digest a scheduled run belongs to (`MEMO_SCHEDULED`): its window and
|
|
14
|
+
* sources when it is a named digest, and its brief. The morning digest made before names existed gets its brief alone.
|
|
15
|
+
*/
|
|
16
|
+
export declare const digestAddendum: (env: NodeJS.ProcessEnv, now?: number) => Promise<{
|
|
17
|
+
brief: string | undefined;
|
|
18
|
+
digest: string | undefined;
|
|
19
|
+
}>;
|
|
10
20
|
declare const systemEditor: (path: string, env: NodeJS.ProcessEnv) => void;
|
|
21
|
+
export declare const refuseAgent: (env: NodeJS.ProcessEnv) => void;
|
|
11
22
|
/** `digest brief`: the owner's own words on what the morning digest collects, added to its skill. */
|
|
12
23
|
export declare const briefCommand: (digest: Command, print: Print, env: NodeJS.ProcessEnv, editor?: typeof systemEditor) => void;
|
|
13
24
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../../src/digest/brief.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../../src/digest/brief.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,IAAI,EAOV,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAwB3C,iFAAiF;AACjF,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAE3E,6GAA6G;AAC7G,eAAO,MAAM,SAAS,QAAe,MAAM,CAAC,UAAU,oBAA0B,OAAO,CAAC,MAAM,GAAG,SAAS,CAGzG,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,YAAY,UAAW,MAAM,oBAAc,MAcvD,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,SAAS,UAAW,MAAM,SAAS,MAAM,GAAG,SAAS,WAAW,MAAM,KAAG,MAOrF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,QACpB,MAAM,CAAC,UAAU,mBAErB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAsBnE,CAAA;AAED,QAAA,MAAM,YAAY,SAAU,MAAM,OAAO,MAAM,CAAC,UAAU,KAAG,IAU5D,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,MAAM,CAAC,UAAU,KAAG,IAMpD,CAAA;AAgBD,qGAAqG;AACrG,eAAO,MAAM,YAAY,WAAY,OAAO,SAAS,KAAK,OAAO,MAAM,CAAC,UAAU,mCAA0B,IAwG3G,CAAA"}
|
package/dist/digest/brief.js
CHANGED
|
@@ -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
|
-
|
|
13
|
-
|
|
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
|
-
/**
|
|
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(
|
|
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) =>
|
|
24
|
-
? skill
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
90
|
-
previous: store.templates.history(
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
};
|
package/dist/digest/brief.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/digest/brief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/digest/brief.ts"],"names":[],"mappings":"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"}
|
package/dist/digest/command.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/digest/command.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAgB,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEjD,oHAAoH;AACpH,MAAM,aAAa,GAAG,MAAM,CAAA;AAC5B,MAAM,UAAU,GAAG,MAAM,CAAA;AACzB,0GAA0G;AAC1G,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/digest/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,cAAc,EAAqB,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC1F,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEjD,oHAAoH;AACpH,MAAM,aAAa,GAAG,MAAM,CAAA;AAC5B,MAAM,UAAU,GAAG,MAAM,CAAA;AACzB,0GAA0G;AAC1G,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAA;AAYlC,sHAAsH;AACtH,MAAM,gBAAgB,GAAG,CAAC,GAAsB,EAAkB,EAAE;IAClE,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,SAAS,YAAY,CAAC,CAAA;IACnD,OAAO,SAAS,IAAI,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACrG,CAAC,CAAA;AAED,qGAAqG;AACrG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,MAAM,GAAmB,EAAE,EAAkB,EAAE;IACtF,MAAM,KAAK,GAAG,KAAK;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACxC,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAE,cAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7F,IAAI,OAAO,CAAC,MAAM;QAChB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YAC/G,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAA;IACJ,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAI,KAAwB,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAU,EAAE;IACjE,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IAC/G,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QACrB,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,8CAA8C,KAAK,GAAG,EAAE;YAC7F,KAAK,EAAE,YAAY;SACpB,CAAC,CAAA;IACJ,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAU,EAAE;IAClE,MAAM,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC1G,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,mDAAmD,KAAK,GAAG,EAAE;YAClG,KAAK,EAAE,aAAa;SACrB,CAAC,CAAA;IACJ,IAAI,EAAE,GAAG,GAAG;QACV,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,sDAAsD,EAAE;YAC7F,KAAK,EAAE,aAAa;SACrB,CAAC,CAAA;IACJ,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAID,8GAA8G;AAC9G,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAe,EAAE,KAAY,EAAE,OAAgB,EAAE,GAAsB,EAAQ,EAAE;IACnH,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;SACxD,OAAO,CAAC,+EAA+E,CAAC;SACxF,WAAW,CACV,iGAAiG;QAC/F,GAAG,SAAS,6FAA6F;QACzG,2GAA2G;QAC3G,yGAAyG;QACzG,gFAAgF;QAChF,6GAA6G;QAC7G,uGAAuG;QACvG,4GAA4G;QAC5G,4GAA4G;QAC5G,2GAA2G;QAC3G,+GAA+G;QAC/G,2GAA2G;QAC3G,4GAA4G;QAC5G,gBAAgB,CACnB;SACA,MAAM,CAAC,qBAAqB,EAAE,oEAAoE,EAAE,IAAI,CAAC;SACzG,MAAM,CACL,sBAAsB,EACtB,4GAA4G;QAC1G,gFAAgF,CACnF;SACA,MAAM,CACL,qBAAqB,EACrB,4CAA4C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gDAAgD;QACnH,0DAA0D,EAC5D,SAAS,CACV;SACA,MAAM,CAAC,aAAa,EAAE,0CAA0C,EAAE,QAAQ,EAAE,EAAE,CAAC;SAC/E,MAAM,CACL,4BAA4B,EAC5B,0EAA0E,EAC1E,QAAQ,CACT;SACA,MAAM,CAAC,WAAW,EAAE,uEAAuE,CAAC;SAC5F,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;QAC/B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI;YAC7B,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,0DAA0D,EAAE;gBACjG,MAAM,EAAE,iBAAiB;gBACzB,KAAK,EAAE,WAAW;aACnB,CAAC,CAAA;QACJ,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC7C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9C,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE;YACvB,KAAK;YACL,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;YACzC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YAClC,UAAU,EAAE,WAAW;YACvB,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC;SAC/C,CAAC,CACH,CAAA;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;QACxG,0GAA0G;QAC1G,IAAI,KAAK,CAAC,IAAI;YAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;;YAC1C,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"}
|