@wirecat/cli-memo 0.14.1 → 0.16.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 (58) hide show
  1. package/README.md +63 -9
  2. package/dist/knowledge/command.d.ts.map +1 -1
  3. package/dist/knowledge/command.js +3 -1
  4. package/dist/knowledge/command.js.map +1 -1
  5. package/dist/knowledge/meeting-projects-command.d.ts +4 -0
  6. package/dist/knowledge/meeting-projects-command.d.ts.map +1 -0
  7. package/dist/knowledge/meeting-projects-command.js +44 -0
  8. package/dist/knowledge/meeting-projects-command.js.map +1 -0
  9. package/dist/mail/command.d.ts.map +1 -1
  10. package/dist/mail/command.js +48 -36
  11. package/dist/mail/command.js.map +1 -1
  12. package/dist/mcp/server.d.ts +1 -10
  13. package/dist/mcp/server.d.ts.map +1 -1
  14. package/dist/mcp/server.js +6 -1
  15. package/dist/mcp/server.js.map +1 -1
  16. package/dist/mcp/task-relations.d.ts +6 -0
  17. package/dist/mcp/task-relations.d.ts.map +1 -0
  18. package/dist/mcp/task-relations.js +30 -0
  19. package/dist/mcp/task-relations.js.map +1 -0
  20. package/dist/mcp/tool.d.ts +17 -0
  21. package/dist/mcp/tool.d.ts.map +1 -0
  22. package/dist/mcp/tool.js +2 -0
  23. package/dist/mcp/tool.js.map +1 -0
  24. package/dist/mcp/vocabulary.d.ts +6 -0
  25. package/dist/mcp/vocabulary.d.ts.map +1 -0
  26. package/dist/mcp/vocabulary.js +38 -0
  27. package/dist/mcp/vocabulary.js.map +1 -0
  28. package/dist/program.d.ts.map +1 -1
  29. package/dist/program.js +2 -0
  30. package/dist/program.js.map +1 -1
  31. package/dist/run/import.d.ts.map +1 -1
  32. package/dist/run/import.js +48 -52
  33. package/dist/run/import.js.map +1 -1
  34. package/dist/run/lock.d.ts +3 -0
  35. package/dist/run/lock.d.ts.map +1 -0
  36. package/dist/run/lock.js +17 -0
  37. package/dist/run/lock.js.map +1 -0
  38. package/dist/search/command.d.ts.map +1 -1
  39. package/dist/search/command.js +8 -4
  40. package/dist/search/command.js.map +1 -1
  41. package/dist/tasks/command.d.ts.map +1 -1
  42. package/dist/tasks/command.js +10 -2
  43. package/dist/tasks/command.js.map +1 -1
  44. package/dist/tasks/relations-command.d.ts +4 -0
  45. package/dist/tasks/relations-command.d.ts.map +1 -0
  46. package/dist/tasks/relations-command.js +51 -0
  47. package/dist/tasks/relations-command.js.map +1 -0
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.js +1 -1
  50. package/dist/vocabulary/command.d.ts +4 -0
  51. package/dist/vocabulary/command.d.ts.map +1 -0
  52. package/dist/vocabulary/command.js +74 -0
  53. package/dist/vocabulary/command.js.map +1 -0
  54. package/dist/vocabulary/project.d.ts +3 -0
  55. package/dist/vocabulary/project.d.ts.map +1 -0
  56. package/dist/vocabulary/project.js +17 -0
  57. package/dist/vocabulary/project.js.map +1 -0
  58. package/package.json +2 -2
@@ -0,0 +1,74 @@
1
+ import { CliError, createRenderer } from "@wirecat/cli-core";
2
+ import { openStore, } from "@wirecat/cli-messaging/store";
3
+ import { oneOf, positive } from "../options.js";
4
+ const kinds = ["project", "tag", "topic"];
5
+ const targetOf = (reference) => {
6
+ const match = reference.match(/^(project|tag|topic):([1-9]\d*)$/);
7
+ if (!match)
8
+ throw new CliError("validation_error", "choose project:<id>, tag:<id> or topic:<id> from vocabulary list");
9
+ return { kind: match[1], id: match[2] };
10
+ };
11
+ export const vocabularyCommand = (program, streams, env) => {
12
+ const vocabulary = program
13
+ .command("vocabulary")
14
+ .description("Canonical projects, tags and topics with explicit aliases");
15
+ const execute = async (options, work) => {
16
+ const store = await openStore({ env });
17
+ try {
18
+ const result = await work(store);
19
+ if (options.json)
20
+ createRenderer({ format: "json", color: false, streams }).result(result);
21
+ else
22
+ streams.data(`${JSON.stringify(result, null, 2)}\n`);
23
+ }
24
+ finally {
25
+ await store.close();
26
+ }
27
+ };
28
+ const readOptions = (command) => command
29
+ .option("--kind <kind>", "project, tag or topic", oneOf(kinds))
30
+ .option("--scope <scope>", "personal or work projects", oneOf(["personal", "work"]))
31
+ .option("--max-entries <n>", "catalog input budget, not a page size", positive)
32
+ .option("--max-read-bytes <n>", "catalog input byte budget", positive)
33
+ .option("--json", "print JSON");
34
+ const catalogOptions = (options) => ({
35
+ ...(options.kind === undefined ? {} : { kind: options.kind }),
36
+ ...(options.scope === undefined ? {} : { scope: options.scope }),
37
+ ...(options.maxEntries === undefined ? {} : { maxEntries: options.maxEntries }),
38
+ ...(options.maxReadBytes === undefined ? {} : { maxReadBytes: options.maxReadBytes }),
39
+ });
40
+ readOptions(vocabulary.command("list").description("List canonical IDs, aliases, usage counts and a preview fingerprint")).action((options) => execute(options, (store) => store.knowledge.vocabulary(catalogOptions(options))));
41
+ readOptions(vocabulary
42
+ .command("resolve")
43
+ .argument("<name>")
44
+ .description("Resolve an exact name or alias; ambiguity is reported")).action((name, options) => execute(options, (store) => store.knowledge.resolveVocabulary(name, catalogOptions(options))));
45
+ vocabulary
46
+ .command("preflight")
47
+ .argument("<name>")
48
+ .description("Review an existing label or likely lexical duplicates before creation")
49
+ .option("--kind <kind>", "tag or topic", oneOf(["tag", "topic"]))
50
+ .option("--json", "print JSON")
51
+ .action((name, options) => execute(options, (store) => store.knowledge.tagPreflight(name, { ...(options.kind === undefined ? {} : { kind: options.kind }) })));
52
+ const aliases = vocabulary.command("aliases").description("Owner-reviewed aliases on stable canonical IDs");
53
+ aliases
54
+ .command("add")
55
+ .argument("<reference>")
56
+ .argument("<name>")
57
+ .requiredOption("--expected <fingerprint>", "the current vocabulary preview fingerprint")
58
+ .option("--json", "print JSON")
59
+ .action((reference, name, options) => {
60
+ const target = targetOf(reference);
61
+ return execute(options, (store) => store.knowledge.addVocabularyAlias(target, name, { by: "owner", expectedFingerprint: options.expected }));
62
+ });
63
+ aliases
64
+ .command("remove")
65
+ .argument("<reference>")
66
+ .argument("<alias-id>")
67
+ .requiredOption("--expected <fingerprint>", "the current vocabulary preview fingerprint")
68
+ .option("--json", "print JSON")
69
+ .action((reference, aliasId, options) => {
70
+ const target = targetOf(reference);
71
+ return execute(options, (store) => store.knowledge.removeVocabularyAlias(target, aliasId, { by: "owner", expectedFingerprint: options.expected }));
72
+ });
73
+ };
74
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/vocabulary/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { MessageStore } from "@wirecat/cli-messaging/store";
2
+ export declare const canonicalProject: (store: MessageStore, reference: string) => Promise<string>;
3
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/vocabulary/project.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEhE,eAAO,MAAM,gBAAgB,UAAiB,YAAY,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAiB7F,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { CliError } from "@wirecat/cli-core";
2
+ export const canonicalProject = async (store, reference) => {
3
+ if (/^project:[1-9]\d*$/.test(reference)) {
4
+ const catalog = await store.knowledge.vocabulary({ kind: "project" });
5
+ if (!catalog.entries.some((entry) => entry.id === reference.slice(8)))
6
+ throw new CliError("not_found", "the owner project is unavailable");
7
+ return reference;
8
+ }
9
+ const found = await store.knowledge.resolveVocabulary(reference, { kind: "project" });
10
+ if (found.matches.length !== 1)
11
+ throw new CliError(found.matches.length ? "validation_error" : "not_found", "choose one canonical project reference from vocabulary resolve", { candidates: found.matches.map((entry) => ({ id: entry.id, key: entry.key, name: entry.name })) });
12
+ const entry = found.matches[0];
13
+ if (!entry)
14
+ throw new CliError("not_found", "the owner project is unavailable");
15
+ return `project:${entry.id}`;
16
+ };
17
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/vocabulary/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAAmB,EAAE,SAAiB,EAAmB,EAAE;IAChG,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QACrE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAA;QACrE,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;IACrF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM,IAAI,QAAQ,CAChB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,EACvD,gEAAgE,EAChE,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CACnG,CAAA;IACH,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC9B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAA;IAC/E,OAAO,WAAW,KAAK,CAAC,EAAE,EAAE,CAAA;AAC9B,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirecat/cli-memo",
3
- "version": "0.14.1",
3
+ "version": "0.16.0",
4
4
  "description": "Context about people across messengers, notes and mail, from a local store",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Viacheslav Ptsarev",
@@ -42,7 +42,7 @@
42
42
  "@modelcontextprotocol/server": "2.1.0",
43
43
  "@valibot/to-json-schema": "1.8.0",
44
44
  "@wirecat/cli-core": "0.20.0",
45
- "@wirecat/cli-messaging": "0.241.0",
45
+ "@wirecat/cli-messaging": "0.242.0",
46
46
  "commander": "15.0.0",
47
47
  "valibot": "1.5.0",
48
48
  "yaml": "2.9.1"