@wirecat/cli-memo 0.0.0 → 0.5.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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +315 -0
  3. package/dist/answers/command.d.ts +35 -0
  4. package/dist/answers/command.d.ts.map +1 -0
  5. package/dist/answers/command.js +117 -0
  6. package/dist/answers/command.js.map +1 -0
  7. package/dist/app.d.ts +9 -0
  8. package/dist/app.d.ts.map +1 -0
  9. package/dist/app.js +10 -0
  10. package/dist/app.js.map +1 -0
  11. package/dist/bin/memo.d.ts +3 -0
  12. package/dist/bin/memo.d.ts.map +1 -0
  13. package/dist/bin/memo.js +14 -0
  14. package/dist/bin/memo.js.map +1 -0
  15. package/dist/config.d.ts +39 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +40 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/context/command.d.ts +6 -0
  20. package/dist/context/command.d.ts.map +1 -0
  21. package/dist/context/command.js +73 -0
  22. package/dist/context/command.js.map +1 -0
  23. package/dist/context/context.d.ts +28 -0
  24. package/dist/context/context.d.ts.map +1 -0
  25. package/dist/context/context.js +49 -0
  26. package/dist/context/context.js.map +1 -0
  27. package/dist/knowledge/command.d.ts +4 -0
  28. package/dist/knowledge/command.d.ts.map +1 -0
  29. package/dist/knowledge/command.js +158 -0
  30. package/dist/knowledge/command.js.map +1 -0
  31. package/dist/mail/command.d.ts +4 -0
  32. package/dist/mail/command.d.ts.map +1 -0
  33. package/dist/mail/command.js +61 -0
  34. package/dist/mail/command.js.map +1 -0
  35. package/dist/mail/gmail.d.ts +18 -0
  36. package/dist/mail/gmail.d.ts.map +1 -0
  37. package/dist/mail/gmail.js +103 -0
  38. package/dist/mail/gmail.js.map +1 -0
  39. package/dist/mail/himalaya.d.ts +4 -0
  40. package/dist/mail/himalaya.d.ts.map +1 -0
  41. package/dist/mail/himalaya.js +13 -0
  42. package/dist/mail/himalaya.js.map +1 -0
  43. package/dist/mail/import.d.ts +53 -0
  44. package/dist/mail/import.d.ts.map +1 -0
  45. package/dist/mail/import.js +170 -0
  46. package/dist/mail/import.js.map +1 -0
  47. package/dist/mail/parse.d.ts +21 -0
  48. package/dist/mail/parse.d.ts.map +1 -0
  49. package/dist/mail/parse.js +86 -0
  50. package/dist/mail/parse.js.map +1 -0
  51. package/dist/notes/about.d.ts +31 -0
  52. package/dist/notes/about.d.ts.map +1 -0
  53. package/dist/notes/about.js +69 -0
  54. package/dist/notes/about.js.map +1 -0
  55. package/dist/notes/bound.d.ts +24 -0
  56. package/dist/notes/bound.d.ts.map +1 -0
  57. package/dist/notes/bound.js +57 -0
  58. package/dist/notes/bound.js.map +1 -0
  59. package/dist/notes/command.d.ts +4 -0
  60. package/dist/notes/command.d.ts.map +1 -0
  61. package/dist/notes/command.js +222 -0
  62. package/dist/notes/command.js.map +1 -0
  63. package/dist/notes/dialects/common.d.ts +18 -0
  64. package/dist/notes/dialects/common.d.ts.map +1 -0
  65. package/dist/notes/dialects/common.js +79 -0
  66. package/dist/notes/dialects/common.js.map +1 -0
  67. package/dist/notes/dialects/index.d.ts +5 -0
  68. package/dist/notes/dialects/index.d.ts.map +1 -0
  69. package/dist/notes/dialects/index.js +6 -0
  70. package/dist/notes/dialects/index.js.map +1 -0
  71. package/dist/notes/dialects/markdown.d.ts +7 -0
  72. package/dist/notes/dialects/markdown.d.ts.map +1 -0
  73. package/dist/notes/dialects/markdown.js +51 -0
  74. package/dist/notes/dialects/markdown.js.map +1 -0
  75. package/dist/notes/dialects/obsidian.d.ts +6 -0
  76. package/dist/notes/dialects/obsidian.d.ts.map +1 -0
  77. package/dist/notes/dialects/obsidian.js +33 -0
  78. package/dist/notes/dialects/obsidian.js.map +1 -0
  79. package/dist/notes/dialects/types.d.ts +39 -0
  80. package/dist/notes/dialects/types.d.ts.map +1 -0
  81. package/dist/notes/dialects/types.js +2 -0
  82. package/dist/notes/dialects/types.js.map +1 -0
  83. package/dist/notes/embed.d.ts +51 -0
  84. package/dist/notes/embed.d.ts.map +1 -0
  85. package/dist/notes/embed.js +109 -0
  86. package/dist/notes/embed.js.map +1 -0
  87. package/dist/notes/export.d.ts +27 -0
  88. package/dist/notes/export.d.ts.map +1 -0
  89. package/dist/notes/export.js +76 -0
  90. package/dist/notes/export.js.map +1 -0
  91. package/dist/notes/files.d.ts +14 -0
  92. package/dist/notes/files.d.ts.map +1 -0
  93. package/dist/notes/files.js +77 -0
  94. package/dist/notes/files.js.map +1 -0
  95. package/dist/notes/folders-command.d.ts +4 -0
  96. package/dist/notes/folders-command.d.ts.map +1 -0
  97. package/dist/notes/folders-command.js +113 -0
  98. package/dist/notes/folders-command.js.map +1 -0
  99. package/dist/notes/folders.d.ts +27 -0
  100. package/dist/notes/folders.d.ts.map +1 -0
  101. package/dist/notes/folders.js +46 -0
  102. package/dist/notes/folders.js.map +1 -0
  103. package/dist/notes/import.d.ts +33 -0
  104. package/dist/notes/import.d.ts.map +1 -0
  105. package/dist/notes/import.js +183 -0
  106. package/dist/notes/import.js.map +1 -0
  107. package/dist/notes/internal.d.ts +17 -0
  108. package/dist/notes/internal.d.ts.map +1 -0
  109. package/dist/notes/internal.js +47 -0
  110. package/dist/notes/internal.js.map +1 -0
  111. package/dist/notes/links.d.ts +18 -0
  112. package/dist/notes/links.d.ts.map +1 -0
  113. package/dist/notes/links.js +44 -0
  114. package/dist/notes/links.js.map +1 -0
  115. package/dist/notes/renames.d.ts +11 -0
  116. package/dist/notes/renames.d.ts.map +1 -0
  117. package/dist/notes/renames.js +24 -0
  118. package/dist/notes/renames.js.map +1 -0
  119. package/dist/notes/search.d.ts +5 -0
  120. package/dist/notes/search.d.ts.map +1 -0
  121. package/dist/notes/search.js +20 -0
  122. package/dist/notes/search.js.map +1 -0
  123. package/dist/notes/state.d.ts +14 -0
  124. package/dist/notes/state.d.ts.map +1 -0
  125. package/dist/notes/state.js +21 -0
  126. package/dist/notes/state.js.map +1 -0
  127. package/dist/options.d.ts +4 -0
  128. package/dist/options.d.ts.map +1 -0
  129. package/dist/options.js +12 -0
  130. package/dist/options.js.map +1 -0
  131. package/dist/people/command.d.ts +5 -0
  132. package/dist/people/command.d.ts.map +1 -0
  133. package/dist/people/command.js +57 -0
  134. package/dist/people/command.js.map +1 -0
  135. package/dist/people/identity.d.ts +4 -0
  136. package/dist/people/identity.d.ts.map +1 -0
  137. package/dist/people/identity.js +13 -0
  138. package/dist/people/identity.js.map +1 -0
  139. package/dist/people/notes-map.d.ts +13 -0
  140. package/dist/people/notes-map.d.ts.map +1 -0
  141. package/dist/people/notes-map.js +49 -0
  142. package/dist/people/notes-map.js.map +1 -0
  143. package/dist/people/subject.d.ts +8 -0
  144. package/dist/people/subject.d.ts.map +1 -0
  145. package/dist/people/subject.js +19 -0
  146. package/dist/people/subject.js.map +1 -0
  147. package/dist/program.d.ts +7 -0
  148. package/dist/program.d.ts.map +1 -0
  149. package/dist/program.js +34 -0
  150. package/dist/program.js.map +1 -0
  151. package/dist/run/auto.d.ts +20 -0
  152. package/dist/run/auto.d.ts.map +1 -0
  153. package/dist/run/auto.js +139 -0
  154. package/dist/run/auto.js.map +1 -0
  155. package/dist/run/import.d.ts +18 -0
  156. package/dist/run/import.d.ts.map +1 -0
  157. package/dist/run/import.js +114 -0
  158. package/dist/run/import.js.map +1 -0
  159. package/dist/search/command.d.ts +38 -0
  160. package/dist/search/command.d.ts.map +1 -0
  161. package/dist/search/command.js +269 -0
  162. package/dist/search/command.js.map +1 -0
  163. package/dist/store/gone.d.ts +17 -0
  164. package/dist/store/gone.d.ts.map +1 -0
  165. package/dist/store/gone.js +52 -0
  166. package/dist/store/gone.js.map +1 -0
  167. package/dist/store/scope.d.ts +19 -0
  168. package/dist/store/scope.d.ts.map +1 -0
  169. package/dist/store/scope.js +34 -0
  170. package/dist/store/scope.js.map +1 -0
  171. package/dist/store/source-target.d.ts +18 -0
  172. package/dist/store/source-target.d.ts.map +1 -0
  173. package/dist/store/source-target.js +28 -0
  174. package/dist/store/source-target.js.map +1 -0
  175. package/dist/tags/command.d.ts +4 -0
  176. package/dist/tags/command.d.ts.map +1 -0
  177. package/dist/tags/command.js +166 -0
  178. package/dist/tags/command.js.map +1 -0
  179. package/dist/tasks/command.d.ts +4 -0
  180. package/dist/tasks/command.d.ts.map +1 -0
  181. package/dist/tasks/command.js +83 -0
  182. package/dist/tasks/command.js.map +1 -0
  183. package/dist/tasks/context.d.ts +16 -0
  184. package/dist/tasks/context.d.ts.map +1 -0
  185. package/dist/tasks/context.js +68 -0
  186. package/dist/tasks/context.js.map +1 -0
  187. package/dist/version.d.ts +2 -0
  188. package/dist/version.d.ts.map +1 -0
  189. package/dist/version.js +2 -0
  190. package/dist/version.js.map +1 -0
  191. package/package.json +47 -2
@@ -0,0 +1,166 @@
1
+ import { CliError, createRenderer } from "@wirecat/cli-core";
2
+ import { normalizeTag } from "@wirecat/cli-messaging";
3
+ import { openStore } from "@wirecat/cli-messaging/store";
4
+ import { InvalidArgumentError } from "commander";
5
+ import { positive } from "../options.js";
6
+ import { selectTarget } from "../store/scope.js";
7
+ import { sourceTarget } from "../store/source-target.js";
8
+ const OWNED = ["note", "person", "task", "entity", "folder"];
9
+ const typeOf = (value) => {
10
+ if (!["chat", "message", "contact", "note", "person", "task", "entity", "folder"].includes(value))
11
+ throw new InvalidArgumentError("choose chat, message, contact, note, person, task, entity or folder");
12
+ return value;
13
+ };
14
+ const reference = (key, chat) => `${key.provider}/${JSON.stringify(key.account)}/${JSON.stringify(chat)}`;
15
+ const targetOptions = (command) => command
16
+ .argument("<tag...>", "one or more tags: 1–32 letters a–z, digits or hyphens; case is ignored")
17
+ .option("--message <locator>", "a stored email or message's full msg: locator")
18
+ .option("--note <id>", "a note: note:<id> or its id")
19
+ .option("--chat <id>", "a stored mail thread or chat's exact id; requires --provider and --account")
20
+ .option("--provider <provider>", "the chat's provider, such as email")
21
+ .option("--account <account>", "the chat's account, such as a mailbox address")
22
+ .option("--task <id>", "label a task")
23
+ .option("--contact <id>", "label a contact identity, with provider/account")
24
+ .option("--person <uid>", "label a unified person")
25
+ .option("--entity <id>", "label an organization, family or project")
26
+ .option("--folder <id>", "label a notes folder, or with --path one subfolder: every note under it")
27
+ .option("--path <subfolder>", "the subfolder inside --folder")
28
+ .option("--json", "print JSON");
29
+ const listTags = async (store, options) => {
30
+ if (options.account !== undefined && options.provider === undefined)
31
+ throw new CliError("validation_error", "--account requires --provider");
32
+ const keys = (await store.accounts()).filter((key) => (options.provider === undefined || key.provider === options.provider) &&
33
+ (options.account === undefined || key.account === options.account));
34
+ if (keys.length === 0 && (options.provider !== undefined || options.account !== undefined))
35
+ throw new CliError("not_found", "the store holds no matching account");
36
+ const items = [];
37
+ for (const key of keys) {
38
+ const types = options.type === undefined
39
+ ? ["chat", "message", "contact"]
40
+ : options.type === "chat" || options.type === "message" || options.type === "contact"
41
+ ? [options.type]
42
+ : [];
43
+ for (const type of types) {
44
+ const found = await store.tags(key, { type, ...(options.tag === undefined ? {} : { tag: options.tag }) });
45
+ for (const row of found) {
46
+ if (row.type === "contact" &&
47
+ !(await store.knowledge.tags(key, { type: "contact", id: row.personId })).includes(row.tag))
48
+ continue;
49
+ if (row.type === "message" &&
50
+ (await store.message(key, row.messageId, { chatId: row.chatId })) === undefined)
51
+ continue;
52
+ items.push({ ...key, ...row });
53
+ if (items.length > options.limit)
54
+ return { items: items.slice(0, options.limit), hasMore: true };
55
+ }
56
+ }
57
+ }
58
+ return { items, hasMore: false };
59
+ };
60
+ export const tagsCommand = (program, streams, env) => {
61
+ const tags = program.command("tags").description("Your labels on stored sources and folders or threads");
62
+ const print = (json, value, text) => {
63
+ if (json)
64
+ createRenderer({ format: "json", color: false, streams }).result(value);
65
+ else
66
+ streams.data(`${text}\n`);
67
+ };
68
+ const mutate = async (operation, given, options) => {
69
+ const target = options.note !== undefined
70
+ ? { type: "note", id: options.note.replace(/^note:/, "") }
71
+ : options.person !== undefined
72
+ ? { type: "person", id: options.person.replace(/^person:/, "") }
73
+ : options.entity !== undefined
74
+ ? { type: "entity", id: options.entity.replace(/^entity:/, "") }
75
+ : options.task !== undefined
76
+ ? { type: "task", id: options.task.replace(/^task:/, "") }
77
+ : options.folder !== undefined
78
+ ? { type: "folder", id: options.folder, path: options.path ?? null }
79
+ : undefined;
80
+ if (options.path !== undefined && options.folder === undefined)
81
+ throw new CliError("validation_error", "--path names a subfolder of --folder");
82
+ if (target !== undefined) {
83
+ const store = await openStore({ env });
84
+ try {
85
+ const changed = await (operation === "add" ? store.knowledge.addTags : store.knowledge.removeTags)(null, target, given);
86
+ print(options.json, { target, [operation === "add" ? "added" : "removed"]: changed }, `${operation}: ${changed.join(", ") || "no labels changed"}`);
87
+ }
88
+ finally {
89
+ await store.close();
90
+ }
91
+ return;
92
+ }
93
+ if (options.contact !== undefined) {
94
+ const store = await openStore({ env });
95
+ try {
96
+ const { key, target } = await selectTarget(store, options);
97
+ const changed = await (operation === "add" ? store.knowledge.addTags : store.knowledge.removeTags)(key, target, given);
98
+ print(options.json, { ...key, target, [operation === "add" ? "added" : "removed"]: changed }, `${operation}: ${changed.join(", ") || "no labels changed"}`);
99
+ }
100
+ finally {
101
+ await store.close();
102
+ }
103
+ return;
104
+ }
105
+ const selected = sourceTarget(options);
106
+ const labels = [...new Set(given.map(normalizeTag))];
107
+ const store = await openStore({ env });
108
+ try {
109
+ const changed = await (operation === "add" ? store.addTags : store.removeTags)(selected.key, selected.target, labels);
110
+ const target = { ...selected.target, ...(selected.locator === undefined ? {} : { locator: selected.locator }) };
111
+ const answer = {
112
+ ...selected.key,
113
+ target,
114
+ [operation === "add" ? "added" : "removed"]: changed,
115
+ unchanged: labels.filter((tag) => !changed.includes(tag)),
116
+ };
117
+ const name = selected.locator ?? reference(selected.key, selected.target.chatId);
118
+ print(options.json, answer, `${name}: ${changed.length ? `${operation}: ${changed.join(", ")}` : "no tags changed"}`);
119
+ }
120
+ finally {
121
+ await store.close();
122
+ }
123
+ };
124
+ for (const operation of ["add", "remove"])
125
+ targetOptions(tags
126
+ .command(operation)
127
+ .description(operation === "add" ? "Put labels on one source" : "Remove labels from one source")).action((given, options) => mutate(operation, given, options));
128
+ tags
129
+ .command("list")
130
+ .description("List source labels, optionally in one provider or account")
131
+ .option("--provider <provider>", "only this provider")
132
+ .option("--account <account>", "only this account; requires --provider")
133
+ .option("--tag <tag>", "only this tag", normalizeTag)
134
+ .option("--type <type>", "chat, message, contact, note, person, task, entity or folder", typeOf)
135
+ .option("--limit <n>", "most labels to show", positive, 100)
136
+ .option("--json", "print JSON")
137
+ .action(async (options) => {
138
+ const store = await openStore({ env });
139
+ try {
140
+ const answer = await listTags(store, options);
141
+ const owned = options.type === undefined || OWNED.includes(options.type)
142
+ ? await store.knowledge.labelled(null, {
143
+ ...(options.tag === undefined ? {} : { tag: options.tag }),
144
+ ...(options.type === undefined ? {} : { type: options.type }),
145
+ limit: Math.min(options.limit, 500),
146
+ })
147
+ : { items: [], hasMore: false };
148
+ const knowledge = owned.items;
149
+ answer.hasMore ||= owned.hasMore;
150
+ const lines = answer.items.map((row) => `${row.tag} ${row.type} ${row.locator ?? reference(row, row.chatId ?? row.personId ?? "")}`);
151
+ if (answer.hasMore)
152
+ lines.push("More labels match; raise --limit to see them.");
153
+ answer.hasMore ||= knowledge.length > options.limit;
154
+ print(options.json, { ...answer, knowledge: knowledge.slice(0, options.limit) }, [
155
+ ...lines,
156
+ ...knowledge
157
+ .slice(0, options.limit)
158
+ .map((item) => `${item.labels.map(({ tag, origin }) => (origin === "file" ? `${tag} (file)` : tag)).join(", ")} ${item.target.type} ${JSON.stringify(item.target)}`),
159
+ ].join("\n") || "No source tags.");
160
+ }
161
+ finally {
162
+ await store.close();
163
+ }
164
+ });
165
+ };
166
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/tags/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type Streams } from "@wirecat/cli-core";
2
+ import type { Command } from "commander";
3
+ export declare const tasksCommand: (program: Command, streams: Streams, env: NodeJS.ProcessEnv) => void;
4
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/tasks/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAI1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMxC,eAAO,MAAM,YAAY,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,SA+FtF,CAAA"}
@@ -0,0 +1,83 @@
1
+ import { CliError, createRenderer } from "@wirecat/cli-core";
2
+ import { parseLocator } from "@wirecat/cli-messaging";
3
+ import { closedStateOf, storeOnlyDeps, taskStateOf, tasksService, taskTypeOf } from "@wirecat/cli-messaging/services";
4
+ import { openStore } from "@wirecat/cli-messaging/store";
5
+ import { APP } from "../app.js";
6
+ import { accountOptions, positive } from "../options.js";
7
+ import { selectAccount } from "../store/scope.js";
8
+ import { taskPage } from "./context.js";
9
+ export const tasksCommand = (program, streams, env) => {
10
+ const group = program.command("tasks").description("Open work linked to stored messages, documents and emails");
11
+ const print = (json, answer) => json
12
+ ? createRenderer({ format: "json", color: false, streams }).result(answer)
13
+ : streams.data(`${JSON.stringify(answer, null, 2)}\n`);
14
+ accountOptions(group.command("add"))
15
+ .argument("<source>", "msg: source locator or note:<id>")
16
+ .option("--type <type>", "question, request, mention or promise", taskTypeOf, "request")
17
+ .action(async (source, options) => {
18
+ const store = await openStore({ env });
19
+ try {
20
+ const native = source.trim().startsWith("note:");
21
+ const parsed = native ? undefined : parseLocator(source);
22
+ if (parsed &&
23
+ ((options.provider && options.provider !== parsed.provider) ||
24
+ (options.account && options.account !== parsed.account)))
25
+ throw new CliError("validation_error", "locator and selected account disagree");
26
+ const key = parsed
27
+ ? { provider: parsed.provider, account: parsed.account }
28
+ : await selectAccount(store, options);
29
+ if (parsed &&
30
+ parsed.provider !== "notes" &&
31
+ (await store.message(key, parsed.message, { chatId: parsed.chat })) === undefined)
32
+ throw new CliError("not_found", "the task source is unavailable or deleted");
33
+ print(options.json, await tasksService(storeOnlyDeps(store, key, { app: APP, env })).add(source, options.type, "owner"));
34
+ }
35
+ finally {
36
+ await store.close();
37
+ }
38
+ });
39
+ accountOptions(group.command("list"))
40
+ .option("--state <state>", "open, done or dismissed", taskStateOf, "open")
41
+ .option("--limit <n>", "most tasks", positive, 100)
42
+ .action(async (options) => {
43
+ const store = await openStore({ env });
44
+ try {
45
+ const key = await selectAccount(store, options);
46
+ print(options.json, await taskPage(store, key, {
47
+ state: options.state,
48
+ limit: options.limit,
49
+ }));
50
+ }
51
+ finally {
52
+ await store.close();
53
+ }
54
+ });
55
+ accountOptions(group.command("close").argument("<id>"))
56
+ .option("--as <state>", "done or dismissed", closedStateOf, "done")
57
+ .option("--reason <text>", "why it is closed")
58
+ .action(async (id, options) => {
59
+ const store = await openStore({ env });
60
+ try {
61
+ const key = await selectAccount(store, options);
62
+ print(options.json, await tasksService(storeOnlyDeps(store, key, { app: APP, env })).close(id, {
63
+ as: options.as,
64
+ by: "owner",
65
+ ...(options.reason === undefined ? {} : { reason: options.reason }),
66
+ }));
67
+ }
68
+ finally {
69
+ await store.close();
70
+ }
71
+ });
72
+ accountOptions(group.command("assign").argument("<id>").argument("<person>", "explicit canonical person UID")).action(async (id, person, options) => {
73
+ const store = await openStore({ env });
74
+ try {
75
+ const key = await selectAccount(store, options);
76
+ print(options.json, await store.knowledge.relate(key, { from: `task:${id}`, to: `person:${person}`, kind: "assigned-to" }));
77
+ }
78
+ finally {
79
+ await store.close();
80
+ }
81
+ });
82
+ };
83
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/tasks/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAA;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,OAAgB,EAAE,GAAsB,EAAE,EAAE;IACzF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,2DAA2D,CAAC,CAAA;IAC/G,MAAM,KAAK,GAAG,CAAC,IAAyB,EAAE,MAAe,EAAE,EAAE,CAC3D,IAAI;QACF,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1E,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IAC1D,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACjC,QAAQ,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACxD,MAAM,CAAC,eAAe,EAAE,uCAAuC,EAAE,UAAU,EAAE,SAAS,CAAC;SACvF,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAA+E,EAAE,EAAE;QAChH,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAChD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YACxD,IACE,MAAM;gBACN,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC;oBACzD,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;gBAE1D,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;YACjF,MAAM,GAAG,GAAG,MAAM;gBAChB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;gBACxD,CAAC,CAAC,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YACvC,IACE,MAAM;gBACN,MAAM,CAAC,QAAQ,KAAK,OAAO;gBAC3B,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS;gBAEjF,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,2CAA2C,CAAC,CAAA;YAC9E,KAAK,CACH,OAAO,CAAC,IAAI,EACZ,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CACpG,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CAAC,CAAA;IACJ,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAClC,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,CAAC;SACzE,MAAM,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC;SAClD,MAAM,CACL,KAAK,EAAE,OAAgG,EAAE,EAAE;QACzG,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC/C,KAAK,CACH,OAAO,CAAC,IAAI,EACZ,MAAM,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;gBACzB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CACH,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CACF,CAAA;IACH,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACpD,MAAM,CAAC,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CACL,KAAK,EACH,EAAU,EACV,OAAiG,EACjG,EAAE;QACF,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC/C,KAAK,CACH,OAAO,CAAC,IAAI,EACZ,MAAM,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;gBACzE,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,EAAE,EAAE,OAAO;gBACX,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;aACpE,CAAC,CACH,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CACF,CAAA;IACH,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,MAAM,CACnH,KAAK,EAAE,EAAU,EAAE,MAAc,EAAE,OAA0C,EAAE,EAAE;QAC/E,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC/C,KAAK,CACH,OAAO,CAAC,IAAI,EACZ,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CACvG,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { type TaskView } from "@wirecat/cli-messaging/services";
2
+ import type { AccountKey, MessageStore, PersonRecord } from "@wirecat/cli-messaging/store";
3
+ export declare const taskPage: (store: MessageStore, key: AccountKey, options?: {
4
+ state?: "open" | "done" | "dismissed";
5
+ limit?: number;
6
+ offset?: number;
7
+ sources?: string[];
8
+ }) => Promise<{
9
+ items: TaskView[];
10
+ hasMore: boolean;
11
+ }>;
12
+ export declare const personTasks: (store: MessageStore, person: PersonRecord, accounts: AccountKey[], limit: number) => Promise<{
13
+ items: TaskView[];
14
+ hasMore: boolean;
15
+ }>;
16
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tasks/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,iCAAiC,CAAA;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE1F,eAAO,MAAM,QAAQ,UACZ,YAAY,OACd,UAAU,YACN;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,KACtG,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CASjD,CAAA;AAED,eAAO,MAAM,WAAW,UACf,YAAY,UACX,YAAY,YACV,UAAU,EAAE,SACf,MAAM,KACZ,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAsDjD,CAAA"}
@@ -0,0 +1,68 @@
1
+ import { parseLocator } from "@wirecat/cli-messaging";
2
+ import { taskView } from "@wirecat/cli-messaging/services";
3
+ export const taskPage = async (store, key, options = {}) => {
4
+ const page = await store.knowledge.taskIds(key, options);
5
+ const items = [];
6
+ for (const id of page.items) {
7
+ const task = await store.tasks.get(id);
8
+ if (!task)
9
+ continue;
10
+ items.push(await taskView(store, key, task));
11
+ }
12
+ return { items, hasMore: page.hasMore };
13
+ };
14
+ export const personTasks = async (store, person, accounts, limit) => {
15
+ const items = [];
16
+ let incomplete = false;
17
+ for (const key of accounts) {
18
+ const assigned = (await store.knowledge.relations(key, `person:${person.uid}`)).filter((relation) => relation.confirmed && relation.kind === "assigned-to" && relation.to === `person:${person.uid}`);
19
+ for (const relation of assigned) {
20
+ const task = await store.tasks.get(relation.from.slice("task:".length));
21
+ if (task?.state !== "open" || task.account !== `${key.provider}:${key.account}`)
22
+ continue;
23
+ items.push(await taskView(store, key, task));
24
+ }
25
+ const identities = person.identities.filter((identity) => identity.provider === key.provider && identity.accounts.includes(key.account));
26
+ const noteLinks = await store.notes.links({ to: `person:${person.uid}` });
27
+ const relatedNotes = new Set(noteLinks
28
+ .filter((link) => link.confirmed && link.kind === "about" && link.from.startsWith("note:"))
29
+ .map((link) => link.from));
30
+ const page = await taskPage(store, key, { state: "open", limit: 500 });
31
+ incomplete ||= page.hasMore;
32
+ for (const task of page.items) {
33
+ if (task.note && relatedNotes.has(`note:${task.note.id}`))
34
+ items.push(task);
35
+ }
36
+ if (!identities.length)
37
+ continue;
38
+ const ids = new Set(identities.map((identity) => identity.id));
39
+ const chats = (await store.chats(key, { limit: 500 })).items;
40
+ for (const task of page.items) {
41
+ let source;
42
+ try {
43
+ source = parseLocator(task.source);
44
+ }
45
+ catch {
46
+ continue;
47
+ }
48
+ if (source.provider !== key.provider || source.account !== key.account)
49
+ continue;
50
+ const message = await store.message(key, source.message, { chatId: source.chat });
51
+ const chat = chats.find((item) => item.id === source.chat);
52
+ const direct = chat?.kind === "dialog" &&
53
+ (ids.has(source.chat) || (await store.members(key, source.chat)).some((member) => ids.has(member.id)));
54
+ if (!direct && (!message?.senderId || !ids.has(message.senderId)))
55
+ continue;
56
+ items.push({
57
+ ...task,
58
+ message: message
59
+ ? { text: message.text.slice(0, 200), senderName: message.senderName, timestamp: message.timestamp }
60
+ : null,
61
+ });
62
+ }
63
+ }
64
+ items.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime() || a.id.localeCompare(b.id));
65
+ const unique = [...new Map(items.map((item) => [item.id, item])).values()];
66
+ return { items: unique.slice(0, limit), hasMore: unique.length > limit || incomplete };
67
+ };
68
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tasks/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const VERSION = "0.4.0";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const VERSION = "0.4.0";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA"}
package/package.json CHANGED
@@ -1,10 +1,55 @@
1
1
  {
2
2
  "name": "@wirecat/cli-memo",
3
- "version": "0.0.0",
4
- "description": "Placeholder: releases of @wirecat/cli-memo are published from CI",
3
+ "version": "0.5.0",
4
+ "description": "Context about people across messengers, notes and mail, from a local store",
5
5
  "license": "MIT",
6
+ "author": "Viacheslav Ptsarev",
6
7
  "repository": {
7
8
  "type": "git",
8
9
  "url": "git+https://github.com/WireCatLabs/cli-memo.git"
10
+ },
11
+ "type": "module",
12
+ "engines": {
13
+ "node": "^22.16.0 || >=24"
14
+ },
15
+ "packageManager": "pnpm@11.20.0",
16
+ "bin": {
17
+ "memo": "dist/bin/memo.js"
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc --build",
26
+ "typecheck": "tsc --build --force --emitDeclarationOnly && tsc -p tsconfig.test.json",
27
+ "lint": "biome check .",
28
+ "lint:fix": "biome check --write .",
29
+ "test": "vitest run",
30
+ "test:watch": "vitest",
31
+ "test:coverage": "vitest run --coverage",
32
+ "release:check": "pnpm lint && pnpm typecheck && pnpm test && pnpm build && pnpm secrets:scan",
33
+ "prepare": "lefthook install || true",
34
+ "secrets:scan": "gitleaks git --no-banner --redact .",
35
+ "prepublishOnly": "pnpm build"
36
+ },
37
+ "dependencies": {
38
+ "@wirecat/cli-core": "0.18.1",
39
+ "@wirecat/cli-messaging": "0.215.0",
40
+ "commander": "15.0.0",
41
+ "valibot": "1.5.0",
42
+ "yaml": "2.9.1"
43
+ },
44
+ "devDependencies": {
45
+ "@biomejs/biome": "^2.5.14",
46
+ "@types/node": "^22.20.4",
47
+ "@vitest/coverage-v8": "5.0.3",
48
+ "lefthook": "^2.1.14",
49
+ "typescript": "^7.0.2",
50
+ "vitest": "^5.0.2"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
9
54
  }
10
55
  }