@deeplake/hivemind 0.7.50 → 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 +17 -35
- 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
|
@@ -66793,13 +66793,10 @@ function loadConfig() {
|
|
|
66793
66793
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
66794
66794
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
66795
66795
|
// Defaults match the table name written into the SQL — keep aligned
|
|
66796
|
-
// with RULES_COLUMNS
|
|
66797
|
-
//
|
|
66798
|
-
//
|
|
66799
|
-
// CLAUDE.md.
|
|
66796
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
66797
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
66798
|
+
// documented in CLAUDE.md.
|
|
66800
66799
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
66801
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
66802
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
66803
66800
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
66804
66801
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
66805
66802
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -66921,32 +66918,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
66921
66918
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
66922
66919
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
66923
66920
|
]);
|
|
66924
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
66925
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66926
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66927
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66928
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
66929
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
66930
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66931
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66932
|
-
{ name: "kpis", sql: "JSONB" },
|
|
66933
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
66934
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66935
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
66936
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
66937
|
-
]);
|
|
66938
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
66939
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66940
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66941
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
66942
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66943
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
66944
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66945
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
66946
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66947
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66948
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
66949
|
-
]);
|
|
66950
66921
|
var GOALS_COLUMNS = Object.freeze([
|
|
66951
66922
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
66952
66923
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -67012,8 +66983,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
67012
66983
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
67013
66984
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
67014
66985
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
67015
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
67016
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
67017
66986
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
67018
66987
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
67019
66988
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -67633,46 +67602,6 @@ var DeeplakeApi = class {
|
|
|
67633
67602
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
67634
67603
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
67635
67604
|
}
|
|
67636
|
-
/**
|
|
67637
|
-
* Create the tasks table.
|
|
67638
|
-
*
|
|
67639
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
67640
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
67641
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
67642
|
-
*/
|
|
67643
|
-
async ensureTasksTable(name) {
|
|
67644
|
-
const safe = sqlIdent(name);
|
|
67645
|
-
const tables = await this.listTables();
|
|
67646
|
-
if (!tables.includes(safe)) {
|
|
67647
|
-
log3(`table "${safe}" not found, creating`);
|
|
67648
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
67649
|
-
log3(`table "${safe}" created`);
|
|
67650
|
-
if (!tables.includes(safe))
|
|
67651
|
-
this._tablesCache = [...tables, safe];
|
|
67652
|
-
}
|
|
67653
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
67654
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
67655
|
-
}
|
|
67656
|
-
/**
|
|
67657
|
-
* Create the task-events table.
|
|
67658
|
-
*
|
|
67659
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
67660
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
67661
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
67662
|
-
*/
|
|
67663
|
-
async ensureTaskEventsTable(name) {
|
|
67664
|
-
const safe = sqlIdent(name);
|
|
67665
|
-
const tables = await this.listTables();
|
|
67666
|
-
if (!tables.includes(safe)) {
|
|
67667
|
-
log3(`table "${safe}" not found, creating`);
|
|
67668
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
67669
|
-
log3(`table "${safe}" created`);
|
|
67670
|
-
if (!tables.includes(safe))
|
|
67671
|
-
this._tablesCache = [...tables, safe];
|
|
67672
|
-
}
|
|
67673
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
67674
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
67675
|
-
}
|
|
67676
67605
|
/**
|
|
67677
67606
|
* Create the goals table.
|
|
67678
67607
|
*
|
|
@@ -390,32 +390,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
390
390
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
391
391
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
392
392
|
]);
|
|
393
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
394
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
395
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
396
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
397
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
398
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
399
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
400
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
401
|
-
{ name: "kpis", sql: "JSONB" },
|
|
402
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
403
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
404
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
405
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
406
|
-
]);
|
|
407
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
408
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
409
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
410
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
411
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
412
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
413
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
414
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
415
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
416
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
417
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
418
|
-
]);
|
|
419
393
|
var GOALS_COLUMNS = Object.freeze([
|
|
420
394
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
421
395
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -481,8 +455,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
481
455
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
482
456
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
483
457
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
484
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
485
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
486
458
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
487
459
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
488
460
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
package/hermes/bundle/capture.js
CHANGED
|
@@ -98,13 +98,10 @@ function loadConfig() {
|
|
|
98
98
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
99
99
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
100
100
|
// Defaults match the table name written into the SQL — keep aligned
|
|
101
|
-
// with RULES_COLUMNS
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
// CLAUDE.md.
|
|
101
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
102
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
103
|
+
// documented in CLAUDE.md.
|
|
105
104
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
106
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
107
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
108
105
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
109
106
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
110
107
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -226,32 +223,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
226
223
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
227
224
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
228
225
|
]);
|
|
229
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
230
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
231
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
232
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
233
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
234
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
235
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
236
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
237
|
-
{ name: "kpis", sql: "JSONB" },
|
|
238
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
239
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
240
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
241
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
242
|
-
]);
|
|
243
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
244
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
245
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
246
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
247
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
248
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
249
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
250
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
251
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
252
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
253
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
254
|
-
]);
|
|
255
226
|
var GOALS_COLUMNS = Object.freeze([
|
|
256
227
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
257
228
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -317,8 +288,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
317
288
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
318
289
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
319
290
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
320
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
321
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
322
291
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
323
292
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
324
293
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -938,46 +907,6 @@ var DeeplakeApi = class {
|
|
|
938
907
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
939
908
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
940
909
|
}
|
|
941
|
-
/**
|
|
942
|
-
* Create the tasks table.
|
|
943
|
-
*
|
|
944
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
945
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
946
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
947
|
-
*/
|
|
948
|
-
async ensureTasksTable(name) {
|
|
949
|
-
const safe = sqlIdent(name);
|
|
950
|
-
const tables = await this.listTables();
|
|
951
|
-
if (!tables.includes(safe)) {
|
|
952
|
-
log3(`table "${safe}" not found, creating`);
|
|
953
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
954
|
-
log3(`table "${safe}" created`);
|
|
955
|
-
if (!tables.includes(safe))
|
|
956
|
-
this._tablesCache = [...tables, safe];
|
|
957
|
-
}
|
|
958
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
959
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
960
|
-
}
|
|
961
|
-
/**
|
|
962
|
-
* Create the task-events table.
|
|
963
|
-
*
|
|
964
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
965
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
966
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
967
|
-
*/
|
|
968
|
-
async ensureTaskEventsTable(name) {
|
|
969
|
-
const safe = sqlIdent(name);
|
|
970
|
-
const tables = await this.listTables();
|
|
971
|
-
if (!tables.includes(safe)) {
|
|
972
|
-
log3(`table "${safe}" not found, creating`);
|
|
973
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
974
|
-
log3(`table "${safe}" created`);
|
|
975
|
-
if (!tables.includes(safe))
|
|
976
|
-
this._tablesCache = [...tables, safe];
|
|
977
|
-
}
|
|
978
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
979
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
980
|
-
}
|
|
981
910
|
/**
|
|
982
911
|
* Create the goals table.
|
|
983
912
|
*
|
|
@@ -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
|
*
|
|
@@ -98,13 +98,10 @@ function loadConfig() {
|
|
|
98
98
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
99
99
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
100
100
|
// Defaults match the table name written into the SQL — keep aligned
|
|
101
|
-
// with RULES_COLUMNS
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
// CLAUDE.md.
|
|
101
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
102
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
103
|
+
// documented in CLAUDE.md.
|
|
105
104
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
106
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
107
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
108
105
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
109
106
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
110
107
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|
|
@@ -226,32 +223,6 @@ var RULES_COLUMNS = Object.freeze([
|
|
|
226
223
|
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
227
224
|
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
228
225
|
]);
|
|
229
|
-
var TASKS_COLUMNS = Object.freeze([
|
|
230
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
231
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
232
|
-
{ name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
233
|
-
{ name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
|
|
234
|
-
{ name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
|
|
235
|
-
{ name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
236
|
-
{ name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
237
|
-
{ name: "kpis", sql: "JSONB" },
|
|
238
|
-
{ name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
239
|
-
{ name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
240
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
|
|
241
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
242
|
-
]);
|
|
243
|
-
var TASK_EVENTS_COLUMNS = Object.freeze([
|
|
244
|
-
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
245
|
-
{ name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
246
|
-
{ name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
|
|
247
|
-
{ name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
248
|
-
{ name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
|
|
249
|
-
{ name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
250
|
-
{ name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
|
|
251
|
-
{ name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
252
|
-
{ name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
253
|
-
{ name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
|
|
254
|
-
]);
|
|
255
226
|
var GOALS_COLUMNS = Object.freeze([
|
|
256
227
|
{ name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
257
228
|
{ name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
|
|
@@ -317,8 +288,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
|
|
|
317
288
|
validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
|
|
318
289
|
validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
|
|
319
290
|
validateSchema("RULES_COLUMNS", RULES_COLUMNS);
|
|
320
|
-
validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
|
|
321
|
-
validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
|
|
322
291
|
validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
|
|
323
292
|
validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
|
|
324
293
|
validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
|
|
@@ -938,46 +907,6 @@ var DeeplakeApi = class {
|
|
|
938
907
|
await this.healSchema(safe, RULES_COLUMNS);
|
|
939
908
|
await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
|
|
940
909
|
}
|
|
941
|
-
/**
|
|
942
|
-
* Create the tasks table.
|
|
943
|
-
*
|
|
944
|
-
* Same write pattern as rules + skills. `kpis` is a nullable JSONB
|
|
945
|
-
* column with the agent's KPI metadata; KPI current values come from
|
|
946
|
-
* `task_events` (SUM(value)), not this snapshot.
|
|
947
|
-
*/
|
|
948
|
-
async ensureTasksTable(name) {
|
|
949
|
-
const safe = sqlIdent(name);
|
|
950
|
-
const tables = await this.listTables();
|
|
951
|
-
if (!tables.includes(safe)) {
|
|
952
|
-
log3(`table "${safe}" not found, creating`);
|
|
953
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
|
|
954
|
-
log3(`table "${safe}" created`);
|
|
955
|
-
if (!tables.includes(safe))
|
|
956
|
-
this._tablesCache = [...tables, safe];
|
|
957
|
-
}
|
|
958
|
-
await this.healSchema(safe, TASKS_COLUMNS);
|
|
959
|
-
await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
|
|
960
|
-
}
|
|
961
|
-
/**
|
|
962
|
-
* Create the task-events table.
|
|
963
|
-
*
|
|
964
|
-
* Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
|
|
965
|
-
* value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
|
|
966
|
-
* (task_id, kpi_id) is the canonical aggregation key.
|
|
967
|
-
*/
|
|
968
|
-
async ensureTaskEventsTable(name) {
|
|
969
|
-
const safe = sqlIdent(name);
|
|
970
|
-
const tables = await this.listTables();
|
|
971
|
-
if (!tables.includes(safe)) {
|
|
972
|
-
log3(`table "${safe}" not found, creating`);
|
|
973
|
-
await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
|
|
974
|
-
log3(`table "${safe}" created`);
|
|
975
|
-
if (!tables.includes(safe))
|
|
976
|
-
this._tablesCache = [...tables, safe];
|
|
977
|
-
}
|
|
978
|
-
await this.healSchema(safe, TASK_EVENTS_COLUMNS);
|
|
979
|
-
await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
|
|
980
|
-
}
|
|
981
910
|
/**
|
|
982
911
|
* Create the goals table.
|
|
983
912
|
*
|
|
@@ -63,13 +63,10 @@ function loadConfig() {
|
|
|
63
63
|
sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
|
|
64
64
|
skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
|
|
65
65
|
// Defaults match the table name written into the SQL — keep aligned
|
|
66
|
-
// with RULES_COLUMNS
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
// CLAUDE.md.
|
|
66
|
+
// with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
|
|
67
|
+
// override convention (memory_test / sessions_test → goals_test, etc.)
|
|
68
|
+
// documented in CLAUDE.md.
|
|
70
69
|
rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
|
|
71
|
-
tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
|
|
72
|
-
taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
|
|
73
70
|
// Goals + KPIs (refined design — VFS path classifier maps
|
|
74
71
|
// memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
|
|
75
72
|
// memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
|