@wirecat/cli-core 0.294.0 → 0.296.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 (167) hide show
  1. package/README.md +1 -0
  2. package/dist/cli/bot/mcp.js +1 -1
  3. package/dist/cli/bot/mcp.js.map +1 -1
  4. package/dist/cli/bot/watch.js +1 -1
  5. package/dist/cli/bot/watch.js.map +1 -1
  6. package/dist/cli/messenger/backfill-command.js +1 -1
  7. package/dist/cli/messenger/backfill-command.js.map +1 -1
  8. package/dist/cli/messenger/mcp-command.js +1 -1
  9. package/dist/cli/messenger/mcp-command.js.map +1 -1
  10. package/dist/cli/messenger/serve-command.js +1 -1
  11. package/dist/cli/messenger/serve-command.js.map +1 -1
  12. package/dist/cli/messenger/store-maintenance-command.d.ts +1 -1
  13. package/dist/cli/messenger/tasks-command.d.ts.map +1 -1
  14. package/dist/cli/messenger/tasks-command.js +75 -13
  15. package/dist/cli/messenger/tasks-command.js.map +1 -1
  16. package/dist/cli/messenger/watch-command.js +1 -1
  17. package/dist/cli/messenger/watch-command.js.map +1 -1
  18. package/dist/cli/program.d.ts.map +1 -1
  19. package/dist/cli/program.js +4 -5
  20. package/dist/cli/program.js.map +1 -1
  21. package/dist/cli/store-settings.d.ts +13 -0
  22. package/dist/cli/store-settings.d.ts.map +1 -1
  23. package/dist/cli/store-settings.js +76 -8
  24. package/dist/cli/store-settings.js.map +1 -1
  25. package/dist/documents/catalog.d.ts +3 -0
  26. package/dist/documents/catalog.d.ts.map +1 -0
  27. package/dist/documents/catalog.js +18 -0
  28. package/dist/documents/catalog.js.map +1 -0
  29. package/dist/documents/index.d.ts +10 -0
  30. package/dist/documents/index.d.ts.map +1 -0
  31. package/dist/documents/index.js +8 -0
  32. package/dist/documents/index.js.map +1 -0
  33. package/dist/documents/model.d.ts +117 -0
  34. package/dist/documents/model.d.ts.map +1 -0
  35. package/dist/documents/model.js +2 -0
  36. package/dist/documents/model.js.map +1 -0
  37. package/dist/documents/scope.d.ts +3 -0
  38. package/dist/documents/scope.d.ts.map +1 -0
  39. package/dist/documents/scope.js +15 -0
  40. package/dist/documents/scope.js.map +1 -0
  41. package/dist/documents.d.ts +1 -0
  42. package/dist/documents.d.ts.map +1 -1
  43. package/dist/documents.js +1 -0
  44. package/dist/documents.js.map +1 -1
  45. package/dist/domain/task-categories.d.ts +15 -2
  46. package/dist/domain/task-categories.d.ts.map +1 -1
  47. package/dist/domain/task-categories.js +649 -26
  48. package/dist/domain/task-categories.js.map +1 -1
  49. package/dist/entities/agenda.d.ts +14 -1
  50. package/dist/entities/agenda.d.ts.map +1 -1
  51. package/dist/entities/agenda.js +6 -1
  52. package/dist/entities/agenda.js.map +1 -1
  53. package/dist/entities/index.d.ts +19 -1
  54. package/dist/entities/index.d.ts.map +1 -1
  55. package/dist/entities/task.d.ts +19 -0
  56. package/dist/entities/task.d.ts.map +1 -1
  57. package/dist/entities/task.js +11 -0
  58. package/dist/entities/task.js.map +1 -1
  59. package/dist/errors/reasons.d.ts +1 -1
  60. package/dist/errors/reasons.d.ts.map +1 -1
  61. package/dist/errors/reasons.js +12 -1
  62. package/dist/errors/reasons.js.map +1 -1
  63. package/dist/mcp/tools/tasks.d.ts.map +1 -1
  64. package/dist/mcp/tools/tasks.js +46 -18
  65. package/dist/mcp/tools/tasks.js.map +1 -1
  66. package/dist/search/task-signature.d.ts.map +1 -1
  67. package/dist/search/task-signature.js +32 -6
  68. package/dist/search/task-signature.js.map +1 -1
  69. package/dist/search/task-similarity.d.ts +15 -2
  70. package/dist/search/task-similarity.d.ts.map +1 -1
  71. package/dist/search/task-similarity.js +29 -10
  72. package/dist/search/task-similarity.js.map +1 -1
  73. package/dist/services/agenda.d.ts +7 -2
  74. package/dist/services/agenda.d.ts.map +1 -1
  75. package/dist/services/agenda.js +11 -0
  76. package/dist/services/agenda.js.map +1 -1
  77. package/dist/services/documents/extraction.d.ts +13 -0
  78. package/dist/services/documents/extraction.d.ts.map +1 -0
  79. package/dist/services/documents/extraction.js +37 -0
  80. package/dist/services/documents/extraction.js.map +1 -0
  81. package/dist/services/documents/ingestion.d.ts +29 -0
  82. package/dist/services/documents/ingestion.d.ts.map +1 -0
  83. package/dist/services/documents/ingestion.js +125 -0
  84. package/dist/services/documents/ingestion.js.map +1 -0
  85. package/dist/services/documents/knowledge.d.ts +58 -0
  86. package/dist/services/documents/knowledge.d.ts.map +1 -0
  87. package/dist/services/documents/knowledge.js +143 -0
  88. package/dist/services/documents/knowledge.js.map +1 -0
  89. package/dist/services/documents/plan.d.ts +11 -0
  90. package/dist/services/documents/plan.d.ts.map +1 -0
  91. package/dist/services/documents/plan.js +200 -0
  92. package/dist/services/documents/plan.js.map +1 -0
  93. package/dist/services/documents/ports.d.ts +24 -0
  94. package/dist/services/documents/ports.d.ts.map +1 -0
  95. package/dist/services/documents/ports.js +2 -0
  96. package/dist/services/documents/ports.js.map +1 -0
  97. package/dist/services/documents/proposals.d.ts +38 -0
  98. package/dist/services/documents/proposals.d.ts.map +1 -0
  99. package/dist/services/documents/proposals.js +52 -0
  100. package/dist/services/documents/proposals.js.map +1 -0
  101. package/dist/services/documents/sync.d.ts +24 -0
  102. package/dist/services/documents/sync.d.ts.map +1 -0
  103. package/dist/services/documents/sync.js +217 -0
  104. package/dist/services/documents/sync.js.map +1 -0
  105. package/dist/services/task-categories.d.ts +5 -2
  106. package/dist/services/task-categories.d.ts.map +1 -1
  107. package/dist/services/task-categories.js +37 -14
  108. package/dist/services/task-categories.js.map +1 -1
  109. package/dist/services/tasks.d.ts +38 -12
  110. package/dist/services/tasks.d.ts.map +1 -1
  111. package/dist/services/tasks.js +83 -17
  112. package/dist/services/tasks.js.map +1 -1
  113. package/dist/store/index.d.ts +1 -0
  114. package/dist/store/index.d.ts.map +1 -1
  115. package/dist/store/index.js +1 -0
  116. package/dist/store/index.js.map +1 -1
  117. package/dist/store/sqlite/lucene.d.ts.map +1 -1
  118. package/dist/store/sqlite/lucene.js +5 -2
  119. package/dist/store/sqlite/lucene.js.map +1 -1
  120. package/dist/store/sqlite/manifest.d.ts.map +1 -1
  121. package/dist/store/sqlite/manifest.js +1 -0
  122. package/dist/store/sqlite/manifest.js.map +1 -1
  123. package/dist/store/sqlite/migrations.generated.d.ts.map +1 -1
  124. package/dist/store/sqlite/migrations.generated.js +13 -0
  125. package/dist/store/sqlite/migrations.generated.js.map +1 -1
  126. package/dist/store/sqlite/schema.d.ts +112 -0
  127. package/dist/store/sqlite/schema.d.ts.map +1 -1
  128. package/dist/store/sqlite/schema.js +8 -0
  129. package/dist/store/sqlite/schema.js.map +1 -1
  130. package/dist/store/sqlite/task-candidates.d.ts +2 -0
  131. package/dist/store/sqlite/task-candidates.d.ts.map +1 -1
  132. package/dist/store/sqlite/task-candidates.js +76 -32
  133. package/dist/store/sqlite/task-candidates.js.map +1 -1
  134. package/dist/store/sqlite/task-category-settings.d.ts +3 -1
  135. package/dist/store/sqlite/task-category-settings.d.ts.map +1 -1
  136. package/dist/store/sqlite/task-category-settings.js +11 -1
  137. package/dist/store/sqlite/task-category-settings.js.map +1 -1
  138. package/dist/store/sqlite/task-close-store.d.ts +24 -0
  139. package/dist/store/sqlite/task-close-store.d.ts.map +1 -0
  140. package/dist/store/sqlite/task-close-store.js +57 -0
  141. package/dist/store/sqlite/task-close-store.js.map +1 -0
  142. package/dist/store/sqlite/task-close.d.ts +35 -0
  143. package/dist/store/sqlite/task-close.d.ts.map +1 -0
  144. package/dist/store/sqlite/task-close.js +68 -0
  145. package/dist/store/sqlite/task-close.js.map +1 -0
  146. package/dist/store/sqlite/task-pairs.d.ts +14 -4
  147. package/dist/store/sqlite/task-pairs.d.ts.map +1 -1
  148. package/dist/store/sqlite/task-pairs.js +31 -5
  149. package/dist/store/sqlite/task-pairs.js.map +1 -1
  150. package/dist/store/sqlite/task-relations.d.ts.map +1 -1
  151. package/dist/store/sqlite/task-relations.js +4 -1
  152. package/dist/store/sqlite/task-relations.js.map +1 -1
  153. package/dist/store/sqlite/tasks.d.ts +7 -2
  154. package/dist/store/sqlite/tasks.d.ts.map +1 -1
  155. package/dist/store/sqlite/tasks.js +18 -5
  156. package/dist/store/sqlite/tasks.js.map +1 -1
  157. package/dist/store/sqlite/work-tasks.d.ts +6 -1
  158. package/dist/store/sqlite/work-tasks.d.ts.map +1 -1
  159. package/dist/store/sqlite/work-tasks.js +8 -0
  160. package/dist/store/sqlite/work-tasks.js.map +1 -1
  161. package/dist/store/store.d.ts +1 -0
  162. package/dist/store/store.d.ts.map +1 -1
  163. package/dist/store/store.js +1 -0
  164. package/dist/store/store.js.map +1 -1
  165. package/package.json +3 -3
  166. package/parity.json +34 -0
  167. package/skills/follow-ups/SKILL.md +2 -1
@@ -0,0 +1,125 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ import { walkQuery } from "@wirecat/cli-base/query";
3
+ export const documentIngestion = (store, options) => {
4
+ const folder = async (principal, create) => {
5
+ const name = options.collectionName(principal);
6
+ const found = (await store.notes.folders()).find((item) => item.name === name);
7
+ return found ?? (create ? await store.notes.addFolder({ name, format: "markdown" }) : undefined);
8
+ };
9
+ const documents = new Map();
10
+ const cached = async (principal) => {
11
+ const known = documents.get(principal);
12
+ if (known)
13
+ return known;
14
+ const notes = new Map();
15
+ const selected = await folder(principal, false);
16
+ if (selected) {
17
+ for (let offset = 0;; offset += 500) {
18
+ const page = await store.notes.notes({ folderId: selected.id, source: "file", limit: 500, offset });
19
+ for (const note of page.items)
20
+ if (note.path)
21
+ notes.set(note.path, note);
22
+ if (!page.hasMore)
23
+ break;
24
+ if (offset >= 10000)
25
+ throw new CliError("provider_error", "local document listing exceeded its bound");
26
+ }
27
+ }
28
+ documents.set(principal, notes);
29
+ return notes;
30
+ };
31
+ const stale = async (ref) => {
32
+ for (const status of ["proposed", "confirmed"]) {
33
+ for (let batch = 0;; batch++) {
34
+ const memories = await store.memories.list({ subject: ref, status, limit: 500 });
35
+ for (const memory of memories)
36
+ await store.memories.markStale(memory.ref);
37
+ if (memories.length < 500)
38
+ break;
39
+ if (batch >= 20)
40
+ throw new CliError("provider_error", "memory invalidation exceeded its batch bound");
41
+ }
42
+ }
43
+ };
44
+ return {
45
+ catalog: {
46
+ import: async (principal, files) => {
47
+ if (files.length > 10000)
48
+ throw new CliError("validation_error", "catalog scope exceeds 10000 entries", {
49
+ reason: "catalog.scope-limit",
50
+ });
51
+ const selected = await folder(principal, true);
52
+ if (!selected)
53
+ throw new CliError("configuration_error", "catalog collection could not be registered");
54
+ for (let start = 0; start < files.length; start += 200) {
55
+ await store.catalog.upsert(selected.id, files.slice(start, start + 200).map(options.catalogInput));
56
+ }
57
+ for (const file of files) {
58
+ const entry = await store.catalog.get(selected.id, options.externalId(file.id));
59
+ if (entry)
60
+ await options.observed?.(principal, file, entry.ref.slice("document:".length));
61
+ }
62
+ const retired = await store.catalog.reconcile(selected.id, files.map((file) => options.externalId(file.id)));
63
+ documents.delete(principal);
64
+ return { entries: files.length, retired };
65
+ },
66
+ get: async (principal, id) => {
67
+ const selected = await folder(principal, false);
68
+ return selected ? store.catalog.get(selected.id, options.externalId(id)) : undefined;
69
+ },
70
+ list: async (principal, query = {}) => {
71
+ const selected = await folder(principal, false);
72
+ const ast = query.ast ? structuredClone(query.ast) : undefined;
73
+ if (ast)
74
+ for (const node of walkQuery(ast.root))
75
+ if (node.field === "parent")
76
+ node.value = options.externalId(node.value);
77
+ return selected
78
+ ? store.catalog.list(selected.id, {
79
+ ...query,
80
+ ...(ast ? { ast } : {}),
81
+ ...(query.parent === undefined ? {} : { parent: options.externalId(query.parent) }),
82
+ })
83
+ : { items: [], hasMore: false };
84
+ },
85
+ },
86
+ collection: folder,
87
+ save: async (principal, content, hash) => {
88
+ const selected = await folder(principal, true);
89
+ if (!selected)
90
+ throw new Error("folder registration failed");
91
+ const notes = await cached(principal);
92
+ const path = options.externalId(content.metadata.id);
93
+ const before = notes.get(path);
94
+ if (before && before.contentHash !== hash)
95
+ await stale(before.ref);
96
+ const { note } = await store.notes.saveFileNote({
97
+ folderId: selected.id,
98
+ path: options.externalId(content.metadata.id),
99
+ title: content.metadata.name,
100
+ text: content.text,
101
+ contentHash: hash,
102
+ frontMatter: options.frontMatter(content),
103
+ });
104
+ await store.catalog.upsert(selected.id, [options.catalogInput(content.metadata)]);
105
+ await options.observed?.(principal, content.metadata, note.id);
106
+ notes.set(path, note);
107
+ return note.ref;
108
+ },
109
+ remove: async (principal, id) => {
110
+ const selected = await folder(principal, false);
111
+ if (selected) {
112
+ const notes = await cached(principal);
113
+ const path = options.externalId(id);
114
+ const note = notes.get(path);
115
+ const retired = note ? undefined : await store.catalog.get(selected.id, path, true);
116
+ const ref = note?.ref ?? retired?.ref;
117
+ if (ref)
118
+ await stale(ref);
119
+ await store.notes.deleteFileNotes(selected.id, [path]);
120
+ notes.delete(path);
121
+ }
122
+ },
123
+ };
124
+ };
125
+ //# sourceMappingURL=ingestion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ingestion.js","sourceRoot":"","sources":["../../../src/services/documents/ingestion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { QueryAst } from "@wirecat/cli-base/query";
2
+ import type { Author, Fact, Link, LinkInput, Memory, MemoryInput, MessageStore, Note } from "../../store/index.js";
3
+ export interface DocumentKnowledge {
4
+ documents(principal: string, query: QueryAst | undefined, page: {
5
+ limit: number;
6
+ offset: number;
7
+ }): Promise<{
8
+ items: Note[];
9
+ hasMore: boolean;
10
+ }>;
11
+ document(principal: string, ref: string): Promise<Note>;
12
+ tags(principal: string, ref: string, action: "list" | "add" | "remove", tags?: string[]): Promise<string[]>;
13
+ links(principal: string, ref: string): Promise<Link[]>;
14
+ addLink(principal: string, ref: string, input: Omit<LinkInput, "from" | "origin">): Promise<Link>;
15
+ removeLink(principal: string, ref: string, id: string): Promise<unknown>;
16
+ notes(principal: string, ref: string, options?: {
17
+ search?: string;
18
+ limit?: number;
19
+ offset?: number;
20
+ }): Promise<{
21
+ items: Note[];
22
+ hasMore: boolean;
23
+ }>;
24
+ addNote(principal: string, ref: string, text: string, title?: string): Promise<Note>;
25
+ note(principal: string, ref: string, noteRef: string): Promise<Note>;
26
+ editNote(principal: string, ref: string, noteRef: string, text: string, revision: number): Promise<Note>;
27
+ removeNote(principal: string, ref: string, noteRef: string): Promise<unknown>;
28
+ addMemory(principal: string, ref: string, input: Pick<MemoryInput, "body" | "kind" | "scope" | "status" | "supersedes"> & {
29
+ author?: MemoryInput["author"];
30
+ }): Promise<Memory>;
31
+ memories(principal: string, ref: string, options?: {
32
+ scope?: Memory["scope"];
33
+ kind?: Memory["kind"];
34
+ status?: Memory["status"];
35
+ limit?: number;
36
+ }): Promise<Memory[]>;
37
+ memory(principal: string, ref: string, memoryRef: string, action?: "show" | "confirm" | "stale"): Promise<Memory>;
38
+ searchMemories(principal: string, ref: string, query: string, scope?: Memory["scope"]): Promise<{
39
+ items: Memory[];
40
+ limit_reached: boolean;
41
+ }>;
42
+ addFact(principal: string, ref: string, input: {
43
+ statement: string;
44
+ type: Fact["type"];
45
+ scope?: Memory["scope"];
46
+ by?: Author;
47
+ supersedes?: string;
48
+ occurredAt?: string;
49
+ }): Promise<Fact>;
50
+ facts(principal: string, ref: string, options?: {
51
+ type?: Fact["type"];
52
+ status?: Fact["status"];
53
+ limit?: number;
54
+ }): Promise<Fact[]>;
55
+ fact(principal: string, ref: string, factRef: string, action?: "show" | "confirm" | "reverse"): Promise<Fact>;
56
+ }
57
+ export declare const documentKnowledge: (store: Pick<MessageStore, "notes" | "facts" | "memories" | "knowledge">, folder: (principal: string) => Promise<string | undefined>) => DocumentKnowledge;
58
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../../src/services/documents/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ import { CliError } from "@wirecat/cli-base";
2
+ export const documentKnowledge = (store, folder) => {
3
+ const document = async (principal, ref) => {
4
+ const note = await store.notes.resolveNote(ref);
5
+ const folderId = await folder(principal);
6
+ if (!folderId || !note || note.source !== "file" || note.folderId !== folderId || note.deletedAt)
7
+ throw new CliError("not_found", "document is not imported in this source account", {
8
+ reason: "document.not-imported",
9
+ });
10
+ return note;
11
+ };
12
+ const noteFor = async (principal, ref, noteRef) => {
13
+ await document(principal, ref);
14
+ const note = await store.notes.resolveNote(noteRef);
15
+ const linked = (await store.notes.links({ from: noteRef })).some((link) => link.to === ref && link.kind === "about");
16
+ // A note's primary subject is included by the shared about query, not necessarily a links row.
17
+ if (note?.source !== "internal" || note.deletedAt)
18
+ throw new CliError("not_found", "note is not attached to this document");
19
+ if (linked)
20
+ return note;
21
+ for (let offset = 0; offset <= 10000; offset += 500) {
22
+ const page = await store.notes.notes({ source: "internal", about: ref, limit: 500, offset });
23
+ if (page.items.some((n) => n.ref === noteRef))
24
+ return note;
25
+ if (!page.hasMore)
26
+ throw new CliError("not_found", "note is not attached to this document");
27
+ }
28
+ throw new CliError("provider_error", "document note lookup exceeded its bound");
29
+ };
30
+ const memoryFor = async (principal, ref, memoryRef) => {
31
+ await document(principal, ref);
32
+ const memory = await store.memories.get(memoryRef);
33
+ if (memory.subject !== ref || !memory.evidence.includes(ref))
34
+ throw new CliError("not_found", "memory is not attached to this document");
35
+ return memory;
36
+ };
37
+ const factFor = async (principal, ref, factRef) => {
38
+ await document(principal, ref);
39
+ const fact = await store.facts.get(factRef);
40
+ if (fact.subject !== ref || !fact.evidence.includes(ref))
41
+ throw new CliError("not_found", "fact is not attached to this document");
42
+ return fact;
43
+ };
44
+ const port = {
45
+ documents: async (principal, query, page) => {
46
+ const folderId = await folder(principal);
47
+ return folderId ? store.notes.importedDocuments(folderId, query, page) : { items: [], hasMore: false };
48
+ },
49
+ document,
50
+ tags: async (principal, ref, action, tags = []) => {
51
+ const note = await document(principal, ref);
52
+ const target = { type: "document", id: note.id };
53
+ if (action === "add")
54
+ return store.knowledge.addTags(null, target, tags);
55
+ if (action === "remove")
56
+ return store.knowledge.removeTags(null, target, tags);
57
+ return store.knowledge.tags(null, target);
58
+ },
59
+ links: async (principal, ref) => {
60
+ await document(principal, ref);
61
+ return store.notes.links({ from: ref });
62
+ },
63
+ addLink: async (principal, ref, input) => {
64
+ await document(principal, ref);
65
+ return store.notes.addLink({ ...input, from: ref, origin: "owner" });
66
+ },
67
+ removeLink: async (principal, ref, id) => {
68
+ const links = await port.links(principal, ref);
69
+ if (!links.some((link) => link.id === id && link.origin === "owner"))
70
+ throw new CliError("not_found", "owner link is not attached to this document");
71
+ return store.notes.removeLink(id);
72
+ },
73
+ notes: async (principal, ref, options) => {
74
+ await document(principal, ref);
75
+ return store.notes.notes({ ...options, source: "internal", about: ref });
76
+ },
77
+ addNote: async (principal, ref, text, title) => {
78
+ await document(principal, ref);
79
+ return store.notes.addNote({ text, ...(title ? { title } : {}), about: [ref] });
80
+ },
81
+ note: noteFor,
82
+ editNote: async (principal, ref, noteRef, text, revision) => {
83
+ const note = await noteFor(principal, ref, noteRef);
84
+ return store.notes.editNote(note.id, text, revision);
85
+ },
86
+ removeNote: async (principal, ref, noteRef) => {
87
+ const note = await noteFor(principal, ref, noteRef);
88
+ return store.notes.removeNote(note.id);
89
+ },
90
+ addMemory: async (principal, ref, input) => {
91
+ await document(principal, ref);
92
+ if (input.supersedes)
93
+ await memoryFor(principal, ref, input.supersedes);
94
+ return store.memories.add({ ...input, subject: ref, evidence: [ref], author: input.author ?? "owner" });
95
+ },
96
+ memories: async (principal, ref, options) => {
97
+ await document(principal, ref);
98
+ return store.memories.list({ ...options, subject: ref });
99
+ },
100
+ memory: async (principal, ref, memoryRef, action = "show") => {
101
+ const memory = await memoryFor(principal, ref, memoryRef);
102
+ if (action === "confirm")
103
+ return store.memories.confirm(memory.ref);
104
+ if (action === "stale")
105
+ return store.memories.markStale(memory.ref);
106
+ return memory;
107
+ },
108
+ searchMemories: async (principal, ref, query, scope) => {
109
+ await document(principal, ref);
110
+ const items = await store.memories.search(query, { subject: ref, ...(scope ? { scope } : {}), limit: 200 });
111
+ return { items, limit_reached: items.length === 200 };
112
+ },
113
+ addFact: async (principal, ref, { statement, type, scope, by, supersedes, occurredAt }) => {
114
+ await document(principal, ref);
115
+ if (supersedes)
116
+ await factFor(principal, ref, supersedes);
117
+ return store.facts.add({
118
+ type,
119
+ statement,
120
+ by: by ?? "owner",
121
+ ...(supersedes === undefined ? {} : { supersedes }),
122
+ ...(occurredAt === undefined ? {} : { occurredAt }),
123
+ subject: ref,
124
+ evidence: [ref],
125
+ ...(scope === undefined ? {} : { scope }),
126
+ });
127
+ },
128
+ facts: async (principal, ref, options) => {
129
+ await document(principal, ref);
130
+ return store.facts.list({ ...options, subject: ref });
131
+ },
132
+ fact: async (principal, ref, factRef, action = "show") => {
133
+ const fact = await factFor(principal, ref, factRef);
134
+ if (action === "confirm")
135
+ return store.facts.accept(fact.ref);
136
+ if (action === "reverse")
137
+ return store.facts.reverse(fact.ref);
138
+ return fact;
139
+ },
140
+ };
141
+ return port;
142
+ };
143
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../../src/services/documents/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DocumentSource, SourceFile, SourceState, SourceWalk } from "../../documents/model.js";
2
+ import type { SyncOptions } from "./ports.js";
3
+ export declare const scopeHash: (roots: string[]) => string;
4
+ export declare const changedSince: (previous: SourceFile, file: SourceFile) => boolean;
5
+ interface WalkStore<M extends SourceFile> {
6
+ read: (scope: string) => SourceWalk<M> | undefined;
7
+ save: (walk: SourceWalk<M>) => void;
8
+ }
9
+ export declare const planDocuments: <M extends SourceFile>(options: SyncOptions<M>, source: DocumentSource<M> | undefined, state: SourceState<M>, roots: string[], limit: number, pictures: boolean, abandoned?: string[], walks?: WalkStore<M>) => Promise<NonNullable<SourceState<M>["pending"]>>;
10
+ export {};
11
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/services/documents/plan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAc,MAAM,0BAA0B,CAAA;AAE/G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,eAAO,MAAM,SAAS,UAAW,MAAM,EAAE,WAGvB,CAAA;AAClB,eAAO,MAAM,YAAY,aAAc,UAAU,QAAQ,UAAU,YAKA,CAAA;AAGnE,UAAU,SAAS,CAAC,CAAC,SAAS,UAAU;IACtC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;IAClD,IAAI,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;CACpC;AAED,eAAO,MAAM,aAAa,GAAU,CAAC,SAAS,UAAU,WAC7C,WAAW,CAAC,CAAC,CAAC,UACf,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,SAC9B,WAAW,CAAC,CAAC,CAAC,SACd,MAAM,EAAE,SACR,MAAM,YACH,OAAO,cACN,MAAM,EAAE,UACX,SAAS,CAAC,CAAC,CAAC,KACnB,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAmKhD,CAAA"}
@@ -0,0 +1,200 @@
1
+ import { createHash } from "node:crypto";
2
+ import { CliError } from "@wirecat/cli-base";
3
+ import { within } from "../../documents/scope.js";
4
+ export const scopeHash = (roots) => createHash("sha256")
5
+ .update(JSON.stringify([...roots].sort()))
6
+ .digest("hex");
7
+ export const changedSince = (previous, file) => previous.version !== file.version ||
8
+ previous.modifiedAt !== file.modifiedAt ||
9
+ previous.name !== file.name ||
10
+ previous.canDownload !== file.canDownload ||
11
+ JSON.stringify(previous.parents) !== JSON.stringify(file.parents);
12
+ const SAVE_EVERY_MS = 2000;
13
+ export const planDocuments = async (options, source, state, roots, limit, pictures, abandoned = [], walks) => {
14
+ const { isFolder, skipReason, retryable, maxEntries: MAX_ENTRIES, errorOf } = options;
15
+ const tooManyEntries = () => options.limitError?.() ?? new CliError("validation_error", `selected folders exceed the ${MAX_ENTRIES} entry limit`);
16
+ const scope = scopeHash(roots);
17
+ if (!roots.length)
18
+ return {
19
+ scope,
20
+ cursor: state.cursor ?? "",
21
+ folders: {},
22
+ skipped: [],
23
+ jobs: [...new Set([...Object.keys(state.documents), ...abandoned])].map((id) => ({ id, kind: "remove" })),
24
+ };
25
+ if (!source)
26
+ throw new CliError("configuration_error", "selected folders require an authenticated source");
27
+ const initial = !state.cursor || scope !== state.scope;
28
+ const resumed = initial ? walks?.read(scope) : undefined;
29
+ const cursor = initial ? (resumed?.cursor ?? (await source.startToken())) : state.cursor;
30
+ const folders = initial ? {} : structuredClone(state.folders);
31
+ const files = new Map(Object.values(state.documents).map((doc) => [doc.metadata.id, doc.metadata]));
32
+ const changed = new Set();
33
+ for (const skipped of state.skipped)
34
+ if (skipped.file)
35
+ files.set(skipped.id, skipped.file);
36
+ const visited = new Set();
37
+ let discovered = 0;
38
+ const crawl = async (folder, ancestry = new Set()) => {
39
+ if (ancestry.has(folder.id))
40
+ throw new CliError("invalid_response", "folder traversal contains a cycle");
41
+ if (visited.has(folder.id))
42
+ return;
43
+ visited.add(folder.id);
44
+ folders[folder.id] = folder;
45
+ for (const file of await source.children(folder.id)) {
46
+ if (++discovered > MAX_ENTRIES)
47
+ throw tooManyEntries();
48
+ if (isFolder(file))
49
+ await crawl(file, new Set([...ancestry, folder.id]));
50
+ else {
51
+ files.set(file.id, file);
52
+ changed.add(file.id);
53
+ }
54
+ }
55
+ };
56
+ let finalCursor = cursor;
57
+ if (initial) {
58
+ files.clear();
59
+ const walk = resumed ?? {
60
+ scope,
61
+ cursor,
62
+ stack: [...roots].reverse().map((id) => ({ id, ancestry: [] })),
63
+ visited: [],
64
+ folders: {},
65
+ files: [],
66
+ discovered: 0,
67
+ };
68
+ for (const id of walk.visited)
69
+ visited.add(id);
70
+ Object.assign(folders, walk.folders);
71
+ for (const file of walk.files) {
72
+ files.set(file.id, file);
73
+ changed.add(file.id);
74
+ }
75
+ discovered = walk.discovered;
76
+ let savedAt = (options.now ?? Date.now)();
77
+ const record = () => {
78
+ walks?.save({ ...walk, visited: [...visited], folders, files: [...files.values()], discovered });
79
+ savedAt = (options.now ?? Date.now)();
80
+ };
81
+ try {
82
+ for (let step = walk.stack.at(-1); step; step = walk.stack.at(-1)) {
83
+ if (step.ancestry.includes(step.id))
84
+ throw new CliError("invalid_response", "folder traversal contains a cycle");
85
+ if (visited.has(step.id)) {
86
+ walk.stack.pop();
87
+ continue;
88
+ }
89
+ const folder = step.folder ?? (await source.metadata(step.id));
90
+ if (!step.folder && (!isFolder(folder) || folder.trashed))
91
+ throw new CliError("validation_error", "configured root is not an accessible folder");
92
+ const children = await source.children(folder.id);
93
+ if (discovered + children.length > MAX_ENTRIES)
94
+ throw tooManyEntries();
95
+ discovered += children.length;
96
+ walk.stack.pop();
97
+ visited.add(folder.id);
98
+ folders[folder.id] = folder;
99
+ const nested = [];
100
+ for (const file of children)
101
+ if (isFolder(file))
102
+ nested.push({ id: file.id, ancestry: [...step.ancestry, folder.id], folder: file });
103
+ else {
104
+ files.set(file.id, file);
105
+ changed.add(file.id);
106
+ }
107
+ for (const entry of nested.reverse())
108
+ walk.stack.push(entry);
109
+ if ((options.now ?? Date.now)() - savedAt > SAVE_EVERY_MS)
110
+ record();
111
+ }
112
+ }
113
+ catch (error) {
114
+ record();
115
+ throw error;
116
+ }
117
+ }
118
+ else {
119
+ const page = await source.changes(cursor);
120
+ finalCursor = page.cursor;
121
+ const latest = new Map(page.items.map((change) => [change.id, change]));
122
+ const entering = [];
123
+ // Apply all ancestry changes before classifying document scope.
124
+ for (const change of latest.values()) {
125
+ if (change.removed || change.file?.trashed) {
126
+ files.delete(change.id);
127
+ if (folders[change.id])
128
+ folders[change.id] = { ...folders[change.id], trashed: true };
129
+ }
130
+ else if (change.file && isFolder(change.file)) {
131
+ folders[change.id] = change.file;
132
+ entering.push(change.file);
133
+ }
134
+ else if (change.file) {
135
+ files.set(change.id, change.file);
136
+ changed.add(change.id);
137
+ }
138
+ else if (state.documents[change.id] || folders[change.id])
139
+ throw new CliError("invalid_response", "known source changed without metadata; checkpoint preserved");
140
+ }
141
+ // Provider access changes may not emit an event for every descendant file.
142
+ for (const root of roots) {
143
+ const previous = folders[root];
144
+ try {
145
+ const current = await source.metadata(root);
146
+ if (current.id !== root || !isFolder(current))
147
+ throw new CliError("invalid_response", "selected folder metadata is inconsistent");
148
+ folders[root] = current;
149
+ if (previous?.trashed && !current.trashed)
150
+ entering.push(current);
151
+ }
152
+ catch (error) {
153
+ const safe = errorOf(error);
154
+ if (safe.code !== "not_found" || !previous)
155
+ throw safe;
156
+ folders[root] = { ...previous, trashed: true };
157
+ }
158
+ }
159
+ for (const folder of entering)
160
+ if (!visited.has(folder.id) && within(folder, roots, folders))
161
+ await crawl(folder);
162
+ }
163
+ const jobs = [];
164
+ const skipped = [];
165
+ for (const root of roots)
166
+ if (folders[root]?.trashed)
167
+ skipped.push({ id: root, reason: "selected folder is unavailable" });
168
+ for (const [id, file] of files) {
169
+ if (!within(file, roots, folders))
170
+ continue;
171
+ const previousSkip = state.skipped.find((item) => item.id === id);
172
+ const reason = skipReason(file);
173
+ const retry = previousSkip && !reason && retryable(previousSkip, limit);
174
+ const known = state.documents[id];
175
+ const pictureDue = pictures && file.mime.startsWith("image/") && file.canDownload && known !== undefined && !known.picture;
176
+ if (previousSkip && !changed.has(id) && !initial && !retry && !pictureDue && !(reason && !state.documents[id])) {
177
+ skipped.push({ ...previousSkip, file });
178
+ continue;
179
+ }
180
+ if (reason) {
181
+ skipped.push({ id, reason, file });
182
+ if (initial || !known || known.notRead !== reason || changedSince(known.metadata, file) || pictureDue)
183
+ jobs.push({ id, kind: "save", file });
184
+ continue;
185
+ }
186
+ if (changed.has(id) || retry || known?.notRead) {
187
+ if (!known || known.notRead || changedSince(known.metadata, file) || initial)
188
+ jobs.push({ id, kind: "save", file });
189
+ }
190
+ }
191
+ for (const id of new Set([...Object.keys(state.documents), ...abandoned])) {
192
+ const file = files.get(id);
193
+ if (!file || !within(file, roots, folders))
194
+ jobs.push({ id, kind: "remove" });
195
+ }
196
+ // Only retain metadata for selected ancestry; the account-wide feed includes unrelated folders.
197
+ const scopedFolders = Object.fromEntries(Object.entries(folders).filter(([, file]) => within(file, roots, folders) || roots.includes(file.id)));
198
+ return { scope, cursor: finalCursor, folders: scopedFolders, jobs, skipped };
199
+ };
200
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/services/documents/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CliError } from "@wirecat/cli-base";
2
+ import type { DocumentSource, SourceFile, SourceIndex, SourceSkip, SourceStatePort } from "../../documents/model.js";
3
+ export interface SyncOptions<M extends SourceFile> {
4
+ source: DocumentSource<M> | undefined;
5
+ index: SourceIndex<M>;
6
+ state: SourceStatePort<M>;
7
+ principal: string;
8
+ roots: string[];
9
+ textLimit: number;
10
+ max: number;
11
+ maxEntries: number;
12
+ limitError?(): CliError;
13
+ isFolder(file: M): boolean;
14
+ skipReason(file: M): string | undefined;
15
+ retryable(skip: SourceSkip<M>, limit: number): boolean;
16
+ errorOf(error: unknown): CliError;
17
+ assertHeld(): void;
18
+ storeVersion: string;
19
+ signal?: AbortSignal;
20
+ rescan?: boolean;
21
+ pictures?: boolean;
22
+ now?(): number;
23
+ }
24
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../../src/services/documents/ports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACpH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,UAAU;IAC/C,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;IACrC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;IACrB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,IAAI,QAAQ,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAA;IAC1B,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAAA;IACvC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IACtD,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAA;IACjC,UAAU,IAAI,IAAI,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,GAAG,CAAC,IAAI,MAAM,CAAA;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/services/documents/ports.ts"],"names":[],"mappings":""}