@wirecat/cli-memo 0.23.0 → 0.24.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 (135) hide show
  1. package/README.md +24 -21
  2. package/dist/actions/command.d.ts.map +1 -1
  3. package/dist/actions/command.js +12 -13
  4. package/dist/actions/command.js.map +1 -1
  5. package/dist/agents/command.d.ts.map +1 -1
  6. package/dist/agents/command.js +3 -2
  7. package/dist/agents/command.js.map +1 -1
  8. package/dist/answers/command.js +6 -6
  9. package/dist/answers/command.js.map +1 -1
  10. package/dist/author.d.ts +11 -0
  11. package/dist/author.d.ts.map +1 -0
  12. package/dist/author.js +16 -0
  13. package/dist/author.js.map +1 -0
  14. package/dist/bin/memo.js +4 -2
  15. package/dist/bin/memo.js.map +1 -1
  16. package/dist/config.d.ts +1 -1
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +1 -1
  19. package/dist/config.js.map +1 -1
  20. package/dist/context/command.d.ts.map +1 -1
  21. package/dist/context/command.js +3 -3
  22. package/dist/context/command.js.map +1 -1
  23. package/dist/context/context.js +1 -1
  24. package/dist/discovery/command.d.ts +2 -0
  25. package/dist/discovery/command.d.ts.map +1 -1
  26. package/dist/discovery/command.js +18 -10
  27. package/dist/discovery/command.js.map +1 -1
  28. package/dist/examples.d.ts +5 -0
  29. package/dist/examples.d.ts.map +1 -0
  30. package/dist/examples.js +128 -0
  31. package/dist/examples.js.map +1 -0
  32. package/dist/facts/command.d.ts.map +1 -1
  33. package/dist/facts/command.js +18 -17
  34. package/dist/facts/command.js.map +1 -1
  35. package/dist/install/postinstall.d.ts +7 -0
  36. package/dist/install/postinstall.d.ts.map +1 -0
  37. package/dist/install/postinstall.js +28 -0
  38. package/dist/install/postinstall.js.map +1 -0
  39. package/dist/knowledge/command.d.ts.map +1 -1
  40. package/dist/knowledge/command.js +106 -61
  41. package/dist/knowledge/command.js.map +1 -1
  42. package/dist/knowledge/key-documents.d.ts +29 -0
  43. package/dist/knowledge/key-documents.d.ts.map +1 -0
  44. package/dist/knowledge/key-documents.js +76 -0
  45. package/dist/knowledge/key-documents.js.map +1 -0
  46. package/dist/knowledge/meeting-projects-command.js +4 -4
  47. package/dist/knowledge/meeting-projects-command.js.map +1 -1
  48. package/dist/mail/messages-command.d.ts +4 -0
  49. package/dist/mail/messages-command.d.ts.map +1 -0
  50. package/dist/mail/messages-command.js +32 -0
  51. package/dist/mail/messages-command.js.map +1 -0
  52. package/dist/mcp/command.js +1 -1
  53. package/dist/mcp/command.js.map +1 -1
  54. package/dist/mcp/knowledge.js +3 -3
  55. package/dist/mcp/knowledge.js.map +1 -1
  56. package/dist/mcp/server.js +9 -9
  57. package/dist/mcp/server.js.map +1 -1
  58. package/dist/mcp/task-relations.d.ts +3 -3
  59. package/dist/mcp/task-relations.d.ts.map +1 -1
  60. package/dist/mcp/task-relations.js +17 -8
  61. package/dist/mcp/task-relations.js.map +1 -1
  62. package/dist/mcp/vocabulary.d.ts +2 -3
  63. package/dist/mcp/vocabulary.d.ts.map +1 -1
  64. package/dist/mcp/vocabulary.js +23 -18
  65. package/dist/mcp/vocabulary.js.map +1 -1
  66. package/dist/memories/command.d.ts +1 -0
  67. package/dist/memories/command.d.ts.map +1 -1
  68. package/dist/memories/command.js +22 -20
  69. package/dist/memories/command.js.map +1 -1
  70. package/dist/notes/about.d.ts +11 -2
  71. package/dist/notes/about.d.ts.map +1 -1
  72. package/dist/notes/about.js +34 -30
  73. package/dist/notes/about.js.map +1 -1
  74. package/dist/notes/bound.d.ts +3 -0
  75. package/dist/notes/bound.d.ts.map +1 -1
  76. package/dist/notes/bound.js +9 -1
  77. package/dist/notes/bound.js.map +1 -1
  78. package/dist/notes/command.d.ts.map +1 -1
  79. package/dist/notes/command.js +17 -60
  80. package/dist/notes/command.js.map +1 -1
  81. package/dist/notes/folders-command.d.ts.map +1 -1
  82. package/dist/notes/folders-command.js +12 -6
  83. package/dist/notes/folders-command.js.map +1 -1
  84. package/dist/notes/list.d.ts +22 -0
  85. package/dist/notes/list.d.ts.map +1 -0
  86. package/dist/notes/list.js +24 -0
  87. package/dist/notes/list.js.map +1 -0
  88. package/dist/notes/search.d.ts.map +1 -1
  89. package/dist/notes/search.js +2 -2
  90. package/dist/notes/search.js.map +1 -1
  91. package/dist/options.d.ts +2 -0
  92. package/dist/options.d.ts.map +1 -1
  93. package/dist/options.js +2 -0
  94. package/dist/options.js.map +1 -1
  95. package/dist/people/command.js +2 -2
  96. package/dist/program.d.ts +5 -0
  97. package/dist/program.d.ts.map +1 -1
  98. package/dist/program.js +35 -6
  99. package/dist/program.js.map +1 -1
  100. package/dist/run/auto.d.ts.map +1 -1
  101. package/dist/run/auto.js +11 -13
  102. package/dist/run/auto.js.map +1 -1
  103. package/dist/run/import.d.ts +2 -2
  104. package/dist/run/import.d.ts.map +1 -1
  105. package/dist/run/import.js +66 -27
  106. package/dist/run/import.js.map +1 -1
  107. package/dist/run/lock.d.ts +1 -1
  108. package/dist/run/lock.d.ts.map +1 -1
  109. package/dist/run/lock.js +1 -1
  110. package/dist/run/lock.js.map +1 -1
  111. package/dist/search/command.d.ts +15 -20
  112. package/dist/search/command.d.ts.map +1 -1
  113. package/dist/search/command.js +96 -47
  114. package/dist/search/command.js.map +1 -1
  115. package/dist/tags/command.d.ts.map +1 -1
  116. package/dist/tags/command.js +17 -7
  117. package/dist/tags/command.js.map +1 -1
  118. package/dist/tasks/command.d.ts.map +1 -1
  119. package/dist/tasks/command.js +16 -6
  120. package/dist/tasks/command.js.map +1 -1
  121. package/dist/tasks/relations-command.d.ts.map +1 -1
  122. package/dist/tasks/relations-command.js +8 -21
  123. package/dist/tasks/relations-command.js.map +1 -1
  124. package/dist/version.d.ts +1 -1
  125. package/dist/version.js +1 -1
  126. package/dist/vocabulary/command.d.ts.map +1 -1
  127. package/dist/vocabulary/command.js +44 -32
  128. package/dist/vocabulary/command.js.map +1 -1
  129. package/install/postinstall.mjs +9 -0
  130. package/package.json +8 -4
  131. package/skills/cli-memo/SKILL.md +49 -0
  132. package/dist/mail/command.d.ts +0 -4
  133. package/dist/mail/command.d.ts.map +0 -1
  134. package/dist/mail/command.js +0 -105
  135. package/dist/mail/command.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { annotate } from "@wirecat/cli-base/commands";
2
+ export const EXAMPLES = {
3
+ context: ["memo context telegram:'Kai Sample'", "memo context email:kai@example.com --limit 5 --json"],
4
+ "notes show": ["memo notes show note:12", "memo notes show ~/notes/People/Kai.md --json"],
5
+ "notes list": [
6
+ "memo notes list --about telegram:'Kai Sample'",
7
+ "memo notes list --about project:2 --search budget --json",
8
+ "memo notes list --source internal --limit 50",
9
+ ],
10
+ "notes add": [
11
+ "memo notes add 'Prefers calls in the morning' --about telegram:'Kai Sample'",
12
+ "memo notes add --file draft.md --title 'Harbour kickoff' --about project:2 --about organization:1",
13
+ ],
14
+ "notes edit": ["memo notes edit note:12 --revision 2 --text 'Prefers calls after ten'"],
15
+ "notes remove": ["memo notes remove note:12"],
16
+ "notes export": ["memo notes export --to ~/notes/memo --format obsidian"],
17
+ "folders add": ["memo folders add ~/notes"],
18
+ "folders attach": ["memo folders attach 1 ~/notes"],
19
+ "folders list": ["memo folders list --json"],
20
+ "messages show": ["memo messages show 'msg:email/me%40example.com/thread/42' --before-n 2 --after-n 2"],
21
+ note: ["memo note telegram:'Kai Sample' People/Kai.md", "memo note telegram:'Kai Sample' --clear"],
22
+ "tags add": ["memo tags add follow-up --note note:12", "memo tags add harbour --project HRB"],
23
+ "tags remove": ["memo tags remove follow-up --note note:12"],
24
+ "tags list": ["memo tags list --tag follow-up", "memo tags list --provider email --account me@example.com --json"],
25
+ "tasks link": ["memo tasks link HRB-2 HRB-1 --kind blocked-by"],
26
+ "tasks unlink": ["memo tasks unlink HRB-2 HRB-1 --kind blocked-by"],
27
+ "tasks relations": ["memo tasks relations HRB-2 --json"],
28
+ "tasks status": ["memo tasks status HRB-2"],
29
+ "tasks add": [
30
+ "memo tasks add 'msg:telegram/1/77/42' --provider telegram --account 1 --type request",
31
+ "memo tasks add --project HRB --title 'Draft the budget' --type feature",
32
+ ],
33
+ "tasks list": ["memo tasks list --provider telegram --account 1", "memo tasks list --project HRB --ready --json"],
34
+ "tasks close": ["memo tasks close 7 --provider telegram --account 1 --as dismissed --reason 'answered by phone'"],
35
+ "tasks update": ["memo tasks update 7 --title 'Send the budget' --priority 1"],
36
+ "tasks assign": ["memo tasks assign 7 person:3"],
37
+ "organizations add": ["memo organizations add 'Harbour Studio' --kind company --scope work"],
38
+ "organizations list": ["memo organizations list --json"],
39
+ "organizations context": ["memo organizations context organization:1"],
40
+ "projects meetings list": ["memo projects meetings list HRB --provider zoom --account me@example.com"],
41
+ "projects meetings link": ["memo projects meetings link HRB 31 --provider zoom --account me@example.com"],
42
+ "projects add": ["memo projects add 'Harbour' --key HRB --type client --organization 1"],
43
+ "projects list": ["memo projects list"],
44
+ "projects context": ["memo projects context HRB", "memo projects context project:2 --json"],
45
+ "projects key-documents add": ["memo projects key-documents add HRB note:12 --reason 'the brief'"],
46
+ "projects key-documents remove": ["memo projects key-documents remove HRB note:12"],
47
+ "projects key-documents list": ["memo projects key-documents list HRB"],
48
+ "relationships add": [
49
+ "memo relationships add person:3 organization:1 --role cto",
50
+ "memo relationships add project:2 organization:1 --kind related-to --reason 'same client'",
51
+ ],
52
+ "relationships list": ["memo relationships list --reference person:3"],
53
+ "relationships remove": ["memo relationships remove 4"],
54
+ "relationships confirm": ["memo relationships confirm 4"],
55
+ "relationships suggest": ["memo relationships suggest --provider email --account me@example.com --limit 10"],
56
+ "reminders add": [
57
+ "memo reminders add 7 --at-time 2026-10-20T09:00:00+02:00 --timezone Europe/Madrid --provider telegram --account 1",
58
+ ],
59
+ "reminders list": ["memo reminders list --provider telegram --account 1"],
60
+ "reminders poll": ["memo reminders poll --provider telegram --account 1 --json"],
61
+ "reminders ack": ["memo reminders ack 3 3:1 --provider telegram --account 1"],
62
+ "reminders cancel": ["memo reminders cancel 3 --provider telegram --account 1"],
63
+ "reminders update": [
64
+ "memo reminders update 3 --revision 1 --at-time 2026-10-21T09:00:00+02:00 --provider telegram --account 1",
65
+ ],
66
+ "vocabulary list": ["memo vocabulary list --kind tag"],
67
+ "vocabulary show": ["memo vocabulary show Harbour --kind project"],
68
+ "vocabulary check": ["memo vocabulary check on-boarding --kind tag", "memo vocabulary check --limit 20 --json"],
69
+ "vocabulary create": ["memo vocabulary create onboarding --kind tag --expected 3f9a"],
70
+ "vocabulary aliases add": ["memo vocabulary aliases add project:2 Harbor --expected 3f9a"],
71
+ "vocabulary aliases remove": ["memo vocabulary aliases remove project:2 5 --expected 3f9a"],
72
+ "memories add": ["memo memories add 'Kai prefers Friday meetings' --kind preference --scope work --evidence note:12"],
73
+ "memories list": ["memo memories list --status proposed"],
74
+ "memories show": ["memo memories show memory:4"],
75
+ "memories confirm": ["memo memories confirm memory:4"],
76
+ "memories stale": ["memo memories stale memory:4"],
77
+ "facts add": [
78
+ "memo facts add 'We moved the launch to spring' --type decision --evidence 'msg:telegram/1/77/42' --project HRB",
79
+ ],
80
+ "facts list": ["memo facts list --type decision --project HRB"],
81
+ "facts show": ["memo facts show fact:4"],
82
+ "facts confirm": ["memo facts confirm fact:4"],
83
+ "facts reverse": ["memo facts reverse fact:4"],
84
+ "actions add": [
85
+ "memo actions add reply --reason 'Kai asked twice' --provider telegram --target 'msg:telegram/1/77/42' --payload '{\"text\":\"Friday works\"}'",
86
+ ],
87
+ "actions list": ["memo actions list --status proposed"],
88
+ "actions show": ["memo actions show 5"],
89
+ "actions confirm": ["memo actions confirm 5"],
90
+ "actions reject": ["memo actions reject 5"],
91
+ "agents log": ["memo agents log --agent claude-code --limit 20"],
92
+ mcp: ["memo mcp"],
93
+ "search all": ["memo search all 'budget harbour'", "memo search all 'content:invoice' --only mail,notes --json"],
94
+ "search messages": ["memo search messages 'friday meeting' --type voice"],
95
+ "search mail": ["memo search mail 'mailbox:important budget' --account me@example.com"],
96
+ "search notes": ["memo search notes budget --folder ~/notes", "memo search notes kickoff --project HRB --json"],
97
+ "search memories": ["memo search memories friday meetings --scope work"],
98
+ ask: [
99
+ "memo ask 'what did Kai say about the budget?' --all",
100
+ "memo ask 'when is the launch?' --provider telegram --account 1",
101
+ ],
102
+ sync: [
103
+ "memo sync",
104
+ "memo sync --account work --since-time 2026-09-01",
105
+ "memo sync --notes --folder ~/notes --no-embed",
106
+ ],
107
+ "auto start": ["memo auto start --every 10m"],
108
+ "auto stop": ["memo auto stop"],
109
+ "auto status": ["memo auto status --json"],
110
+ commands: ["memo commands --json", "memo commands tags add --json"],
111
+ "skill show": ["memo skill show"],
112
+ "skill install": ["memo skill install --for all"],
113
+ };
114
+ const leaves = (command, path = []) => command.commands.flatMap((child) => {
115
+ const at = [...path, child.name()];
116
+ return child.commands.length ? leaves(child, at) : [[at.join(" "), child]];
117
+ });
118
+ /** Puts each leaf's examples in `commands --json` and at the end of its `--help`. */
119
+ export const addExamples = (program) => {
120
+ for (const [path, command] of leaves(program)) {
121
+ const examples = EXAMPLES[path];
122
+ if (!examples)
123
+ continue;
124
+ annotate(command, { examples });
125
+ command.addHelpText("after", `\nExamples:\n${examples.map((example) => ` ${example}`).join("\n")}`);
126
+ }
127
+ };
128
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../src/examples.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/facts/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAyBxC,eAAO,MAAM,YAAY,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAmEzF,CAAA"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/facts/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4BxC,eAAO,MAAM,YAAY,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAoEzF,CAAA"}
@@ -1,30 +1,28 @@
1
1
  import { FACT_STATUSES, FACT_TYPES, MEMORY_SCOPES } from "@wirecat/cli-messaging/store";
2
+ import { authorOf, byOption } from "../author.js";
2
3
  import { oneOf, positive } from "../options.js";
3
4
  import { pageOf } from "../page.js";
4
5
  import { answering } from "../records/run.js";
6
+ import { canonicalProject } from "../vocabulary/project.js";
5
7
  export const factsCommand = (program, streams, env) => {
6
8
  const run = answering(streams, env);
7
- const facts = program
8
- .command("facts")
9
- .description("What happened — said, asked, decided, promised — with its evidence: agents propose, you accept");
10
- facts
11
- .command("add")
12
- .description("Record a fact of your own; it is accepted at once")
9
+ const facts = program.command("facts").description("what happened — said, asked, decided, promised — with evidence");
10
+ byOption(facts.command("add").description("record a fact; an agent's waits as proposed until you confirm it"))
13
11
  .argument("<statement...>", "what happened, in one sentence")
14
12
  .requiredOption("--type <type>", FACT_TYPES.join(", "), oneOf(FACT_TYPES))
15
13
  .option("--evidence <ref...>", "what shows it: msg:, note:, meeting:, person: or another reference")
16
- .option("--project <ref>", "the project it belongs to, project:<id>")
14
+ .option("--project <project>", "the project it belongs to: its key or project:<id>")
17
15
  .option("--subject <ref>", "what it is about, as a reference")
18
16
  .option("--occurred <iso>", "when it happened, as the evidence shows")
19
17
  .option("--scope <scope>", MEMORY_SCOPES.join(" or "), oneOf(MEMORY_SCOPES))
20
18
  .option("--supersedes <ref>", "a decision only: the decision this one replaces")
21
19
  .option("--json", "print JSON")
22
- .action((words, options) => run(options.json, (store) => store.facts.add({
20
+ .action((words, options) => run(options.json, async (store) => store.facts.add({
23
21
  type: options.type,
24
22
  statement: words.join(" "),
25
- by: "owner",
23
+ by: authorOf(env, options.asOwner),
26
24
  ...(options.evidence === undefined ? {} : { evidence: options.evidence }),
27
- ...(options.project === undefined ? {} : { project: options.project }),
25
+ ...(options.project === undefined ? {} : { project: await canonicalProject(store, options.project) }),
28
26
  ...(options.subject === undefined ? {} : { subject: options.subject }),
29
27
  ...(options.occurred === undefined ? {} : { occurredAt: options.occurred }),
30
28
  ...(options.scope === undefined ? {} : { scope: options.scope }),
@@ -32,29 +30,32 @@ export const factsCommand = (program, streams, env) => {
32
30
  })));
33
31
  facts
34
32
  .command("list")
35
- .description("Facts, latest first")
33
+ .description("facts, latest first")
36
34
  .option("--type <type>", FACT_TYPES.join(", "), oneOf(FACT_TYPES))
37
35
  .option("--status <status>", FACT_STATUSES.join(", "), oneOf(FACT_STATUSES))
38
- .option("--project <ref>", "only this project's, project:<id>")
36
+ .option("--project <project>", "only this project's: its key or project:<id>")
39
37
  .option("--subject <ref>", "only facts about this reference")
40
38
  .option("--limit <n>", "most facts, up to 500", positive, 100)
41
39
  .option("--json", "print JSON")
42
- .action(({ json, ...filters }) => run(json, (store) => pageOf(filters.limit, (limit) => store.facts.list({ ...filters, limit }))));
40
+ .action(({ json, ...filters }) => run(json, async (store) => {
41
+ const project = filters.project === undefined ? undefined : await canonicalProject(store, filters.project);
42
+ return pageOf(filters.limit, (limit) => store.facts.list({ ...filters, ...(project === undefined ? {} : { project }), limit }));
43
+ }));
43
44
  facts
44
45
  .command("show")
45
- .description("One fact with its evidence")
46
+ .description("one fact with its evidence")
46
47
  .argument("<ref>", "fact:<id>")
47
48
  .option("--json", "print JSON")
48
49
  .action((ref, options) => run(options.json, (store) => store.facts.get(ref)));
49
50
  facts
50
- .command("accept")
51
- .description("Stand behind a fact an agent proposed; a decision it supersedes stops holding")
51
+ .command("confirm")
52
+ .description("stand behind a fact an agent proposed; a decision it supersedes stops holding")
52
53
  .argument("<ref>", "fact:<id>")
53
54
  .option("--json", "print JSON")
54
55
  .action((ref, options) => run(options.json, (store) => store.facts.accept(ref)));
55
56
  facts
56
57
  .command("reverse")
57
- .description("An accepted decision no longer holds, and nothing replaced it")
58
+ .description("an accepted decision no longer holds, and nothing replaced it")
58
59
  .argument("<ref>", "fact:<id>")
59
60
  .option("--json", "print JSON")
60
61
  .action((ref, options) => run(options.json, (store) => store.facts.reverse(ref)));
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/facts/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/facts/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** As tg does: a global npm install puts the skill where agents look; MEMO_INSTALL_AGENT picks or skips. */
2
+ export declare const completeGlobalInstall: ({ env, packageRoot, note, }?: {
3
+ env?: NodeJS.ProcessEnv;
4
+ packageRoot?: string;
5
+ note?: (message: string) => void;
6
+ }) => void;
7
+ //# sourceMappingURL=postinstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../src/install/postinstall.ts"],"names":[],"mappings":"AAcA,4GAA4G;AAC5G,eAAO,MAAM,qBAAqB,iCAI/B;IACD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjC,KAAQ,IAeR,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { dirname, join, resolve } from "node:path";
2
+ import { fileURLToPath, pathToFileURL } from "node:url";
3
+ import { installSkill } from "@wirecat/cli-base/skill";
4
+ import { APP } from "../app.js";
5
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
6
+ const TARGETS = {
7
+ all: ["claude", "agents"],
8
+ claude: ["claude"],
9
+ codex: ["agents"],
10
+ cursor: ["agents"],
11
+ gemini: ["agents"],
12
+ };
13
+ /** As tg does: a global npm install puts the skill where agents look; MEMO_INSTALL_AGENT picks or skips. */
14
+ export const completeGlobalInstall = ({ env = process.env, packageRoot = root, note = (message) => process.stderr.write(`${message}\n`), } = {}) => {
15
+ if (env.npm_config_global !== "true")
16
+ return;
17
+ const agent = env.MEMO_INSTALL_AGENT ?? "all";
18
+ if (agent === "none") {
19
+ note("memo: agent skill skipped by MEMO_INSTALL_AGENT=none; install with memo skill install --for all.");
20
+ return;
21
+ }
22
+ const targets = TARGETS[agent];
23
+ if (targets === undefined)
24
+ throw new Error("MEMO_INSTALL_AGENT must be all, codex, cursor, claude, gemini or none");
25
+ installSkill({ command: APP.command, appName: APP.appName, version: APP.version }, pathToFileURL(join(packageRoot, "skills/cli-memo/SKILL.md")), { env, targets });
26
+ note("memo: agent skill installed. Agent: read memo skill show before using memo.");
27
+ };
28
+ //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../src/install/postinstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,EAAE,YAAY,EAAoB,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AACtE,MAAM,OAAO,GAA2C;IACtD,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACzB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,KAAK,EAAE,CAAC,QAAQ,CAAC;IACjB,MAAM,EAAE,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,CAAC,QAAQ,CAAC;CACnB,CAAA;AAED,4GAA4G;AAC5G,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,GAAG,GAAG,OAAO,CAAC,GAAG,EACjB,WAAW,GAAG,IAAI,EAClB,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,GACjE,GAIG,EAAE,EAAQ,EAAE;IACd,IAAI,GAAG,CAAC,iBAAiB,KAAK,MAAM;QAAE,OAAM;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,kBAAkB,IAAI,KAAK,CAAA;IAC7C,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,IAAI,CAAC,kGAAkG,CAAC,CAAA;QACxG,OAAM;IACR,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IACnH,YAAY,CACV,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EACpE,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC,EAC5D,EAAE,GAAG,EAAE,OAAO,EAAE,CACjB,CAAA;IACD,IAAI,CAAC,6EAA6E,CAAC,CAAA;AACrF,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/knowledge/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAW1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOxC,eAAO,MAAM,iBAAiB,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,SAwQ3F,CAAA"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/knowledge/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAW1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASxC,eAAO,MAAM,iBAAiB,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,SAwU3F,CAAA"}
@@ -1,9 +1,11 @@
1
1
  import { CliError, createRenderer } from "@wirecat/cli-base";
2
2
  import { ORGANIZATION_KINDS, openStore, PROJECT_TYPES, SCOPES, } from "@wirecat/cli-messaging/store";
3
+ import { authorOf, byOption } from "../author.js";
3
4
  import { notesAbout } from "../notes/about.js";
4
5
  import { accountOptions, oneOf, positive } from "../options.js";
5
6
  import { answering } from "../records/run.js";
6
7
  import { selectAccount } from "../store/scope.js";
8
+ import { keyDocuments, markKey, projectOf, unmarkKey } from "./key-documents.js";
7
9
  import { meetingProjectsCommand } from "./meeting-projects-command.js";
8
10
  export const knowledgeCommands = (program, streams, env) => {
9
11
  const run = answering(streams, env);
@@ -23,21 +25,26 @@ export const knowledgeCommands = (program, streams, env) => {
23
25
  }
24
26
  };
25
27
  /** What the store knows around an organization or a project: its relations, the notes about it, its tags. */
26
- const contextOf = async (store, thing, type, id) => ({
27
- [type]: thing ?? null,
28
- relationships: (await store.notes.links({ to: `${type}:${id}` }))
29
- .concat(await store.notes.links({ from: `${type}:${id}` }))
30
- .filter((link) => link.kind !== "about" && link.kind !== "links-to"),
31
- notes: await notesAbout(store, { ref: `${type}:${id}` }),
32
- tags: await store.knowledge.tags(null, { type, id }),
33
- });
28
+ const contextOf = async (store, thing, type, reference) => {
29
+ if (thing === undefined)
30
+ throw new CliError("not_found", `no ${type} ${reference}; memo ${type}s list shows them`);
31
+ const { id } = thing;
32
+ return {
33
+ [type]: thing,
34
+ relationships: (await store.notes.links({ to: `${type}:${id}` }))
35
+ .concat(await store.notes.links({ from: `${type}:${id}` }))
36
+ .filter((link) => link.kind !== "about" && link.kind !== "links-to" && link.role !== "key"),
37
+ notes: await notesAbout(store, { ref: `${type}:${id}` }),
38
+ tags: await store.knowledge.tags(null, { type, id }),
39
+ };
40
+ };
34
41
  const organizations = program
35
42
  .command("organizations")
36
- .description("Companies, teams, families and communities of yours");
43
+ .description("companies, teams, families and communities of yours");
37
44
  organizations
38
45
  .command("add")
39
- .description("Add an organization of yours: a company, team, family or community")
40
- .argument("<name>")
46
+ .description("add an organization of yours: a company, team, family or community")
47
+ .argument("<name>", "the organization's name")
41
48
  .requiredOption("--kind <kind>", ORGANIZATION_KINDS.join(", "), oneOf(ORGANIZATION_KINDS))
42
49
  .option("--scope <scope>", SCOPES.join(", "), oneOf(SCOPES))
43
50
  .option("--json", "print JSON")
@@ -48,88 +55,126 @@ export const knowledgeCommands = (program, streams, env) => {
48
55
  })));
49
56
  organizations
50
57
  .command("list")
51
- .description("Your organizations")
58
+ .description("your organizations")
52
59
  .option("--json", "print JSON")
53
60
  .action((options) => owned(options, (store) => store.knowledge.organizations()));
54
61
  organizations
55
62
  .command("context")
56
- .description("One organization: its relationships, the notes about or linking it, and its tags")
57
- .argument("<id>")
63
+ .description("one organization by its id or organization:<id>: its relationships, the notes about or linking it, and its tags")
64
+ .summary("one organization: its relationships, notes and tags")
65
+ .argument("<organization>", "its id or organization:<id>")
58
66
  .option("--json", "print JSON")
59
- .action((id, options) => owned(options, async (store) => contextOf(store, (await store.knowledge.organizations()).find((organization) => organization.id === id), "organization", id)));
60
- const projects = program.command("projects").description("Projects of yours, each with a short key");
67
+ .action((reference, options) => owned(options, async (store) => {
68
+ const wanted = reference.replace(/^organization:/, "");
69
+ return contextOf(store, (await store.knowledge.organizations()).find((organization) => organization.id === wanted), "organization", reference);
70
+ }));
71
+ const projects = program.command("projects").description("projects of yours, each with a short key");
61
72
  meetingProjectsCommand(projects, streams, env);
62
73
  projects
63
74
  .command("add")
64
- .description("Add a project of yours, with a short key its tasks use")
65
- .argument("<name>")
75
+ .description("add a project of yours, with a short key its tasks use")
76
+ .argument("<name>", "the project's name")
66
77
  .option("--key <key>", "3–4 letters and digits; made from the name when left out")
67
78
  .option("--type <type>", PROJECT_TYPES.join(", "), oneOf(PROJECT_TYPES))
68
- .option("--organization <reference>", "organization:<id> it belongs to")
79
+ .option("--organization <organization>", "the organization it belongs to: its id or organization:<id>")
69
80
  .option("--scope <scope>", SCOPES.join(", "), oneOf(SCOPES))
70
81
  .option("--json", "print JSON")
71
82
  .action((name, options) => owned(options, (store) => store.knowledge.addProject({
72
83
  name,
73
84
  ...(options.key === undefined ? {} : { key: options.key }),
74
85
  ...(options.type === undefined ? {} : { type: options.type }),
75
- ...(options.organization === undefined ? {} : { organization: options.organization }),
86
+ ...(options.organization === undefined
87
+ ? {}
88
+ : { organization: `organization:${options.organization.replace(/^organization:/, "")}` }),
76
89
  ...(options.scope === undefined ? {} : { scope: options.scope }),
77
90
  })));
78
91
  projects
79
92
  .command("list")
80
- .description("Your projects")
93
+ .description("your projects")
81
94
  .option("--json", "print JSON")
82
95
  .action((options) => owned(options, (store) => store.knowledge.projects()));
83
96
  projects
84
97
  .command("context")
85
- .description("One project by its id, key or project:<id>: its relationships, the notes about or linking it, and its tags")
86
- .argument("<project>")
98
+ .description("one project by its id, key or project:<id>: its key documents first, then its relationships, the notes " +
99
+ "about or linking it, and its tags. Start work on a project here")
100
+ .summary("one project: key documents, relationships, notes and tags; start work here")
101
+ .argument("<project>", "its id, key or project:<id>")
87
102
  .option("--json", "print JSON")
88
103
  .action((reference, options) => owned(options, async (store) => {
89
- const wanted = reference.replace(/^project:/, "");
90
- const project = (await store.knowledge.projects()).find((candidate) => candidate.id === wanted || candidate.key?.toLowerCase() === wanted.toLowerCase());
91
- return contextOf(store, project, "project", project?.id ?? wanted);
104
+ const project = await projectOf(store, reference);
105
+ return {
106
+ keyDocuments: await keyDocuments(store, project),
107
+ ...(await contextOf(store, project, "project", reference)),
108
+ };
92
109
  }));
110
+ const keys = projects
111
+ .command("key-documents")
112
+ .description("the notes, files and messages to read first about a project, each with why");
113
+ byOption(keys
114
+ .command("add")
115
+ .description("mark a note:, document: or msg: reference as a key document of the project")
116
+ .argument("<project>", "id, key or project:<id>")
117
+ .argument("<reference>", "note:, document: or msg: reference")
118
+ .requiredOption("--reason <text>", "why it is key, in a few words")
119
+ .option("--json", "print JSON")).action((project, reference, options) => owned(options, async (store) => markKey(store, await projectOf(store, project), reference, options.reason, authorOf(env, options.asOwner))));
120
+ keys
121
+ .command("remove")
122
+ .description("unmark a key document; the note, file or message stays")
123
+ .argument("<project>", "id, key or project:<id>")
124
+ .argument("<reference>", "the key document's note:, document: or msg: reference")
125
+ .option("--json", "print JSON")
126
+ .action((project, reference, options) => owned(options, async (store) => unmarkKey(store, await projectOf(store, project), reference)));
127
+ keys
128
+ .command("list")
129
+ .description("a project's key documents: why, who marked each and whether it is still there")
130
+ .argument("<project>", "id, key or project:<id>")
131
+ .option("--json", "print JSON")
132
+ .action((project, options) => owned(options, async (store) => ({ items: await keyDocuments(store, await projectOf(store, project)) })));
93
133
  const relations = program
94
134
  .command("relationships")
95
- .description("Explicit relations between people, organizations and projects; this never links identities");
96
- relations
135
+ .description("relations between people, organizations and projects; never between identities");
136
+ byOption(relations
97
137
  .command("add")
98
- .description("State that a person, organization or project belongs to or relates to another")
99
- .argument("<from>")
100
- .argument("<to>")
138
+ .description("state that a person, organization or project belongs to or relates to another; an agent's waits for you to confirm it")
139
+ .summary("state that a person, organization or project belongs or relates to another"))
140
+ .argument("<from>", "the person:, organization: or project: that belongs or relates")
141
+ .argument("<to>", "the person:, organization: or project: it belongs or relates to")
101
142
  .option("--json", "print JSON")
102
143
  .option("--kind <kind>", "member-of or related-to", "member-of")
103
- .option("--role <role>")
104
- .option("--evidence <text>")
105
- .action((from, to, options) => owned(options, (store) => store.knowledge.relate(null, {
106
- from,
107
- to,
108
- kind: options.kind,
109
- ...(options.role === undefined ? {} : { role: options.role }),
110
- ...(options.evidence === undefined ? {} : { evidence: options.evidence }),
111
- })));
144
+ .option("--role <role>", "the role it has there, in a few words, such as cto")
145
+ .option("--reason <text>", "why you think so, in a sentence")
146
+ .action((from, to, options) => {
147
+ const author = authorOf(env, options.asOwner);
148
+ return owned(options, (store) => store.knowledge.relate(null, {
149
+ from,
150
+ to,
151
+ kind: options.kind,
152
+ ...(author === "owner" ? {} : { confirmed: false, provenance: `agent:${author.bot}` }),
153
+ ...(options.role === undefined ? {} : { role: options.role }),
154
+ ...(options.reason === undefined ? {} : { evidence: options.reason }),
155
+ }));
156
+ });
112
157
  relations
113
158
  .command("list")
114
- .description("Relationships, all or those of one reference")
115
- .option("--reference <reference>")
159
+ .description("relationships, all or those of one reference")
160
+ .option("--reference <reference>", "only those of this person:, organization: or project:")
116
161
  .option("--json", "print JSON")
117
162
  .action((options) => owned(options, (store) => store.knowledge.relations(null, options.reference)));
118
163
  relations
119
164
  .command("remove")
120
- .description("Remove a relationship")
121
- .argument("<id>")
165
+ .description("remove a relationship")
166
+ .argument("<id>", "the relationship's id, as relationships list gives it")
122
167
  .option("--json", "print JSON")
123
168
  .action((id, options) => owned(options, (store) => store.knowledge.removeRelation(null, id)));
124
169
  relations
125
170
  .command("confirm")
126
- .description("Accept a suggested relationship")
127
- .argument("<id>")
171
+ .description("confirm a suggested relationship")
172
+ .argument("<id>", "the relationship's id, as relationships list gives it")
128
173
  .option("--json", "print JSON")
129
174
  .action((id, options) => owned(options, (store) => store.knowledge.confirmRelation(null, id)));
130
175
  accountOptions(relations
131
176
  .command("suggest")
132
- .description("Store weak shared-domain suggestions for direct email contacts; confirmation is explicit"))
177
+ .description("suggest relationships between email contacts of one domain; you confirm each"))
133
178
  .option("--limit <n>", "most suggestions, at most 100", positive, 20)
134
179
  .action((options) => execute(options, async (store, key) => {
135
180
  if (key.provider !== "email" || options.limit > 100)
@@ -172,13 +217,13 @@ export const knowledgeCommands = (program, streams, env) => {
172
217
  }));
173
218
  const reminders = program
174
219
  .command("reminders")
175
- .description("Durable local reminders; poll leases a delivery and ack confirms it");
176
- accountOptions(reminders.command("schedule").description("Schedule a reminder for an open task").argument("<task>"))
177
- .requiredOption("--at <timestamp>", "ISO timestamp with UTC offset")
220
+ .description("durable local reminders; poll hands one out and ack confirms it was shown");
221
+ accountOptions(reminders.command("add").description("add a reminder for an open task").argument("<task>", "the task's id"))
222
+ .requiredOption("--at-time <time>", "when to remind: an ISO 8601 time with its UTC offset")
178
223
  .option("--timezone <zone>", "IANA timezone", "UTC")
179
- .action((task, options) => execute(options, (store, key) => store.knowledge.schedule(key, task, options.at, options.timezone)));
180
- accountOptions(reminders.command("list").description("Pending reminders of one account")).action((options) => execute(options, (store, key) => store.knowledge.reminders(key)));
181
- accountOptions(reminders.command("poll").description("Hand out due reminders, each with a receipt to acknowledge"))
224
+ .action((task, options) => execute(options, (store, key) => store.knowledge.schedule(key, task, options.atTime, options.timezone)));
225
+ accountOptions(reminders.command("list").description("pending reminders of one account")).action((options) => execute(options, (store, key) => store.knowledge.reminders(key)));
226
+ accountOptions(reminders.command("poll").description("hand out due reminders, each with a receipt to acknowledge"))
182
227
  .option("--limit <n>", "most due reminders, at most 500", positive, 100)
183
228
  .action((options) => execute(options, async (store, key) => (await store.knowledge.claimReminders(key, { limit: options.limit })).map((reminder) => ({
184
229
  ...reminder,
@@ -187,13 +232,13 @@ export const knowledgeCommands = (program, streams, env) => {
187
232
  }))));
188
233
  accountOptions(reminders
189
234
  .command("ack")
190
- .description("Confirm that a handed-out reminder was shown")
191
- .argument("<id>")
192
- .argument("<receipt>")).action((id, receipt, options) => execute(options, (store, key) => store.knowledge.acknowledgeReminder(key, id, receipt)));
193
- accountOptions(reminders.command("cancel").description("Cancel a reminder").argument("<id>")).action((id, options) => execute(options, (store, key) => store.knowledge.cancelReminder(key, id)));
194
- accountOptions(reminders.command("snooze").description("Move a reminder to a later time").argument("<id>"))
195
- .requiredOption("--at <timestamp>")
196
- .requiredOption("--revision <n>", "current revision", positive)
197
- .action((id, options) => execute(options, (store, key) => store.knowledge.snoozeReminder(key, id, options.at, options.revision)));
235
+ .description("confirm that a handed-out reminder was shown")
236
+ .argument("<id>", "the reminder's id")
237
+ .argument("<receipt>", "the receipt reminders poll handed out with it")).action((id, receipt, options) => execute(options, (store, key) => store.knowledge.acknowledgeReminder(key, id, receipt)));
238
+ accountOptions(reminders.command("cancel").description("cancel a reminder").argument("<id>", "the reminder's id")).action((id, options) => execute(options, (store, key) => store.knowledge.cancelReminder(key, id)));
239
+ accountOptions(reminders.command("update").description("move a reminder to another time").argument("<id>", "the reminder's id"))
240
+ .requiredOption("--at-time <time>", "the new time: an ISO 8601 time with its UTC offset")
241
+ .requiredOption("--revision <n>", "the reminder's current revision, as reminders list gives it", positive)
242
+ .action((id, options) => execute(options, (store, key) => store.knowledge.snoozeReminder(key, id, options.atTime, options.revision)));
198
243
  };
199
244
  //# sourceMappingURL=command.js.map