@edihasaj/recall 0.5.2
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.
- package/LICENSE +21 -0
- package/README.md +409 -0
- package/dist/chunk-4CV4JOE5.js +27 -0
- package/dist/chunk-4CV4JOE5.js.map +1 -0
- package/dist/chunk-A5UIRZU6.js +469 -0
- package/dist/chunk-A5UIRZU6.js.map +1 -0
- package/dist/chunk-AYHFPCGY.js +964 -0
- package/dist/chunk-AYHFPCGY.js.map +1 -0
- package/dist/chunk-DNFKAHS6.js +204 -0
- package/dist/chunk-DNFKAHS6.js.map +1 -0
- package/dist/chunk-GC5XMBG4.js +551 -0
- package/dist/chunk-GC5XMBG4.js.map +1 -0
- package/dist/chunk-IILLSHLM.js +3021 -0
- package/dist/chunk-IILLSHLM.js.map +1 -0
- package/dist/chunk-LVQW6WHK.js +146 -0
- package/dist/chunk-LVQW6WHK.js.map +1 -0
- package/dist/chunk-LZ6PMQRX.js +955 -0
- package/dist/chunk-LZ6PMQRX.js.map +1 -0
- package/dist/chunk-PC43MBX5.js +2960 -0
- package/dist/chunk-PC43MBX5.js.map +1 -0
- package/dist/chunk-VEPXEHRZ.js +1763 -0
- package/dist/chunk-VEPXEHRZ.js.map +1 -0
- package/dist/cleanup-TVOX2S2S.js +28 -0
- package/dist/cleanup-TVOX2S2S.js.map +1 -0
- package/dist/cli.js +3425 -0
- package/dist/cli.js.map +1 -0
- package/dist/daemon.js +1298 -0
- package/dist/daemon.js.map +1 -0
- package/dist/dispatcher-UGMU6THT.js +15 -0
- package/dist/dispatcher-UGMU6THT.js.map +1 -0
- package/dist/keychain-5QG52ANO.js +22 -0
- package/dist/keychain-5QG52ANO.js.map +1 -0
- package/dist/mcp.js +21 -0
- package/dist/mcp.js.map +1 -0
- package/dist/quality-Z7LPMMBC.js +17 -0
- package/dist/quality-Z7LPMMBC.js.map +1 -0
- package/dist/sync-server.js +225 -0
- package/dist/sync-server.js.map +1 -0
- package/dist/tasks-UOLSPXJQ.js +61 -0
- package/dist/tasks-UOLSPXJQ.js.map +1 -0
- package/dist/usage-CY3V72YN.js +101 -0
- package/dist/usage-CY3V72YN.js.map +1 -0
- package/drizzle/0000_initial_create.sql +240 -0
- package/drizzle/0001_rich_liz_osborn.sql +21 -0
- package/drizzle/0002_unknown_spot.sql +18 -0
- package/drizzle/0003_red_wendigo.sql +19 -0
- package/drizzle/0004_early_carlie_cooper.sql +1 -0
- package/drizzle/0005_simple_emma_frost.sql +96 -0
- package/drizzle/0006_keen_mongoose.sql +2 -0
- package/drizzle/0007_flawless_maximus.sql +15 -0
- package/drizzle/meta/0000_snapshot.json +1630 -0
- package/drizzle/meta/0001_snapshot.json +1773 -0
- package/drizzle/meta/0002_snapshot.json +1891 -0
- package/drizzle/meta/0003_snapshot.json +2014 -0
- package/drizzle/meta/0004_snapshot.json +2022 -0
- package/drizzle/meta/0005_snapshot.json +2064 -0
- package/drizzle/meta/0006_snapshot.json +2078 -0
- package/drizzle/meta/0007_snapshot.json +2183 -0
- package/drizzle/meta/_journal.json +62 -0
- package/package.json +64 -0
- package/scripts/recall-claude +7 -0
- package/scripts/recall-codex +7 -0
- package/scripts/recall-session +71 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-4CV4JOE5.js";
|
|
4
|
+
|
|
5
|
+
// src/db/schema.ts
|
|
6
|
+
var schema_exports = {};
|
|
7
|
+
__export(schema_exports, {
|
|
8
|
+
activityEvents: () => activityEvents,
|
|
9
|
+
approvalRequests: () => approvalRequests,
|
|
10
|
+
auditTrail: () => auditTrail,
|
|
11
|
+
contradictions: () => contradictions,
|
|
12
|
+
evalSessions: () => evalSessions,
|
|
13
|
+
feedbackEvents: () => feedbackEvents,
|
|
14
|
+
historyInjections: () => historyInjections,
|
|
15
|
+
historySnippetEmbeddings: () => historySnippetEmbeddings,
|
|
16
|
+
historySnippets: () => historySnippets,
|
|
17
|
+
hookCalls: () => hookCalls,
|
|
18
|
+
implicitSignals: () => implicitSignals,
|
|
19
|
+
llmUsage: () => llmUsage,
|
|
20
|
+
maintenanceCleanupLog: () => maintenanceCleanupLog,
|
|
21
|
+
memories: () => memories,
|
|
22
|
+
memoryEmbeddings: () => memoryEmbeddings,
|
|
23
|
+
memoryInjections: () => memoryInjections,
|
|
24
|
+
memoryMaintenanceTasks: () => memoryMaintenanceTasks,
|
|
25
|
+
policyRules: () => policyRules,
|
|
26
|
+
qualitySnapshots: () => qualitySnapshots,
|
|
27
|
+
syncState: () => syncState
|
|
28
|
+
});
|
|
29
|
+
import { sqliteTable, text, integer, real, blob, index, uniqueIndex } from "drizzle-orm/sqlite-core";
|
|
30
|
+
var memories = sqliteTable("memories", {
|
|
31
|
+
id: text("id").primaryKey(),
|
|
32
|
+
type: text("type", {
|
|
33
|
+
enum: ["rule", "command", "gotcha", "decision", "review_pattern"]
|
|
34
|
+
}).notNull(),
|
|
35
|
+
text: text("text").notNull(),
|
|
36
|
+
scope: text("scope", {
|
|
37
|
+
enum: ["session", "path", "repo", "team", "global"]
|
|
38
|
+
}).notNull(),
|
|
39
|
+
path_scope: text("path_scope"),
|
|
40
|
+
repo: text("repo"),
|
|
41
|
+
status: text("status", {
|
|
42
|
+
enum: ["transient", "candidate", "active", "rejected"]
|
|
43
|
+
}).notNull(),
|
|
44
|
+
confidence: real("confidence").notNull().default(0),
|
|
45
|
+
source: text("source", {
|
|
46
|
+
enum: [
|
|
47
|
+
"user_correction",
|
|
48
|
+
"user_reported_review",
|
|
49
|
+
"repo_scan",
|
|
50
|
+
"config_parse"
|
|
51
|
+
]
|
|
52
|
+
}).notNull(),
|
|
53
|
+
evidence: text("evidence", { mode: "json" }).notNull().default("[]"),
|
|
54
|
+
capture_context: text("capture_context", { mode: "json" }),
|
|
55
|
+
supersedes: text("supersedes"),
|
|
56
|
+
dedupe_key: text("dedupe_key"),
|
|
57
|
+
created_at: text("created_at").notNull(),
|
|
58
|
+
updated_at: text("updated_at").notNull(),
|
|
59
|
+
last_validated_at: text("last_validated_at"),
|
|
60
|
+
last_injected_at: text("last_injected_at"),
|
|
61
|
+
injection_count: integer("injection_count").notNull().default(0),
|
|
62
|
+
override_count: integer("override_count").notNull().default(0),
|
|
63
|
+
repetition_count: integer("repetition_count").notNull().default(0),
|
|
64
|
+
// Phase 2: sync + embeddings
|
|
65
|
+
team_id: text("team_id"),
|
|
66
|
+
sync_version: integer("sync_version").notNull().default(0),
|
|
67
|
+
// When false, the memory stays queryable via MCP but is excluded from the
|
|
68
|
+
// auto-injected SessionStart context block. Used to suppress noisy
|
|
69
|
+
// command-type memories that the agent re-derives from the repo anyway.
|
|
70
|
+
auto_inject: integer("auto_inject", { mode: "boolean" }).notNull().default(true)
|
|
71
|
+
}, (table) => [
|
|
72
|
+
index("idx_memories_repo").on(table.repo),
|
|
73
|
+
index("idx_memories_status").on(table.status),
|
|
74
|
+
index("idx_memories_repo_status").on(table.repo, table.status),
|
|
75
|
+
index("idx_memories_team").on(table.team_id),
|
|
76
|
+
uniqueIndex("uq_memories_dedupe_key").on(table.dedupe_key)
|
|
77
|
+
]);
|
|
78
|
+
var memoryEmbeddings = sqliteTable("memory_embeddings", {
|
|
79
|
+
memory_id: text("memory_id").primaryKey().references(() => memories.id, { onDelete: "cascade" }),
|
|
80
|
+
model: text("model").notNull(),
|
|
81
|
+
embedding_dimensions: integer("embedding_dimensions").notNull(),
|
|
82
|
+
index_dimensions: integer("index_dimensions").notNull(),
|
|
83
|
+
version: text("version").notNull(),
|
|
84
|
+
content_hash: text("content_hash").notNull(),
|
|
85
|
+
updated_at: text("updated_at").notNull(),
|
|
86
|
+
embedding: blob("embedding", { mode: "buffer" }).notNull()
|
|
87
|
+
}, (table) => [
|
|
88
|
+
index("idx_memory_embeddings_model").on(table.model),
|
|
89
|
+
index("idx_memory_embeddings_updated").on(table.updated_at)
|
|
90
|
+
]);
|
|
91
|
+
var historySnippets = sqliteTable("history_snippets", {
|
|
92
|
+
id: text("id").primaryKey(),
|
|
93
|
+
repo: text("repo"),
|
|
94
|
+
session_id: text("session_id"),
|
|
95
|
+
kind: text("kind", {
|
|
96
|
+
enum: ["session_summary", "correction_summary", "decision_summary", "review_summary", "compile_summary", "repo_synthesis"]
|
|
97
|
+
}).notNull(),
|
|
98
|
+
text: text("text").notNull(),
|
|
99
|
+
dedupe_key: text("dedupe_key"),
|
|
100
|
+
source_activity_ids: text("source_activity_ids", { mode: "json" }).notNull().default("[]"),
|
|
101
|
+
created_at: text("created_at").notNull(),
|
|
102
|
+
updated_at: text("updated_at").notNull()
|
|
103
|
+
}, (table) => [
|
|
104
|
+
index("idx_history_repo").on(table.repo),
|
|
105
|
+
index("idx_history_session").on(table.session_id),
|
|
106
|
+
index("idx_history_kind").on(table.kind),
|
|
107
|
+
index("idx_history_created").on(table.created_at),
|
|
108
|
+
uniqueIndex("uq_history_snippets_dedupe_key").on(table.dedupe_key)
|
|
109
|
+
]);
|
|
110
|
+
var historySnippetEmbeddings = sqliteTable("history_snippet_embeddings", {
|
|
111
|
+
snippet_id: text("snippet_id").primaryKey().references(() => historySnippets.id, { onDelete: "cascade" }),
|
|
112
|
+
model: text("model").notNull(),
|
|
113
|
+
embedding_dimensions: integer("embedding_dimensions").notNull(),
|
|
114
|
+
index_dimensions: integer("index_dimensions").notNull(),
|
|
115
|
+
version: text("version").notNull(),
|
|
116
|
+
content_hash: text("content_hash").notNull(),
|
|
117
|
+
updated_at: text("updated_at").notNull(),
|
|
118
|
+
embedding: blob("embedding", { mode: "buffer" }).notNull()
|
|
119
|
+
}, (table) => [
|
|
120
|
+
index("idx_history_embeddings_model").on(table.model),
|
|
121
|
+
index("idx_history_embeddings_updated").on(table.updated_at)
|
|
122
|
+
]);
|
|
123
|
+
var historyInjections = sqliteTable("history_injections", {
|
|
124
|
+
id: text("id").primaryKey(),
|
|
125
|
+
snippet_id: text("snippet_id").notNull().references(() => historySnippets.id, { onDelete: "cascade" }),
|
|
126
|
+
session_id: text("session_id").notNull(),
|
|
127
|
+
repo: text("repo"),
|
|
128
|
+
injected_at: text("injected_at").notNull()
|
|
129
|
+
}, (table) => [
|
|
130
|
+
index("idx_history_injections_snippet").on(table.snippet_id),
|
|
131
|
+
index("idx_history_injections_session").on(table.session_id),
|
|
132
|
+
index("idx_history_injections_repo").on(table.repo),
|
|
133
|
+
uniqueIndex("uq_history_injections_snippet_session").on(table.snippet_id, table.session_id)
|
|
134
|
+
]);
|
|
135
|
+
var feedbackEvents = sqliteTable("feedback_events", {
|
|
136
|
+
id: text("id").primaryKey(),
|
|
137
|
+
memory_id: text("memory_id").notNull().references(() => memories.id),
|
|
138
|
+
session_id: text("session_id").notNull(),
|
|
139
|
+
injected: integer("injected", { mode: "boolean" }).notNull(),
|
|
140
|
+
outcome: text("outcome", {
|
|
141
|
+
enum: ["followed", "overridden", "ignored", "contradicted"]
|
|
142
|
+
}).notNull(),
|
|
143
|
+
timestamp: text("timestamp").notNull()
|
|
144
|
+
}, (table) => [
|
|
145
|
+
index("idx_feedback_memory").on(table.memory_id),
|
|
146
|
+
index("idx_feedback_session").on(table.session_id)
|
|
147
|
+
]);
|
|
148
|
+
var memoryInjections = sqliteTable("memory_injections", {
|
|
149
|
+
id: text("id").primaryKey(),
|
|
150
|
+
memory_id: text("memory_id").notNull().references(() => memories.id, { onDelete: "cascade" }),
|
|
151
|
+
session_id: text("session_id").notNull(),
|
|
152
|
+
repo: text("repo"),
|
|
153
|
+
injected_at: text("injected_at").notNull(),
|
|
154
|
+
outcome: text("outcome", {
|
|
155
|
+
enum: ["followed", "overridden", "ignored", "contradicted"]
|
|
156
|
+
}),
|
|
157
|
+
outcome_at: text("outcome_at")
|
|
158
|
+
}, (table) => [
|
|
159
|
+
index("idx_memory_injections_memory").on(table.memory_id),
|
|
160
|
+
index("idx_memory_injections_session").on(table.session_id),
|
|
161
|
+
uniqueIndex("uq_memory_injections_memory_session").on(table.memory_id, table.session_id)
|
|
162
|
+
]);
|
|
163
|
+
var activityEvents = sqliteTable("activity_events", {
|
|
164
|
+
id: text("id").primaryKey(),
|
|
165
|
+
session_id: text("session_id"),
|
|
166
|
+
repo: text("repo"),
|
|
167
|
+
path: text("path"),
|
|
168
|
+
// source is a free-form string tagged as "<transport>[:<client>]"
|
|
169
|
+
// (e.g. "mcp", "mcp:claude-code", "hook:codex", "cli", "daemon").
|
|
170
|
+
// The runtime regex in src/types.ts validates the shape.
|
|
171
|
+
source: text("source").notNull(),
|
|
172
|
+
event_type: text("event_type", {
|
|
173
|
+
enum: [
|
|
174
|
+
"compile",
|
|
175
|
+
"query",
|
|
176
|
+
"scan",
|
|
177
|
+
"correction",
|
|
178
|
+
"review",
|
|
179
|
+
"feedback",
|
|
180
|
+
"signal",
|
|
181
|
+
"session_start",
|
|
182
|
+
"session_event",
|
|
183
|
+
"session_end",
|
|
184
|
+
"tool_call"
|
|
185
|
+
]
|
|
186
|
+
}).notNull(),
|
|
187
|
+
memory_ids: text("memory_ids", { mode: "json" }).notNull().default("[]"),
|
|
188
|
+
dedupe_key: text("dedupe_key"),
|
|
189
|
+
request: text("request", { mode: "json" }).notNull().default("{}"),
|
|
190
|
+
result: text("result", { mode: "json" }).notNull().default("{}"),
|
|
191
|
+
created_at: text("created_at").notNull()
|
|
192
|
+
}, (table) => [
|
|
193
|
+
index("idx_activity_session").on(table.session_id),
|
|
194
|
+
index("idx_activity_repo").on(table.repo),
|
|
195
|
+
index("idx_activity_event_type").on(table.event_type),
|
|
196
|
+
index("idx_activity_created").on(table.created_at),
|
|
197
|
+
uniqueIndex("uq_activity_events_dedupe_key").on(table.dedupe_key)
|
|
198
|
+
]);
|
|
199
|
+
var hookCalls = sqliteTable("hook_calls", {
|
|
200
|
+
id: text("id").primaryKey(),
|
|
201
|
+
event: text("event", {
|
|
202
|
+
enum: ["session_started", "prompt_submitted", "tool_invoked", "session_ended"]
|
|
203
|
+
}).notNull(),
|
|
204
|
+
agent: text("agent").notNull(),
|
|
205
|
+
dedupe_key: text("dedupe_key"),
|
|
206
|
+
duration_ms: integer("duration_ms").notNull(),
|
|
207
|
+
ok: integer("ok", { mode: "boolean" }).notNull(),
|
|
208
|
+
created_at: text("created_at").notNull()
|
|
209
|
+
}, (table) => [
|
|
210
|
+
index("idx_hook_calls_event").on(table.event),
|
|
211
|
+
index("idx_hook_calls_agent").on(table.agent),
|
|
212
|
+
index("idx_hook_calls_created").on(table.created_at),
|
|
213
|
+
uniqueIndex("uq_hook_calls_dedupe_key").on(table.dedupe_key)
|
|
214
|
+
]);
|
|
215
|
+
var syncState = sqliteTable("sync_state", {
|
|
216
|
+
id: text("id").primaryKey(),
|
|
217
|
+
// "local" singleton
|
|
218
|
+
remote_url: text("remote_url"),
|
|
219
|
+
team_id: text("team_id"),
|
|
220
|
+
last_push_at: text("last_push_at"),
|
|
221
|
+
last_pull_at: text("last_pull_at"),
|
|
222
|
+
last_push_version: integer("last_push_version").notNull().default(0),
|
|
223
|
+
last_pull_version: integer("last_pull_version").notNull().default(0)
|
|
224
|
+
});
|
|
225
|
+
var evalSessions = sqliteTable("eval_sessions", {
|
|
226
|
+
id: text("id").primaryKey(),
|
|
227
|
+
repo: text("repo").notNull(),
|
|
228
|
+
started_at: text("started_at").notNull(),
|
|
229
|
+
ended_at: text("ended_at"),
|
|
230
|
+
memories_injected: integer("memories_injected").notNull().default(0),
|
|
231
|
+
memories_followed: integer("memories_followed").notNull().default(0),
|
|
232
|
+
memories_overridden: integer("memories_overridden").notNull().default(0),
|
|
233
|
+
user_corrections: integer("user_corrections").notNull().default(0),
|
|
234
|
+
test_passes: integer("test_passes").notNull().default(0),
|
|
235
|
+
test_failures: integer("test_failures").notNull().default(0)
|
|
236
|
+
}, (table) => [
|
|
237
|
+
index("idx_eval_repo").on(table.repo)
|
|
238
|
+
]);
|
|
239
|
+
var policyRules = sqliteTable("policy_rules", {
|
|
240
|
+
id: text("id").primaryKey(),
|
|
241
|
+
org_id: text("org_id").notNull(),
|
|
242
|
+
rule_type: text("rule_type", {
|
|
243
|
+
enum: [
|
|
244
|
+
"min_confidence",
|
|
245
|
+
"require_approval",
|
|
246
|
+
"allowed_sources",
|
|
247
|
+
"blocked_scopes",
|
|
248
|
+
"auto_approve_pattern",
|
|
249
|
+
"max_active_per_repo",
|
|
250
|
+
"require_evidence_count"
|
|
251
|
+
]
|
|
252
|
+
}).notNull(),
|
|
253
|
+
config: text("config", { mode: "json" }).notNull().default("{}"),
|
|
254
|
+
enabled: integer("enabled", { mode: "boolean" }).notNull().default(true),
|
|
255
|
+
created_at: text("created_at").notNull(),
|
|
256
|
+
updated_at: text("updated_at").notNull()
|
|
257
|
+
}, (table) => [
|
|
258
|
+
index("idx_policy_org").on(table.org_id)
|
|
259
|
+
]);
|
|
260
|
+
var approvalRequests = sqliteTable("approval_requests", {
|
|
261
|
+
id: text("id").primaryKey(),
|
|
262
|
+
memory_id: text("memory_id").notNull().references(() => memories.id),
|
|
263
|
+
org_id: text("org_id").notNull(),
|
|
264
|
+
requested_by: text("requested_by").notNull(),
|
|
265
|
+
status: text("status", {
|
|
266
|
+
enum: ["pending", "approved", "denied"]
|
|
267
|
+
}).notNull().default("pending"),
|
|
268
|
+
reviewed_by: text("reviewed_by"),
|
|
269
|
+
reason: text("reason"),
|
|
270
|
+
created_at: text("created_at").notNull(),
|
|
271
|
+
resolved_at: text("resolved_at")
|
|
272
|
+
}, (table) => [
|
|
273
|
+
index("idx_approval_org").on(table.org_id),
|
|
274
|
+
index("idx_approval_status").on(table.status)
|
|
275
|
+
]);
|
|
276
|
+
var contradictions = sqliteTable("contradictions", {
|
|
277
|
+
id: text("id").primaryKey(),
|
|
278
|
+
memory_a_id: text("memory_a_id").notNull().references(() => memories.id),
|
|
279
|
+
memory_b_id: text("memory_b_id").notNull().references(() => memories.id),
|
|
280
|
+
contradiction_type: text("contradiction_type", {
|
|
281
|
+
enum: ["direct_negation", "conflicting_rules", "scope_overlap", "superseded"]
|
|
282
|
+
}).notNull(),
|
|
283
|
+
severity: text("severity", { enum: ["low", "medium", "high"] }).notNull(),
|
|
284
|
+
description: text("description").notNull(),
|
|
285
|
+
resolved: integer("resolved", { mode: "boolean" }).notNull().default(false),
|
|
286
|
+
resolution: text("resolution"),
|
|
287
|
+
detected_at: text("detected_at").notNull(),
|
|
288
|
+
resolved_at: text("resolved_at")
|
|
289
|
+
}, (table) => [
|
|
290
|
+
index("idx_contradictions_resolved").on(table.resolved)
|
|
291
|
+
]);
|
|
292
|
+
var auditTrail = sqliteTable("audit_trail", {
|
|
293
|
+
id: text("id").primaryKey(),
|
|
294
|
+
memory_id: text("memory_id").notNull(),
|
|
295
|
+
action: text("action", {
|
|
296
|
+
enum: [
|
|
297
|
+
"created",
|
|
298
|
+
"promoted",
|
|
299
|
+
"demoted",
|
|
300
|
+
"rejected",
|
|
301
|
+
"confirmed",
|
|
302
|
+
"reactivated",
|
|
303
|
+
"edited",
|
|
304
|
+
"pruned",
|
|
305
|
+
"policy_applied",
|
|
306
|
+
"approval_requested",
|
|
307
|
+
"approval_resolved",
|
|
308
|
+
"contradiction_detected",
|
|
309
|
+
"contradiction_resolved",
|
|
310
|
+
"rolled_back"
|
|
311
|
+
]
|
|
312
|
+
}).notNull(),
|
|
313
|
+
actor: text("actor").notNull(),
|
|
314
|
+
before_snapshot: text("before_snapshot"),
|
|
315
|
+
after_snapshot: text("after_snapshot"),
|
|
316
|
+
reason: text("reason"),
|
|
317
|
+
timestamp: text("timestamp").notNull()
|
|
318
|
+
}, (table) => [
|
|
319
|
+
index("idx_audit_memory").on(table.memory_id),
|
|
320
|
+
index("idx_audit_timestamp").on(table.timestamp)
|
|
321
|
+
]);
|
|
322
|
+
var memoryMaintenanceTasks = sqliteTable("memory_maintenance_tasks", {
|
|
323
|
+
id: text("id").primaryKey(),
|
|
324
|
+
kind: text("kind", {
|
|
325
|
+
enum: [
|
|
326
|
+
"summarize_history",
|
|
327
|
+
"merge_duplicates",
|
|
328
|
+
"refine_candidate",
|
|
329
|
+
"summarize_session",
|
|
330
|
+
"synthesize_repo",
|
|
331
|
+
"verify_capture"
|
|
332
|
+
]
|
|
333
|
+
}).notNull(),
|
|
334
|
+
status: text("status", {
|
|
335
|
+
enum: ["pending", "claimed", "submitted", "completed", "abandoned"]
|
|
336
|
+
}).notNull(),
|
|
337
|
+
priority: integer("priority").notNull().default(0),
|
|
338
|
+
repo: text("repo"),
|
|
339
|
+
target_key: text("target_key").notNull(),
|
|
340
|
+
payload: text("payload", { mode: "json" }).notNull(),
|
|
341
|
+
result: text("result", { mode: "json" }),
|
|
342
|
+
failure_reason: text("failure_reason"),
|
|
343
|
+
claimed_by: text("claimed_by"),
|
|
344
|
+
claimed_at: text("claimed_at"),
|
|
345
|
+
claim_expires_at: text("claim_expires_at"),
|
|
346
|
+
submitted_at: text("submitted_at"),
|
|
347
|
+
completed_at: text("completed_at"),
|
|
348
|
+
created_at: text("created_at").notNull(),
|
|
349
|
+
attempts: integer("attempts").notNull().default(0),
|
|
350
|
+
max_attempts: integer("max_attempts").notNull().default(3)
|
|
351
|
+
}, (table) => [
|
|
352
|
+
index("idx_mmt_status_priority").on(table.status, table.priority, table.created_at),
|
|
353
|
+
index("idx_mmt_repo_status").on(table.repo, table.status),
|
|
354
|
+
index("idx_mmt_claim_expires").on(table.claim_expires_at),
|
|
355
|
+
index("idx_mmt_kind_target").on(table.kind, table.target_key)
|
|
356
|
+
]);
|
|
357
|
+
var implicitSignals = sqliteTable("implicit_signals", {
|
|
358
|
+
id: text("id").primaryKey(),
|
|
359
|
+
memory_id: text("memory_id").notNull().references(() => memories.id),
|
|
360
|
+
session_id: text("session_id").notNull(),
|
|
361
|
+
signal_type: text("signal_type", {
|
|
362
|
+
enum: [
|
|
363
|
+
"test_pass",
|
|
364
|
+
"test_fail",
|
|
365
|
+
"file_unchanged",
|
|
366
|
+
"file_rewritten",
|
|
367
|
+
"task_accepted",
|
|
368
|
+
"task_rejected"
|
|
369
|
+
]
|
|
370
|
+
}).notNull(),
|
|
371
|
+
timestamp: text("timestamp").notNull(),
|
|
372
|
+
context: text("context")
|
|
373
|
+
}, (table) => [
|
|
374
|
+
index("idx_implicit_memory").on(table.memory_id),
|
|
375
|
+
index("idx_implicit_session").on(table.session_id)
|
|
376
|
+
]);
|
|
377
|
+
var llmUsage = sqliteTable("llm_usage", {
|
|
378
|
+
id: text("id").primaryKey(),
|
|
379
|
+
provider: text("provider").notNull(),
|
|
380
|
+
model: text("model").notNull(),
|
|
381
|
+
task_kind: text("task_kind").notNull(),
|
|
382
|
+
task_id: text("task_id"),
|
|
383
|
+
repo: text("repo"),
|
|
384
|
+
prompt_tokens: integer("prompt_tokens").notNull().default(0),
|
|
385
|
+
completion_tokens: integer("completion_tokens").notNull().default(0),
|
|
386
|
+
total_tokens: integer("total_tokens").notNull().default(0),
|
|
387
|
+
cost_usd: real("cost_usd"),
|
|
388
|
+
duration_ms: integer("duration_ms").notNull().default(0),
|
|
389
|
+
ok: integer("ok", { mode: "boolean" }).notNull().default(true),
|
|
390
|
+
error: text("error"),
|
|
391
|
+
created_at: text("created_at").notNull()
|
|
392
|
+
}, (table) => [
|
|
393
|
+
index("idx_llm_usage_created").on(table.created_at),
|
|
394
|
+
index("idx_llm_usage_provider_model").on(table.provider, table.model),
|
|
395
|
+
index("idx_llm_usage_task_kind").on(table.task_kind),
|
|
396
|
+
index("idx_llm_usage_repo").on(table.repo)
|
|
397
|
+
]);
|
|
398
|
+
var qualitySnapshots = sqliteTable("quality_snapshots", {
|
|
399
|
+
id: text("id").primaryKey(),
|
|
400
|
+
taken_at: text("taken_at").notNull(),
|
|
401
|
+
window_start: text("window_start").notNull(),
|
|
402
|
+
window_end: text("window_end").notNull(),
|
|
403
|
+
injections_total: integer("injections_total").notNull(),
|
|
404
|
+
injections_resolved: integer("injections_resolved").notNull(),
|
|
405
|
+
injections_followed: integer("injections_followed").notNull(),
|
|
406
|
+
injections_overridden: integer("injections_overridden").notNull(),
|
|
407
|
+
injections_contradicted: integer("injections_contradicted").notNull(),
|
|
408
|
+
injections_ignored: integer("injections_ignored").notNull(),
|
|
409
|
+
followed_rate_resolved: real("followed_rate_resolved"),
|
|
410
|
+
active_rule_count: integer("active_rule_count").notNull(),
|
|
411
|
+
active_command_count: integer("active_command_count").notNull(),
|
|
412
|
+
candidate_correction_count: integer("candidate_correction_count").notNull(),
|
|
413
|
+
history_injections_total: integer("history_injections_total").notNull().default(0),
|
|
414
|
+
history_snippets_injected: integer("history_snippets_injected").notNull().default(0),
|
|
415
|
+
notes: text("notes")
|
|
416
|
+
}, (table) => [
|
|
417
|
+
index("idx_quality_snapshots_taken").on(table.taken_at)
|
|
418
|
+
]);
|
|
419
|
+
var maintenanceCleanupLog = sqliteTable("maintenance_cleanup_log", {
|
|
420
|
+
id: text("id").primaryKey(),
|
|
421
|
+
run_id: text("run_id").notNull(),
|
|
422
|
+
action: text("action", {
|
|
423
|
+
enum: [
|
|
424
|
+
"dedupe_exact_merge",
|
|
425
|
+
"reject_fragment_candidate",
|
|
426
|
+
"promote_repeat_correction",
|
|
427
|
+
"suppress_unproductive_command",
|
|
428
|
+
"globalize_cross_repo"
|
|
429
|
+
]
|
|
430
|
+
}).notNull(),
|
|
431
|
+
memory_id: text("memory_id").notNull(),
|
|
432
|
+
related_memory_id: text("related_memory_id"),
|
|
433
|
+
before_snapshot: text("before_snapshot", { mode: "json" }),
|
|
434
|
+
after_snapshot: text("after_snapshot", { mode: "json" }),
|
|
435
|
+
details: text("details", { mode: "json" }).notNull().default("{}"),
|
|
436
|
+
reverted: integer("reverted", { mode: "boolean" }).notNull().default(false),
|
|
437
|
+
reverted_at: text("reverted_at"),
|
|
438
|
+
created_at: text("created_at").notNull()
|
|
439
|
+
}, (table) => [
|
|
440
|
+
index("idx_cleanup_log_run").on(table.run_id),
|
|
441
|
+
index("idx_cleanup_log_memory").on(table.memory_id),
|
|
442
|
+
index("idx_cleanup_log_action").on(table.action),
|
|
443
|
+
index("idx_cleanup_log_created").on(table.created_at)
|
|
444
|
+
]);
|
|
445
|
+
|
|
446
|
+
export {
|
|
447
|
+
memories,
|
|
448
|
+
memoryEmbeddings,
|
|
449
|
+
historySnippets,
|
|
450
|
+
historySnippetEmbeddings,
|
|
451
|
+
historyInjections,
|
|
452
|
+
feedbackEvents,
|
|
453
|
+
memoryInjections,
|
|
454
|
+
activityEvents,
|
|
455
|
+
hookCalls,
|
|
456
|
+
syncState,
|
|
457
|
+
evalSessions,
|
|
458
|
+
policyRules,
|
|
459
|
+
approvalRequests,
|
|
460
|
+
contradictions,
|
|
461
|
+
auditTrail,
|
|
462
|
+
memoryMaintenanceTasks,
|
|
463
|
+
implicitSignals,
|
|
464
|
+
llmUsage,
|
|
465
|
+
qualitySnapshots,
|
|
466
|
+
maintenanceCleanupLog,
|
|
467
|
+
schema_exports
|
|
468
|
+
};
|
|
469
|
+
//# sourceMappingURL=chunk-A5UIRZU6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/db/schema.ts"],"sourcesContent":["import { sqliteTable, text, integer, real, blob, index, uniqueIndex } from \"drizzle-orm/sqlite-core\";\n\nexport const memories = sqliteTable(\"memories\", {\n id: text(\"id\").primaryKey(),\n type: text(\"type\", {\n enum: [\"rule\", \"command\", \"gotcha\", \"decision\", \"review_pattern\"],\n }).notNull(),\n text: text(\"text\").notNull(),\n scope: text(\"scope\", {\n enum: [\"session\", \"path\", \"repo\", \"team\", \"global\"],\n }).notNull(),\n path_scope: text(\"path_scope\"),\n repo: text(\"repo\"),\n status: text(\"status\", {\n enum: [\"transient\", \"candidate\", \"active\", \"rejected\"],\n }).notNull(),\n confidence: real(\"confidence\").notNull().default(0),\n source: text(\"source\", {\n enum: [\n \"user_correction\",\n \"user_reported_review\",\n \"repo_scan\",\n \"config_parse\",\n ],\n }).notNull(),\n evidence: text(\"evidence\", { mode: \"json\" }).notNull().default(\"[]\"),\n capture_context: text(\"capture_context\", { mode: \"json\" }),\n supersedes: text(\"supersedes\"),\n dedupe_key: text(\"dedupe_key\"),\n created_at: text(\"created_at\").notNull(),\n updated_at: text(\"updated_at\").notNull(),\n last_validated_at: text(\"last_validated_at\"),\n last_injected_at: text(\"last_injected_at\"),\n injection_count: integer(\"injection_count\").notNull().default(0),\n override_count: integer(\"override_count\").notNull().default(0),\n repetition_count: integer(\"repetition_count\").notNull().default(0),\n // Phase 2: sync + embeddings\n team_id: text(\"team_id\"),\n sync_version: integer(\"sync_version\").notNull().default(0),\n // When false, the memory stays queryable via MCP but is excluded from the\n // auto-injected SessionStart context block. Used to suppress noisy\n // command-type memories that the agent re-derives from the repo anyway.\n auto_inject: integer(\"auto_inject\", { mode: \"boolean\" }).notNull().default(true),\n}, (table) => ([\n index(\"idx_memories_repo\").on(table.repo),\n index(\"idx_memories_status\").on(table.status),\n index(\"idx_memories_repo_status\").on(table.repo, table.status),\n index(\"idx_memories_team\").on(table.team_id),\n uniqueIndex(\"uq_memories_dedupe_key\").on(table.dedupe_key),\n]));\n\nexport const memoryEmbeddings = sqliteTable(\"memory_embeddings\", {\n memory_id: text(\"memory_id\")\n .primaryKey()\n .references(() => memories.id, { onDelete: \"cascade\" }),\n model: text(\"model\").notNull(),\n embedding_dimensions: integer(\"embedding_dimensions\").notNull(),\n index_dimensions: integer(\"index_dimensions\").notNull(),\n version: text(\"version\").notNull(),\n content_hash: text(\"content_hash\").notNull(),\n updated_at: text(\"updated_at\").notNull(),\n embedding: blob(\"embedding\", { mode: \"buffer\" }).notNull(),\n}, (table) => ([\n index(\"idx_memory_embeddings_model\").on(table.model),\n index(\"idx_memory_embeddings_updated\").on(table.updated_at),\n]));\n\nexport const historySnippets = sqliteTable(\"history_snippets\", {\n id: text(\"id\").primaryKey(),\n repo: text(\"repo\"),\n session_id: text(\"session_id\"),\n kind: text(\"kind\", {\n enum: [\"session_summary\", \"correction_summary\", \"decision_summary\", \"review_summary\", \"compile_summary\", \"repo_synthesis\"],\n }).notNull(),\n text: text(\"text\").notNull(),\n dedupe_key: text(\"dedupe_key\"),\n source_activity_ids: text(\"source_activity_ids\", { mode: \"json\" }).notNull().default(\"[]\"),\n created_at: text(\"created_at\").notNull(),\n updated_at: text(\"updated_at\").notNull(),\n}, (table) => ([\n index(\"idx_history_repo\").on(table.repo),\n index(\"idx_history_session\").on(table.session_id),\n index(\"idx_history_kind\").on(table.kind),\n index(\"idx_history_created\").on(table.created_at),\n uniqueIndex(\"uq_history_snippets_dedupe_key\").on(table.dedupe_key),\n]));\n\nexport const historySnippetEmbeddings = sqliteTable(\"history_snippet_embeddings\", {\n snippet_id: text(\"snippet_id\")\n .primaryKey()\n .references(() => historySnippets.id, { onDelete: \"cascade\" }),\n model: text(\"model\").notNull(),\n embedding_dimensions: integer(\"embedding_dimensions\").notNull(),\n index_dimensions: integer(\"index_dimensions\").notNull(),\n version: text(\"version\").notNull(),\n content_hash: text(\"content_hash\").notNull(),\n updated_at: text(\"updated_at\").notNull(),\n embedding: blob(\"embedding\", { mode: \"buffer\" }).notNull(),\n}, (table) => ([\n index(\"idx_history_embeddings_model\").on(table.model),\n index(\"idx_history_embeddings_updated\").on(table.updated_at),\n]));\n\nexport const historyInjections = sqliteTable(\"history_injections\", {\n id: text(\"id\").primaryKey(),\n snippet_id: text(\"snippet_id\")\n .notNull()\n .references(() => historySnippets.id, { onDelete: \"cascade\" }),\n session_id: text(\"session_id\").notNull(),\n repo: text(\"repo\"),\n injected_at: text(\"injected_at\").notNull(),\n}, (table) => ([\n index(\"idx_history_injections_snippet\").on(table.snippet_id),\n index(\"idx_history_injections_session\").on(table.session_id),\n index(\"idx_history_injections_repo\").on(table.repo),\n uniqueIndex(\"uq_history_injections_snippet_session\").on(table.snippet_id, table.session_id),\n]));\n\nexport const feedbackEvents = sqliteTable(\"feedback_events\", {\n id: text(\"id\").primaryKey(),\n memory_id: text(\"memory_id\")\n .notNull()\n .references(() => memories.id),\n session_id: text(\"session_id\").notNull(),\n injected: integer(\"injected\", { mode: \"boolean\" }).notNull(),\n outcome: text(\"outcome\", {\n enum: [\"followed\", \"overridden\", \"ignored\", \"contradicted\"],\n }).notNull(),\n timestamp: text(\"timestamp\").notNull(),\n}, (table) => ([\n index(\"idx_feedback_memory\").on(table.memory_id),\n index(\"idx_feedback_session\").on(table.session_id),\n]));\n\nexport const memoryInjections = sqliteTable(\"memory_injections\", {\n id: text(\"id\").primaryKey(),\n memory_id: text(\"memory_id\")\n .notNull()\n .references(() => memories.id, { onDelete: \"cascade\" }),\n session_id: text(\"session_id\").notNull(),\n repo: text(\"repo\"),\n injected_at: text(\"injected_at\").notNull(),\n outcome: text(\"outcome\", {\n enum: [\"followed\", \"overridden\", \"ignored\", \"contradicted\"],\n }),\n outcome_at: text(\"outcome_at\"),\n}, (table) => ([\n index(\"idx_memory_injections_memory\").on(table.memory_id),\n index(\"idx_memory_injections_session\").on(table.session_id),\n uniqueIndex(\"uq_memory_injections_memory_session\").on(table.memory_id, table.session_id),\n]));\n\n// Session/query activity log\nexport const activityEvents = sqliteTable(\"activity_events\", {\n id: text(\"id\").primaryKey(),\n session_id: text(\"session_id\"),\n repo: text(\"repo\"),\n path: text(\"path\"),\n // source is a free-form string tagged as \"<transport>[:<client>]\"\n // (e.g. \"mcp\", \"mcp:claude-code\", \"hook:codex\", \"cli\", \"daemon\").\n // The runtime regex in src/types.ts validates the shape.\n source: text(\"source\").notNull(),\n event_type: text(\"event_type\", {\n enum: [\n \"compile\",\n \"query\",\n \"scan\",\n \"correction\",\n \"review\",\n \"feedback\",\n \"signal\",\n \"session_start\",\n \"session_event\",\n \"session_end\",\n \"tool_call\",\n ],\n }).notNull(),\n memory_ids: text(\"memory_ids\", { mode: \"json\" }).notNull().default(\"[]\"),\n dedupe_key: text(\"dedupe_key\"),\n request: text(\"request\", { mode: \"json\" }).notNull().default(\"{}\"),\n result: text(\"result\", { mode: \"json\" }).notNull().default(\"{}\"),\n created_at: text(\"created_at\").notNull(),\n}, (table) => ([\n index(\"idx_activity_session\").on(table.session_id),\n index(\"idx_activity_repo\").on(table.repo),\n index(\"idx_activity_event_type\").on(table.event_type),\n index(\"idx_activity_created\").on(table.created_at),\n uniqueIndex(\"uq_activity_events_dedupe_key\").on(table.dedupe_key),\n]));\n\nexport const hookCalls = sqliteTable(\"hook_calls\", {\n id: text(\"id\").primaryKey(),\n event: text(\"event\", {\n enum: [\"session_started\", \"prompt_submitted\", \"tool_invoked\", \"session_ended\"],\n }).notNull(),\n agent: text(\"agent\").notNull(),\n dedupe_key: text(\"dedupe_key\"),\n duration_ms: integer(\"duration_ms\").notNull(),\n ok: integer(\"ok\", { mode: \"boolean\" }).notNull(),\n created_at: text(\"created_at\").notNull(),\n}, (table) => ([\n index(\"idx_hook_calls_event\").on(table.event),\n index(\"idx_hook_calls_agent\").on(table.agent),\n index(\"idx_hook_calls_created\").on(table.created_at),\n uniqueIndex(\"uq_hook_calls_dedupe_key\").on(table.dedupe_key),\n]));\n\n// Phase 2: sync state tracking\nexport const syncState = sqliteTable(\"sync_state\", {\n id: text(\"id\").primaryKey(), // \"local\" singleton\n remote_url: text(\"remote_url\"),\n team_id: text(\"team_id\"),\n last_push_at: text(\"last_push_at\"),\n last_pull_at: text(\"last_pull_at\"),\n last_push_version: integer(\"last_push_version\").notNull().default(0),\n last_pull_version: integer(\"last_pull_version\").notNull().default(0),\n});\n\n// Phase 2: evaluation sessions\nexport const evalSessions = sqliteTable(\"eval_sessions\", {\n id: text(\"id\").primaryKey(),\n repo: text(\"repo\").notNull(),\n started_at: text(\"started_at\").notNull(),\n ended_at: text(\"ended_at\"),\n memories_injected: integer(\"memories_injected\").notNull().default(0),\n memories_followed: integer(\"memories_followed\").notNull().default(0),\n memories_overridden: integer(\"memories_overridden\").notNull().default(0),\n user_corrections: integer(\"user_corrections\").notNull().default(0),\n test_passes: integer(\"test_passes\").notNull().default(0),\n test_failures: integer(\"test_failures\").notNull().default(0),\n}, (table) => ([\n index(\"idx_eval_repo\").on(table.repo),\n]));\n\n// Phase 3: policy rules\nexport const policyRules = sqliteTable(\"policy_rules\", {\n id: text(\"id\").primaryKey(),\n org_id: text(\"org_id\").notNull(),\n rule_type: text(\"rule_type\", {\n enum: [\n \"min_confidence\",\n \"require_approval\",\n \"allowed_sources\",\n \"blocked_scopes\",\n \"auto_approve_pattern\",\n \"max_active_per_repo\",\n \"require_evidence_count\",\n ],\n }).notNull(),\n config: text(\"config\", { mode: \"json\" }).notNull().default(\"{}\"),\n enabled: integer(\"enabled\", { mode: \"boolean\" }).notNull().default(true),\n created_at: text(\"created_at\").notNull(),\n updated_at: text(\"updated_at\").notNull(),\n}, (table) => ([\n index(\"idx_policy_org\").on(table.org_id),\n]));\n\n// Phase 3: approval queue\nexport const approvalRequests = sqliteTable(\"approval_requests\", {\n id: text(\"id\").primaryKey(),\n memory_id: text(\"memory_id\")\n .notNull()\n .references(() => memories.id),\n org_id: text(\"org_id\").notNull(),\n requested_by: text(\"requested_by\").notNull(),\n status: text(\"status\", {\n enum: [\"pending\", \"approved\", \"denied\"],\n }).notNull().default(\"pending\"),\n reviewed_by: text(\"reviewed_by\"),\n reason: text(\"reason\"),\n created_at: text(\"created_at\").notNull(),\n resolved_at: text(\"resolved_at\"),\n}, (table) => ([\n index(\"idx_approval_org\").on(table.org_id),\n index(\"idx_approval_status\").on(table.status),\n]));\n\n// Phase 3: contradictions\nexport const contradictions = sqliteTable(\"contradictions\", {\n id: text(\"id\").primaryKey(),\n memory_a_id: text(\"memory_a_id\")\n .notNull()\n .references(() => memories.id),\n memory_b_id: text(\"memory_b_id\")\n .notNull()\n .references(() => memories.id),\n contradiction_type: text(\"contradiction_type\", {\n enum: [\"direct_negation\", \"conflicting_rules\", \"scope_overlap\", \"superseded\"],\n }).notNull(),\n severity: text(\"severity\", { enum: [\"low\", \"medium\", \"high\"] }).notNull(),\n description: text(\"description\").notNull(),\n resolved: integer(\"resolved\", { mode: \"boolean\" }).notNull().default(false),\n resolution: text(\"resolution\"),\n detected_at: text(\"detected_at\").notNull(),\n resolved_at: text(\"resolved_at\"),\n}, (table) => ([\n index(\"idx_contradictions_resolved\").on(table.resolved),\n]));\n\n// Phase 3: audit trail\nexport const auditTrail = sqliteTable(\"audit_trail\", {\n id: text(\"id\").primaryKey(),\n memory_id: text(\"memory_id\").notNull(),\n action: text(\"action\", {\n enum: [\n \"created\", \"promoted\", \"demoted\", \"rejected\", \"confirmed\",\n \"reactivated\", \"edited\", \"pruned\", \"policy_applied\",\n \"approval_requested\", \"approval_resolved\",\n \"contradiction_detected\", \"contradiction_resolved\", \"rolled_back\",\n ],\n }).notNull(),\n actor: text(\"actor\").notNull(),\n before_snapshot: text(\"before_snapshot\"),\n after_snapshot: text(\"after_snapshot\"),\n reason: text(\"reason\"),\n timestamp: text(\"timestamp\").notNull(),\n}, (table) => ([\n index(\"idx_audit_memory\").on(table.memory_id),\n index(\"idx_audit_timestamp\").on(table.timestamp),\n]));\n\n// Tier-2 delegated maintenance tasks\nexport const memoryMaintenanceTasks = sqliteTable(\"memory_maintenance_tasks\", {\n id: text(\"id\").primaryKey(),\n kind: text(\"kind\", {\n enum: [\n \"summarize_history\",\n \"merge_duplicates\",\n \"refine_candidate\",\n \"summarize_session\",\n \"synthesize_repo\",\n \"verify_capture\",\n ],\n }).notNull(),\n status: text(\"status\", {\n enum: [\"pending\", \"claimed\", \"submitted\", \"completed\", \"abandoned\"],\n }).notNull(),\n priority: integer(\"priority\").notNull().default(0),\n repo: text(\"repo\"),\n target_key: text(\"target_key\").notNull(),\n payload: text(\"payload\", { mode: \"json\" }).notNull(),\n result: text(\"result\", { mode: \"json\" }),\n failure_reason: text(\"failure_reason\"),\n claimed_by: text(\"claimed_by\"),\n claimed_at: text(\"claimed_at\"),\n claim_expires_at: text(\"claim_expires_at\"),\n submitted_at: text(\"submitted_at\"),\n completed_at: text(\"completed_at\"),\n created_at: text(\"created_at\").notNull(),\n attempts: integer(\"attempts\").notNull().default(0),\n max_attempts: integer(\"max_attempts\").notNull().default(3),\n}, (table) => ([\n index(\"idx_mmt_status_priority\").on(table.status, table.priority, table.created_at),\n index(\"idx_mmt_repo_status\").on(table.repo, table.status),\n index(\"idx_mmt_claim_expires\").on(table.claim_expires_at),\n index(\"idx_mmt_kind_target\").on(table.kind, table.target_key),\n]));\n\n// Phase 2: implicit feedback signals\nexport const implicitSignals = sqliteTable(\"implicit_signals\", {\n id: text(\"id\").primaryKey(),\n memory_id: text(\"memory_id\")\n .notNull()\n .references(() => memories.id),\n session_id: text(\"session_id\").notNull(),\n signal_type: text(\"signal_type\", {\n enum: [\n \"test_pass\",\n \"test_fail\",\n \"file_unchanged\",\n \"file_rewritten\",\n \"task_accepted\",\n \"task_rejected\",\n ],\n }).notNull(),\n timestamp: text(\"timestamp\").notNull(),\n context: text(\"context\"),\n}, (table) => ([\n index(\"idx_implicit_memory\").on(table.memory_id),\n index(\"idx_implicit_session\").on(table.session_id),\n]));\n\n// LLM usage tracking for daemon-owned maintenance dispatcher\nexport const llmUsage = sqliteTable(\"llm_usage\", {\n id: text(\"id\").primaryKey(),\n provider: text(\"provider\").notNull(),\n model: text(\"model\").notNull(),\n task_kind: text(\"task_kind\").notNull(),\n task_id: text(\"task_id\"),\n repo: text(\"repo\"),\n prompt_tokens: integer(\"prompt_tokens\").notNull().default(0),\n completion_tokens: integer(\"completion_tokens\").notNull().default(0),\n total_tokens: integer(\"total_tokens\").notNull().default(0),\n cost_usd: real(\"cost_usd\"),\n duration_ms: integer(\"duration_ms\").notNull().default(0),\n ok: integer(\"ok\", { mode: \"boolean\" }).notNull().default(true),\n error: text(\"error\"),\n created_at: text(\"created_at\").notNull(),\n}, (table) => ([\n index(\"idx_llm_usage_created\").on(table.created_at),\n index(\"idx_llm_usage_provider_model\").on(table.provider, table.model),\n index(\"idx_llm_usage_task_kind\").on(table.task_kind),\n index(\"idx_llm_usage_repo\").on(table.repo),\n]));\n\n// Phase-4 quality snapshots — periodic sample of injection-outcome ratios\n// so we can compare followed-rate before/after cleanup tuning over weeks.\nexport const qualitySnapshots = sqliteTable(\"quality_snapshots\", {\n id: text(\"id\").primaryKey(),\n taken_at: text(\"taken_at\").notNull(),\n window_start: text(\"window_start\").notNull(),\n window_end: text(\"window_end\").notNull(),\n injections_total: integer(\"injections_total\").notNull(),\n injections_resolved: integer(\"injections_resolved\").notNull(),\n injections_followed: integer(\"injections_followed\").notNull(),\n injections_overridden: integer(\"injections_overridden\").notNull(),\n injections_contradicted: integer(\"injections_contradicted\").notNull(),\n injections_ignored: integer(\"injections_ignored\").notNull(),\n followed_rate_resolved: real(\"followed_rate_resolved\"),\n active_rule_count: integer(\"active_rule_count\").notNull(),\n active_command_count: integer(\"active_command_count\").notNull(),\n candidate_correction_count: integer(\"candidate_correction_count\").notNull(),\n history_injections_total: integer(\"history_injections_total\").notNull().default(0),\n history_snippets_injected: integer(\"history_snippets_injected\").notNull().default(0),\n notes: text(\"notes\"),\n}, (table) => ([\n index(\"idx_quality_snapshots_taken\").on(table.taken_at),\n]));\n\n// Phase-1 deterministic cleanup log (revertable, no LLM required)\nexport const maintenanceCleanupLog = sqliteTable(\"maintenance_cleanup_log\", {\n id: text(\"id\").primaryKey(),\n run_id: text(\"run_id\").notNull(),\n action: text(\"action\", {\n enum: [\n \"dedupe_exact_merge\",\n \"reject_fragment_candidate\",\n \"promote_repeat_correction\",\n \"suppress_unproductive_command\",\n \"globalize_cross_repo\",\n ],\n }).notNull(),\n memory_id: text(\"memory_id\").notNull(),\n related_memory_id: text(\"related_memory_id\"),\n before_snapshot: text(\"before_snapshot\", { mode: \"json\" }),\n after_snapshot: text(\"after_snapshot\", { mode: \"json\" }),\n details: text(\"details\", { mode: \"json\" }).notNull().default(\"{}\"),\n reverted: integer(\"reverted\", { mode: \"boolean\" }).notNull().default(false),\n reverted_at: text(\"reverted_at\"),\n created_at: text(\"created_at\").notNull(),\n}, (table) => ([\n index(\"idx_cleanup_log_run\").on(table.run_id),\n index(\"idx_cleanup_log_memory\").on(table.memory_id),\n index(\"idx_cleanup_log_action\").on(table.action),\n index(\"idx_cleanup_log_created\").on(table.created_at),\n]));\n"],"mappings":"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","names":[]}
|