@substrate-ai/core 0.20.95 → 0.20.96

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 (37) hide show
  1. package/dist/persistence/core-schema.d.ts +23 -0
  2. package/dist/persistence/core-schema.d.ts.map +1 -0
  3. package/dist/persistence/core-schema.js +213 -0
  4. package/dist/persistence/core-schema.js.map +1 -0
  5. package/dist/persistence/index.d.ts +1 -1
  6. package/dist/persistence/index.d.ts.map +1 -1
  7. package/dist/persistence/index.js +1 -1
  8. package/dist/persistence/index.js.map +1 -1
  9. package/dist/persistence/monitor-schema.d.ts +15 -0
  10. package/dist/persistence/monitor-schema.d.ts.map +1 -0
  11. package/dist/persistence/monitor-schema.js +66 -0
  12. package/dist/persistence/monitor-schema.js.map +1 -0
  13. package/dist/persistence/pipeline-schema.d.ts +13 -0
  14. package/dist/persistence/pipeline-schema.d.ts.map +1 -0
  15. package/dist/persistence/pipeline-schema.js +149 -0
  16. package/dist/persistence/pipeline-schema.js.map +1 -0
  17. package/dist/persistence/repo-map-schema.d.ts +15 -0
  18. package/dist/persistence/repo-map-schema.d.ts.map +1 -0
  19. package/dist/persistence/repo-map-schema.js +40 -0
  20. package/dist/persistence/repo-map-schema.js.map +1 -0
  21. package/dist/persistence/schema.d.ts +26 -14
  22. package/dist/persistence/schema.d.ts.map +1 -1
  23. package/dist/persistence/schema.js +59 -724
  24. package/dist/persistence/schema.js.map +1 -1
  25. package/dist/persistence/state-schema.d.ts +18 -0
  26. package/dist/persistence/state-schema.d.ts.map +1 -0
  27. package/dist/persistence/state-schema.js +120 -0
  28. package/dist/persistence/state-schema.js.map +1 -0
  29. package/dist/persistence/telemetry-schema.d.ts +14 -0
  30. package/dist/persistence/telemetry-schema.d.ts.map +1 -0
  31. package/dist/persistence/telemetry-schema.js +121 -0
  32. package/dist/persistence/telemetry-schema.js.map +1 -0
  33. package/dist/persistence/work-graph-schema.d.ts +21 -0
  34. package/dist/persistence/work-graph-schema.d.ts.map +1 -0
  35. package/dist/persistence/work-graph-schema.js +73 -0
  36. package/dist/persistence/work-graph-schema.js.map +1 -0
  37. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Core schema — orchestrator session/task execution model.
3
+ *
4
+ * Owns: sessions, tasks, task_dependencies, execution_log, cost_entries,
5
+ * session_signals, plans, plan_versions, schema_migrations + ready_tasks view
6
+ * + session_cost_summary view.
7
+ *
8
+ * Extracted from `schema.ts` in Ship 5 (2026-05). DDL preserved byte-for-byte
9
+ * from the pre-split version — any column/type/default change must be a
10
+ * deliberate migration, not an accidental drift.
11
+ */
12
+ import type { DatabaseAdapter } from './types.js';
13
+ export declare function initCoreSchema(adapter: DatabaseAdapter): Promise<void>;
14
+ /**
15
+ * Initialize the views that depend on core tables (`tasks`, `task_dependencies`,
16
+ * `sessions`). Must be called AFTER `initCoreSchema` (defines the tables).
17
+ *
18
+ * NOTE: Views use JOINs/aggregation. Dolt supports them; InMemoryDatabaseAdapter
19
+ * silently no-ops `CREATE VIEW`, so the same DDL works on both backends without
20
+ * a try/catch wrapper.
21
+ */
22
+ export declare function initCoreViews(adapter: DatabaseAdapter): Promise<void>;
23
+ //# sourceMappingURL=core-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-schema.d.ts","sourceRoot":"","sources":["../../src/persistence/core-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2K5E;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B3E"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Core schema — orchestrator session/task execution model.
3
+ *
4
+ * Owns: sessions, tasks, task_dependencies, execution_log, cost_entries,
5
+ * session_signals, plans, plan_versions, schema_migrations + ready_tasks view
6
+ * + session_cost_summary view.
7
+ *
8
+ * Extracted from `schema.ts` in Ship 5 (2026-05). DDL preserved byte-for-byte
9
+ * from the pre-split version — any column/type/default change must be a
10
+ * deliberate migration, not an accidental drift.
11
+ */
12
+ export async function initCoreSchema(adapter) {
13
+ // -- Core tables (migration 001 + 003) ------------------------------------
14
+ await adapter.exec(`
15
+ CREATE TABLE IF NOT EXISTS sessions (
16
+ id VARCHAR(255) PRIMARY KEY,
17
+ name TEXT,
18
+ graph_file TEXT NOT NULL,
19
+ status VARCHAR(32) NOT NULL DEFAULT 'active',
20
+ budget_usd DOUBLE,
21
+ total_cost_usd DOUBLE NOT NULL DEFAULT 0.0,
22
+ planning_cost_usd DOUBLE NOT NULL DEFAULT 0.0,
23
+ config_snapshot TEXT,
24
+ base_branch TEXT NOT NULL DEFAULT 'main',
25
+ plan_source TEXT,
26
+ planning_agent TEXT,
27
+ planning_costs_count_against_budget INTEGER NOT NULL DEFAULT 0,
28
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
29
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
30
+ )
31
+ `);
32
+ await adapter.exec(`
33
+ CREATE TABLE IF NOT EXISTS tasks (
34
+ id VARCHAR(255) PRIMARY KEY,
35
+ session_id VARCHAR(255) NOT NULL,
36
+ name TEXT NOT NULL,
37
+ description TEXT,
38
+ prompt TEXT NOT NULL,
39
+ status VARCHAR(32) NOT NULL DEFAULT 'pending',
40
+ agent VARCHAR(128),
41
+ model TEXT,
42
+ billing_mode VARCHAR(32),
43
+ worktree_path TEXT,
44
+ worktree_branch TEXT,
45
+ worktree_cleaned_at TEXT,
46
+ worker_id TEXT,
47
+ budget_usd DOUBLE,
48
+ cost_usd DOUBLE NOT NULL DEFAULT 0.0,
49
+ input_tokens INTEGER NOT NULL DEFAULT 0,
50
+ output_tokens INTEGER NOT NULL DEFAULT 0,
51
+ result TEXT,
52
+ error TEXT,
53
+ exit_code INTEGER,
54
+ retry_count INTEGER NOT NULL DEFAULT 0,
55
+ max_retries INTEGER NOT NULL DEFAULT 2,
56
+ timeout_ms INTEGER,
57
+ task_type TEXT,
58
+ metadata TEXT,
59
+ merge_status TEXT,
60
+ merged_files TEXT,
61
+ conflict_files TEXT,
62
+ budget_exceeded INTEGER NOT NULL DEFAULT 0,
63
+ started_at TEXT,
64
+ completed_at TEXT,
65
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
66
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
67
+ )
68
+ `);
69
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tasks_session ON tasks(session_id)');
70
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)');
71
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tasks_agent ON tasks(agent)');
72
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tasks_session_status ON tasks(session_id, status)');
73
+ await adapter.exec(`
74
+ CREATE TABLE IF NOT EXISTS task_dependencies (
75
+ task_id VARCHAR(255) NOT NULL,
76
+ depends_on VARCHAR(255) NOT NULL,
77
+ PRIMARY KEY (task_id, depends_on),
78
+ CHECK (task_id != depends_on)
79
+ )
80
+ `);
81
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_deps_depends_on ON task_dependencies(depends_on)');
82
+ await adapter.exec(`
83
+ CREATE TABLE IF NOT EXISTS execution_log (
84
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
85
+ session_id VARCHAR(255) NOT NULL,
86
+ task_id VARCHAR(255),
87
+ event VARCHAR(128) NOT NULL,
88
+ old_status VARCHAR(32),
89
+ new_status VARCHAR(32),
90
+ agent VARCHAR(128),
91
+ cost_usd DOUBLE,
92
+ data TEXT,
93
+ timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
94
+ )
95
+ `);
96
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_log_session ON execution_log(session_id)');
97
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_log_task ON execution_log(task_id)');
98
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_log_event ON execution_log(event)');
99
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_log_timestamp ON execution_log(timestamp)');
100
+ // -- Cost entries (migration 001 + 002) -----------------------------------
101
+ await adapter.exec(`
102
+ CREATE TABLE IF NOT EXISTS cost_entries (
103
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
104
+ session_id VARCHAR(255) NOT NULL,
105
+ task_id VARCHAR(255),
106
+ agent VARCHAR(128) NOT NULL,
107
+ billing_mode VARCHAR(32) NOT NULL,
108
+ category VARCHAR(64) NOT NULL DEFAULT 'execution',
109
+ provider VARCHAR(64) NOT NULL DEFAULT 'unknown',
110
+ input_tokens INTEGER NOT NULL DEFAULT 0,
111
+ output_tokens INTEGER NOT NULL DEFAULT 0,
112
+ estimated_cost DOUBLE NOT NULL DEFAULT 0.0,
113
+ actual_cost DOUBLE,
114
+ savings_usd DOUBLE NOT NULL DEFAULT 0.0,
115
+ model TEXT,
116
+ timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
117
+ )
118
+ `);
119
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_cost_session ON cost_entries(session_id)');
120
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_cost_task ON cost_entries(task_id)');
121
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_cost_category ON cost_entries(category)');
122
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_cost_entries_session_task ON cost_entries(session_id, task_id)');
123
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_cost_entries_provider ON cost_entries(provider)');
124
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_cost_session_agent ON cost_entries(session_id, agent)');
125
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_cost_agent ON cost_entries(agent)');
126
+ // -- Session signals (migration 004) --------------------------------------
127
+ // `signal` is a MySQL reserved word — backticks are mandatory in Dolt.
128
+ await adapter.exec(`
129
+ CREATE TABLE IF NOT EXISTS session_signals (
130
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
131
+ session_id VARCHAR(255) NOT NULL,
132
+ \`signal\` VARCHAR(16) NOT NULL CHECK(\`signal\` IN ('pause', 'resume', 'cancel')),
133
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
134
+ processed_at TEXT
135
+ )
136
+ `);
137
+ // -- Plans (migration 005 + 006) ------------------------------------------
138
+ await adapter.exec(`
139
+ CREATE TABLE IF NOT EXISTS plans (
140
+ id VARCHAR(255) PRIMARY KEY,
141
+ description TEXT NOT NULL,
142
+ task_count INTEGER NOT NULL DEFAULT 0,
143
+ estimated_cost_usd DOUBLE NOT NULL DEFAULT 0.0,
144
+ planning_agent VARCHAR(128) NOT NULL,
145
+ plan_yaml TEXT NOT NULL,
146
+ status VARCHAR(32) NOT NULL DEFAULT 'draft',
147
+ current_version INTEGER NOT NULL DEFAULT 1,
148
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
149
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
150
+ )
151
+ `);
152
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_plans_status ON plans(status)');
153
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_plans_created ON plans(created_at)');
154
+ await adapter.exec(`
155
+ CREATE TABLE IF NOT EXISTS plan_versions (
156
+ plan_id VARCHAR(255) NOT NULL,
157
+ version INTEGER NOT NULL,
158
+ task_graph_yaml TEXT NOT NULL,
159
+ feedback_used TEXT,
160
+ planning_cost_usd DOUBLE NOT NULL DEFAULT 0.0,
161
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
162
+ PRIMARY KEY (plan_id, version)
163
+ )
164
+ `);
165
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_plan_versions_plan_id ON plan_versions(plan_id)');
166
+ // -- Schema migration tracking table (for future use) --------------------
167
+ await adapter.exec(`
168
+ CREATE TABLE IF NOT EXISTS schema_migrations (
169
+ version INTEGER PRIMARY KEY,
170
+ name TEXT NOT NULL,
171
+ applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
172
+ )
173
+ `);
174
+ }
175
+ /**
176
+ * Initialize the views that depend on core tables (`tasks`, `task_dependencies`,
177
+ * `sessions`). Must be called AFTER `initCoreSchema` (defines the tables).
178
+ *
179
+ * NOTE: Views use JOINs/aggregation. Dolt supports them; InMemoryDatabaseAdapter
180
+ * silently no-ops `CREATE VIEW`, so the same DDL works on both backends without
181
+ * a try/catch wrapper.
182
+ */
183
+ export async function initCoreViews(adapter) {
184
+ await adapter.exec(`
185
+ CREATE VIEW IF NOT EXISTS ready_tasks AS
186
+ SELECT t.* FROM tasks t
187
+ WHERE t.status = 'pending'
188
+ AND NOT EXISTS (
189
+ SELECT 1 FROM task_dependencies td
190
+ JOIN tasks dep ON dep.id = td.depends_on
191
+ WHERE td.task_id = t.id
192
+ AND dep.status NOT IN ('completed', 'cancelled')
193
+ )
194
+ `);
195
+ await adapter.exec(`
196
+ CREATE VIEW IF NOT EXISTS session_cost_summary AS
197
+ SELECT
198
+ s.id AS session_id,
199
+ s.name AS session_name,
200
+ COUNT(DISTINCT t.id) AS total_tasks,
201
+ SUM(CASE WHEN t.status = 'completed' THEN 1 ELSE 0 END) AS completed_tasks,
202
+ SUM(CASE WHEN t.status = 'failed' THEN 1 ELSE 0 END) AS failed_tasks,
203
+ SUM(CASE WHEN t.status = 'running' THEN 1 ELSE 0 END) AS running_tasks,
204
+ COALESCE(SUM(t.cost_usd), 0) AS total_cost_usd,
205
+ SUM(CASE WHEN t.billing_mode = 'subscription' THEN t.cost_usd ELSE 0 END) AS subscription_cost_usd,
206
+ SUM(CASE WHEN t.billing_mode = 'api' THEN t.cost_usd ELSE 0 END) AS api_cost_usd,
207
+ s.planning_cost_usd
208
+ FROM sessions s
209
+ LEFT JOIN tasks t ON t.session_id = s.id
210
+ GROUP BY s.id
211
+ `);
212
+ }
213
+ //# sourceMappingURL=core-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-schema.js","sourceRoot":"","sources":["../../src/persistence/core-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,4EAA4E;IAC5E,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;GAiBlB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoClB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IACvF,MAAM,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;IAClF,MAAM,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;IAChF,MAAM,OAAO,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAA;IAEtG,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;GAOlB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;IAErG,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;GAalB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;IAC7F,MAAM,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IACvF,MAAM,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;IACtF,MAAM,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;IAE9F,4EAA4E;IAC5E,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;GAiBlB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;IAC7F,MAAM,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IACvF,MAAM,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IAC5F,MAAM,OAAO,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAA;IACnH,MAAM,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;IACpG,MAAM,OAAO,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAA;IAC1G,MAAM,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;IAEtF,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;GAQlB,CAAC,CAAA;IAEF,4EAA4E;IAC5E,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;GAalB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;IAClF,MAAM,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAA;IAEvF,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;GAUlB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;IAEpG,2EAA2E;IAC3E,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;GAMlB,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAwB;IAC1D,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;GAUlB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;GAgBlB,CAAC,CAAA;AACJ,CAAC"}
@@ -3,7 +3,7 @@ export * from './schema-version.js';
3
3
  export * from './adapter.js';
4
4
  export * from './dolt-adapter.js';
5
5
  export * from './memory-adapter.js';
6
- export { initSchema } from './schema.js';
6
+ export { initSchema, initCoreSchema, initCoreViews, initPipelineSchema, initMonitorSchema, initStateSchema, initRepoMapSchema, initTelemetrySchema, initWorkGraphSchema, } from './schema.js';
7
7
  export * from './cost-types.js';
8
8
  export * from './schemas/decisions.js';
9
9
  export * from './schemas/operational.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACnF,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACnF,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAA;AAEpB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACnF,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACnF,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
@@ -4,7 +4,7 @@ export * from './schema-version.js';
4
4
  export * from './adapter.js';
5
5
  export * from './dolt-adapter.js';
6
6
  export * from './memory-adapter.js';
7
- export { initSchema } from './schema.js';
7
+ export { initSchema, initCoreSchema, initCoreViews, initPipelineSchema, initMonitorSchema, initStateSchema, initRepoMapSchema, initTelemetrySchema, initWorkGraphSchema, } from './schema.js';
8
8
  // Canonical cost types — single source of truth (avoids dual-definition with src/modules/cost-tracker/types.ts)
9
9
  export * from './cost-types.js';
10
10
  export * from './schemas/decisions.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,gHAAgH;AAChH,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,oHAAoH;AACpH,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAA;AAE/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEnF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAA;AACpB,gHAAgH;AAChH,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,yBAAyB,CAAA;AACvC,oHAAoH;AACpH,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,aAAa,GACd,MAAM,wBAAwB,CAAA;AAE/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE/D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEnF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Monitor schema — task-level metrics + routing recommendations.
3
+ *
4
+ * Owns: task_metrics, performance_aggregates, routing_recommendations.
5
+ *
6
+ * Note: these same tables are ALSO defined by `monitor-database.ts` for a
7
+ * SEPARATE database (`.substrate/monitor.db`). That instance is managed
8
+ * independently via the synchronous SyncAdapter API; the DDL here applies
9
+ * to the main persistence DB only.
10
+ *
11
+ * Extracted from `schema.ts` in Ship 5 (2026-05). DDL preserved byte-for-byte.
12
+ */
13
+ import type { DatabaseAdapter } from './types.js';
14
+ export declare function initMonitorSchema(adapter: DatabaseAdapter): Promise<void>;
15
+ //# sourceMappingURL=monitor-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-schema.d.ts","sourceRoot":"","sources":["../../src/persistence/monitor-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD/E"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Monitor schema — task-level metrics + routing recommendations.
3
+ *
4
+ * Owns: task_metrics, performance_aggregates, routing_recommendations.
5
+ *
6
+ * Note: these same tables are ALSO defined by `monitor-database.ts` for a
7
+ * SEPARATE database (`.substrate/monitor.db`). That instance is managed
8
+ * independently via the synchronous SyncAdapter API; the DDL here applies
9
+ * to the main persistence DB only.
10
+ *
11
+ * Extracted from `schema.ts` in Ship 5 (2026-05). DDL preserved byte-for-byte.
12
+ */
13
+ export async function initMonitorSchema(adapter) {
14
+ await adapter.exec(`
15
+ CREATE TABLE IF NOT EXISTS task_metrics (
16
+ task_id VARCHAR(255) NOT NULL,
17
+ agent VARCHAR(128) NOT NULL,
18
+ task_type VARCHAR(128) NOT NULL,
19
+ outcome VARCHAR(16) NOT NULL CHECK(outcome IN ('success', 'failure')),
20
+ failure_reason TEXT,
21
+ input_tokens INTEGER NOT NULL DEFAULT 0,
22
+ output_tokens INTEGER NOT NULL DEFAULT 0,
23
+ duration_ms INTEGER NOT NULL DEFAULT 0,
24
+ cost DOUBLE NOT NULL DEFAULT 0.0,
25
+ estimated_cost DOUBLE NOT NULL DEFAULT 0.0,
26
+ billing_mode VARCHAR(32) NOT NULL DEFAULT 'api',
27
+ retries INTEGER NOT NULL DEFAULT 0,
28
+ recorded_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
29
+ PRIMARY KEY (task_id, recorded_at)
30
+ )
31
+ `);
32
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tm_agent ON task_metrics(agent)');
33
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tm_task_type ON task_metrics(task_type)');
34
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tm_recorded_at ON task_metrics(recorded_at)');
35
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_tm_agent_type ON task_metrics(agent, task_type)');
36
+ await adapter.exec(`
37
+ CREATE TABLE IF NOT EXISTS performance_aggregates (
38
+ agent VARCHAR(255) NOT NULL,
39
+ task_type VARCHAR(255) NOT NULL,
40
+ total_tasks INTEGER NOT NULL DEFAULT 0,
41
+ successful_tasks INTEGER NOT NULL DEFAULT 0,
42
+ failed_tasks INTEGER NOT NULL DEFAULT 0,
43
+ total_input_tokens INTEGER NOT NULL DEFAULT 0,
44
+ total_output_tokens INTEGER NOT NULL DEFAULT 0,
45
+ total_duration_ms INTEGER NOT NULL DEFAULT 0,
46
+ total_cost DOUBLE NOT NULL DEFAULT 0.0,
47
+ total_retries INTEGER NOT NULL DEFAULT 0,
48
+ last_updated DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
49
+ PRIMARY KEY (agent, task_type)
50
+ )
51
+ `);
52
+ await adapter.exec(`
53
+ CREATE TABLE IF NOT EXISTS routing_recommendations (
54
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
55
+ task_type VARCHAR(128) NOT NULL,
56
+ current_agent VARCHAR(128) NOT NULL,
57
+ recommended_agent VARCHAR(128) NOT NULL,
58
+ reason TEXT,
59
+ confidence DOUBLE NOT NULL DEFAULT 0.0,
60
+ supporting_data TEXT,
61
+ generated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
62
+ expires_at TEXT
63
+ )
64
+ `);
65
+ }
66
+ //# sourceMappingURL=monitor-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-schema.js","sourceRoot":"","sources":["../../src/persistence/monitor-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAwB;IAC9D,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;GAiBlB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;IACpF,MAAM,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IAC5F,MAAM,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;IAChG,MAAM,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;IAEpG,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;GAelB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;GAYlB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Pipeline schema — pipeline-run state and metrics.
3
+ *
4
+ * Owns: pipeline_runs, decisions, requirements, constraints, artifacts,
5
+ * token_usage, run_metrics, story_metrics + the mesh-telemetry ALTER for
6
+ * story_metrics.agent/model/dispatch columns.
7
+ *
8
+ * Extracted from `schema.ts` in Ship 5 (2026-05). DDL preserved byte-for-byte
9
+ * from the pre-split version.
10
+ */
11
+ import type { DatabaseAdapter } from './types.js';
12
+ export declare function initPipelineSchema(adapter: DatabaseAdapter): Promise<void>;
13
+ //# sourceMappingURL=pipeline-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-schema.d.ts","sourceRoot":"","sources":["../../src/persistence/pipeline-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8IhF"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Pipeline schema — pipeline-run state and metrics.
3
+ *
4
+ * Owns: pipeline_runs, decisions, requirements, constraints, artifacts,
5
+ * token_usage, run_metrics, story_metrics + the mesh-telemetry ALTER for
6
+ * story_metrics.agent/model/dispatch columns.
7
+ *
8
+ * Extracted from `schema.ts` in Ship 5 (2026-05). DDL preserved byte-for-byte
9
+ * from the pre-split version.
10
+ */
11
+ export async function initPipelineSchema(adapter) {
12
+ // -- Pipeline runs + decisions (migration 007 + 008 final shapes) ---------
13
+ await adapter.exec(`
14
+ CREATE TABLE IF NOT EXISTS pipeline_runs (
15
+ id VARCHAR(255) PRIMARY KEY,
16
+ methodology VARCHAR(128) NOT NULL,
17
+ current_phase VARCHAR(64),
18
+ status VARCHAR(32) NOT NULL DEFAULT 'running'
19
+ CHECK(status IN ('running','paused','completed','failed','stopped')),
20
+ config_json TEXT,
21
+ token_usage_json TEXT,
22
+ parent_run_id VARCHAR(255),
23
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
24
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
25
+ )
26
+ `);
27
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_pipeline_runs_status ON pipeline_runs(status)');
28
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_pipeline_runs_parent_run_id ON pipeline_runs(parent_run_id)');
29
+ await adapter.exec(`
30
+ CREATE TABLE IF NOT EXISTS decisions (
31
+ id VARCHAR(255) PRIMARY KEY,
32
+ pipeline_run_id VARCHAR(255),
33
+ phase VARCHAR(64) NOT NULL,
34
+ category VARCHAR(64) NOT NULL,
35
+ \`key\` VARCHAR(255) NOT NULL,
36
+ value TEXT NOT NULL,
37
+ rationale TEXT,
38
+ superseded_by VARCHAR(255),
39
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
40
+ updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
41
+ )
42
+ `);
43
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_decisions_phase ON decisions(phase)');
44
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_decisions_key ON decisions(phase, `key`)');
45
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_decisions_superseded_by ON decisions(superseded_by)');
46
+ await adapter.exec(`
47
+ CREATE TABLE IF NOT EXISTS requirements (
48
+ id VARCHAR(255) PRIMARY KEY,
49
+ pipeline_run_id VARCHAR(255),
50
+ source VARCHAR(128) NOT NULL,
51
+ type VARCHAR(32) NOT NULL CHECK(type IN ('functional','non_functional','constraint')),
52
+ description TEXT NOT NULL,
53
+ priority VARCHAR(16) NOT NULL CHECK(priority IN ('must','should','could','wont')),
54
+ status VARCHAR(32) NOT NULL DEFAULT 'active',
55
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
56
+ )
57
+ `);
58
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_requirements_type ON requirements(type)');
59
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_requirements_status ON requirements(status)');
60
+ await adapter.exec(`
61
+ CREATE TABLE IF NOT EXISTS constraints (
62
+ id VARCHAR(255) PRIMARY KEY,
63
+ pipeline_run_id VARCHAR(255),
64
+ category VARCHAR(64) NOT NULL,
65
+ description TEXT NOT NULL,
66
+ source VARCHAR(128) NOT NULL,
67
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
68
+ )
69
+ `);
70
+ await adapter.exec(`
71
+ CREATE TABLE IF NOT EXISTS artifacts (
72
+ id VARCHAR(255) PRIMARY KEY,
73
+ pipeline_run_id VARCHAR(255),
74
+ phase VARCHAR(64) NOT NULL,
75
+ type VARCHAR(128) NOT NULL,
76
+ path TEXT NOT NULL,
77
+ content_hash TEXT,
78
+ summary TEXT,
79
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
80
+ )
81
+ `);
82
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_artifacts_phase ON artifacts(phase)');
83
+ await adapter.exec(`
84
+ CREATE TABLE IF NOT EXISTS token_usage (
85
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
86
+ pipeline_run_id VARCHAR(255),
87
+ phase VARCHAR(64) NOT NULL,
88
+ agent VARCHAR(128) NOT NULL,
89
+ input_tokens INTEGER NOT NULL DEFAULT 0,
90
+ output_tokens INTEGER NOT NULL DEFAULT 0,
91
+ cost_usd DOUBLE NOT NULL DEFAULT 0.0,
92
+ metadata TEXT,
93
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
94
+ )
95
+ `);
96
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_token_usage_run ON token_usage(pipeline_run_id)');
97
+ // -- Run metrics (migration 010) ------------------------------------------
98
+ await adapter.exec(`
99
+ CREATE TABLE IF NOT EXISTS run_metrics (
100
+ run_id VARCHAR(255) PRIMARY KEY,
101
+ methodology VARCHAR(128) NOT NULL,
102
+ status VARCHAR(32) NOT NULL DEFAULT 'running',
103
+ started_at TEXT NOT NULL,
104
+ completed_at TEXT,
105
+ wall_clock_seconds DOUBLE DEFAULT 0,
106
+ total_input_tokens INTEGER DEFAULT 0,
107
+ total_output_tokens INTEGER DEFAULT 0,
108
+ total_cost_usd DOUBLE DEFAULT 0,
109
+ stories_attempted INTEGER DEFAULT 0,
110
+ stories_succeeded INTEGER DEFAULT 0,
111
+ stories_failed INTEGER DEFAULT 0,
112
+ stories_escalated INTEGER DEFAULT 0,
113
+ total_review_cycles INTEGER DEFAULT 0,
114
+ total_dispatches INTEGER DEFAULT 0,
115
+ concurrency_setting INTEGER DEFAULT 1,
116
+ max_concurrent_actual INTEGER DEFAULT 1,
117
+ restarts INTEGER DEFAULT 0,
118
+ is_baseline INTEGER DEFAULT 0,
119
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
120
+ )
121
+ `);
122
+ await adapter.exec(`
123
+ CREATE TABLE IF NOT EXISTS story_metrics (
124
+ id INTEGER PRIMARY KEY AUTO_INCREMENT,
125
+ run_id VARCHAR(255) NOT NULL,
126
+ story_key VARCHAR(255) NOT NULL,
127
+ result VARCHAR(32) NOT NULL DEFAULT 'pending',
128
+ phase_durations_json TEXT,
129
+ started_at TEXT,
130
+ completed_at TEXT,
131
+ wall_clock_seconds DOUBLE DEFAULT 0,
132
+ input_tokens INTEGER DEFAULT 0,
133
+ output_tokens INTEGER DEFAULT 0,
134
+ cost_usd DOUBLE DEFAULT 0,
135
+ review_cycles INTEGER DEFAULT 0,
136
+ dispatches INTEGER DEFAULT 0,
137
+ created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
138
+ UNIQUE(run_id, story_key)
139
+ )
140
+ `);
141
+ // -- story_metrics agent/model columns (mesh telemetry enrichment) ---------
142
+ for (const col of ['primary_agent_id VARCHAR(64)', 'primary_model VARCHAR(128)', 'dispatch_agents_json TEXT']) {
143
+ try {
144
+ await adapter.exec(`ALTER TABLE story_metrics ADD COLUMN ${col}`);
145
+ }
146
+ catch { /* column already exists */ }
147
+ }
148
+ }
149
+ //# sourceMappingURL=pipeline-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-schema.js","sourceRoot":"","sources":["../../src/persistence/pipeline-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAwB;IAC/D,4EAA4E;IAC5E,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;GAalB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAA;IAClG,MAAM,OAAO,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAA;IAEhH,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;GAalB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;IACxF,MAAM,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;IAC7F,MAAM,OAAO,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAA;IAExG,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;GAWlB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IAC5F,MAAM,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;IAEhG,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;GASlB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;GAWlB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;IAExF,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;GAYlB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;IAEpG,4EAA4E;IAC5E,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;GAuBlB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;GAkBlB,CAAC,CAAA;IAEF,6EAA6E;IAC7E,KAAK,MAAM,GAAG,IAAI,CAAC,8BAA8B,EAAE,4BAA4B,EAAE,2BAA2B,CAAC,EAAE,CAAC;QAC9G,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC,IAAI,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACjH,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Repo-map schema — code-symbol index used by the context-engineering layer.
3
+ *
4
+ * Owns: repo_map_symbols, repo_map_meta + their indexes.
5
+ *
6
+ * Consumed by `src/modules/repo-map/storage.ts` (~10 query sites). Production
7
+ * runtime DDL was previously in `dolt-store.ts._runMigrations` (the v5→v6
8
+ * dependencies-column ALTER, which still runs there for repos predating
9
+ * v0.20.94 — Ship 3 ported the CREATE TABLE here from schema.sql).
10
+ *
11
+ * Extracted from `schema.ts` in Ship 5 (2026-05).
12
+ */
13
+ import type { DatabaseAdapter } from './types.js';
14
+ export declare function initRepoMapSchema(adapter: DatabaseAdapter): Promise<void>;
15
+ //# sourceMappingURL=repo-map-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-map-schema.d.ts","sourceRoot":"","sources":["../../src/persistence/repo-map-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/E"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Repo-map schema — code-symbol index used by the context-engineering layer.
3
+ *
4
+ * Owns: repo_map_symbols, repo_map_meta + their indexes.
5
+ *
6
+ * Consumed by `src/modules/repo-map/storage.ts` (~10 query sites). Production
7
+ * runtime DDL was previously in `dolt-store.ts._runMigrations` (the v5→v6
8
+ * dependencies-column ALTER, which still runs there for repos predating
9
+ * v0.20.94 — Ship 3 ported the CREATE TABLE here from schema.sql).
10
+ *
11
+ * Extracted from `schema.ts` in Ship 5 (2026-05).
12
+ */
13
+ export async function initRepoMapSchema(adapter) {
14
+ await adapter.exec(`
15
+ CREATE TABLE IF NOT EXISTS repo_map_symbols (
16
+ id BIGINT AUTO_INCREMENT NOT NULL,
17
+ file_path VARCHAR(1000) NOT NULL,
18
+ symbol_name VARCHAR(500) NOT NULL,
19
+ symbol_kind VARCHAR(20) NOT NULL,
20
+ signature TEXT,
21
+ line_number INT NOT NULL DEFAULT 0,
22
+ exported TINYINT(1) NOT NULL DEFAULT 0,
23
+ file_hash VARCHAR(64) NOT NULL,
24
+ dependencies JSON,
25
+ PRIMARY KEY (id)
26
+ )
27
+ `);
28
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_repo_map_symbols_file ON repo_map_symbols (file_path)');
29
+ await adapter.exec('CREATE INDEX IF NOT EXISTS idx_repo_map_symbols_kind ON repo_map_symbols (symbol_kind)');
30
+ await adapter.exec(`
31
+ CREATE TABLE IF NOT EXISTS repo_map_meta (
32
+ id INT NOT NULL DEFAULT 1,
33
+ commit_sha VARCHAR(64),
34
+ updated_at DATETIME,
35
+ file_count INT NOT NULL DEFAULT 0,
36
+ PRIMARY KEY (id)
37
+ )
38
+ `);
39
+ }
40
+ //# sourceMappingURL=repo-map-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-map-schema.js","sourceRoot":"","sources":["../../src/persistence/repo-map-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAwB;IAC9D,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;GAalB,CAAC,CAAA;IACF,MAAM,OAAO,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAA;IAC1G,MAAM,OAAO,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAA;IAE5G,MAAM,OAAO,CAAC,IAAI,CAAC;;;;;;;;GAQlB,CAAC,CAAA;AACJ,CAAC"}