@waynesutton/agent-memory 0.0.1

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 (201) hide show
  1. package/.claude/settings.json +9 -0
  2. package/.claude/settings.local.json +7 -0
  3. package/AGENTS.md +113 -0
  4. package/CLAUDE.md +79 -0
  5. package/README.md +1 -0
  6. package/dist/cli/index.d.ts +3 -0
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/index.js +192 -0
  9. package/dist/cli/index.js.map +1 -0
  10. package/dist/cli/parsers/claude-code.d.ts +3 -0
  11. package/dist/cli/parsers/claude-code.d.ts.map +1 -0
  12. package/dist/cli/parsers/claude-code.js +75 -0
  13. package/dist/cli/parsers/claude-code.js.map +1 -0
  14. package/dist/cli/parsers/codex.d.ts +3 -0
  15. package/dist/cli/parsers/codex.d.ts.map +1 -0
  16. package/dist/cli/parsers/codex.js +42 -0
  17. package/dist/cli/parsers/codex.js.map +1 -0
  18. package/dist/cli/parsers/conductor.d.ts +3 -0
  19. package/dist/cli/parsers/conductor.d.ts.map +1 -0
  20. package/dist/cli/parsers/conductor.js +43 -0
  21. package/dist/cli/parsers/conductor.js.map +1 -0
  22. package/dist/cli/parsers/cursor.d.ts +3 -0
  23. package/dist/cli/parsers/cursor.d.ts.map +1 -0
  24. package/dist/cli/parsers/cursor.js +50 -0
  25. package/dist/cli/parsers/cursor.js.map +1 -0
  26. package/dist/cli/parsers/index.d.ts +12 -0
  27. package/dist/cli/parsers/index.d.ts.map +1 -0
  28. package/dist/cli/parsers/index.js +27 -0
  29. package/dist/cli/parsers/index.js.map +1 -0
  30. package/dist/cli/parsers/opencode.d.ts +3 -0
  31. package/dist/cli/parsers/opencode.d.ts.map +1 -0
  32. package/dist/cli/parsers/opencode.js +72 -0
  33. package/dist/cli/parsers/opencode.js.map +1 -0
  34. package/dist/cli/parsers/parsers.test.d.ts +2 -0
  35. package/dist/cli/parsers/parsers.test.d.ts.map +1 -0
  36. package/dist/cli/parsers/parsers.test.js +151 -0
  37. package/dist/cli/parsers/parsers.test.js.map +1 -0
  38. package/dist/cli/parsers/pi.d.ts +3 -0
  39. package/dist/cli/parsers/pi.d.ts.map +1 -0
  40. package/dist/cli/parsers/pi.js +43 -0
  41. package/dist/cli/parsers/pi.js.map +1 -0
  42. package/dist/cli/parsers/types.d.ts +25 -0
  43. package/dist/cli/parsers/types.d.ts.map +1 -0
  44. package/dist/cli/parsers/types.js +2 -0
  45. package/dist/cli/parsers/types.js.map +1 -0
  46. package/dist/cli/parsers/vscode-copilot.d.ts +3 -0
  47. package/dist/cli/parsers/vscode-copilot.d.ts.map +1 -0
  48. package/dist/cli/parsers/vscode-copilot.js +69 -0
  49. package/dist/cli/parsers/vscode-copilot.js.map +1 -0
  50. package/dist/cli/parsers/zed.d.ts +3 -0
  51. package/dist/cli/parsers/zed.d.ts.map +1 -0
  52. package/dist/cli/parsers/zed.js +43 -0
  53. package/dist/cli/parsers/zed.js.map +1 -0
  54. package/dist/cli/sync.d.ts +21 -0
  55. package/dist/cli/sync.d.ts.map +1 -0
  56. package/dist/cli/sync.js +78 -0
  57. package/dist/cli/sync.js.map +1 -0
  58. package/dist/cli/type-extractor.d.ts +25 -0
  59. package/dist/cli/type-extractor.d.ts.map +1 -0
  60. package/dist/cli/type-extractor.js +254 -0
  61. package/dist/cli/type-extractor.js.map +1 -0
  62. package/dist/cli/type-extractor.test.d.ts +2 -0
  63. package/dist/cli/type-extractor.test.d.ts.map +1 -0
  64. package/dist/cli/type-extractor.test.js +173 -0
  65. package/dist/cli/type-extractor.test.js.map +1 -0
  66. package/dist/client/http.d.ts +44 -0
  67. package/dist/client/http.d.ts.map +1 -0
  68. package/dist/client/http.js +311 -0
  69. package/dist/client/http.js.map +1 -0
  70. package/dist/client/index.d.ts +158 -0
  71. package/dist/client/index.d.ts.map +1 -0
  72. package/dist/client/index.js +256 -0
  73. package/dist/client/index.js.map +1 -0
  74. package/dist/component/_generated/api.d.ts +12 -0
  75. package/dist/component/_generated/api.d.ts.map +1 -0
  76. package/dist/component/_generated/api.js +13 -0
  77. package/dist/component/_generated/api.js.map +1 -0
  78. package/dist/component/_generated/dataModel.d.ts +18 -0
  79. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  80. package/dist/component/_generated/dataModel.js +11 -0
  81. package/dist/component/_generated/dataModel.js.map +1 -0
  82. package/dist/component/_generated/server.d.ts +42 -0
  83. package/dist/component/_generated/server.d.ts.map +1 -0
  84. package/dist/component/_generated/server.js +39 -0
  85. package/dist/component/_generated/server.js.map +1 -0
  86. package/dist/component/actions.d.ts +42 -0
  87. package/dist/component/actions.d.ts.map +1 -0
  88. package/dist/component/actions.js +405 -0
  89. package/dist/component/actions.js.map +1 -0
  90. package/dist/component/apiKeyMutations.d.ts +29 -0
  91. package/dist/component/apiKeyMutations.d.ts.map +1 -0
  92. package/dist/component/apiKeyMutations.js +149 -0
  93. package/dist/component/apiKeyMutations.js.map +1 -0
  94. package/dist/component/apiKeyQueries.d.ts +37 -0
  95. package/dist/component/apiKeyQueries.d.ts.map +1 -0
  96. package/dist/component/apiKeyQueries.js +127 -0
  97. package/dist/component/apiKeyQueries.js.map +1 -0
  98. package/dist/component/checksum.d.ts +6 -0
  99. package/dist/component/checksum.d.ts.map +1 -0
  100. package/dist/component/checksum.js +14 -0
  101. package/dist/component/checksum.js.map +1 -0
  102. package/dist/component/checksum.test.d.ts +2 -0
  103. package/dist/component/checksum.test.d.ts.map +1 -0
  104. package/dist/component/checksum.test.js +27 -0
  105. package/dist/component/checksum.test.js.map +1 -0
  106. package/dist/component/convex.config.d.ts +3 -0
  107. package/dist/component/convex.config.d.ts.map +1 -0
  108. package/dist/component/convex.config.js +4 -0
  109. package/dist/component/convex.config.js.map +1 -0
  110. package/dist/component/cronActions.d.ts +3 -0
  111. package/dist/component/cronActions.d.ts.map +1 -0
  112. package/dist/component/cronActions.js +38 -0
  113. package/dist/component/cronActions.js.map +1 -0
  114. package/dist/component/cronQueries.d.ts +6 -0
  115. package/dist/component/cronQueries.d.ts.map +1 -0
  116. package/dist/component/cronQueries.js +38 -0
  117. package/dist/component/cronQueries.js.map +1 -0
  118. package/dist/component/crons.d.ts +3 -0
  119. package/dist/component/crons.d.ts.map +1 -0
  120. package/dist/component/crons.js +18 -0
  121. package/dist/component/crons.js.map +1 -0
  122. package/dist/component/format.d.ts +11 -0
  123. package/dist/component/format.d.ts.map +1 -0
  124. package/dist/component/format.js +175 -0
  125. package/dist/component/format.js.map +1 -0
  126. package/dist/component/format.test.d.ts +2 -0
  127. package/dist/component/format.test.d.ts.map +1 -0
  128. package/dist/component/format.test.js +118 -0
  129. package/dist/component/format.test.js.map +1 -0
  130. package/dist/component/mutations.d.ts +158 -0
  131. package/dist/component/mutations.d.ts.map +1 -0
  132. package/dist/component/mutations.js +745 -0
  133. package/dist/component/mutations.js.map +1 -0
  134. package/dist/component/queries.d.ts +94 -0
  135. package/dist/component/queries.d.ts.map +1 -0
  136. package/dist/component/queries.js +574 -0
  137. package/dist/component/queries.js.map +1 -0
  138. package/dist/component/schema.d.ts +278 -0
  139. package/dist/component/schema.d.ts.map +1 -0
  140. package/dist/component/schema.js +161 -0
  141. package/dist/component/schema.js.map +1 -0
  142. package/dist/mcp/server.d.ts +11 -0
  143. package/dist/mcp/server.d.ts.map +1 -0
  144. package/dist/mcp/server.js +571 -0
  145. package/dist/mcp/server.js.map +1 -0
  146. package/dist/shared.d.ts +126 -0
  147. package/dist/shared.d.ts.map +1 -0
  148. package/dist/shared.js +67 -0
  149. package/dist/shared.js.map +1 -0
  150. package/dist/test.d.ts +23 -0
  151. package/dist/test.d.ts.map +1 -0
  152. package/dist/test.js +21 -0
  153. package/dist/test.js.map +1 -0
  154. package/eslint.config.js +15 -0
  155. package/example/convex/convex.config.ts +7 -0
  156. package/example/convex/memory.ts +129 -0
  157. package/llms.md +175 -0
  158. package/llms.txt +126 -0
  159. package/package.json +72 -0
  160. package/prds/API-REFERENCE.md +935 -0
  161. package/prds/README.md +988 -0
  162. package/prds/SETUP.md +682 -0
  163. package/src/cli/index.ts +254 -0
  164. package/src/cli/parsers/claude-code.ts +80 -0
  165. package/src/cli/parsers/codex.ts +45 -0
  166. package/src/cli/parsers/conductor.ts +47 -0
  167. package/src/cli/parsers/cursor.ts +55 -0
  168. package/src/cli/parsers/index.ts +30 -0
  169. package/src/cli/parsers/opencode.ts +84 -0
  170. package/src/cli/parsers/parsers.test.ts +201 -0
  171. package/src/cli/parsers/pi.ts +47 -0
  172. package/src/cli/parsers/types.ts +26 -0
  173. package/src/cli/parsers/vscode-copilot.ts +78 -0
  174. package/src/cli/parsers/zed.ts +47 -0
  175. package/src/cli/sync.ts +110 -0
  176. package/src/cli/type-extractor.test.ts +241 -0
  177. package/src/cli/type-extractor.ts +331 -0
  178. package/src/client/http.ts +415 -0
  179. package/src/client/index.ts +519 -0
  180. package/src/component/_generated/api.ts +14 -0
  181. package/src/component/_generated/dataModel.ts +20 -0
  182. package/src/component/_generated/server.ts +64 -0
  183. package/src/component/actions.ts +558 -0
  184. package/src/component/apiKeyMutations.ts +175 -0
  185. package/src/component/apiKeyQueries.ts +156 -0
  186. package/src/component/checksum.test.ts +31 -0
  187. package/src/component/checksum.ts +13 -0
  188. package/src/component/convex.config.ts +5 -0
  189. package/src/component/cronActions.ts +52 -0
  190. package/src/component/cronQueries.ts +42 -0
  191. package/src/component/crons.ts +34 -0
  192. package/src/component/format.test.ts +133 -0
  193. package/src/component/format.ts +232 -0
  194. package/src/component/mutations.ts +824 -0
  195. package/src/component/queries.ts +684 -0
  196. package/src/component/schema.ts +207 -0
  197. package/src/mcp/server.ts +695 -0
  198. package/src/shared.ts +251 -0
  199. package/src/test.ts +32 -0
  200. package/tsconfig.json +21 -0
  201. package/vitest.config.ts +8 -0
@@ -0,0 +1,574 @@
1
+ import { query, internalQuery } from "./_generated/server.js";
2
+ import { v } from "convex/values";
3
+ import { memoryTypeValidator, scopeValidator, historyEventValidator, feedbackSentimentValidator, } from "./schema.js";
4
+ import { formatMemoryForTool } from "./format.js";
5
+ // ── Shared return validators ────────────────────────────────────────
6
+ const memoryDocValidator = v.object({
7
+ _id: v.string(),
8
+ _creationTime: v.float64(),
9
+ projectId: v.string(),
10
+ scope: scopeValidator,
11
+ userId: v.optional(v.string()),
12
+ agentId: v.optional(v.string()),
13
+ sessionId: v.optional(v.string()),
14
+ title: v.string(),
15
+ content: v.string(),
16
+ memoryType: memoryTypeValidator,
17
+ tags: v.array(v.string()),
18
+ paths: v.optional(v.array(v.string())),
19
+ priority: v.optional(v.float64()),
20
+ source: v.optional(v.string()),
21
+ lastSyncedAt: v.optional(v.float64()),
22
+ checksum: v.string(),
23
+ archived: v.boolean(),
24
+ embeddingId: v.optional(v.string()),
25
+ accessCount: v.optional(v.float64()),
26
+ lastAccessedAt: v.optional(v.float64()),
27
+ positiveCount: v.optional(v.float64()),
28
+ negativeCount: v.optional(v.float64()),
29
+ });
30
+ const memorySummaryValidator = v.object({
31
+ _id: v.string(),
32
+ title: v.string(),
33
+ memoryType: memoryTypeValidator,
34
+ priority: v.float64(),
35
+ });
36
+ const historyEntryValidator = v.object({
37
+ _id: v.string(),
38
+ _creationTime: v.float64(),
39
+ memoryId: v.string(),
40
+ projectId: v.string(),
41
+ previousContent: v.optional(v.string()),
42
+ newContent: v.optional(v.string()),
43
+ previousTitle: v.optional(v.string()),
44
+ newTitle: v.optional(v.string()),
45
+ event: historyEventValidator,
46
+ actor: v.string(),
47
+ timestamp: v.float64(),
48
+ });
49
+ const feedbackEntryValidator = v.object({
50
+ _id: v.string(),
51
+ _creationTime: v.float64(),
52
+ memoryId: v.string(),
53
+ projectId: v.string(),
54
+ sentiment: feedbackSentimentValidator,
55
+ comment: v.optional(v.string()),
56
+ actor: v.string(),
57
+ timestamp: v.float64(),
58
+ });
59
+ const relationValidator = v.object({
60
+ _id: v.string(),
61
+ _creationTime: v.float64(),
62
+ projectId: v.string(),
63
+ fromMemoryId: v.string(),
64
+ toMemoryId: v.string(),
65
+ relationship: v.string(),
66
+ metadata: v.optional(v.object({
67
+ confidence: v.optional(v.float64()),
68
+ createdBy: v.optional(v.string()),
69
+ })),
70
+ timestamp: v.float64(),
71
+ });
72
+ const toolFormatValidator = v.union(v.literal("claude-code"), v.literal("cursor"), v.literal("opencode"), v.literal("codex"), v.literal("conductor"), v.literal("zed"), v.literal("vscode-copilot"), v.literal("pi"), v.literal("raw"));
73
+ // ── Helper: map doc to return type ──────────────────────────────────
74
+ function mapDoc(m) {
75
+ return {
76
+ ...m,
77
+ _id: m._id,
78
+ embeddingId: m.embeddingId
79
+ ? m.embeddingId
80
+ : undefined,
81
+ };
82
+ }
83
+ // ── list ────────────────────────────────────────────────────────────
84
+ export const list = query({
85
+ args: {
86
+ projectId: v.string(),
87
+ scope: v.optional(scopeValidator),
88
+ userId: v.optional(v.string()),
89
+ agentId: v.optional(v.string()),
90
+ sessionId: v.optional(v.string()),
91
+ memoryType: v.optional(memoryTypeValidator),
92
+ source: v.optional(v.string()),
93
+ archived: v.optional(v.boolean()),
94
+ minPriority: v.optional(v.float64()),
95
+ tags: v.optional(v.array(v.string())),
96
+ createdAfter: v.optional(v.float64()),
97
+ createdBefore: v.optional(v.float64()),
98
+ limit: v.optional(v.float64()),
99
+ },
100
+ returns: v.array(memoryDocValidator),
101
+ handler: async (ctx, args) => {
102
+ const limit = args.limit ?? 100;
103
+ const archived = args.archived ?? false;
104
+ // Select index based on available filters
105
+ let results;
106
+ if (args.agentId) {
107
+ results = await ctx.db
108
+ .query("memories")
109
+ .withIndex("by_agent", (q) => q
110
+ .eq("projectId", args.projectId)
111
+ .eq("agentId", args.agentId)
112
+ .eq("archived", archived))
113
+ .take(limit);
114
+ }
115
+ else if (args.sessionId) {
116
+ results = await ctx.db
117
+ .query("memories")
118
+ .withIndex("by_session", (q) => q
119
+ .eq("projectId", args.projectId)
120
+ .eq("sessionId", args.sessionId)
121
+ .eq("archived", archived))
122
+ .take(limit);
123
+ }
124
+ else if (args.source) {
125
+ results = await ctx.db
126
+ .query("memories")
127
+ .withIndex("by_source", (q) => q
128
+ .eq("projectId", args.projectId)
129
+ .eq("source", args.source)
130
+ .eq("archived", archived))
131
+ .take(limit);
132
+ }
133
+ else if (args.scope && args.userId) {
134
+ results = await ctx.db
135
+ .query("memories")
136
+ .withIndex("by_project_scope", (q) => q
137
+ .eq("projectId", args.projectId)
138
+ .eq("scope", args.scope)
139
+ .eq("userId", args.userId)
140
+ .eq("archived", archived))
141
+ .take(limit);
142
+ }
143
+ else if (args.memoryType) {
144
+ results = await ctx.db
145
+ .query("memories")
146
+ .withIndex("by_project", (q) => q
147
+ .eq("projectId", args.projectId)
148
+ .eq("archived", archived)
149
+ .eq("memoryType", args.memoryType))
150
+ .take(limit);
151
+ }
152
+ else {
153
+ results = await ctx.db
154
+ .query("memories")
155
+ .withIndex("by_project", (q) => q.eq("projectId", args.projectId).eq("archived", archived))
156
+ .take(limit);
157
+ }
158
+ // Post-filters
159
+ let filtered = results;
160
+ if (args.minPriority !== undefined) {
161
+ filtered = filtered.filter((m) => (m.priority ?? 0) >= args.minPriority);
162
+ }
163
+ if (args.tags && args.tags.length > 0) {
164
+ filtered = filtered.filter((m) => args.tags.some((tag) => m.tags.includes(tag)));
165
+ }
166
+ if (args.createdAfter !== undefined) {
167
+ filtered = filtered.filter((m) => m._creationTime > args.createdAfter);
168
+ }
169
+ if (args.createdBefore !== undefined) {
170
+ filtered = filtered.filter((m) => m._creationTime < args.createdBefore);
171
+ }
172
+ return filtered.map(mapDoc);
173
+ },
174
+ });
175
+ // ── get ─────────────────────────────────────────────────────────────
176
+ export const get = query({
177
+ args: {
178
+ memoryId: v.string(),
179
+ },
180
+ returns: v.union(memoryDocValidator, v.null()),
181
+ handler: async (ctx, args) => {
182
+ const id = ctx.db.normalizeId("memories", args.memoryId);
183
+ if (!id)
184
+ return null;
185
+ const doc = await ctx.db.get(id);
186
+ if (!doc)
187
+ return null;
188
+ return mapDoc(doc);
189
+ },
190
+ });
191
+ // ── search (full-text) ──────────────────────────────────────────────
192
+ export const search = query({
193
+ args: {
194
+ projectId: v.string(),
195
+ query: v.string(),
196
+ memoryType: v.optional(memoryTypeValidator),
197
+ scope: v.optional(scopeValidator),
198
+ limit: v.optional(v.float64()),
199
+ },
200
+ returns: v.array(memoryDocValidator),
201
+ handler: async (ctx, args) => {
202
+ const limit = args.limit ?? 20;
203
+ const results = await ctx.db
204
+ .query("memories")
205
+ .withSearchIndex("search_content", (q) => {
206
+ let sq = q
207
+ .search("content", args.query)
208
+ .eq("projectId", args.projectId)
209
+ .eq("archived", false);
210
+ if (args.memoryType) {
211
+ sq = sq.eq("memoryType", args.memoryType);
212
+ }
213
+ if (args.scope) {
214
+ sq = sq.eq("scope", args.scope);
215
+ }
216
+ return sq;
217
+ })
218
+ .take(limit);
219
+ return results.map(mapDoc);
220
+ },
221
+ });
222
+ // ── getContextBundle (progressive disclosure) ───────────────────────
223
+ export const getContextBundle = query({
224
+ args: {
225
+ projectId: v.string(),
226
+ scope: scopeValidator,
227
+ userId: v.optional(v.string()),
228
+ agentId: v.optional(v.string()),
229
+ activePaths: v.optional(v.array(v.string())),
230
+ maxTokens: v.optional(v.float64()),
231
+ },
232
+ returns: v.object({
233
+ pinned: v.array(memoryDocValidator),
234
+ relevant: v.array(memoryDocValidator),
235
+ available: v.array(memorySummaryValidator),
236
+ }),
237
+ handler: async (ctx, args) => {
238
+ // Get all non-archived memories for this project+scope
239
+ const all = await ctx.db
240
+ .query("memories")
241
+ .withIndex("by_project_scope", (q) => {
242
+ let sq = q
243
+ .eq("projectId", args.projectId)
244
+ .eq("scope", args.scope);
245
+ if (args.userId) {
246
+ sq = sq.eq("userId", args.userId);
247
+ }
248
+ return sq.eq("archived", false);
249
+ })
250
+ .take(500);
251
+ // Tier 1: Pinned — priority >= 0.8, boosted by positive feedback
252
+ const pinned = all
253
+ .filter((m) => {
254
+ const effectivePriority = getEffectivePriority(m);
255
+ return effectivePriority >= 0.8;
256
+ })
257
+ .map(mapDoc);
258
+ // Tier 2: Relevant — path-matched against activePaths
259
+ const relevant = all
260
+ .filter((m) => {
261
+ if (getEffectivePriority(m) >= 0.8)
262
+ return false;
263
+ if (!args.activePaths || args.activePaths.length === 0)
264
+ return false;
265
+ if (!m.paths || m.paths.length === 0)
266
+ return false;
267
+ return m.paths.some((pattern) => args.activePaths.some((active) => matchGlob(pattern, active)));
268
+ })
269
+ .map(mapDoc);
270
+ // Tier 3: Available — everything else as summaries, sorted by effective priority
271
+ const pinnedIds = new Set(pinned.map((m) => m._id));
272
+ const relevantIds = new Set(relevant.map((m) => m._id));
273
+ const available = all
274
+ .filter((m) => {
275
+ const id = m._id;
276
+ return !pinnedIds.has(id) && !relevantIds.has(id);
277
+ })
278
+ .map((m) => ({
279
+ _id: m._id,
280
+ title: m.title,
281
+ memoryType: m.memoryType,
282
+ priority: getEffectivePriority(m),
283
+ }))
284
+ .sort((a, b) => b.priority - a.priority);
285
+ return { pinned, relevant, available };
286
+ },
287
+ });
288
+ // ── history ─────────────────────────────────────────────────────────
289
+ export const history = query({
290
+ args: {
291
+ memoryId: v.string(),
292
+ limit: v.optional(v.float64()),
293
+ },
294
+ returns: v.array(historyEntryValidator),
295
+ handler: async (ctx, args) => {
296
+ const id = ctx.db.normalizeId("memories", args.memoryId);
297
+ if (!id)
298
+ return [];
299
+ const entries = await ctx.db
300
+ .query("memoryHistory")
301
+ .withIndex("by_memory", (q) => q.eq("memoryId", id))
302
+ .order("desc")
303
+ .take(args.limit ?? 50);
304
+ return entries.map((e) => ({
305
+ ...e,
306
+ _id: e._id,
307
+ memoryId: e.memoryId,
308
+ }));
309
+ },
310
+ });
311
+ // ── projectHistory ──────────────────────────────────────────────────
312
+ export const projectHistory = query({
313
+ args: {
314
+ projectId: v.string(),
315
+ limit: v.optional(v.float64()),
316
+ },
317
+ returns: v.array(historyEntryValidator),
318
+ handler: async (ctx, args) => {
319
+ const entries = await ctx.db
320
+ .query("memoryHistory")
321
+ .withIndex("by_project", (q) => q.eq("projectId", args.projectId))
322
+ .order("desc")
323
+ .take(args.limit ?? 100);
324
+ return entries.map((e) => ({
325
+ ...e,
326
+ _id: e._id,
327
+ memoryId: e.memoryId,
328
+ }));
329
+ },
330
+ });
331
+ // ── getFeedback ─────────────────────────────────────────────────────
332
+ export const getFeedback = query({
333
+ args: {
334
+ memoryId: v.string(),
335
+ limit: v.optional(v.float64()),
336
+ },
337
+ returns: v.array(feedbackEntryValidator),
338
+ handler: async (ctx, args) => {
339
+ const id = ctx.db.normalizeId("memories", args.memoryId);
340
+ if (!id)
341
+ return [];
342
+ const entries = await ctx.db
343
+ .query("memoryFeedback")
344
+ .withIndex("by_memory", (q) => q.eq("memoryId", id))
345
+ .order("desc")
346
+ .take(args.limit ?? 50);
347
+ return entries.map((e) => ({
348
+ ...e,
349
+ _id: e._id,
350
+ memoryId: e.memoryId,
351
+ }));
352
+ },
353
+ });
354
+ // ── getRelations ────────────────────────────────────────────────────
355
+ export const getRelations = query({
356
+ args: {
357
+ memoryId: v.string(),
358
+ direction: v.optional(v.union(v.literal("from"), v.literal("to"), v.literal("both"))),
359
+ relationship: v.optional(v.string()),
360
+ limit: v.optional(v.float64()),
361
+ },
362
+ returns: v.array(relationValidator),
363
+ handler: async (ctx, args) => {
364
+ const id = ctx.db.normalizeId("memories", args.memoryId);
365
+ if (!id)
366
+ return [];
367
+ const direction = args.direction ?? "both";
368
+ const limit = args.limit ?? 50;
369
+ const results = [];
370
+ if (direction === "from" || direction === "both") {
371
+ let fromQuery = ctx.db
372
+ .query("memoryRelations")
373
+ .withIndex("by_from", (q) => {
374
+ let sq = q.eq("fromMemoryId", id);
375
+ if (args.relationship)
376
+ sq = sq.eq("relationship", args.relationship);
377
+ return sq;
378
+ });
379
+ const fromResults = await fromQuery.take(limit);
380
+ results.push(...fromResults);
381
+ }
382
+ if (direction === "to" || direction === "both") {
383
+ let toQuery = ctx.db
384
+ .query("memoryRelations")
385
+ .withIndex("by_to", (q) => {
386
+ let sq = q.eq("toMemoryId", id);
387
+ if (args.relationship)
388
+ sq = sq.eq("relationship", args.relationship);
389
+ return sq;
390
+ });
391
+ const toResults = await toQuery.take(limit);
392
+ results.push(...toResults);
393
+ }
394
+ // Deduplicate
395
+ const seen = new Set();
396
+ return results
397
+ .filter((r) => {
398
+ const rid = r._id;
399
+ if (seen.has(rid))
400
+ return false;
401
+ seen.add(rid);
402
+ return true;
403
+ })
404
+ .map((r) => ({
405
+ ...r,
406
+ _id: r._id,
407
+ fromMemoryId: r.fromMemoryId,
408
+ toMemoryId: r.toMemoryId,
409
+ }));
410
+ },
411
+ });
412
+ // ── exportForTool ───────────────────────────────────────────────────
413
+ export const exportForTool = query({
414
+ args: {
415
+ projectId: v.string(),
416
+ format: toolFormatValidator,
417
+ scope: v.optional(scopeValidator),
418
+ userId: v.optional(v.string()),
419
+ since: v.optional(v.float64()),
420
+ },
421
+ returns: v.array(v.object({
422
+ path: v.string(),
423
+ content: v.string(),
424
+ checksum: v.string(),
425
+ })),
426
+ handler: async (ctx, args) => {
427
+ let memories = await ctx.db
428
+ .query("memories")
429
+ .withIndex("by_project", (q) => q.eq("projectId", args.projectId).eq("archived", false))
430
+ .take(500);
431
+ if (args.scope) {
432
+ memories = memories.filter((m) => m.scope === args.scope);
433
+ }
434
+ if (args.userId) {
435
+ memories = memories.filter((m) => m.userId === args.userId || m.scope !== "user");
436
+ }
437
+ if (args.since) {
438
+ memories = memories.filter((m) => m._creationTime > args.since || (m.lastSyncedAt ?? 0) > args.since);
439
+ }
440
+ const format = args.format;
441
+ const projectSlug = args.projectId
442
+ .replace(/[^a-z0-9-]/gi, "-")
443
+ .toLowerCase();
444
+ return memories.map((m) => formatMemoryForTool(m, format, projectSlug));
445
+ },
446
+ });
447
+ // ── Internal queries (used by actions) ──────────────────────────────
448
+ export const getEmbeddingMemory = internalQuery({
449
+ args: {
450
+ embeddingId: v.string(),
451
+ },
452
+ returns: v.union(memoryDocValidator, v.null()),
453
+ handler: async (ctx, args) => {
454
+ const embId = ctx.db.normalizeId("embeddings", args.embeddingId);
455
+ if (!embId)
456
+ return null;
457
+ const embedding = await ctx.db.get(embId);
458
+ if (!embedding)
459
+ return null;
460
+ const memory = await ctx.db.get(embedding.memoryId);
461
+ if (!memory)
462
+ return null;
463
+ return mapDoc(memory);
464
+ },
465
+ });
466
+ export const listUnembedded = internalQuery({
467
+ args: {
468
+ projectId: v.string(),
469
+ },
470
+ returns: v.array(v.object({
471
+ _id: v.string(),
472
+ title: v.string(),
473
+ })),
474
+ handler: async (ctx, args) => {
475
+ const memories = await ctx.db
476
+ .query("memories")
477
+ .withIndex("by_project", (q) => q.eq("projectId", args.projectId).eq("archived", false))
478
+ .take(500);
479
+ return memories
480
+ .filter((m) => !m.embeddingId)
481
+ .map((m) => ({
482
+ _id: m._id,
483
+ title: m.title,
484
+ }));
485
+ },
486
+ });
487
+ // Internal query for ingest pipeline — returns existing memories for dedup
488
+ export const listForIngest = internalQuery({
489
+ args: {
490
+ projectId: v.string(),
491
+ limit: v.optional(v.float64()),
492
+ },
493
+ returns: v.array(v.object({
494
+ _id: v.string(),
495
+ title: v.string(),
496
+ content: v.string(),
497
+ memoryType: memoryTypeValidator,
498
+ })),
499
+ handler: async (ctx, args) => {
500
+ const memories = await ctx.db
501
+ .query("memories")
502
+ .withIndex("by_project", (q) => q.eq("projectId", args.projectId).eq("archived", false))
503
+ .take(args.limit ?? 200);
504
+ return memories.map((m) => ({
505
+ _id: m._id,
506
+ title: m.title,
507
+ content: m.content,
508
+ memoryType: m.memoryType,
509
+ }));
510
+ },
511
+ });
512
+ // Internal query to get project settings (used by cron/actions)
513
+ export const getProjectSettings = internalQuery({
514
+ args: {
515
+ projectId: v.string(),
516
+ },
517
+ returns: v.union(v.object({
518
+ projectId: v.string(),
519
+ name: v.string(),
520
+ description: v.optional(v.string()),
521
+ settings: v.object({
522
+ autoSync: v.boolean(),
523
+ syncFormats: v.array(v.string()),
524
+ embeddingModel: v.optional(v.string()),
525
+ embeddingDimensions: v.optional(v.float64()),
526
+ factExtractionPrompt: v.optional(v.string()),
527
+ updateDecisionPrompt: v.optional(v.string()),
528
+ decayEnabled: v.optional(v.boolean()),
529
+ decayHalfLifeDays: v.optional(v.float64()),
530
+ }),
531
+ }), v.null()),
532
+ handler: async (ctx, args) => {
533
+ const project = await ctx.db
534
+ .query("projects")
535
+ .withIndex("by_projectId", (q) => q.eq("projectId", args.projectId))
536
+ .first();
537
+ if (!project)
538
+ return null;
539
+ return {
540
+ projectId: project.projectId,
541
+ name: project.name,
542
+ description: project.description,
543
+ settings: project.settings,
544
+ };
545
+ },
546
+ });
547
+ // ── Helpers ─────────────────────────────────────────────────────────
548
+ /**
549
+ * Simple glob matching: supports * and ** patterns.
550
+ */
551
+ function matchGlob(pattern, path) {
552
+ const regex = pattern
553
+ .replace(/\*\*/g, "{{GLOBSTAR}}")
554
+ .replace(/\*/g, "[^/]*")
555
+ .replace(/{{GLOBSTAR}}/g, ".*")
556
+ .replace(/\//g, "\\/");
557
+ return new RegExp(`^${regex}$`).test(path);
558
+ }
559
+ /**
560
+ * Calculate effective priority considering feedback signals.
561
+ * Positive feedback boosts priority; negative feedback reduces it.
562
+ */
563
+ function getEffectivePriority(m) {
564
+ const base = m.priority ?? 0;
565
+ const positive = m.positiveCount ?? 0;
566
+ const negative = m.negativeCount ?? 0;
567
+ if (positive === 0 && negative === 0)
568
+ return base;
569
+ // Feedback adjustment: each positive adds up to +0.05, each negative subtracts up to -0.1
570
+ const boost = Math.min(positive * 0.05, 0.2);
571
+ const penalty = Math.min(negative * 0.1, 0.5);
572
+ return Math.max(0, Math.min(1, base + boost - penalty));
573
+ }
574
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/component/queries.ts"],"names":[],"mappings":"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"}