@deeplake/hivemind 0.7.49 → 0.7.51
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/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +68 -40
- package/bundle/cli.js +9743 -21944
- package/codex/bundle/capture.js +3 -74
- package/codex/bundle/commands/auth-login.js +3 -74
- package/codex/bundle/graph-pull-worker.js +3 -74
- package/codex/bundle/pre-tool-use.js +3 -74
- package/codex/bundle/session-start-setup.js +3 -74
- package/codex/bundle/session-start.js +3 -74
- package/codex/bundle/shell/deeplake-shell.js +3 -74
- package/codex/bundle/skillify-worker.js +0 -28
- package/codex/bundle/stop.js +3 -74
- package/codex/skills/hivemind-goals/SKILL.md +2 -2
- package/cursor/bundle/capture.js +3 -74
- package/cursor/bundle/commands/auth-login.js +3 -74
- package/cursor/bundle/graph-pull-worker.js +3 -74
- package/cursor/bundle/pre-tool-use.js +3 -74
- package/cursor/bundle/session-end.js +3 -6
- package/cursor/bundle/session-start.js +68 -338
- package/cursor/bundle/shell/deeplake-shell.js +3 -74
- package/cursor/bundle/skillify-worker.js +0 -28
- package/hermes/bundle/capture.js +3 -74
- package/hermes/bundle/commands/auth-login.js +3 -74
- package/hermes/bundle/graph-pull-worker.js +3 -74
- package/hermes/bundle/pre-tool-use.js +3 -74
- package/hermes/bundle/session-end.js +3 -6
- package/hermes/bundle/session-start.js +68 -338
- package/hermes/bundle/shell/deeplake-shell.js +3 -74
- package/hermes/bundle/skillify-worker.js +0 -28
- package/mcp/bundle/server.js +3 -74
- package/openclaw/dist/chunks/{config-FH6JYSJW.js → config-3D3X7JQH.js} +3 -6
- package/openclaw/dist/index.js +2 -68
- package/openclaw/dist/skillify-worker.js +0 -28
- package/openclaw/openclaw.plugin.json +1 -1
- package/openclaw/package.json +1 -1
- package/openclaw/skills/hivemind-goals/SKILL.md +1 -1
- package/package.json +1 -1
package/codex/bundle/capture.js
CHANGED
|
@@ -99,13 +99,10 @@ function loadConfig() {
|
|
|
99
99
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
100
100
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
101
101
|
// Defaults match the table name written into the SQL — keep aligned
|
|
102
|
-
// with RULES_COLUMNS
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
// CLAUDE.md.
|
|
102
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
103
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
104
|
+
// documented in CLAUDE.md.
|
|
106
105
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
107
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
108
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
109
106
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
110
107
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
111
108
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -227,32 +224,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
227
224
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
228
225
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
229
226
|
]);
|
|
230
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
231
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
232
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
233
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
234
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
235
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
236
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
237
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
238
|
-
{ name: "kpis", sql: "JSONB" },
|
|
239
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
240
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
241
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
242
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
243
|
-
]);
|
|
244
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
245
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
246
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
247
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
248
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
249
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
250
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
251
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
252
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
253
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
254
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
255
|
-
]);
|
|
256
227
|
var GOALS_COLUMNS = Object.freeze([
|
|
257
228
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
258
229
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -318,8 +289,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
318
289
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
319
290
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
320
291
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
321
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
322
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
323
292
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
324
293
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
325
294
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -939,46 +908,6 @@ var DeeplakeApi = class {
|
|
|
939
908
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
940
909
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
941
910
|
}
|
|
942
|
-
/**
|
|
943
|
-
* Create the tasks table.
|
|
944
|
-
*
|
|
945
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
946
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
947
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
948
|
-
*/
|
|
949
|
-
async ensureTasksTable(name) {
|
|
950
|
-
const safe = sqlIdent(name);
|
|
951
|
-
const tables = await this.listTables();
|
|
952
|
-
if (!tables.includes(safe)) {
|
|
953
|
-
log3(`table "${safe}" not found, creating`);
|
|
954
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
955
|
-
log3(`table "${safe}" created`);
|
|
956
|
-
if (!tables.includes(safe))
|
|
957
|
-
this._tablesCache = [...tables, safe];
|
|
958
|
-
}
|
|
959
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
960
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
961
|
-
}
|
|
962
|
-
/**
|
|
963
|
-
* Create the task-events table.
|
|
964
|
-
*
|
|
965
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
966
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
967
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
968
|
-
*/
|
|
969
|
-
async ensureTaskEventsTable(name) {
|
|
970
|
-
const safe = sqlIdent(name);
|
|
971
|
-
const tables = await this.listTables();
|
|
972
|
-
if (!tables.includes(safe)) {
|
|
973
|
-
log3(`table "${safe}" not found, creating`);
|
|
974
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
975
|
-
log3(`table "${safe}" created`);
|
|
976
|
-
if (!tables.includes(safe))
|
|
977
|
-
this._tablesCache = [...tables, safe];
|
|
978
|
-
}
|
|
979
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
980
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
981
|
-
}
|
|
982
911
|
/**
|
|
983
912
|
* Create the goals table.
|
|
984
913
|
*
|
|
@@ -385,13 +385,10 @@ function loadConfig() {
|
|
|
385
385
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
386
386
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
387
387
|
// Defaults match the table name written into the SQL — keep aligned
|
|
388
|
-
// with RULES_COLUMNS
|
|
389
|
-
//
|
|
390
|
-
//
|
|
391
|
-
// CLAUDE.md.
|
|
388
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
389
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
390
|
+
// documented in CLAUDE.md.
|
|
392
391
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
393
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
394
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
395
392
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
396
393
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
397
394
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -501,32 +498,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
501
498
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
502
499
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
503
500
|
]);
|
|
504
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
505
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
506
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
507
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
508
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
509
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
510
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
511
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
512
|
-
{ name: "kpis", sql: "JSONB" },
|
|
513
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
514
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
515
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
516
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
517
|
-
]);
|
|
518
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
519
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
520
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
521
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
522
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
523
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
524
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
525
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
526
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
527
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
528
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
529
|
-
]);
|
|
530
501
|
var GOALS_COLUMNS = Object.freeze([
|
|
531
502
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
532
503
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -592,8 +563,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
592
563
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
593
564
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
594
565
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
595
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
596
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
597
566
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
598
567
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
599
568
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -1195,46 +1164,6 @@ var DeeplakeApi = class {
|
|
|
1195
1164
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
1196
1165
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
1197
1166
|
}
|
|
1198
|
-
/**
|
|
1199
|
-
* Create the tasks table.
|
|
1200
|
-
*
|
|
1201
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
1202
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
1203
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
1204
|
-
*/
|
|
1205
|
-
async ensureTasksTable(name) {
|
|
1206
|
-
const safe = sqlIdent(name);
|
|
1207
|
-
const tables = await this.listTables();
|
|
1208
|
-
if (!tables.includes(safe)) {
|
|
1209
|
-
log3(`table "${safe}" not found, creating`);
|
|
1210
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
1211
|
-
log3(`table "${safe}" created`);
|
|
1212
|
-
if (!tables.includes(safe))
|
|
1213
|
-
this._tablesCache = [...tables, safe];
|
|
1214
|
-
}
|
|
1215
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
1216
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
1217
|
-
}
|
|
1218
|
-
/**
|
|
1219
|
-
* Create the task-events table.
|
|
1220
|
-
*
|
|
1221
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
1222
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
1223
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
1224
|
-
*/
|
|
1225
|
-
async ensureTaskEventsTable(name) {
|
|
1226
|
-
const safe = sqlIdent(name);
|
|
1227
|
-
const tables = await this.listTables();
|
|
1228
|
-
if (!tables.includes(safe)) {
|
|
1229
|
-
log3(`table "${safe}" not found, creating`);
|
|
1230
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
1231
|
-
log3(`table "${safe}" created`);
|
|
1232
|
-
if (!tables.includes(safe))
|
|
1233
|
-
this._tablesCache = [...tables, safe];
|
|
1234
|
-
}
|
|
1235
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
1236
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
1237
|
-
}
|
|
1238
1167
|
/**
|
|
1239
1168
|
* Create the goals table.
|
|
1240
1169
|
*
|
|
@@ -92,13 +92,10 @@ function loadConfig() {
|
|
|
92
92
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
93
93
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
94
94
|
// Defaults match the table name written into the SQL — keep aligned
|
|
95
|
-
// with RULES_COLUMNS
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
// CLAUDE.md.
|
|
95
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
96
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
97
|
+
// documented in CLAUDE.md.
|
|
99
98
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
100
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
101
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
102
99
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
103
100
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
104
101
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -217,32 +214,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
217
214
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
218
215
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
219
216
|
]);
|
|
220
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
221
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
222
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
223
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
224
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
225
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
226
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
227
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
228
|
-
{ name: "kpis", sql: "JSONB" },
|
|
229
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
230
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
231
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
232
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
233
|
-
]);
|
|
234
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
235
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
236
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
237
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
238
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
239
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
240
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
241
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
242
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
243
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
244
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
245
|
-
]);
|
|
246
217
|
var GOALS_COLUMNS = Object.freeze([
|
|
247
218
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
248
219
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -308,8 +279,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
308
279
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
309
280
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
310
281
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
311
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
312
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
313
282
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
314
283
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
315
284
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -929,46 +898,6 @@ var DeeplakeApi = class {
|
|
|
929
898
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
930
899
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
931
900
|
}
|
|
932
|
-
/**
|
|
933
|
-
* Create the tasks table.
|
|
934
|
-
*
|
|
935
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
936
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
937
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
938
|
-
*/
|
|
939
|
-
async ensureTasksTable(name) {
|
|
940
|
-
const safe = sqlIdent(name);
|
|
941
|
-
const tables = await this.listTables();
|
|
942
|
-
if (!tables.includes(safe)) {
|
|
943
|
-
log3(`table "${safe}" not found, creating`);
|
|
944
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
945
|
-
log3(`table "${safe}" created`);
|
|
946
|
-
if (!tables.includes(safe))
|
|
947
|
-
this._tablesCache = [...tables, safe];
|
|
948
|
-
}
|
|
949
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
950
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
951
|
-
}
|
|
952
|
-
/**
|
|
953
|
-
* Create the task-events table.
|
|
954
|
-
*
|
|
955
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
956
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
957
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
958
|
-
*/
|
|
959
|
-
async ensureTaskEventsTable(name) {
|
|
960
|
-
const safe = sqlIdent(name);
|
|
961
|
-
const tables = await this.listTables();
|
|
962
|
-
if (!tables.includes(safe)) {
|
|
963
|
-
log3(`table "${safe}" not found, creating`);
|
|
964
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
965
|
-
log3(`table "${safe}" created`);
|
|
966
|
-
if (!tables.includes(safe))
|
|
967
|
-
this._tablesCache = [...tables, safe];
|
|
968
|
-
}
|
|
969
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
970
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
971
|
-
}
|
|
972
901
|
/**
|
|
973
902
|
* Create the goals table.
|
|
974
903
|
*
|
|
@@ -105,13 +105,10 @@ function loadConfig() {
|
|
|
105
105
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
106
106
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
107
107
|
// Defaults match the table name written into the SQL — keep aligned
|
|
108
|
-
// with RULES_COLUMNS
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
// CLAUDE.md.
|
|
108
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
109
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
110
|
+
// documented in CLAUDE.md.
|
|
112
111
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
113
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
114
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
115
112
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
116
113
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
117
114
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -233,32 +230,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
233
230
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
234
231
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
235
232
|
]);
|
|
236
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
237
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
238
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
239
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
240
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
241
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
242
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
243
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
244
|
-
{ name: "kpis", sql: "JSONB" },
|
|
245
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
246
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
247
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
248
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
249
|
-
]);
|
|
250
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
251
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
252
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
253
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
254
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
255
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
256
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
257
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
258
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
259
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
260
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
261
|
-
]);
|
|
262
233
|
var GOALS_COLUMNS = Object.freeze([
|
|
263
234
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
264
235
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -324,8 +295,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
324
295
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
325
296
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
326
297
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
327
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
328
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
329
298
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
330
299
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
331
300
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -945,46 +914,6 @@ var DeeplakeApi = class {
|
|
|
945
914
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
946
915
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
947
916
|
}
|
|
948
|
-
/**
|
|
949
|
-
* Create the tasks table.
|
|
950
|
-
*
|
|
951
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
952
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
953
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
954
|
-
*/
|
|
955
|
-
async ensureTasksTable(name) {
|
|
956
|
-
const safe = sqlIdent(name);
|
|
957
|
-
const tables = await this.listTables();
|
|
958
|
-
if (!tables.includes(safe)) {
|
|
959
|
-
log3(`table "${safe}" not found, creating`);
|
|
960
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
961
|
-
log3(`table "${safe}" created`);
|
|
962
|
-
if (!tables.includes(safe))
|
|
963
|
-
this._tablesCache = [...tables, safe];
|
|
964
|
-
}
|
|
965
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
966
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
967
|
-
}
|
|
968
|
-
/**
|
|
969
|
-
* Create the task-events table.
|
|
970
|
-
*
|
|
971
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
972
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
973
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
974
|
-
*/
|
|
975
|
-
async ensureTaskEventsTable(name) {
|
|
976
|
-
const safe = sqlIdent(name);
|
|
977
|
-
const tables = await this.listTables();
|
|
978
|
-
if (!tables.includes(safe)) {
|
|
979
|
-
log3(`table "${safe}" not found, creating`);
|
|
980
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
981
|
-
log3(`table "${safe}" created`);
|
|
982
|
-
if (!tables.includes(safe))
|
|
983
|
-
this._tablesCache = [...tables, safe];
|
|
984
|
-
}
|
|
985
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
986
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
987
|
-
}
|
|
988
917
|
/**
|
|
989
918
|
* Create the goals table.
|
|
990
919
|
*
|
|
@@ -127,13 +127,10 @@ function loadConfig() {
|
|
|
127
127
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
128
128
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
129
129
|
// Defaults match the table name written into the SQL — keep aligned
|
|
130
|
-
// with RULES_COLUMNS
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
// CLAUDE.md.
|
|
130
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
131
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
132
|
+
// documented in CLAUDE.md.
|
|
134
133
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
135
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
136
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
137
134
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
138
135
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
139
136
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -246,32 +243,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
246
243
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
247
244
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
248
245
|
]);
|
|
249
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
250
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
251
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
252
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
253
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
254
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
255
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
256
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
257
|
-
{ name: "kpis", sql: "JSONB" },
|
|
258
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
259
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
260
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
261
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
262
|
-
]);
|
|
263
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
264
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
265
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
266
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
267
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
268
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
269
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
270
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
271
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
272
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
273
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
274
|
-
]);
|
|
275
246
|
var GOALS_COLUMNS = Object.freeze([
|
|
276
247
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
277
248
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -337,8 +308,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
337
308
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
338
309
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
339
310
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
340
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
341
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
342
311
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
343
312
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
344
313
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -940,46 +909,6 @@ var DeeplakeApi = class {
|
|
|
940
909
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
941
910
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
942
911
|
}
|
|
943
|
-
/**
|
|
944
|
-
* Create the tasks table.
|
|
945
|
-
*
|
|
946
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
947
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
948
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
949
|
-
*/
|
|
950
|
-
async ensureTasksTable(name) {
|
|
951
|
-
const safe = sqlIdent(name);
|
|
952
|
-
const tables = await this.listTables();
|
|
953
|
-
if (!tables.includes(safe)) {
|
|
954
|
-
log3(`table "${safe}" not found, creating`);
|
|
955
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
956
|
-
log3(`table "${safe}" created`);
|
|
957
|
-
if (!tables.includes(safe))
|
|
958
|
-
this._tablesCache = [...tables, safe];
|
|
959
|
-
}
|
|
960
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
961
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
962
|
-
}
|
|
963
|
-
/**
|
|
964
|
-
* Create the task-events table.
|
|
965
|
-
*
|
|
966
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
967
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
968
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
969
|
-
*/
|
|
970
|
-
async ensureTaskEventsTable(name) {
|
|
971
|
-
const safe = sqlIdent(name);
|
|
972
|
-
const tables = await this.listTables();
|
|
973
|
-
if (!tables.includes(safe)) {
|
|
974
|
-
log3(`table "${safe}" not found, creating`);
|
|
975
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
976
|
-
log3(`table "${safe}" created`);
|
|
977
|
-
if (!tables.includes(safe))
|
|
978
|
-
this._tablesCache = [...tables, safe];
|
|
979
|
-
}
|
|
980
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
981
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
982
|
-
}
|
|
983
912
|
/**
|
|
984
913
|
* Create the goals table.
|
|
985
914
|
*
|
|
@@ -325,13 +325,10 @@ function loadConfig() {
|
|
|
325
325
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
326
326
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
327
327
|
// Defaults match the table name written into the SQL — keep aligned
|
|
328
|
-
// with RULES_COLUMNS
|
|
329
|
-
//
|
|
330
|
-
//
|
|
331
|
-
// CLAUDE.md.
|
|
328
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
329
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
330
|
+
// documented in CLAUDE.md.
|
|
332
331
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
333
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
334
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
335
332
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
336
333
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
337
334
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -426,32 +423,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
426
423
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
427
424
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
428
425
|
]);
|
|
429
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
430
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
431
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
432
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
433
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
434
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
435
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
436
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
437
|
-
{ name: "kpis", sql: "JSONB" },
|
|
438
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
439
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
440
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
441
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
442
|
-
]);
|
|
443
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
444
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
445
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
446
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
447
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
448
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
449
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
450
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
451
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
452
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
453
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
454
|
-
]);
|
|
455
426
|
var GOALS_COLUMNS = Object.freeze([
|
|
456
427
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
457
428
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -517,8 +488,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
517
488
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
518
489
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
519
490
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
520
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
521
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
522
491
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
523
492
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
524
493
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -1120,46 +1089,6 @@ var DeeplakeApi = class {
|
|
|
1120
1089
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
1121
1090
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
1122
1091
|
}
|
|
1123
|
-
/**
|
|
1124
|
-
* Create the tasks table.
|
|
1125
|
-
*
|
|
1126
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
1127
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
1128
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
1129
|
-
*/
|
|
1130
|
-
async ensureTasksTable(name) {
|
|
1131
|
-
const safe = sqlIdent(name);
|
|
1132
|
-
const tables = await this.listTables();
|
|
1133
|
-
if (!tables.includes(safe)) {
|
|
1134
|
-
log3(`table "${safe}" not found, creating`);
|
|
1135
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
1136
|
-
log3(`table "${safe}" created`);
|
|
1137
|
-
if (!tables.includes(safe))
|
|
1138
|
-
this._tablesCache = [...tables, safe];
|
|
1139
|
-
}
|
|
1140
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
1141
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
1142
|
-
}
|
|
1143
|
-
/**
|
|
1144
|
-
* Create the task-events table.
|
|
1145
|
-
*
|
|
1146
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
1147
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
1148
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
1149
|
-
*/
|
|
1150
|
-
async ensureTaskEventsTable(name) {
|
|
1151
|
-
const safe = sqlIdent(name);
|
|
1152
|
-
const tables = await this.listTables();
|
|
1153
|
-
if (!tables.includes(safe)) {
|
|
1154
|
-
log3(`table "${safe}" not found, creating`);
|
|
1155
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
1156
|
-
log3(`table "${safe}" created`);
|
|
1157
|
-
if (!tables.includes(safe))
|
|
1158
|
-
this._tablesCache = [...tables, safe];
|
|
1159
|
-
}
|
|
1160
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
1161
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
1162
|
-
}
|
|
1163
1092
|
/**
|
|
1164
1093
|
* Create the goals table.
|
|
1165
1094
|
*
|