@wirecat/cli-memo 0.131.57 → 0.131.58

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/bin/memo.js CHANGED
@@ -9,7 +9,7 @@ if (
9
9
  (words[0] === "--version" || words[0] === "-V") &&
10
10
  !Object.keys(process.env).some((key) => key.endsWith("_TEST_ARGV_LOG"))
11
11
  ) {
12
- process.stdout.write("0.131.57\n")
12
+ process.stdout.write("0.131.58\n")
13
13
  } else {
14
14
  // Before the bundle compiles: the bundle's own call comes after its chunks.
15
15
  module.enableCompileCache()
@@ -28,7 +28,7 @@ if (
28
28
  : next(specifier, context),
29
29
  })
30
30
  }
31
- const chunks = ["../bundle/all-profiles-XWRUFNP2.js","../bundle/anthropic-266QJJGV.js","../bundle/app-server-YV3D7PPC.js","../bundle/auto-B7SEJAR5.js","../bundle/bun-22MM6T54.js","../bundle/bun-sqlite-V73FFF2C.js","../bundle/command-contract-DKK56GZX.js","../bundle/decode-JHVAOF3N.js","../bundle/dispatch-CRYB6Q2V.js","../bundle/dist-GZQWFMCL.js","../bundle/echarts-KCOXA225.js","../bundle/embed-4NYYOVNS.js","../bundle/embedder-SHPWEDIQ.js","../bundle/entry-VZE4CVPX.js","../bundle/failure-CMZXMZO6.js","../bundle/failure-ZMQJF3RO.js","../bundle/first-run-EKXME7UK.js","../bundle/first-screen-QS5PVWDZ.js","../bundle/instructions-ER3ONEOR.js","../bundle/mcp-3ABYEJI3.js","../bundle/mcp-RKJG22KM.js","../bundle/node-DBZKVPDA.js","../bundle/node-P4E63KXA.js","../bundle/node-TLZSIHIJ.js","../bundle/node-sqlite-UZVU7EXS.js","../bundle/oauth-VEFHKRWG.js","../bundle/open-XNRAMLOK.js","../bundle/openai-4XIX5RN2.js","../bundle/process-EIGF77RB.js","../bundle/program-6ZIWHNZV.js","../bundle/prompt-V7RFTWTA.js","../bundle/recognize-7PWWI67V.js","../bundle/remote-NOKKQ2U5.js","../bundle/rerank-X7UWX2ZF.js","../bundle/serve-Z6YCLXXP.js","../bundle/server-AXMJBL6J.js","../bundle/server-KABSY3RL.js","../bundle/server-LXD7DXU3.js","../bundle/state-K5D3BMKT.js","../bundle/stdio-FRV4R7LJ.js","../bundle/store-6SZBCSUF.js","../bundle/store-maintenance-command-GTMZOLMZ.js","../bundle/update-63B3BTGO.js"]
31
+ const chunks = ["../bundle/all-profiles-XWRUFNP2.js","../bundle/anthropic-266QJJGV.js","../bundle/app-server-YV3D7PPC.js","../bundle/auto-3TXQDVO6.js","../bundle/bun-22MM6T54.js","../bundle/bun-sqlite-V73FFF2C.js","../bundle/command-contract-DKK56GZX.js","../bundle/decode-JHVAOF3N.js","../bundle/dispatch-CRYB6Q2V.js","../bundle/dist-GZQWFMCL.js","../bundle/echarts-KCOXA225.js","../bundle/embed-4NYYOVNS.js","../bundle/embedder-SHPWEDIQ.js","../bundle/entry-VZE4CVPX.js","../bundle/failure-HKKLVEZA.js","../bundle/failure-ZMQJF3RO.js","../bundle/first-run-EKXME7UK.js","../bundle/first-screen-QS5PVWDZ.js","../bundle/instructions-ER3ONEOR.js","../bundle/mcp-3ABYEJI3.js","../bundle/mcp-RKJG22KM.js","../bundle/node-DBZKVPDA.js","../bundle/node-P4E63KXA.js","../bundle/node-TLZSIHIJ.js","../bundle/node-sqlite-UZVU7EXS.js","../bundle/oauth-VEFHKRWG.js","../bundle/open-XNRAMLOK.js","../bundle/openai-4XIX5RN2.js","../bundle/process-EIGF77RB.js","../bundle/program-OM6GO5X2.js","../bundle/prompt-V7RFTWTA.js","../bundle/recognize-7PWWI67V.js","../bundle/remote-NOKKQ2U5.js","../bundle/rerank-X7UWX2ZF.js","../bundle/serve-Z6YCLXXP.js","../bundle/server-AXMJBL6J.js","../bundle/server-KABSY3RL.js","../bundle/server-KHFBSBCY.js","../bundle/state-K5D3BMKT.js","../bundle/stdio-FRV4R7LJ.js","../bundle/store-6SZBCSUF.js","../bundle/store-maintenance-command-GTMZOLMZ.js","../bundle/update-DT4DCRXS.js"]
32
32
  if (((words) => words
33
33
  .filter((word) => !word.startsWith("-"))
34
34
  .slice(0, 2)
@@ -15,8 +15,8 @@ import {
15
15
  recordAutoRun,
16
16
  serviceUnit,
17
17
  timerUnit
18
- } from "./chunk-QHZTKYHC.js";
19
- import "./chunk-IRTWA4KO.js";
18
+ } from "./chunk-NSYTJAL6.js";
19
+ import "./chunk-BRT6M2TW.js";
20
20
  import "./chunk-PHWJBFZ6.js";
21
21
  import "./chunk-QP3KNC5D.js";
22
22
  import "./chunk-MV6ZSBA3.js";
@@ -56,7 +56,7 @@ import "./chunk-NEWKSMXP.js";
56
56
  import "./chunk-FU3XDL34.js";
57
57
  import "./chunk-72ZEEKOJ.js";
58
58
  import "./chunk-OROO3KYQ.js";
59
- import "./chunk-P7L4FG5S.js";
59
+ import "./chunk-HJWWZXVG.js";
60
60
  import "./chunk-IK6KH3RE.js";
61
61
  import "./chunk-SW6C6WH5.js";
62
62
  import "./chunk-D72URWJE.js";
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  APP,
21
21
  VERSION
22
- } from "./chunk-P7L4FG5S.js";
22
+ } from "./chunk-HJWWZXVG.js";
23
23
  import {
24
24
  installerOf
25
25
  } from "./chunk-IK6KH3RE.js";
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-3BWYMNWP.js";
24
24
  import {
25
25
  APP
26
- } from "./chunk-P7L4FG5S.js";
26
+ } from "./chunk-HJWWZXVG.js";
27
27
  import {
28
28
  CliError
29
29
  } from "./chunk-4ZW6ZJ2V.js";
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-4XKHXETB.js";
22
22
  import {
23
23
  STORE_CLIENT
24
- } from "./chunk-P7L4FG5S.js";
24
+ } from "./chunk-HJWWZXVG.js";
25
25
  import {
26
26
  createRenderer
27
27
  } from "./chunk-EMNQPMZO.js";
@@ -102,7 +102,7 @@ var REASONS = defineReasons([
102
102
  ]);
103
103
 
104
104
  // dist/version.js
105
- var VERSION = "0.131.57";
105
+ var VERSION = "0.131.58";
106
106
 
107
107
  // dist/app.js
108
108
  var APP = {
@@ -3,7 +3,7 @@ const require = __bundleRequire(import.meta.url);
3
3
  import {
4
4
  answers,
5
5
  itemAnswer
6
- } from "./chunk-IRTWA4KO.js";
6
+ } from "./chunk-BRT6M2TW.js";
7
7
  import {
8
8
  loadConfig,
9
9
  updateConfig
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-BPGYTJNB.js";
19
19
  import {
20
20
  APP
21
- } from "./chunk-P7L4FG5S.js";
21
+ } from "./chunk-HJWWZXVG.js";
22
22
  import {
23
23
  ValiError,
24
24
  errorObjectOf,
@@ -6,7 +6,7 @@ import {
6
6
  recognisable,
7
7
  reportFailure,
8
8
  throwParseFailures
9
- } from "./chunk-SMLBSPMG.js";
9
+ } from "./chunk-XIZPMFEC.js";
10
10
  import "./chunk-MV6ZSBA3.js";
11
11
  import "./chunk-YTAQKOAW.js";
12
12
  import "./chunk-RYDNM3K2.js";
@@ -45,7 +45,7 @@ import "./chunk-FU3XDL34.js";
45
45
  import "./chunk-72ZEEKOJ.js";
46
46
  import "./chunk-OROO3KYQ.js";
47
47
  import "./chunk-BPGYTJNB.js";
48
- import "./chunk-P7L4FG5S.js";
48
+ import "./chunk-HJWWZXVG.js";
49
49
  import "./chunk-IK6KH3RE.js";
50
50
  import "./chunk-SW6C6WH5.js";
51
51
  import "./chunk-D72URWJE.js";
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-BPGYTJNB.js";
7
7
  import {
8
8
  APP
9
- } from "./chunk-P7L4FG5S.js";
9
+ } from "./chunk-HJWWZXVG.js";
10
10
  import {
11
11
  installerOf
12
12
  } from "./chunk-IK6KH3RE.js";
@@ -197,15 +197,15 @@ if (wcat.code !== void 0) {
197
197
  interactive: interactiveOf,
198
198
  reasons: APP.errors.reasons,
199
199
  run: /* @__PURE__ */ __name(async (entry) => {
200
- failure = await import("./failure-CMZXMZO6.js");
201
- const { createProgram, refuseJoinedPath } = await import("./program-6ZIWHNZV.js");
202
- const { autoNotice, followInstall } = await import("./auto-B7SEJAR5.js");
200
+ failure = await import("./failure-HKKLVEZA.js");
201
+ const { createProgram, refuseJoinedPath } = await import("./program-OM6GO5X2.js");
202
+ const { autoNotice, followInstall } = await import("./auto-3TXQDVO6.js");
203
203
  if (entry.args[0] !== "jobs") {
204
204
  const notice2 = autoNotice(entry.env);
205
205
  if (notice2)
206
206
  processStreams.diagnostic(notice2);
207
207
  }
208
- const { updateNotice } = await import("./update-63B3BTGO.js");
208
+ const { updateNotice } = await import("./update-DT4DCRXS.js");
209
209
  const notice = updateNotice(entry.args);
210
210
  program = createProgram({ signal: entry.signal });
211
211
  program.hook("preAction", (_root, command) => entry.atStart(command));
@@ -6,17 +6,17 @@ import {
6
6
  autoState,
7
7
  lastAutoRun,
8
8
  recordAutoRun
9
- } from "./chunk-QHZTKYHC.js";
9
+ } from "./chunk-NSYTJAL6.js";
10
10
  import {
11
11
  installer,
12
12
  latest,
13
13
  upgradeCommand
14
- } from "./chunk-NFAF27AD.js";
14
+ } from "./chunk-3R6YNDPC.js";
15
15
  import {
16
16
  mcpOwnerAllowed,
17
17
  readOnlyAvailability,
18
18
  refuseWritesUnderLock
19
- } from "./chunk-YC4KNMOZ.js";
19
+ } from "./chunk-5T7BFCDJ.js";
20
20
  import {
21
21
  answers,
22
22
  atDetail,
@@ -26,7 +26,7 @@ import {
26
26
  trackAnswers,
27
27
  wholeList,
28
28
  withStore
29
- } from "./chunk-IRTWA4KO.js";
29
+ } from "./chunk-BRT6M2TW.js";
30
30
  import {
31
31
  ATTACHMENT_CHARS,
32
32
  DIALECTS,
@@ -64,7 +64,7 @@ import "./chunk-PBVG3KJR.js";
64
64
  import {
65
65
  errorObject,
66
66
  recognisable
67
- } from "./chunk-SMLBSPMG.js";
67
+ } from "./chunk-XIZPMFEC.js";
68
68
  import {
69
69
  AGENT_INPUT_MAX_CHARS,
70
70
  DISCOVERY_DESCRIPTIONS,
@@ -339,7 +339,7 @@ import {
339
339
  REASONS,
340
340
  STORE_CLIENT,
341
341
  VERSION
342
- } from "./chunk-P7L4FG5S.js";
342
+ } from "./chunk-HJWWZXVG.js";
343
343
  import "./chunk-IK6KH3RE.js";
344
344
  import "./chunk-SW6C6WH5.js";
345
345
  import "./chunk-D72URWJE.js";
@@ -6924,7 +6924,7 @@ var mcpCommandDefinition = /* @__PURE__ */ __name((program, streams, env, create
6924
6924
  }).summary("serve this profile's commands to an AI agent").description("serve memo commands over MCP on stdio or authenticated HTTP, limited by saved permissions").option("--permission <key=level>", "tighten one saved permission for this server; repeat for more keys", (value, previous = []) => [...previous, value]).option("--http", "serve on 127.0.0.1 behind an HTTPS tunnel with an owner access-code login").option("--port <port>", `local HTTP port (default ${DEFAULT_PORT}); requires --http`).option("--public-url <url>", "tunnel's HTTPS address without /mcp, or a path of it such as https://<name>.ts.net/memo; requires --http").action(async (options) => {
6925
6925
  if (!options.http && (options.port !== void 0 || options.publicUrl !== void 0))
6926
6926
  throw new CliError("validation_error", "--port and --public-url require --http");
6927
- const { createMemoServer } = await import("./server-LXD7DXU3.js");
6927
+ const { createMemoServer } = await import("./server-KHFBSBCY.js");
6928
6928
  const build = /* @__PURE__ */ __name(() => createMemoServer(env, createProgram2, options.permission), "build");
6929
6929
  if (options.http) {
6930
6930
  const { httpLockFile, mcpUrlOf, portOf, publicUrlOf, serveOverHttp } = await import("./mcp-3ABYEJI3.js");
@@ -6,10 +6,10 @@ import {
6
6
  memoLevels,
7
7
  readOnly,
8
8
  refuseUnknownPermissions
9
- } from "./chunk-YC4KNMOZ.js";
9
+ } from "./chunk-5T7BFCDJ.js";
10
10
  import {
11
11
  itemAnswer
12
- } from "./chunk-IRTWA4KO.js";
12
+ } from "./chunk-BRT6M2TW.js";
13
13
  import "./chunk-PHWJBFZ6.js";
14
14
  import "./chunk-QP3KNC5D.js";
15
15
  import "./chunk-G3QR3IYN.js";
@@ -17,7 +17,7 @@ import {
17
17
  errorObject,
18
18
  mcpFailure,
19
19
  throwParseFailures
20
- } from "./chunk-SMLBSPMG.js";
20
+ } from "./chunk-XIZPMFEC.js";
21
21
  import "./chunk-MV6ZSBA3.js";
22
22
  import "./chunk-YTAQKOAW.js";
23
23
  import "./chunk-DQWHLOKG.js";
@@ -90,7 +90,7 @@ import {
90
90
  APP,
91
91
  STORE_CLIENT,
92
92
  VERSION
93
- } from "./chunk-P7L4FG5S.js";
93
+ } from "./chunk-HJWWZXVG.js";
94
94
  import "./chunk-IK6KH3RE.js";
95
95
  import "./chunk-SW6C6WH5.js";
96
96
  import "./chunk-D72URWJE.js";
@@ -7,7 +7,7 @@ import {
7
7
  runUpdate,
8
8
  updateNotice,
9
9
  upgradeCommand
10
- } from "./chunk-NFAF27AD.js";
10
+ } from "./chunk-3R6YNDPC.js";
11
11
  import "./chunk-PHWJBFZ6.js";
12
12
  import "./chunk-QP3KNC5D.js";
13
13
  import "./chunk-MV6ZSBA3.js";
@@ -47,7 +47,7 @@ import "./chunk-NEWKSMXP.js";
47
47
  import "./chunk-FU3XDL34.js";
48
48
  import "./chunk-72ZEEKOJ.js";
49
49
  import "./chunk-OROO3KYQ.js";
50
- import "./chunk-P7L4FG5S.js";
50
+ import "./chunk-HJWWZXVG.js";
51
51
  import "./chunk-IK6KH3RE.js";
52
52
  import "./chunk-SW6C6WH5.js";
53
53
  import "./chunk-D72URWJE.js";
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.131.57";
1
+ export declare const VERSION = "0.131.58";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const VERSION = "0.131.57";
1
+ export const VERSION = "0.131.58";
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirecat/cli-memo",
3
- "version": "0.131.57",
3
+ "version": "0.131.58",
4
4
  "description": "Context about people across messengers, notes and mail, from a local store",
5
5
  "mcpName": "dev.wirecat/cli-memo",
6
6
  "license": "Apache-2.0",
@@ -18,8 +18,8 @@ You run on a schedule with `Bash(memo:*)` under `MEMO_READ_ONLY`. Every write is
18
18
  - Never write message text to a file. Every Bash call is one memo command and nothing else: no pipe, no `cd`, no
19
19
  output sent to a file. Replace every `<…>` placeholder with its value.
20
20
  - The report is for a person: never put a reference (`chat:…`, `msg:…`, `meeting:…`, `task:…`, `project:…`), a
21
- command, a flag, an agenda word (`owed`, `watch`, `STALE`, `coverage`) or a number of your own calls in it. Name
22
- the person and the topic instead.
21
+ command, a flag, an agenda word (`owed`, `watch`, `STALE`, `coverage`) or a number of your own calls in a text
22
+ field. Name the person and the topic instead. References go only in `refs`, copied exactly as memo printed them.
23
23
  - At most 12 memo calls after the first. Stop following leads when they run out; the agenda already counted what it
24
24
  left out.
25
25
 
@@ -40,36 +40,43 @@ You run on a schedule with `Bash(memo:*)` under `MEMO_READ_ONLY`. Every write is
40
40
 
41
41
  ## Report
42
42
 
43
- Plain text in one language, the owner's: the language of their own recent messages, Russian when unclear. Every word is
44
- in it, headings and status words included; translate the Russian headings below when the language differs. Keep names
45
- of people and companies as written. No Markdown: no `**`, no backticks, no tables. It must read the same raw in an
46
- email and in Telegram. Address the owner politely ("вы" in Russian).
43
+ Answer with **one JSON object and nothing else**: no text before or after it (one ```json fence around it is
44
+ accepted). WireCat renders it for Telegram, mail and the terminal, with the headings, emoji, dates and layout; you
45
+ write only the content. A document that breaks this shape is not delivered: the owner gets one line saying so.
47
46
 
48
- Start with the title line `☀️ Сводка на <weekday>, <day month>`. Then these sections, in this order. Leave out a
49
- section with no items, heading included. An item sits in the first matching section only. Order items by importance.
50
- Each section is a heading line (emoji, then the words below), then one item per line:
47
+ ```json
48
+ {
49
+ "format": "wirecat.report/1",
50
+ "kind": "morning-digest",
51
+ "date": "2026-11-07",
52
+ "summary": "Три ответа ждут вас, один платёж просрочен.",
53
+ "sections": [
54
+ { "kind": "today", "items": [
55
+ { "type": "reply", "who": "Анна Котова", "topic": "аренда склада",
56
+ "action": "ответить, подходит ли подписание в пятницу", "since": "2026-11-06T09:12:00+01:00",
57
+ "quote": "Сможем подписать в пятницу?", "channel": "mail", "priority": "high", "refs": ["msg:…"] } ] }
58
+ ],
59
+ "health": [ { "source": "MAX", "stale_hours": 49 } ]
60
+ }
61
+ ```
51
62
 
52
- 1. 🔥 Сегодня — at most 7: replies you owe, questions to you, tasks due or overdue, serious problems.
53
- 2. 🗳 Ждут вашего решения — at most 5: proposals by kind with the count, decisions someone asked for.
54
- 3. 💰 Деньги — at most 5: invoices, payments due or received.
55
- 4. 📅 Встречи — at most 5: today's meetings, and yesterday's with a transcript or an open follow-up.
56
- 5. 🚀 Проекты в движении — at most 5: one line per project that moved, as a fact, a risk or a next step.
57
- 6. 📬 Новая почта — at most 5: personal mail worth a look that is not owed and not in a project.
58
- 7. 🛠 Синхронизация — only when a source has saved nothing for more than 24 hours: one line per source, such as
59
- `🛠 MAX не обновлялся 2 дня`. Name the messenger or mailbox, never an account id. Say nothing when all are fresh.
60
-
61
- Each item is one line, starting with its type emoji (never a section emoji), saying who, what about and what to do:
62
-
63
- - 💬 Анна Котова · аренда склада — ответить, подходит ли подписание в пятницу (ждёт 2 дня, почта)
64
- - ❓ Игорь Лапин спрашивает: какой срок поставки плитки (Telegram)
65
- - 📌 Подписать акт — срок сегодня (⏰ when overdue)
66
- - ℹ️ Проект «Склад»: договор согласован
67
- - ⚠️ Проект «Склад»: риск сорвать срок → уточнить у подрядчика (🔴 when serious)
68
- - 📥 +120 000 ₽ · ООО «Вектор» · счёт за март (📤 for money out) — сверить оплату
69
- - ☑️ Три предложения связать контакты — решить
70
- - 👥 15:00 · созвон по проекту «Склад» · Игорь Лапин
71
-
72
- If the day has no items and every source is fresh, write one line: `Тихое утро: ничего срочного.` If a source is stale, it
73
- is `Новых дел нет, но MAX не обновлялся 2 дня.`
74
-
75
- No long quotes: at most one line of anyone's text per item.
63
+ - `date`: today, `YYYY-MM-DD`. `summary`: at most one sentence (120 characters), or `null`.
64
+ - Every text field (`summary`, `who`, `topic`, `action`, `detail`, `quote`) is in the owner's language: the language
65
+ of their own recent messages, Russian when unclear. Keep names of people and companies as written. Address the
66
+ owner politely ("вы" in Russian). No Markdown in any field.
67
+ - `sections[].kind`, in this order, each only when it has items (an item goes in the first that fits):
68
+ `today` (replies owed, questions to the owner, tasks due or overdue, serious problems), `decisions` (proposals by
69
+ kind with a `count`, decisions someone asked for), `money` (invoices, payments due or received), `meetings` (today's,
70
+ and yesterday's with a transcript or an open follow-up), `projects` (one item per project that moved), `mail`
71
+ (personal mail worth a look that is not owed and not in a project). Order items by importance; send as many as
72
+ matter, WireCat keeps the first ones and counts the rest. `more`: how many you knew of and left out.
73
+ - `items[].type` and the fields each one needs (others are optional, `null` or left out):
74
+ `reply` who, topic, action, since · `question` who, topic, action · `task` topic, due · `fact` topic, detail ·
75
+ `risk` topic, detail, action · `money` who, topic, amount · `decision` topic, action · `meeting` topic, time.
76
+ - Times (`since`, `due`, `time`) are ISO 8601 with the offset, or a date. `amount`:
77
+ `{ "value": 48000, "currency": "RUB", "direction": "out" }`. `priority`: `"high"` for what is late or serious, else
78
+ leave it out. `channel`: `telegram`, `max`, `whatsapp`, `mail`, `meeting` or `task`. `quote`: at most one line of
79
+ someone's words (100 characters).
80
+ - `health`: one entry per source that saved nothing for more than 24 hours: `source` is the messenger or mailbox
81
+ word ("MAX", "почта Gmail"), never an account id; `stale_hours` how long. Empty when all are fresh.
82
+ - A quiet day is `"sections": []` with the `health` it has; WireCat writes the quiet-day line.