@wirecat/cli-template 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/.github/workflows/changelog-guard.yml +1 -1
  2. package/.github/workflows/ci.yml +1 -1
  3. package/.github/workflows/monthly.yml +1 -1
  4. package/.github/workflows/release.yml +44 -10
  5. package/CHANGELOG.md +36 -0
  6. package/config/parity-groups.json +32 -1
  7. package/contracts/mcp-tools.json +100 -0
  8. package/dist/bin/clidev.js +6 -2
  9. package/dist/bundle/{all-profiles-MJ6XSFOO.js → all-profiles-NVB2HT2S.js} +6 -6
  10. package/dist/bundle/{anthropic-W5UKBZUB.js → anthropic-ICTW7CNQ.js} +4 -4
  11. package/dist/bundle/{app-server-EZ46JAHB.js → app-server-B6BCKXR7.js} +40 -38
  12. package/dist/bundle/{bun-HB6O2TTT.js → bun-ILPS6AYA.js} +2 -2
  13. package/dist/bundle/{bun-sqlite-KBXOW2ES.js → bun-sqlite-JE6FJFQT.js} +3 -3
  14. package/dist/bundle/{chunk-KJTNT4SW.js → chunk-2DAXUNTS.js} +2 -2
  15. package/dist/bundle/chunk-3MDNAYQA.js +34 -0
  16. package/dist/bundle/chunk-3WDYHOAF.js +91 -0
  17. package/dist/bundle/{chunk-EGRB55FF.js → chunk-45244QQ6.js} +14 -12
  18. package/dist/bundle/{chunk-JHO2LL2J.js → chunk-4PA6DJ7F.js} +7 -7
  19. package/dist/bundle/{chunk-FZZIU4B7.js → chunk-5SAF3XOL.js} +8196 -5601
  20. package/dist/bundle/chunk-62JRF2JA.js +35 -0
  21. package/dist/bundle/{chunk-TGB5F7NC.js → chunk-66VMJGV6.js} +4 -4
  22. package/dist/bundle/{chunk-V3ZTQ24B.js → chunk-6AW4DDK4.js} +4 -4
  23. package/dist/bundle/{chunk-PJOVK7PG.js → chunk-7F5VMLVK.js} +49 -24
  24. package/dist/bundle/{chunk-MFS52LTZ.js → chunk-7Z4HR6GO.js} +1 -1
  25. package/dist/bundle/{chunk-E42W72PQ.js → chunk-AS2PJNQ2.js} +7 -5
  26. package/dist/bundle/{chunk-SVDF6NJF.js → chunk-ASHVHS52.js} +14 -14
  27. package/dist/bundle/{chunk-N2Z3MCOF.js → chunk-BEBD27QT.js} +37 -35
  28. package/dist/bundle/{chunk-IGHEW777.js → chunk-BM5ZCDPQ.js} +5 -40
  29. package/dist/bundle/{chunk-AK257OMS.js → chunk-BVLPNNEL.js} +209 -78
  30. package/dist/bundle/{chunk-ERKR3VJ5.js → chunk-BWBZCYUN.js} +141 -46
  31. package/dist/bundle/{chunk-Z7MSIRSQ.js → chunk-CGFQT3LQ.js} +1 -1
  32. package/dist/bundle/{chunk-QKWRL4OD.js → chunk-DQIBGCF3.js} +6 -6
  33. package/dist/bundle/{chunk-RUKDZEID.js → chunk-DZLHY4IA.js} +3 -3
  34. package/dist/bundle/{chunk-TAYOKLGF.js → chunk-EMHCXXNJ.js} +7 -6
  35. package/dist/bundle/{chunk-IBBN7Z3A.js → chunk-F34HGYWF.js} +12 -3
  36. package/dist/bundle/{chunk-ERGB4NJA.js → chunk-G45R7M42.js} +1 -1
  37. package/dist/bundle/{chunk-ZLY6GUAS.js → chunk-G7W53MQP.js} +3 -3
  38. package/dist/bundle/{chunk-JAOGZMKQ.js → chunk-GUFPQZUA.js} +2 -2
  39. package/dist/bundle/{chunk-4LURWBVV.js → chunk-HYTHTSJP.js} +188 -22
  40. package/dist/bundle/{chunk-EFHLQXG6.js → chunk-IOJ2DTCY.js} +162 -55
  41. package/dist/bundle/{chunk-L5WWMP5M.js → chunk-IZKXJJ7V.js} +121 -31
  42. package/dist/bundle/{chunk-NOVLCHDV.js → chunk-LATYBJ4T.js} +2 -2
  43. package/dist/bundle/{chunk-QBP7OMN5.js → chunk-LFLSV353.js} +2 -2
  44. package/dist/bundle/{chunk-HDY5X3WQ.js → chunk-LU4A2T7Y.js} +4 -4
  45. package/dist/bundle/{chunk-JRK73FOW.js → chunk-NENYWEXF.js} +1 -1
  46. package/dist/bundle/{chunk-2B5U4Z5H.js → chunk-NH6LZ3H3.js} +8 -13
  47. package/dist/bundle/{chunk-OV6PHTAY.js → chunk-NVNUUHT5.js} +17130 -2232
  48. package/dist/bundle/chunk-PIJUGF5F.js +392 -0
  49. package/dist/bundle/{chunk-7IXL4UFK.js → chunk-PX2KP4QE.js} +8 -8
  50. package/dist/bundle/{chunk-N5GXKDBC.js → chunk-QXOSPYM3.js} +1 -1
  51. package/dist/bundle/{chunk-PBN4RBHS.js → chunk-R2JKPHH5.js} +8 -8
  52. package/dist/bundle/{chunk-PDGXMKJS.js → chunk-R5RYPD23.js} +2 -2
  53. package/dist/bundle/{chunk-QJ6XW4DM.js → chunk-RJ7AS7UB.js} +6210 -1207
  54. package/dist/bundle/{chunk-35KYY65W.js → chunk-SOYOOU2D.js} +3 -3
  55. package/dist/bundle/{chunk-FDBINRWA.js → chunk-TJJ2XSJP.js} +5 -5
  56. package/dist/bundle/{chunk-O3UXNU3S.js → chunk-U6QD3J3F.js} +3 -3
  57. package/dist/bundle/{chunk-YJNUDHJD.js → chunk-UT5TQ6MD.js} +139 -35
  58. package/dist/bundle/{chunk-VYSUKHKL.js → chunk-VOTEB3AN.js} +1 -1
  59. package/dist/bundle/{chunk-IN3FVRPK.js → chunk-VS5LGSTM.js} +1 -1
  60. package/dist/bundle/{chunk-MJRSEUKG.js → chunk-VXOR76ZL.js} +13 -89
  61. package/dist/bundle/{chunk-CXQXVKUY.js → chunk-YIVY2WI3.js} +1 -1
  62. package/dist/bundle/{chunk-VLNKTMV7.js → chunk-YOJLIVGO.js} +959 -350
  63. package/dist/bundle/clidev.js +3 -3
  64. package/dist/bundle/command-contract-JMVMT5HT.js +28 -0
  65. package/dist/bundle/{decode-AMXUVKNY.js → decode-NXB5UKMO.js} +18 -16
  66. package/dist/bundle/{echarts-GJDMQ2AQ.js → echarts-DRDGGHJT.js} +2 -2
  67. package/dist/bundle/{embed-L4CRZ2XQ.js → embed-IKZ24BMC.js} +4 -4
  68. package/dist/bundle/{embedder-IBGV4M2K.js → embedder-GMQ24DOQ.js} +7 -7
  69. package/dist/bundle/{first-run-VTKC2IBV.js → first-run-MDD4SIUK.js} +8 -8
  70. package/dist/bundle/first-screen-376CXGXJ.js +26 -0
  71. package/dist/bundle/{instructions-YJECS4KN.js → instructions-EOQOXY6V.js} +1 -1
  72. package/dist/bundle/{mcp-OQBZXELQ.js → mcp-7HBLFGCW.js} +2 -2
  73. package/dist/bundle/mcp-KHUZOJO6.js +82 -0
  74. package/dist/bundle/{mcp-7XPOACO4.js → mcp-MZHWJXAE.js} +38 -37
  75. package/dist/bundle/{node-NQG4EVZR.js → node-52WF2326.js} +2 -2
  76. package/dist/bundle/{node-sqlite-BR7F3BLB.js → node-sqlite-73Z4SFOA.js} +9 -3
  77. package/dist/bundle/{oauth-J7UAWNIK.js → oauth-EVTPAMZP.js} +5 -5
  78. package/dist/bundle/{open-BR47R5UE.js → open-46WZAPJ3.js} +3 -2
  79. package/dist/bundle/openai-GWRDAHDU.js +248 -0
  80. package/dist/bundle/{process-66I7RDPJ.js → process-YIQPKLZI.js} +1 -1
  81. package/dist/bundle/{program-ZNXLJ3D2.js → program-B3CY3FP7.js} +11346 -9559
  82. package/dist/bundle/{prompt-NE5JJ7UP.js → prompt-IVEYRLS5.js} +3 -3
  83. package/dist/bundle/{recognize-GC3YFVIA.js → recognize-WVEKHODM.js} +4 -2
  84. package/dist/bundle/{remote-QELOMKQM.js → remote-4K5VPMC7.js} +5 -5
  85. package/dist/bundle/{rerank-BH6TZ2SP.js → rerank-V24UJZYJ.js} +5 -5
  86. package/dist/bundle/{serve-WWLRNDT2.js → serve-PJWSOV7F.js} +7 -7
  87. package/dist/bundle/server-2ZN7KZHZ.js +40 -0
  88. package/dist/bundle/server-5VYM7CCF.js +53 -0
  89. package/dist/bundle/{state-2BEGXAMO.js → state-ZPYGECVP.js} +4 -4
  90. package/dist/bundle/{store-AH6WZMCF.js → store-6JQCLPQF.js} +14 -9
  91. package/dist/bundle/store-maintenance-command-7XICIYHW.js +42 -0
  92. package/dist/version.d.ts +1 -1
  93. package/dist/version.js +1 -1
  94. package/docs/commands.md +37 -11
  95. package/docs/dev/reference-clis.md +1 -1
  96. package/docs/dev/skills/design-interview/SKILL.md +2 -2
  97. package/docs/dev/test-matrix.md +5 -1
  98. package/kit/dist/interview.js +1 -0
  99. package/kit/dist/new.js +8 -3
  100. package/package.json +3 -3
  101. package/src/program.test.ts +56 -0
  102. package/src/version.ts +1 -1
  103. package/dist/bundle/chunk-IDWW4TU2.js +0 -18
  104. package/dist/bundle/chunk-MUSYGFCY.js +0 -3556
  105. package/dist/bundle/chunk-O5EHUB2V.js +0 -2
  106. package/dist/bundle/command-contract-75VJ36U4.js +0 -29
  107. package/dist/bundle/first-screen-X5IJKBSU.js +0 -27
  108. package/dist/bundle/mcp-RDZGYPSY.js +0 -78
  109. package/dist/bundle/server-DE6NLNUF.js +0 -52
  110. package/dist/bundle/server-ZPSQKOAH.js +0 -39
  111. package/dist/bundle/store-maintenance-command-PBXX3IEV.js +0 -40
  112. /package/dist/bundle/{chunk-GOO67PDU.js → chunk-NL2DQPT7.js} +0 -0
@@ -2,15 +2,15 @@ import { createRequire as __bundleRequire } from "node:module";
2
2
  const require = __bundleRequire(import.meta.url);
3
3
  import {
4
4
  unit
5
- } from "./chunk-QKWRL4OD.js";
5
+ } from "./chunk-DQIBGCF3.js";
6
6
  import {
7
7
  CliError
8
- } from "./chunk-EFHLQXG6.js";
8
+ } from "./chunk-IOJ2DTCY.js";
9
9
  import {
10
10
  __name
11
11
  } from "./chunk-ZVVMGPBJ.js";
12
12
 
13
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/embeddings/remote.js
13
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/embeddings/remote.js
14
14
  import { setTimeout } from "node:timers/promises";
15
15
  var OPENAI_URL = "https://api.openai.com/v1";
16
16
  var OPENAI_MODELS = {
@@ -2,21 +2,21 @@ import { createRequire as __bundleRequire } from "node:module";
2
2
  const require = __bundleRequire(import.meta.url);
3
3
  import {
4
4
  storePath
5
- } from "./chunk-IDWW4TU2.js";
5
+ } from "./chunk-62JRF2JA.js";
6
6
  import {
7
7
  CliError,
8
8
  resolvePaths,
9
9
  singleLine
10
- } from "./chunk-EFHLQXG6.js";
10
+ } from "./chunk-IOJ2DTCY.js";
11
11
  import {
12
12
  __name
13
13
  } from "./chunk-ZVVMGPBJ.js";
14
14
 
15
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/store/shared-config.js
15
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/store/shared-config.js
16
16
  import { mkdirSync, readFileSync, renameSync, statSync, writeFileSync } from "node:fs";
17
17
  import { dirname, join, resolve } from "node:path";
18
18
 
19
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/domain/task-categories.js
19
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/domain/task-categories.js
20
20
  var DEFAULT_TASK_CATEGORIES = [
21
21
  {
22
22
  name: "taxes",
@@ -771,7 +771,7 @@ var storedTaskCategories = /* @__PURE__ */ __name((json) => {
771
771
  }
772
772
  }, "storedTaskCategories");
773
773
 
774
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/store/shared-config.js
774
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/store/shared-config.js
775
775
  var SECTION = "task_categories";
776
776
  var sharedConfigPath = /* @__PURE__ */ __name((store, env = process.env) => {
777
777
  const paths = resolvePaths({ appName: "WireCat", prefix: "WIRECAT", env });
@@ -3,15 +3,15 @@ const require = __bundleRequire(import.meta.url);
3
3
  import {
4
4
  readSharedSection,
5
5
  writeSharedSection
6
- } from "./chunk-FDBINRWA.js";
6
+ } from "./chunk-TJJ2XSJP.js";
7
7
  import {
8
8
  CliError
9
- } from "./chunk-EFHLQXG6.js";
9
+ } from "./chunk-IOJ2DTCY.js";
10
10
  import {
11
11
  __name
12
12
  } from "./chunk-ZVVMGPBJ.js";
13
13
 
14
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/cli/setup-answers.js
14
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/cli/setup-answers.js
15
15
  var PERMISSION_ANSWERS = ["readonly", "allow"];
16
16
  var QUESTIONS = ["languages", "tools", "permissions"];
17
17
  var SECTION = "setup";
@@ -7,25 +7,24 @@ import {
7
7
  agentJson,
8
8
  commandAvailability,
9
9
  failureContext
10
- } from "./chunk-4LURWBVV.js";
10
+ } from "./chunk-HYTHTSJP.js";
11
11
  import {
12
12
  callerOf
13
- } from "./chunk-IBBN7Z3A.js";
13
+ } from "./chunk-F34HGYWF.js";
14
14
  import {
15
+ QUERY_ARGUMENT,
15
16
  lentConnection,
16
17
  onlineDeps,
17
18
  refuseLacking,
18
19
  servicesFor,
19
20
  storeModeDeps
20
- } from "./chunk-FZZIU4B7.js";
21
+ } from "./chunk-5SAF3XOL.js";
21
22
  import {
22
23
  MAX_BUFFERED_INPUT
23
- } from "./chunk-KJTNT4SW.js";
24
- import {
25
- ENTITIES
26
- } from "./chunk-MUSYGFCY.js";
24
+ } from "./chunk-2DAXUNTS.js";
27
25
  import {
28
26
  DEFAULT_OUTPUT_BYTES,
27
+ ENTITIES,
29
28
  LOCAL_WRITE,
30
29
  REMOTE_WRITE,
31
30
  answerSchema,
@@ -46,14 +45,18 @@ import {
46
45
  sealed,
47
46
  startRecording,
48
47
  traceOf
49
- } from "./chunk-QJ6XW4DM.js";
48
+ } from "./chunk-RJ7AS7UB.js";
50
49
  import {
51
50
  currentCaller,
52
51
  keepsSuccess,
53
52
  runContextOf,
54
53
  withCaller
55
- } from "./chunk-MJRSEUKG.js";
54
+ } from "./chunk-VXOR76ZL.js";
55
+ import {
56
+ queryDescription
57
+ } from "./chunk-YOJLIVGO.js";
56
58
  import {
59
+ COMPACT_FLAG,
57
60
  CliError,
58
61
  SNAKE_CASE,
59
62
  array,
@@ -94,15 +97,15 @@ import {
94
97
  unknown,
95
98
  word,
96
99
  writes
97
- } from "./chunk-EFHLQXG6.js";
100
+ } from "./chunk-IOJ2DTCY.js";
98
101
  import {
99
102
  __name
100
103
  } from "./chunk-ZVVMGPBJ.js";
101
104
 
102
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/mcp/agent.js
105
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/mcp/agent.js
103
106
  import { Readable } from "node:stream";
104
107
 
105
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/lint.js
108
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/lint.js
106
109
  var LINT_SEVERITIES = ["high", "medium", "low"];
107
110
  var lintRuleSchema = strictObject({
108
111
  id: word,
@@ -220,16 +223,17 @@ var LINT_RULES = defineLintRules([
220
223
  }
221
224
  ]);
222
225
  var baselineSchema = array(text);
223
- var overridesSchema = array(strictObject({
226
+ var overrideSchema = strictObject({
224
227
  rule: word,
225
228
  target: text,
226
229
  reason: pipe(text, minLength(10, "say why, in a sentence")),
227
230
  /** A GitHub handle or a team, `@octocat`. */
228
231
  owner: pipe(string(), regex(/^@[\w.-]+(\/[\w.-]+)?$/, "a GitHub handle or team, such as @octocat")),
229
232
  review_after: pipe(string(), isoDate("a date, YYYY-MM-DD"))
230
- }));
233
+ });
234
+ var overridesSchema = array(overrideSchema);
231
235
 
232
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/audit.js
236
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/audit.js
233
237
  var auditRuleSchema = strictObject({ id: word, severity: picklist(LINT_SEVERITIES), summary: text });
234
238
  var defineAuditRules = /* @__PURE__ */ __name((input) => parseRegistry("audit rules", array(auditRuleSchema), input, (rules) => duplicates(rules.map((rule) => rule.id)).map((id) => `"${id}" is listed twice`)), "defineAuditRules");
235
239
  var AUDIT_RULES = defineAuditRules([
@@ -274,22 +278,49 @@ var parityGroupSchema = strictObject({
274
278
  /** Permanent differences, each with its reason; they count against the override budget of the group. */
275
279
  differences: array(strictObject({
276
280
  rule: word,
281
+ /** `<clis> <path> <flag>`; with `absent`, only `<path> <flag>`: the CLI list is whoever else has it. */
277
282
  target: text,
278
283
  expected: optional(text),
284
+ /** The CLI that lacks the path or flag by design; the rest must agree, so other CLIs joining do not stale it. */
285
+ absent: optional(word),
279
286
  reason: pipe(text, minLength(10, "say why, in a sentence"))
280
287
  }))
281
288
  });
282
289
  var defineParityGroups = /* @__PURE__ */ __name((input) => parseRegistry("parity groups", array(parityGroupSchema), input, (groups) => [
283
290
  ...duplicates(groups.map((group) => group.name)).map((name) => `"${name}" is listed twice`),
284
- ...groups.flatMap((group) => duplicates(group.differences.map((entry) => `${entry.rule} ${entry.target}`)).map((both) => `${group.name}: "${both}" is listed twice`))
291
+ ...groups.flatMap((group) => [
292
+ ...duplicates(group.differences.map((entry) => `${entry.rule} ${entry.target}`)).map((both) => `${group.name}: "${both}" is listed twice`),
293
+ ...group.differences.filter((entry) => entry.absent && entry.expected).map((entry) => `${group.name}: "${entry.target}" has \`absent\`, which measures the values itself; drop \`expected\``)
294
+ ])
285
295
  ]), "defineParityGroups");
296
+ var MEMO_HAS_NO_PROFILES = [
297
+ "mcp serve",
298
+ "mcp revoke",
299
+ "mcp server start",
300
+ "mcp server status",
301
+ "mcp server stop"
302
+ ].map((path) => ({
303
+ rule: "same-path-contract",
304
+ target: `${path} --profiles`,
305
+ absent: "memo",
306
+ reason: "memo has no profiles: it reads other CLIs' stores and selects their accounts with --source and --account (https://github.com/WireCatLabs/cli-base/issues/390)"
307
+ }));
286
308
  var PARITY_GROUPS = defineParityGroups([
287
309
  { name: "messengers", members: ["tg", "max"], covers: "tree", differences: [] },
288
310
  {
289
311
  name: "all",
290
312
  members: ["tg", "max", "memo", "drive", "zm", "wa"],
291
313
  covers: ["commands", "doctor", "skill", "mcp", "upgrade", "search", "notes", "meetings"],
292
- differences: []
314
+ differences: MEMO_HAS_NO_PROFILES
315
+ },
316
+ // mail's `search messages` is cli-core's mail search, not the messengers' command: --complete took their 20-odd
317
+ // differences as inherited (https://github.com/WireCatLabs/cli-base/issues/390). mail is compared everywhere else
318
+ // and moves back into "all" once its search is aligned with the messengers' or renamed.
319
+ {
320
+ name: "mail-shared",
321
+ members: ["tg", "max", "memo", "drive", "zm", "wa", "mail"],
322
+ covers: ["commands", "doctor", "skill", "mcp", "upgrade", "notes", "meetings"],
323
+ differences: MEMO_HAS_NO_PROFILES
293
324
  },
294
325
  // gcal is compared on what it already shares with every CLI; doctor, mcp, search and skill wait until the published
295
326
  // CLIs agree there (https://github.com/WireCatLabs/cli-base/issues/390), then gcal moves back into "all".
@@ -311,7 +342,7 @@ var REQUIRED_ROOTS = defineRequiredRoots([
311
342
  { path: ["upgrade"], meaning: "updates the CLI" }
312
343
  ]);
313
344
 
314
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/fields.js
345
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/fields.js
315
346
  var fieldRuleSchema = strictObject({ id: word, rule: text });
316
347
  var defineFieldRules = /* @__PURE__ */ __name((input) => parseRegistry("output field rules", array(fieldRuleSchema), input, (rules) => duplicates(rules.map((rule) => rule.id)).map((id) => `"${id}" is listed twice`)), "defineFieldRules");
317
348
  var FIELD_RULES = defineFieldRules([
@@ -327,7 +358,7 @@ var FIELD_RULES = defineFieldRules([
327
358
  }
328
359
  ]);
329
360
 
330
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/identifiers.js
361
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/identifiers.js
331
362
  var key = pipe(string(), regex(SNAKE_CASE, "a snake_case key"));
332
363
  var identifierSchema = strictObject({ key, meaning: text, replaces: optional(array(key)) });
333
364
  var defineIdentifiers = /* @__PURE__ */ __name((input) => parseRegistry("identifiers", array(identifierSchema), input, (identifiers) => {
@@ -349,7 +380,7 @@ var IDENTIFIERS = defineIdentifiers([
349
380
  { key: "trace_id", meaning: "the distributed trace a run belongs to, from `traceparent`" }
350
381
  ]);
351
382
 
352
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/flags-calendar.js
383
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/flags-calendar.js
353
384
  var CALENDAR_FLAGS = [
354
385
  { name: "--end-time", value: "<time>", role: "value", type: "time", meaning: "when it ends" },
355
386
  {
@@ -423,7 +454,7 @@ var CALENDAR_FLAGS = [
423
454
  }
424
455
  ];
425
456
 
426
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/flags-how.js
457
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/flags-how.js
427
458
  var HOW_FLAGS = [
428
459
  {
429
460
  name: "--limit",
@@ -510,6 +541,12 @@ var HOW_FLAGS = [
510
541
  type: "switch",
511
542
  meaning: "each item as its reference, title, time and excerpt only"
512
543
  },
544
+ {
545
+ name: COMPACT_FLAG,
546
+ role: "output",
547
+ type: "switch",
548
+ meaning: "one line per item, built from the same answer as --json, with its paging and next steps as # lines"
549
+ },
513
550
  {
514
551
  name: "--chart-kind",
515
552
  value: "<messages|active|membership>",
@@ -701,6 +738,7 @@ var HOW_FLAGS = [
701
738
  meaning: "refuse if what it names has changed since it was read",
702
739
  replaces: ["--expected"]
703
740
  },
741
+ { name: "--full-history", role: "mode", type: "switch", meaning: "keep a chat's whole history, past its limits" },
704
742
  {
705
743
  name: "--for-everyone",
706
744
  role: "mode",
@@ -801,6 +839,13 @@ var HOW_FLAGS = [
801
839
  type: "string",
802
840
  meaning: "the browser program to open for sign-in"
803
841
  },
842
+ {
843
+ name: "--credential-storage",
844
+ value: "<storage>",
845
+ role: "mode",
846
+ type: "choice",
847
+ meaning: "where a sign-in is kept: keyring, which falls back to a private file by itself, or file (WC-SECR-4)"
848
+ },
804
849
  { name: "--checkpoint", value: "<file>", role: "mode", type: "path", meaning: "keep resume progress in this file" },
805
850
  {
806
851
  name: "--expected-event-id",
@@ -1403,7 +1448,37 @@ var HOW_FLAGS = [
1403
1448
  }
1404
1449
  ];
1405
1450
 
1406
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/flags-what.js
1451
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/flags-mail.js
1452
+ var MAIL_FLAGS = [
1453
+ {
1454
+ name: "--cc",
1455
+ value: "<address>",
1456
+ role: "value",
1457
+ type: "string",
1458
+ meaning: "an e-mail address that gets a copy; repeat it for more"
1459
+ },
1460
+ {
1461
+ name: "--bcc",
1462
+ value: "<address>",
1463
+ role: "value",
1464
+ type: "string",
1465
+ meaning: "an e-mail address that gets a blind copy; repeat it for more"
1466
+ },
1467
+ {
1468
+ name: "--reply-all",
1469
+ role: "value",
1470
+ type: "switch",
1471
+ meaning: "with --reply-to, an e-mail reply also goes to everyone the message went to"
1472
+ },
1473
+ {
1474
+ name: "--trimmed",
1475
+ role: "output",
1476
+ type: "switch",
1477
+ meaning: "each e-mail's own text, without the quoted earlier mail and the signature; refused with --full"
1478
+ }
1479
+ ];
1480
+
1481
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/flags-what.js
1407
1482
  var WHAT_FLAGS = [
1408
1483
  {
1409
1484
  name: "--analysis-provider",
@@ -1848,7 +1923,14 @@ var WHAT_FLAGS = [
1848
1923
  meaning: "keep a token an operation returns only in this bot profile's keyring; never print it"
1849
1924
  },
1850
1925
  { name: "--task", value: "<id>", role: "target", type: "id", meaning: "a task, by id" },
1851
- { name: "--to", value: "<chat>", role: "target", type: "id", meaning: "the chat it goes to" },
1926
+ {
1927
+ name: "--to",
1928
+ value: "<chat>",
1929
+ role: "target",
1930
+ type: "id",
1931
+ otherValues: ["address"],
1932
+ meaning: "who it goes to: a chat in a messenger (<chat>), an e-mail address in mail (<address>, repeated for more)"
1933
+ },
1852
1934
  {
1853
1935
  name: "--topic-name",
1854
1936
  value: "<name>",
@@ -2298,7 +2380,8 @@ var WHAT_FLAGS = [
2298
2380
  value: "<ref>",
2299
2381
  role: "value",
2300
2382
  type: "string",
2301
- meaning: "what it is about, as a reference",
2383
+ otherValues: ["text"],
2384
+ meaning: "what it is about: a reference in a note or task (<ref>), the subject line in mail (<text>)",
2302
2385
  replaces: ["--about"]
2303
2386
  },
2304
2387
  {
@@ -2393,7 +2476,7 @@ var WHAT_FLAGS = [
2393
2476
  }
2394
2477
  ];
2395
2478
 
2396
- // node_modules/.pnpm/@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/vocabulary.js
2479
+ // node_modules/.pnpm/@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_typescript@7.0.2_vitest@5.0.5/node_modules/@wirecat/cli-base/dist/standards/vocabulary.js
2397
2480
  var FLAG_TYPES = [
2398
2481
  "switch",
2399
2482
  "count",
@@ -2435,6 +2518,11 @@ var flagSchema = strictObject({
2435
2518
  type: picklist(FLAG_TYPES),
2436
2519
  role: picklist(Object.keys(FLAG_ROLES)),
2437
2520
  meaning: text,
2521
+ /**
2522
+ * Value names a domain other than the main one gives the flag, such as mail's `--to <address>` beside the
2523
+ * messengers' `<chat>`. The meaning for each says which is which. `flag-two-meanings` accepts these and no others.
2524
+ */
2525
+ otherValues: optional(array(pipe(string(), regex(/^[a-z][a-z0-9-]*$/, "a value name such as address")))),
2438
2526
  unit: optional(text),
2439
2527
  /** Other names for the same flag, which `flag-synonym` refuses. */
2440
2528
  replaces: optional(array(pipe(string(), regex(/^--[a-z][a-z0-9]*(-[a-z0-9]+)*$/, "a long flag"))))
@@ -2544,6 +2632,7 @@ var verbs = [
2544
2632
  ["vote", "answer a poll"],
2545
2633
  ["answer", "reply to a button someone pressed under a bot's message"],
2546
2634
  ["respond", "answer an invitation: accept, tentatively accept or decline it"],
2635
+ ["remind", "tell the owner once about what starts soon: print it, or run the owner's own program for it"],
2547
2636
  ["press", "press a button under a bot's message; the bot sees who pressed it"],
2548
2637
  ["action", "show what a bot is doing in a chat, such as typing, for a few seconds"],
2549
2638
  ["watch", "follow new events as they come, and keep them"],
@@ -2571,6 +2660,10 @@ var verbs = [
2571
2660
  ["move", "move a thing to another place in the source: a file to a folder, an event to a calendar"],
2572
2661
  ["copy", "copy a file in the source"],
2573
2662
  ["run", "run a saved job once, now, as its timer would"],
2663
+ ["exec", "what a timer itself starts: one saved schedule, from its file; a person uses run"],
2664
+ // schedule's creators are named for what the timer starts; the owner kept these names over `create --kind`.
2665
+ ["agent", "save a timer that starts an agent with a prompt, read-only; a verb under schedule, never a resource"],
2666
+ ["command", "save a timer that runs one of this tool's own commands; a verb under schedule"],
2574
2667
  ["claim", "take a thing for a while so no other agent works it at once; the claim lapses by itself"],
2575
2668
  ["release", "give back what claim took, before it lapses"],
2576
2669
  ["merge", "fold a duplicate into the thing that stays; nothing is deleted"],
@@ -2598,6 +2691,7 @@ var collections = [
2598
2691
  ["chats", "conversations in a messenger"],
2599
2692
  ["contacts", "identities in a messenger's contact list"],
2600
2693
  ["messages", "posts in a messenger chat, or emails"],
2694
+ ["drafts", "e-mails saved in a mailbox's Drafts folder, written and not sent"],
2601
2695
  ["polls", "polls in a chat"],
2602
2696
  ["reactions", "reactions to a message"],
2603
2697
  ["recipients", "who a message goes to"],
@@ -2640,6 +2734,10 @@ var collections = [
2640
2734
  ["recordings", "the files a provider recorded of a meeting"],
2641
2735
  ["jobs", "work this tool runs in the background or on a timer"],
2642
2736
  ["actions", "what an agent proposes to do; the owner confirms or rejects each"],
2737
+ [
2738
+ "findings",
2739
+ "what an agent read in stored mail, staged in batches with citations; nothing is recorded until the owner confirms. What it proposes to do is actions"
2740
+ ],
2643
2741
  ["agents", "the agents whose actions are recorded in the shared store"],
2644
2742
  ["reminders", "scheduled notices about stored work, claimed and acknowledged with delivery receipts"],
2645
2743
  ["key-documents", "selected source documents that a project keeps as its starting references"],
@@ -2681,7 +2779,11 @@ var singulars = [
2681
2779
  ["api", "the source's own API, one command per operation"],
2682
2780
  ["privacy", "who may find, see, call or add the account"],
2683
2781
  ["metadata", "a profile's cached source attributes"],
2684
- ["auth", "the credentials a bot profile uses: its token and the secrets beside it"]
2782
+ ["auth", "the credentials a bot profile uses: its token and the secrets beside it"],
2783
+ [
2784
+ "schedule",
2785
+ "a profile's timers the owner saved, each running a command of this tool or an agent; the tool's own background work is jobs"
2786
+ ]
2685
2787
  ];
2686
2788
  var views = [
2687
2789
  ["tree", "the parent and child hierarchy of stored sources"],
@@ -2744,10 +2846,10 @@ var VOCABULARY = defineVocabulary({
2744
2846
  ],
2745
2847
  views: views.map(([entry, meaning]) => ({ word: entry, meaning })),
2746
2848
  roots: roots.map(([entry, meaning]) => ({ word: entry, meaning })),
2747
- flags: [...HOW_FLAGS, ...WHAT_FLAGS, ...CALENDAR_FLAGS]
2849
+ flags: [...HOW_FLAGS, ...WHAT_FLAGS, ...CALENDAR_FLAGS, ...MAIL_FLAGS]
2748
2850
  });
2749
2851
 
2750
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/mcp/agent.js
2852
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/mcp/agent.js
2751
2853
  var TYPES = new Map(VOCABULARY.flags.map((flag) => [flag.name, flag.type]));
2752
2854
  var snake = /* @__PURE__ */ __name((name) => name.replaceAll("|", "_or_").replace(/[^a-z0-9]+/gi, "_"), "snake");
2753
2855
  var longOf = /* @__PURE__ */ __name((option) => option.flags.match(/--[a-z0-9][a-z0-9-]*/)?.[0], "longOf");
@@ -2806,8 +2908,10 @@ var optionField = /* @__PURE__ */ __name((option, long, negated) => {
2806
2908
  }, "argv")
2807
2909
  };
2808
2910
  }, "optionField");
2809
- var argumentField = /* @__PURE__ */ __name((argument) => {
2810
- const one = argument.choices ? pipe(picklist(argument.choices), description(argument.description)) : text2(argument.description || argument.name);
2911
+ var argumentField = /* @__PURE__ */ __name((argument, query) => {
2912
+ const own = argument.description || argument.name;
2913
+ const about = query && argument.name === "query" ? own === QUERY_ARGUMENT ? queryDescription(query) : `${own}; ${queryDescription(query)}` : own;
2914
+ const one = argument.choices ? pipe(picklist(argument.choices), description(argument.description)) : text2(about);
2811
2915
  return {
2812
2916
  name: snake(argument.name),
2813
2917
  required: argument.required,
@@ -2833,7 +2937,7 @@ var stdinField = /* @__PURE__ */ __name(({ name, description: description2, json
2833
2937
  argv: /* @__PURE__ */ __name(() => [], "argv")
2834
2938
  }), "stdinField");
2835
2939
  var fieldsOf = /* @__PURE__ */ __name((info, { omit = [], offline = false, stdin }) => {
2836
- const fields = info.arguments.map(argumentField);
2940
+ const fields = info.arguments.map((argument) => argumentField(argument, info.query));
2837
2941
  const read = stdin?.(info.path);
2838
2942
  if (read)
2839
2943
  fields.push(stdinField(read));
@@ -2968,7 +3072,7 @@ var runCommandForAgent = /* @__PURE__ */ __name(async (program, path, input, ctx
2968
3072
  }
2969
3073
  }, "runCommandForAgent");
2970
3074
 
2971
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/mcp/tool.js
3075
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/mcp/tool.js
2972
3076
  var limit = optional(pipe(number(), integer(), minValue(1), maxValue(100), description("how many")));
2973
3077
  var page = optional(pipe(number(), integer(), minValue(1), description("which page, from 1")));
2974
3078
  var message = pipe(
@@ -3082,7 +3186,7 @@ var entryRunner = /* @__PURE__ */ __name((registration) => {
3082
3186
  ...outcomeOf(result),
3083
3187
  startedAt,
3084
3188
  finishedAt: Date.now()
3085
- })?.catch(() => void 0);
3189
+ }, caller)?.catch(() => void 0);
3086
3190
  return result;
3087
3191
  };
3088
3192
  }, "entryRunner");
@@ -3227,7 +3331,7 @@ var failed = /* @__PURE__ */ __name((error, errors, effects) => {
3227
3331
  return mcpErrorResult(JSON.parse(agentJson(errorObjectOf(error, context))));
3228
3332
  }, "failed");
3229
3333
 
3230
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/mcp/surface.js
3334
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/mcp/surface.js
3231
3335
  import { randomUUID } from "node:crypto";
3232
3336
  var MATCHES = 8;
3233
3337
  var ANSWER = answerSchema();
@@ -3250,7 +3354,7 @@ var runnableOnly = /* @__PURE__ */ __name((result, offered) => {
3250
3354
  const body = result.structuredContent;
3251
3355
  if (result.isError || !Array.isArray(body?.next))
3252
3356
  return result;
3253
- const next = body.next.filter((step) => offered(step.command));
3357
+ const next = body.next.filter((step) => step.command === void 0 || offered(step.command));
3254
3358
  const { next: _, ...rest } = body;
3255
3359
  const kept = next.length > 0 ? { ...rest, next } : rest;
3256
3360
  return {
@@ -4,7 +4,7 @@ import {
4
4
  __name
5
5
  } from "./chunk-ZVVMGPBJ.js";
6
6
 
7
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/background/processes.js
7
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/background/processes.js
8
8
  import { execFileSync } from "node:child_process";
9
9
  import { readdirSync, readFileSync, readlinkSync } from "node:fs";
10
10
  var alive = /* @__PURE__ */ __name((pid) => {
@@ -4,7 +4,7 @@ import {
4
4
  __name
5
5
  } from "./chunk-ZVVMGPBJ.js";
6
6
 
7
- // node_modules/.pnpm/@wirecat+cli-core@0.495.0_@wirecat+cli-base@0.65.0_commander@15.0.0_esbuild@0.28.2_type_24cca5e5c8b0984f2f26e7d1ba6b6d47/node_modules/@wirecat/cli-core/dist/mcp/stdio-wire.js
7
+ // node_modules/.pnpm/@wirecat+cli-core@0.584.0_@wirecat+cli-base@0.77.1_commander@15.0.0_esbuild@0.28.2_type_ab8c0b68b8b4768d5b87d6e249ef10da/node_modules/@wirecat/cli-core/dist/mcp/stdio-wire.js
8
8
  import { PassThrough, Writable } from "node:stream";
9
9
  var lineReader = /* @__PURE__ */ __name((onMessage) => {
10
10
  let rest = "";