@cleocode/core 2026.3.57 → 2026.3.59
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/dist/agents/agent-registry.d.ts +206 -0
- package/dist/agents/agent-registry.d.ts.map +1 -0
- package/dist/agents/agent-schema.d.ts.map +1 -1
- package/dist/agents/execution-learning.d.ts +223 -0
- package/dist/agents/execution-learning.d.ts.map +1 -0
- package/dist/agents/health-monitor.d.ts +161 -0
- package/dist/agents/health-monitor.d.ts.map +1 -0
- package/dist/agents/index.d.ts +4 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/retry.d.ts +57 -4
- package/dist/agents/retry.d.ts.map +1 -1
- package/dist/backfill/index.d.ts +83 -0
- package/dist/backfill/index.d.ts.map +1 -0
- package/dist/bootstrap.d.ts +1 -1
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6985 -5068
- package/dist/index.js.map +4 -4
- package/dist/intelligence/adaptive-validation.d.ts +151 -0
- package/dist/intelligence/adaptive-validation.d.ts.map +1 -0
- package/dist/intelligence/impact.d.ts +34 -1
- package/dist/intelligence/impact.d.ts.map +1 -1
- package/dist/intelligence/index.d.ts +7 -2
- package/dist/intelligence/index.d.ts.map +1 -1
- package/dist/intelligence/types.d.ts +60 -0
- package/dist/intelligence/types.d.ts.map +1 -1
- package/dist/internal.d.ts +8 -4
- package/dist/internal.d.ts.map +1 -1
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/retry.d.ts +128 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/nexus/sharing/index.d.ts +48 -2
- package/dist/nexus/sharing/index.d.ts.map +1 -1
- package/dist/sessions/session-enforcement.d.ts.map +1 -1
- package/dist/stats/index.d.ts +1 -0
- package/dist/stats/index.d.ts.map +1 -1
- package/dist/stats/workflow-telemetry.d.ts +89 -0
- package/dist/stats/workflow-telemetry.d.ts.map +1 -0
- package/dist/store/brain-schema.d.ts.map +1 -1
- package/dist/store/converters.d.ts.map +1 -1
- package/dist/store/cross-db-cleanup.d.ts +93 -0
- package/dist/store/cross-db-cleanup.d.ts.map +1 -0
- package/dist/store/db-helpers.d.ts.map +1 -1
- package/dist/store/migration-sqlite.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/task-store.d.ts.map +1 -1
- package/dist/store/tasks-schema.d.ts +18 -3
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/validation-schemas.d.ts +32 -0
- package/dist/store/validation-schemas.d.ts.map +1 -1
- package/dist/tasks/add.d.ts +10 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/enforcement.d.ts +22 -0
- package/dist/tasks/enforcement.d.ts.map +1 -0
- package/dist/tasks/epic-enforcement.d.ts +199 -0
- package/dist/tasks/epic-enforcement.d.ts.map +1 -0
- package/dist/tasks/index.d.ts +1 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/pipeline-stage.d.ts +181 -0
- package/dist/tasks/pipeline-stage.d.ts.map +1 -0
- package/dist/tasks/update.d.ts +2 -0
- package/dist/tasks/update.d.ts.map +1 -1
- package/migrations/drizzle-brain/20260321000001_t033-brain-indexes/migration.sql +12 -0
- package/migrations/drizzle-brain/20260321000001_t033-brain-indexes/snapshot.json +1232 -0
- package/migrations/drizzle-tasks/20260321000000_t033-connection-health/migration.sql +518 -0
- package/migrations/drizzle-tasks/20260321000000_t033-connection-health/snapshot.json +4312 -0
- package/migrations/drizzle-tasks/20260321000002_t060-pipeline-stage-binding/migration.sql +82 -0
- package/migrations/drizzle-tasks/20260321000002_t060-pipeline-stage-binding/snapshot.json +9 -0
- package/package.json +5 -5
- package/schemas/config.schema.json +37 -1547
- package/src/__tests__/sharing.test.ts +24 -0
- package/src/agents/__tests__/agent-registry.test.ts +351 -0
- package/src/agents/__tests__/execution-learning.test.ts +684 -0
- package/src/agents/__tests__/health-monitor.test.ts +332 -0
- package/src/agents/__tests__/registry.test.ts +30 -2
- package/src/agents/agent-registry.ts +394 -0
- package/src/agents/agent-schema.ts +5 -0
- package/src/agents/execution-learning.ts +675 -0
- package/src/agents/health-monitor.ts +279 -0
- package/src/agents/index.ts +37 -1
- package/src/agents/retry.ts +57 -4
- package/src/backfill/index.ts +309 -0
- package/src/bootstrap.ts +1 -1
- package/src/config.ts +126 -0
- package/src/index.ts +8 -1
- package/src/intelligence/__tests__/adaptive-validation.test.ts +694 -0
- package/src/intelligence/__tests__/impact.test.ts +165 -1
- package/src/intelligence/adaptive-validation.ts +764 -0
- package/src/intelligence/impact.ts +203 -0
- package/src/intelligence/index.ts +19 -0
- package/src/intelligence/types.ts +76 -0
- package/src/internal.ts +39 -0
- package/src/lib/__tests__/retry.test.ts +321 -0
- package/src/lib/index.ts +16 -0
- package/src/lib/retry.ts +224 -0
- package/src/lifecycle/__tests__/chain-store.test.ts +7 -0
- package/src/lifecycle/__tests__/tessera-engine.test.ts +52 -0
- package/src/nexus/sharing/index.ts +142 -2
- package/src/sessions/__tests__/session-edge-cases.test.ts +24 -1
- package/src/sessions/session-enforcement.ts +13 -2
- package/src/stats/index.ts +7 -0
- package/src/stats/workflow-telemetry.ts +502 -0
- package/src/store/__tests__/migration-safety.test.ts +3 -0
- package/src/store/__tests__/session-store.test.ts +132 -1
- package/src/store/__tests__/task-store.test.ts +22 -1
- package/src/store/__tests__/test-db-helper.ts +29 -2
- package/src/store/brain-schema.ts +4 -1
- package/src/store/converters.ts +2 -0
- package/src/store/cross-db-cleanup.ts +192 -0
- package/src/store/db-helpers.ts +2 -0
- package/src/store/migration-sqlite.ts +6 -0
- package/src/store/sqlite-data-accessor.ts +20 -28
- package/src/store/sqlite.ts +14 -2
- package/src/store/task-store.ts +6 -0
- package/src/store/tasks-schema.ts +59 -20
- package/src/tasks/__tests__/add.test.ts +16 -0
- package/src/tasks/__tests__/complete-unblocks.test.ts +10 -1
- package/src/tasks/__tests__/complete.test.ts +11 -2
- package/src/tasks/__tests__/epic-enforcement.test.ts +909 -0
- package/src/tasks/__tests__/minimal-test.test.ts +28 -0
- package/src/tasks/__tests__/pipeline-stage.test.ts +403 -0
- package/src/tasks/__tests__/update.test.ts +40 -6
- package/src/tasks/add.ts +128 -2
- package/src/tasks/complete.ts +29 -17
- package/src/tasks/enforcement.ts +127 -0
- package/src/tasks/epic-enforcement.ts +364 -0
- package/src/tasks/index.ts +1 -0
- package/src/tasks/pipeline-stage.ts +293 -0
- package/src/tasks/update.ts +62 -0
- package/templates/config.template.json +34 -111
- package/templates/global-config.template.json +24 -40
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
-- T033: Connection Health Remediation
|
|
2
|
+
-- Part 1: Foreign key enforcement is enabled at the application layer via
|
|
3
|
+
-- openNativeDatabase() enableForeignKeyConstraints + PRAGMA foreign_keys=ON.
|
|
4
|
+
-- No SQL change needed here.
|
|
5
|
+
--
|
|
6
|
+
-- Part 2: Add 7 missing composite indexes for tasks.db (from T031 analysis).
|
|
7
|
+
-- NOTE: Indexes on tasks and sessions are placed AFTER their respective
|
|
8
|
+
-- table rebuilds so they are not lost when old tables are dropped.
|
|
9
|
+
-- audit_log indexes are safe here since that table is not rebuilt.
|
|
10
|
+
-- Part 3: Add hard FK constraints to intra-DB soft FK columns (from T030 audit).
|
|
11
|
+
-- Part 5: Add tasks.pipeline_stage column with FK to lifecycle_stages (T056 contract).
|
|
12
|
+
|
|
13
|
+
-- ============================================================================
|
|
14
|
+
-- INDEXES: audit_log (table not rebuilt — safe to create now)
|
|
15
|
+
-- ============================================================================
|
|
16
|
+
|
|
17
|
+
-- INDEX 6: audit_log session_id + timestamp (session grading — composite replaces single-col)
|
|
18
|
+
CREATE INDEX IF NOT EXISTS `idx_audit_log_session_timestamp`
|
|
19
|
+
ON `audit_log` (`session_id`, `timestamp`);
|
|
20
|
+
--> statement-breakpoint
|
|
21
|
+
|
|
22
|
+
-- INDEX 7: audit_log domain + operation (dispatch-layer audit queries)
|
|
23
|
+
CREATE INDEX IF NOT EXISTS `idx_audit_log_domain_operation`
|
|
24
|
+
ON `audit_log` (`domain`, `operation`);
|
|
25
|
+
--> statement-breakpoint
|
|
26
|
+
|
|
27
|
+
-- ============================================================================
|
|
28
|
+
-- PART 3: Intra-DB FK Hardening (table rebuilds required for SQLite)
|
|
29
|
+
-- ============================================================================
|
|
30
|
+
|
|
31
|
+
-- SFK-022: task_work_history.task_id → tasks.id CASCADE
|
|
32
|
+
-- (session_id FK already exists; adding task_id FK)
|
|
33
|
+
PRAGMA foreign_keys=OFF;
|
|
34
|
+
--> statement-breakpoint
|
|
35
|
+
CREATE TABLE `task_work_history_new` (
|
|
36
|
+
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
37
|
+
`session_id` text NOT NULL,
|
|
38
|
+
`task_id` text NOT NULL,
|
|
39
|
+
`set_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
40
|
+
`cleared_at` text,
|
|
41
|
+
CONSTRAINT `fk_task_work_history_session_id` FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON DELETE CASCADE,
|
|
42
|
+
CONSTRAINT `fk_task_work_history_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE
|
|
43
|
+
);
|
|
44
|
+
--> statement-breakpoint
|
|
45
|
+
INSERT INTO `task_work_history_new` SELECT `id`, `session_id`, `task_id`, `set_at`, `cleared_at` FROM `task_work_history`;
|
|
46
|
+
--> statement-breakpoint
|
|
47
|
+
DROP TABLE `task_work_history`;
|
|
48
|
+
--> statement-breakpoint
|
|
49
|
+
ALTER TABLE `task_work_history_new` RENAME TO `task_work_history`;
|
|
50
|
+
--> statement-breakpoint
|
|
51
|
+
CREATE INDEX `idx_work_history_session` ON `task_work_history` (`session_id`);
|
|
52
|
+
--> statement-breakpoint
|
|
53
|
+
PRAGMA foreign_keys=ON;
|
|
54
|
+
--> statement-breakpoint
|
|
55
|
+
|
|
56
|
+
-- SFK-001: adr_task_links.task_id → tasks.id CASCADE
|
|
57
|
+
-- (adr_id FK already exists; adding task_id FK)
|
|
58
|
+
PRAGMA foreign_keys=OFF;
|
|
59
|
+
--> statement-breakpoint
|
|
60
|
+
CREATE TABLE `adr_task_links_new` (
|
|
61
|
+
`adr_id` text NOT NULL,
|
|
62
|
+
`task_id` text NOT NULL,
|
|
63
|
+
`link_type` text DEFAULT 'related' NOT NULL,
|
|
64
|
+
CONSTRAINT `adr_task_links_pk` PRIMARY KEY(`adr_id`, `task_id`),
|
|
65
|
+
CONSTRAINT `fk_adr_task_links_adr_id` FOREIGN KEY (`adr_id`) REFERENCES `architecture_decisions`(`id`) ON DELETE CASCADE,
|
|
66
|
+
CONSTRAINT `fk_adr_task_links_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE
|
|
67
|
+
);
|
|
68
|
+
--> statement-breakpoint
|
|
69
|
+
INSERT INTO `adr_task_links_new` SELECT `adr_id`, `task_id`, `link_type` FROM `adr_task_links`;
|
|
70
|
+
--> statement-breakpoint
|
|
71
|
+
DROP TABLE `adr_task_links`;
|
|
72
|
+
--> statement-breakpoint
|
|
73
|
+
ALTER TABLE `adr_task_links_new` RENAME TO `adr_task_links`;
|
|
74
|
+
--> statement-breakpoint
|
|
75
|
+
CREATE INDEX `idx_adr_task_links_task_id` ON `adr_task_links` (`task_id`);
|
|
76
|
+
--> statement-breakpoint
|
|
77
|
+
PRAGMA foreign_keys=ON;
|
|
78
|
+
--> statement-breakpoint
|
|
79
|
+
|
|
80
|
+
-- SFK-008/009: lifecycle_transitions stage FKs CASCADE
|
|
81
|
+
PRAGMA foreign_keys=OFF;
|
|
82
|
+
--> statement-breakpoint
|
|
83
|
+
CREATE TABLE `lifecycle_transitions_new` (
|
|
84
|
+
`id` text PRIMARY KEY,
|
|
85
|
+
`pipeline_id` text NOT NULL,
|
|
86
|
+
`from_stage_id` text NOT NULL,
|
|
87
|
+
`to_stage_id` text NOT NULL,
|
|
88
|
+
`transition_type` text DEFAULT 'automatic' NOT NULL,
|
|
89
|
+
`transitioned_by` text,
|
|
90
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
91
|
+
CONSTRAINT `fk_lifecycle_transitions_pipeline_id` FOREIGN KEY (`pipeline_id`) REFERENCES `lifecycle_pipelines`(`id`) ON DELETE CASCADE,
|
|
92
|
+
CONSTRAINT `fk_lifecycle_transitions_from_stage_id` FOREIGN KEY (`from_stage_id`) REFERENCES `lifecycle_stages`(`id`) ON DELETE CASCADE,
|
|
93
|
+
CONSTRAINT `fk_lifecycle_transitions_to_stage_id` FOREIGN KEY (`to_stage_id`) REFERENCES `lifecycle_stages`(`id`) ON DELETE CASCADE
|
|
94
|
+
);
|
|
95
|
+
--> statement-breakpoint
|
|
96
|
+
INSERT INTO `lifecycle_transitions_new` SELECT `id`, `pipeline_id`, `from_stage_id`, `to_stage_id`, `transition_type`, `transitioned_by`, `created_at` FROM `lifecycle_transitions`;
|
|
97
|
+
--> statement-breakpoint
|
|
98
|
+
DROP TABLE `lifecycle_transitions`;
|
|
99
|
+
--> statement-breakpoint
|
|
100
|
+
ALTER TABLE `lifecycle_transitions_new` RENAME TO `lifecycle_transitions`;
|
|
101
|
+
--> statement-breakpoint
|
|
102
|
+
CREATE INDEX `idx_lifecycle_transitions_pipeline_id` ON `lifecycle_transitions` (`pipeline_id`);
|
|
103
|
+
--> statement-breakpoint
|
|
104
|
+
PRAGMA foreign_keys=ON;
|
|
105
|
+
--> statement-breakpoint
|
|
106
|
+
|
|
107
|
+
-- SFK-010/011/012/013: architecture_decisions self-refs SET NULL
|
|
108
|
+
PRAGMA foreign_keys=OFF;
|
|
109
|
+
--> statement-breakpoint
|
|
110
|
+
CREATE TABLE `architecture_decisions_new` (
|
|
111
|
+
`id` text PRIMARY KEY,
|
|
112
|
+
`title` text NOT NULL,
|
|
113
|
+
`status` text DEFAULT 'proposed' NOT NULL,
|
|
114
|
+
`supersedes_id` text,
|
|
115
|
+
`superseded_by_id` text,
|
|
116
|
+
`consensus_manifest_id` text,
|
|
117
|
+
`content` text NOT NULL,
|
|
118
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
119
|
+
`updated_at` text,
|
|
120
|
+
`date` text DEFAULT '' NOT NULL,
|
|
121
|
+
`accepted_at` text,
|
|
122
|
+
`gate` text,
|
|
123
|
+
`gate_status` text,
|
|
124
|
+
`amends_id` text,
|
|
125
|
+
`file_path` text DEFAULT '' NOT NULL,
|
|
126
|
+
`summary` text,
|
|
127
|
+
`keywords` text,
|
|
128
|
+
`topics` text,
|
|
129
|
+
CONSTRAINT `fk_arch_decisions_supersedes_id` FOREIGN KEY (`supersedes_id`) REFERENCES `architecture_decisions`(`id`) ON DELETE SET NULL,
|
|
130
|
+
CONSTRAINT `fk_arch_decisions_superseded_by_id` FOREIGN KEY (`superseded_by_id`) REFERENCES `architecture_decisions`(`id`) ON DELETE SET NULL,
|
|
131
|
+
CONSTRAINT `fk_arch_decisions_amends_id` FOREIGN KEY (`amends_id`) REFERENCES `architecture_decisions`(`id`) ON DELETE SET NULL,
|
|
132
|
+
CONSTRAINT `fk_arch_decisions_consensus_manifest_id` FOREIGN KEY (`consensus_manifest_id`) REFERENCES `manifest_entries`(`id`) ON DELETE SET NULL
|
|
133
|
+
);
|
|
134
|
+
--> statement-breakpoint
|
|
135
|
+
INSERT INTO `architecture_decisions_new` SELECT `id`, `title`, `status`, `supersedes_id`, `superseded_by_id`, `consensus_manifest_id`, `content`, `created_at`, `updated_at`, `date`, `accepted_at`, `gate`, `gate_status`, `amends_id`, `file_path`, `summary`, `keywords`, `topics` FROM `architecture_decisions`;
|
|
136
|
+
--> statement-breakpoint
|
|
137
|
+
DROP TABLE `architecture_decisions`;
|
|
138
|
+
--> statement-breakpoint
|
|
139
|
+
ALTER TABLE `architecture_decisions_new` RENAME TO `architecture_decisions`;
|
|
140
|
+
--> statement-breakpoint
|
|
141
|
+
CREATE INDEX `idx_arch_decisions_status` ON `architecture_decisions` (`status`);
|
|
142
|
+
--> statement-breakpoint
|
|
143
|
+
CREATE INDEX `idx_arch_decisions_amends_id` ON `architecture_decisions` (`amends_id`);
|
|
144
|
+
--> statement-breakpoint
|
|
145
|
+
PRAGMA foreign_keys=ON;
|
|
146
|
+
--> statement-breakpoint
|
|
147
|
+
|
|
148
|
+
-- SFK-014/015/016: agent_instances refs SET NULL
|
|
149
|
+
PRAGMA foreign_keys=OFF;
|
|
150
|
+
--> statement-breakpoint
|
|
151
|
+
CREATE TABLE `agent_instances_new` (
|
|
152
|
+
`id` text PRIMARY KEY,
|
|
153
|
+
`agent_type` text NOT NULL,
|
|
154
|
+
`status` text DEFAULT 'starting' NOT NULL,
|
|
155
|
+
`session_id` text,
|
|
156
|
+
`task_id` text,
|
|
157
|
+
`started_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
158
|
+
`last_heartbeat` text DEFAULT (datetime('now')) NOT NULL,
|
|
159
|
+
`stopped_at` text,
|
|
160
|
+
`error_count` integer DEFAULT 0 NOT NULL,
|
|
161
|
+
`total_tasks_completed` integer DEFAULT 0 NOT NULL,
|
|
162
|
+
`capacity` text DEFAULT '1.0' NOT NULL,
|
|
163
|
+
`metadata_json` text DEFAULT '{}',
|
|
164
|
+
`parent_agent_id` text,
|
|
165
|
+
CONSTRAINT `fk_agent_instances_session_id` FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON DELETE SET NULL,
|
|
166
|
+
CONSTRAINT `fk_agent_instances_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE SET NULL,
|
|
167
|
+
CONSTRAINT `fk_agent_instances_parent_agent_id` FOREIGN KEY (`parent_agent_id`) REFERENCES `agent_instances`(`id`) ON DELETE SET NULL
|
|
168
|
+
);
|
|
169
|
+
--> statement-breakpoint
|
|
170
|
+
INSERT INTO `agent_instances_new` SELECT `id`, `agent_type`, `status`, `session_id`, `task_id`, `started_at`, `last_heartbeat`, `stopped_at`, `error_count`, `total_tasks_completed`, `capacity`, `metadata_json`, `parent_agent_id` FROM `agent_instances`;
|
|
171
|
+
--> statement-breakpoint
|
|
172
|
+
DROP TABLE `agent_instances`;
|
|
173
|
+
--> statement-breakpoint
|
|
174
|
+
ALTER TABLE `agent_instances_new` RENAME TO `agent_instances`;
|
|
175
|
+
--> statement-breakpoint
|
|
176
|
+
CREATE INDEX `idx_agent_instances_status` ON `agent_instances` (`status`);
|
|
177
|
+
--> statement-breakpoint
|
|
178
|
+
CREATE INDEX `idx_agent_instances_agent_type` ON `agent_instances` (`agent_type`);
|
|
179
|
+
--> statement-breakpoint
|
|
180
|
+
CREATE INDEX `idx_agent_instances_session_id` ON `agent_instances` (`session_id`);
|
|
181
|
+
--> statement-breakpoint
|
|
182
|
+
CREATE INDEX `idx_agent_instances_task_id` ON `agent_instances` (`task_id`);
|
|
183
|
+
--> statement-breakpoint
|
|
184
|
+
CREATE INDEX `idx_agent_instances_parent_agent_id` ON `agent_instances` (`parent_agent_id`);
|
|
185
|
+
--> statement-breakpoint
|
|
186
|
+
CREATE INDEX `idx_agent_instances_last_heartbeat` ON `agent_instances` (`last_heartbeat`);
|
|
187
|
+
--> statement-breakpoint
|
|
188
|
+
PRAGMA foreign_keys=ON;
|
|
189
|
+
--> statement-breakpoint
|
|
190
|
+
|
|
191
|
+
-- SFK-017: agent_error_log.agent_id → agent_instances.id CASCADE
|
|
192
|
+
PRAGMA foreign_keys=OFF;
|
|
193
|
+
--> statement-breakpoint
|
|
194
|
+
CREATE TABLE `agent_error_log_new` (
|
|
195
|
+
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
196
|
+
`agent_id` text NOT NULL,
|
|
197
|
+
`error_type` text NOT NULL,
|
|
198
|
+
`message` text NOT NULL,
|
|
199
|
+
`stack` text,
|
|
200
|
+
`occurred_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
201
|
+
`resolved` integer DEFAULT false NOT NULL,
|
|
202
|
+
CONSTRAINT `fk_agent_error_log_agent_id` FOREIGN KEY (`agent_id`) REFERENCES `agent_instances`(`id`) ON DELETE CASCADE
|
|
203
|
+
);
|
|
204
|
+
--> statement-breakpoint
|
|
205
|
+
INSERT INTO `agent_error_log_new` SELECT `id`, `agent_id`, `error_type`, `message`, `stack`, `occurred_at`, `resolved` FROM `agent_error_log`;
|
|
206
|
+
--> statement-breakpoint
|
|
207
|
+
DROP TABLE `agent_error_log`;
|
|
208
|
+
--> statement-breakpoint
|
|
209
|
+
ALTER TABLE `agent_error_log_new` RENAME TO `agent_error_log`;
|
|
210
|
+
--> statement-breakpoint
|
|
211
|
+
CREATE INDEX `idx_agent_error_log_agent_id` ON `agent_error_log` (`agent_id`);
|
|
212
|
+
--> statement-breakpoint
|
|
213
|
+
CREATE INDEX `idx_agent_error_log_error_type` ON `agent_error_log` (`error_type`);
|
|
214
|
+
--> statement-breakpoint
|
|
215
|
+
CREATE INDEX `idx_agent_error_log_occurred_at` ON `agent_error_log` (`occurred_at`);
|
|
216
|
+
--> statement-breakpoint
|
|
217
|
+
PRAGMA foreign_keys=ON;
|
|
218
|
+
--> statement-breakpoint
|
|
219
|
+
|
|
220
|
+
-- SFK-002/003/004: pipeline_manifest SET NULL FKs
|
|
221
|
+
PRAGMA foreign_keys=OFF;
|
|
222
|
+
--> statement-breakpoint
|
|
223
|
+
CREATE TABLE `pipeline_manifest_new` (
|
|
224
|
+
`id` text PRIMARY KEY,
|
|
225
|
+
`session_id` text,
|
|
226
|
+
`task_id` text,
|
|
227
|
+
`epic_id` text,
|
|
228
|
+
`type` text NOT NULL,
|
|
229
|
+
`content` text NOT NULL,
|
|
230
|
+
`content_hash` text,
|
|
231
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
232
|
+
`distilled` integer DEFAULT false NOT NULL,
|
|
233
|
+
`brain_obs_id` text,
|
|
234
|
+
`source_file` text,
|
|
235
|
+
`metadata_json` text,
|
|
236
|
+
`created_at` text NOT NULL,
|
|
237
|
+
`archived_at` text,
|
|
238
|
+
CONSTRAINT `fk_pipeline_manifest_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE SET NULL,
|
|
239
|
+
CONSTRAINT `fk_pipeline_manifest_session_id` FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON DELETE SET NULL,
|
|
240
|
+
CONSTRAINT `fk_pipeline_manifest_epic_id` FOREIGN KEY (`epic_id`) REFERENCES `tasks`(`id`) ON DELETE SET NULL
|
|
241
|
+
);
|
|
242
|
+
--> statement-breakpoint
|
|
243
|
+
INSERT INTO `pipeline_manifest_new` SELECT `id`, `session_id`, `task_id`, `epic_id`, `type`, `content`, `content_hash`, `status`, `distilled`, `brain_obs_id`, `source_file`, `metadata_json`, `created_at`, `archived_at` FROM `pipeline_manifest`;
|
|
244
|
+
--> statement-breakpoint
|
|
245
|
+
DROP TABLE `pipeline_manifest`;
|
|
246
|
+
--> statement-breakpoint
|
|
247
|
+
ALTER TABLE `pipeline_manifest_new` RENAME TO `pipeline_manifest`;
|
|
248
|
+
--> statement-breakpoint
|
|
249
|
+
CREATE INDEX `idx_pipeline_manifest_task_id` ON `pipeline_manifest` (`task_id`);
|
|
250
|
+
--> statement-breakpoint
|
|
251
|
+
CREATE INDEX `idx_pipeline_manifest_session_id` ON `pipeline_manifest` (`session_id`);
|
|
252
|
+
--> statement-breakpoint
|
|
253
|
+
CREATE INDEX `idx_pipeline_manifest_distilled` ON `pipeline_manifest` (`distilled`);
|
|
254
|
+
--> statement-breakpoint
|
|
255
|
+
CREATE INDEX `idx_pipeline_manifest_status` ON `pipeline_manifest` (`status`);
|
|
256
|
+
--> statement-breakpoint
|
|
257
|
+
CREATE INDEX `idx_pipeline_manifest_content_hash` ON `pipeline_manifest` (`content_hash`);
|
|
258
|
+
--> statement-breakpoint
|
|
259
|
+
PRAGMA foreign_keys=ON;
|
|
260
|
+
--> statement-breakpoint
|
|
261
|
+
|
|
262
|
+
-- SFK-006: release_manifests.epic_id → tasks.id SET NULL
|
|
263
|
+
-- (pipeline_id FK already exists; adding epic_id FK)
|
|
264
|
+
PRAGMA foreign_keys=OFF;
|
|
265
|
+
--> statement-breakpoint
|
|
266
|
+
CREATE TABLE `release_manifests_new` (
|
|
267
|
+
`id` text PRIMARY KEY,
|
|
268
|
+
`version` text NOT NULL UNIQUE,
|
|
269
|
+
`status` text DEFAULT 'draft' NOT NULL,
|
|
270
|
+
`pipeline_id` text,
|
|
271
|
+
`epic_id` text,
|
|
272
|
+
`tasks_json` text DEFAULT '[]' NOT NULL,
|
|
273
|
+
`changelog` text,
|
|
274
|
+
`notes` text,
|
|
275
|
+
`previous_version` text,
|
|
276
|
+
`commit_sha` text,
|
|
277
|
+
`git_tag` text,
|
|
278
|
+
`npm_dist_tag` text,
|
|
279
|
+
`created_at` text NOT NULL,
|
|
280
|
+
`prepared_at` text,
|
|
281
|
+
`committed_at` text,
|
|
282
|
+
`tagged_at` text,
|
|
283
|
+
`pushed_at` text,
|
|
284
|
+
CONSTRAINT `fk_release_manifests_pipeline_id` FOREIGN KEY (`pipeline_id`) REFERENCES `lifecycle_pipelines`(`id`) ON DELETE SET NULL,
|
|
285
|
+
CONSTRAINT `fk_release_manifests_epic_id` FOREIGN KEY (`epic_id`) REFERENCES `tasks`(`id`) ON DELETE SET NULL
|
|
286
|
+
);
|
|
287
|
+
--> statement-breakpoint
|
|
288
|
+
INSERT INTO `release_manifests_new` SELECT `id`, `version`, `status`, `pipeline_id`, `epic_id`, `tasks_json`, `changelog`, `notes`, `previous_version`, `commit_sha`, `git_tag`, `npm_dist_tag`, `created_at`, `prepared_at`, `committed_at`, `tagged_at`, `pushed_at` FROM `release_manifests`;
|
|
289
|
+
--> statement-breakpoint
|
|
290
|
+
DROP TABLE `release_manifests`;
|
|
291
|
+
--> statement-breakpoint
|
|
292
|
+
ALTER TABLE `release_manifests_new` RENAME TO `release_manifests`;
|
|
293
|
+
--> statement-breakpoint
|
|
294
|
+
CREATE INDEX `idx_release_manifests_status` ON `release_manifests` (`status`);
|
|
295
|
+
--> statement-breakpoint
|
|
296
|
+
CREATE INDEX `idx_release_manifests_version` ON `release_manifests` (`version`);
|
|
297
|
+
--> statement-breakpoint
|
|
298
|
+
PRAGMA foreign_keys=ON;
|
|
299
|
+
--> statement-breakpoint
|
|
300
|
+
|
|
301
|
+
-- SFK-007: warp_chain_instances.epic_id → tasks.id CASCADE
|
|
302
|
+
-- (chain_id FK already exists; adding epic_id FK)
|
|
303
|
+
PRAGMA foreign_keys=OFF;
|
|
304
|
+
--> statement-breakpoint
|
|
305
|
+
CREATE TABLE `warp_chain_instances_new` (
|
|
306
|
+
`id` text PRIMARY KEY,
|
|
307
|
+
`chain_id` text NOT NULL,
|
|
308
|
+
`epic_id` text NOT NULL,
|
|
309
|
+
`variables` text,
|
|
310
|
+
`stage_to_task` text,
|
|
311
|
+
`status` text DEFAULT 'pending' NOT NULL,
|
|
312
|
+
`current_stage` text,
|
|
313
|
+
`gate_results` text,
|
|
314
|
+
`created_at` text DEFAULT (datetime('now')),
|
|
315
|
+
`updated_at` text DEFAULT (datetime('now')),
|
|
316
|
+
CONSTRAINT `fk_warp_chain_instances_chain_id` FOREIGN KEY (`chain_id`) REFERENCES `warp_chains`(`id`) ON DELETE CASCADE,
|
|
317
|
+
CONSTRAINT `fk_warp_chain_instances_epic_id` FOREIGN KEY (`epic_id`) REFERENCES `tasks`(`id`) ON DELETE CASCADE
|
|
318
|
+
);
|
|
319
|
+
--> statement-breakpoint
|
|
320
|
+
INSERT INTO `warp_chain_instances_new` SELECT `id`, `chain_id`, `epic_id`, `variables`, `stage_to_task`, `status`, `current_stage`, `gate_results`, `created_at`, `updated_at` FROM `warp_chain_instances`;
|
|
321
|
+
--> statement-breakpoint
|
|
322
|
+
DROP TABLE `warp_chain_instances`;
|
|
323
|
+
--> statement-breakpoint
|
|
324
|
+
ALTER TABLE `warp_chain_instances_new` RENAME TO `warp_chain_instances`;
|
|
325
|
+
--> statement-breakpoint
|
|
326
|
+
CREATE INDEX `idx_warp_instances_chain` ON `warp_chain_instances` (`chain_id`);
|
|
327
|
+
--> statement-breakpoint
|
|
328
|
+
CREATE INDEX `idx_warp_instances_epic` ON `warp_chain_instances` (`epic_id`);
|
|
329
|
+
--> statement-breakpoint
|
|
330
|
+
CREATE INDEX `idx_warp_instances_status` ON `warp_chain_instances` (`status`);
|
|
331
|
+
--> statement-breakpoint
|
|
332
|
+
PRAGMA foreign_keys=ON;
|
|
333
|
+
--> statement-breakpoint
|
|
334
|
+
|
|
335
|
+
-- SFK-018: tasks.session_id → sessions.id SET NULL
|
|
336
|
+
-- AND Part 5: Add tasks.pipeline_stage column with FK to lifecycle_stages.id
|
|
337
|
+
-- (parent_id FK already exists; adding session_id and pipeline_stage FKs)
|
|
338
|
+
PRAGMA foreign_keys=OFF;
|
|
339
|
+
--> statement-breakpoint
|
|
340
|
+
CREATE TABLE `tasks_new` (
|
|
341
|
+
`id` text PRIMARY KEY,
|
|
342
|
+
`title` text NOT NULL,
|
|
343
|
+
`description` text,
|
|
344
|
+
`status` text DEFAULT 'pending' NOT NULL,
|
|
345
|
+
`priority` text DEFAULT 'medium' NOT NULL,
|
|
346
|
+
`type` text,
|
|
347
|
+
`parent_id` text,
|
|
348
|
+
`phase` text,
|
|
349
|
+
`size` text,
|
|
350
|
+
`position` integer,
|
|
351
|
+
`position_version` integer DEFAULT 0,
|
|
352
|
+
`labels_json` text DEFAULT '[]',
|
|
353
|
+
`notes_json` text DEFAULT '[]',
|
|
354
|
+
`acceptance_json` text DEFAULT '[]',
|
|
355
|
+
`files_json` text DEFAULT '[]',
|
|
356
|
+
`origin` text,
|
|
357
|
+
`blocked_by` text,
|
|
358
|
+
`epic_lifecycle` text,
|
|
359
|
+
`no_auto_complete` integer,
|
|
360
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
361
|
+
`updated_at` text,
|
|
362
|
+
`completed_at` text,
|
|
363
|
+
`cancelled_at` text,
|
|
364
|
+
`cancellation_reason` text,
|
|
365
|
+
`archived_at` text,
|
|
366
|
+
`archive_reason` text,
|
|
367
|
+
`cycle_time_days` integer,
|
|
368
|
+
`verification_json` text,
|
|
369
|
+
`created_by` text,
|
|
370
|
+
`modified_by` text,
|
|
371
|
+
`session_id` text,
|
|
372
|
+
`pipeline_stage` text,
|
|
373
|
+
CONSTRAINT `fk_tasks_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `tasks`(`id`) ON DELETE SET NULL,
|
|
374
|
+
CONSTRAINT `fk_tasks_session_id` FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON DELETE SET NULL,
|
|
375
|
+
CONSTRAINT `fk_tasks_pipeline_stage` FOREIGN KEY (`pipeline_stage`) REFERENCES `lifecycle_stages`(`id`) ON DELETE SET NULL
|
|
376
|
+
);
|
|
377
|
+
--> statement-breakpoint
|
|
378
|
+
INSERT INTO `tasks_new` (`id`, `title`, `description`, `status`, `priority`, `type`, `parent_id`, `phase`, `size`, `position`, `position_version`, `labels_json`, `notes_json`, `acceptance_json`, `files_json`, `origin`, `blocked_by`, `epic_lifecycle`, `no_auto_complete`, `created_at`, `updated_at`, `completed_at`, `cancelled_at`, `cancellation_reason`, `archived_at`, `archive_reason`, `cycle_time_days`, `verification_json`, `created_by`, `modified_by`, `session_id`) SELECT `id`, `title`, `description`, `status`, `priority`, `type`, `parent_id`, `phase`, `size`, `position`, `position_version`, `labels_json`, `notes_json`, `acceptance_json`, `files_json`, `origin`, `blocked_by`, `epic_lifecycle`, `no_auto_complete`, `created_at`, `updated_at`, `completed_at`, `cancelled_at`, `cancellation_reason`, `archived_at`, `archive_reason`, `cycle_time_days`, `verification_json`, `created_by`, `modified_by`, `session_id` FROM `tasks`;
|
|
379
|
+
--> statement-breakpoint
|
|
380
|
+
DROP TABLE `tasks`;
|
|
381
|
+
--> statement-breakpoint
|
|
382
|
+
ALTER TABLE `tasks_new` RENAME TO `tasks`;
|
|
383
|
+
--> statement-breakpoint
|
|
384
|
+
-- Single-column indexes for tasks (restore after table rebuild)
|
|
385
|
+
CREATE INDEX `idx_tasks_status` ON `tasks` (`status`);
|
|
386
|
+
--> statement-breakpoint
|
|
387
|
+
CREATE INDEX `idx_tasks_parent_id` ON `tasks` (`parent_id`);
|
|
388
|
+
--> statement-breakpoint
|
|
389
|
+
CREATE INDEX `idx_tasks_phase` ON `tasks` (`phase`);
|
|
390
|
+
--> statement-breakpoint
|
|
391
|
+
CREATE INDEX `idx_tasks_type` ON `tasks` (`type`);
|
|
392
|
+
--> statement-breakpoint
|
|
393
|
+
CREATE INDEX `idx_tasks_priority` ON `tasks` (`priority`);
|
|
394
|
+
--> statement-breakpoint
|
|
395
|
+
CREATE INDEX `idx_tasks_session_id` ON `tasks` (`session_id`);
|
|
396
|
+
--> statement-breakpoint
|
|
397
|
+
CREATE INDEX `idx_tasks_pipeline_stage` ON `tasks` (`pipeline_stage`);
|
|
398
|
+
--> statement-breakpoint
|
|
399
|
+
-- Composite indexes for tasks (PART 2 — placed after rebuild to survive DROP)
|
|
400
|
+
CREATE INDEX IF NOT EXISTS `idx_tasks_parent_status` ON `tasks` (`parent_id`, `status`);
|
|
401
|
+
--> statement-breakpoint
|
|
402
|
+
CREATE INDEX IF NOT EXISTS `idx_tasks_status_priority` ON `tasks` (`status`, `priority`);
|
|
403
|
+
--> statement-breakpoint
|
|
404
|
+
CREATE INDEX IF NOT EXISTS `idx_tasks_type_phase` ON `tasks` (`type`, `phase`);
|
|
405
|
+
--> statement-breakpoint
|
|
406
|
+
CREATE INDEX IF NOT EXISTS `idx_tasks_status_archive_reason` ON `tasks` (`status`, `archive_reason`);
|
|
407
|
+
--> statement-breakpoint
|
|
408
|
+
PRAGMA foreign_keys=ON;
|
|
409
|
+
--> statement-breakpoint
|
|
410
|
+
|
|
411
|
+
-- SFK-023: sessions.current_task → tasks.id SET NULL
|
|
412
|
+
-- (previous_session_id and next_session_id FKs already exist; adding current_task FK)
|
|
413
|
+
PRAGMA foreign_keys=OFF;
|
|
414
|
+
--> statement-breakpoint
|
|
415
|
+
CREATE TABLE `sessions_new` (
|
|
416
|
+
`id` text PRIMARY KEY,
|
|
417
|
+
`name` text NOT NULL,
|
|
418
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
419
|
+
`scope_json` text DEFAULT '{}' NOT NULL,
|
|
420
|
+
`current_task` text,
|
|
421
|
+
`task_started_at` text,
|
|
422
|
+
`agent` text,
|
|
423
|
+
`notes_json` text DEFAULT '[]',
|
|
424
|
+
`tasks_completed_json` text DEFAULT '[]',
|
|
425
|
+
`tasks_created_json` text DEFAULT '[]',
|
|
426
|
+
`handoff_json` text,
|
|
427
|
+
`started_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
428
|
+
`ended_at` text,
|
|
429
|
+
`previous_session_id` text,
|
|
430
|
+
`next_session_id` text,
|
|
431
|
+
`agent_identifier` text,
|
|
432
|
+
`handoff_consumed_at` text,
|
|
433
|
+
`handoff_consumed_by` text,
|
|
434
|
+
`debrief_json` text,
|
|
435
|
+
`provider_id` text,
|
|
436
|
+
`stats_json` text,
|
|
437
|
+
`resume_count` integer,
|
|
438
|
+
`grade_mode` integer,
|
|
439
|
+
CONSTRAINT `fk_sessions_previous_session_id` FOREIGN KEY (`previous_session_id`) REFERENCES `sessions`(`id`) ON DELETE SET NULL,
|
|
440
|
+
CONSTRAINT `fk_sessions_next_session_id` FOREIGN KEY (`next_session_id`) REFERENCES `sessions`(`id`) ON DELETE SET NULL,
|
|
441
|
+
CONSTRAINT `fk_sessions_current_task` FOREIGN KEY (`current_task`) REFERENCES `tasks`(`id`) ON DELETE SET NULL
|
|
442
|
+
);
|
|
443
|
+
--> statement-breakpoint
|
|
444
|
+
INSERT INTO `sessions_new` SELECT `id`, `name`, `status`, `scope_json`, `current_task`, `task_started_at`, `agent`, `notes_json`, `tasks_completed_json`, `tasks_created_json`, `handoff_json`, `started_at`, `ended_at`, `previous_session_id`, `next_session_id`, `agent_identifier`, `handoff_consumed_at`, `handoff_consumed_by`, `debrief_json`, `provider_id`, `stats_json`, `resume_count`, `grade_mode` FROM `sessions`;
|
|
445
|
+
--> statement-breakpoint
|
|
446
|
+
DROP TABLE `sessions`;
|
|
447
|
+
--> statement-breakpoint
|
|
448
|
+
ALTER TABLE `sessions_new` RENAME TO `sessions`;
|
|
449
|
+
--> statement-breakpoint
|
|
450
|
+
-- Single-column indexes for sessions (restore after table rebuild)
|
|
451
|
+
CREATE INDEX `idx_sessions_status` ON `sessions` (`status`);
|
|
452
|
+
--> statement-breakpoint
|
|
453
|
+
CREATE INDEX `idx_sessions_previous` ON `sessions` (`previous_session_id`);
|
|
454
|
+
--> statement-breakpoint
|
|
455
|
+
CREATE INDEX `idx_sessions_agent_identifier` ON `sessions` (`agent_identifier`);
|
|
456
|
+
--> statement-breakpoint
|
|
457
|
+
CREATE INDEX `idx_sessions_started_at` ON `sessions` (`started_at`);
|
|
458
|
+
--> statement-breakpoint
|
|
459
|
+
-- Composite index for sessions (PART 2 — placed after rebuild to survive DROP)
|
|
460
|
+
CREATE INDEX IF NOT EXISTS `idx_sessions_status_started_at` ON `sessions` (`status`, `started_at`);
|
|
461
|
+
--> statement-breakpoint
|
|
462
|
+
PRAGMA foreign_keys=ON;
|
|
463
|
+
--> statement-breakpoint
|
|
464
|
+
|
|
465
|
+
-- SFK-020/021: token_usage SET NULL FKs for session_id and task_id
|
|
466
|
+
PRAGMA foreign_keys=OFF;
|
|
467
|
+
--> statement-breakpoint
|
|
468
|
+
CREATE TABLE `token_usage_new` (
|
|
469
|
+
`id` text PRIMARY KEY,
|
|
470
|
+
`created_at` text DEFAULT (datetime('now')) NOT NULL,
|
|
471
|
+
`provider` text DEFAULT 'unknown' NOT NULL,
|
|
472
|
+
`model` text,
|
|
473
|
+
`transport` text DEFAULT 'unknown' NOT NULL,
|
|
474
|
+
`gateway` text,
|
|
475
|
+
`domain` text,
|
|
476
|
+
`operation` text,
|
|
477
|
+
`session_id` text,
|
|
478
|
+
`task_id` text,
|
|
479
|
+
`request_id` text,
|
|
480
|
+
`input_chars` integer DEFAULT 0 NOT NULL,
|
|
481
|
+
`output_chars` integer DEFAULT 0 NOT NULL,
|
|
482
|
+
`input_tokens` integer DEFAULT 0 NOT NULL,
|
|
483
|
+
`output_tokens` integer DEFAULT 0 NOT NULL,
|
|
484
|
+
`total_tokens` integer DEFAULT 0 NOT NULL,
|
|
485
|
+
`method` text DEFAULT 'heuristic' NOT NULL,
|
|
486
|
+
`confidence` text DEFAULT 'coarse' NOT NULL,
|
|
487
|
+
`request_hash` text,
|
|
488
|
+
`response_hash` text,
|
|
489
|
+
`metadata_json` text DEFAULT '{}' NOT NULL,
|
|
490
|
+
CONSTRAINT `fk_token_usage_session_id` FOREIGN KEY (`session_id`) REFERENCES `sessions`(`id`) ON DELETE SET NULL,
|
|
491
|
+
CONSTRAINT `fk_token_usage_task_id` FOREIGN KEY (`task_id`) REFERENCES `tasks`(`id`) ON DELETE SET NULL
|
|
492
|
+
);
|
|
493
|
+
--> statement-breakpoint
|
|
494
|
+
INSERT INTO `token_usage_new` SELECT `id`, `created_at`, `provider`, `model`, `transport`, `gateway`, `domain`, `operation`, `session_id`, `task_id`, `request_id`, `input_chars`, `output_chars`, `input_tokens`, `output_tokens`, `total_tokens`, `method`, `confidence`, `request_hash`, `response_hash`, `metadata_json` FROM `token_usage`;
|
|
495
|
+
--> statement-breakpoint
|
|
496
|
+
DROP TABLE `token_usage`;
|
|
497
|
+
--> statement-breakpoint
|
|
498
|
+
ALTER TABLE `token_usage_new` RENAME TO `token_usage`;
|
|
499
|
+
--> statement-breakpoint
|
|
500
|
+
CREATE INDEX `idx_token_usage_created_at` ON `token_usage` (`created_at`);
|
|
501
|
+
--> statement-breakpoint
|
|
502
|
+
CREATE INDEX `idx_token_usage_request_id` ON `token_usage` (`request_id`);
|
|
503
|
+
--> statement-breakpoint
|
|
504
|
+
CREATE INDEX `idx_token_usage_session_id` ON `token_usage` (`session_id`);
|
|
505
|
+
--> statement-breakpoint
|
|
506
|
+
CREATE INDEX `idx_token_usage_task_id` ON `token_usage` (`task_id`);
|
|
507
|
+
--> statement-breakpoint
|
|
508
|
+
CREATE INDEX `idx_token_usage_provider` ON `token_usage` (`provider`);
|
|
509
|
+
--> statement-breakpoint
|
|
510
|
+
CREATE INDEX `idx_token_usage_transport` ON `token_usage` (`transport`);
|
|
511
|
+
--> statement-breakpoint
|
|
512
|
+
CREATE INDEX `idx_token_usage_domain_operation` ON `token_usage` (`domain`, `operation`);
|
|
513
|
+
--> statement-breakpoint
|
|
514
|
+
CREATE INDEX `idx_token_usage_method` ON `token_usage` (`method`);
|
|
515
|
+
--> statement-breakpoint
|
|
516
|
+
CREATE INDEX `idx_token_usage_gateway` ON `token_usage` (`gateway`);
|
|
517
|
+
--> statement-breakpoint
|
|
518
|
+
PRAGMA foreign_keys=ON;
|