@deeplake/hivemind 0.7.50 → 0.7.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +17 -35
  4. package/bundle/cli.js +10120 -21928
  5. package/codex/bundle/capture.js +3 -74
  6. package/codex/bundle/commands/auth-login.js +3 -74
  7. package/codex/bundle/graph-pull-worker.js +3 -74
  8. package/codex/bundle/pre-tool-use.js +3 -74
  9. package/codex/bundle/session-start-setup.js +3 -74
  10. package/codex/bundle/session-start.js +3 -74
  11. package/codex/bundle/shell/deeplake-shell.js +3 -74
  12. package/codex/bundle/skillify-worker.js +0 -28
  13. package/codex/bundle/stop.js +3 -74
  14. package/codex/skills/hivemind-goals/SKILL.md +2 -2
  15. package/cursor/bundle/capture.js +3 -74
  16. package/cursor/bundle/commands/auth-login.js +3 -74
  17. package/cursor/bundle/graph-pull-worker.js +3 -74
  18. package/cursor/bundle/pre-tool-use.js +3 -74
  19. package/cursor/bundle/session-end.js +3 -6
  20. package/cursor/bundle/session-start.js +68 -338
  21. package/cursor/bundle/shell/deeplake-shell.js +3 -74
  22. package/cursor/bundle/skillify-worker.js +0 -28
  23. package/hermes/bundle/capture.js +3 -74
  24. package/hermes/bundle/commands/auth-login.js +3 -74
  25. package/hermes/bundle/graph-pull-worker.js +3 -74
  26. package/hermes/bundle/pre-tool-use.js +3 -74
  27. package/hermes/bundle/session-end.js +3 -6
  28. package/hermes/bundle/session-start.js +68 -338
  29. package/hermes/bundle/shell/deeplake-shell.js +3 -74
  30. package/hermes/bundle/skillify-worker.js +0 -28
  31. package/mcp/bundle/server.js +3 -74
  32. package/openclaw/dist/chunks/{config-FH6JYSJW.js → config-3D3X7JQH.js} +3 -6
  33. package/openclaw/dist/index.js +2 -68
  34. package/openclaw/dist/skillify-worker.js +0 -28
  35. package/openclaw/openclaw.plugin.json +1 -1
  36. package/openclaw/package.json +1 -1
  37. package/openclaw/skills/hivemind-goals/SKILL.md +1 -1
  38. 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 / TASKS_COLUMNS / TASK_EVENTS_COLUMNS in
66797
- // deeplake-schema.ts and with the e2e test-org override convention
66798
- // (memory_test / sessions_test → goals_test, etc.) documented in
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);
@@ -104,13 +104,10 @@ function loadConfig() {
104
104
  sessionsTableName: process.env.HIVEMIND_SESSIONS_TABLE ?? "sessions",
105
105
  skillsTableName: process.env.HIVEMIND_SKILLS_TABLE ?? "skills",
106
106
  // Defaults match the table name written into the SQL — keep aligned
107
- // with RULES_COLUMNS / TASKS_COLUMNS / TASK_EVENTS_COLUMNS in
108
- // deeplake-schema.ts and with the e2e test-org override convention
109
- // (memory_test / sessions_test → goals_test, etc.) documented in
110
- // CLAUDE.md.
107
+ // with RULES_COLUMNS in deeplake-schema.ts and with the e2e test-org
108
+ // override convention (memory_test / sessions_test goals_test, etc.)
109
+ // documented in CLAUDE.md.
111
110
  rulesTableName: process.env.HIVEMIND_RULES_TABLE ?? "hivemind_rules",
112
- tasksTableName: process.env.HIVEMIND_TASKS_TABLE ?? "hivemind_tasks",
113
- taskEventsTableName: process.env.HIVEMIND_TASK_EVENTS_TABLE ?? "hivemind_task_events",
114
111
  // Goals + KPIs (refined design — VFS path classifier maps
115
112
  // memory/goal/<user>/<status>/<uuid>.md → hivemind_goals row
116
113
  // memory/kpi/<uuid>/<kpi_id>.md → hivemind_kpis row
@@ -232,32 +229,6 @@ var RULES_COLUMNS = Object.freeze([
232
229
  { name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
233
230
  { name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
234
231
  ]);
235
- var TASKS_COLUMNS = Object.freeze([
236
- { name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
237
- { name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
238
- { name: "text", sql: "TEXT NOT NULL DEFAULT ''" },
239
- { name: "scope", sql: "TEXT NOT NULL DEFAULT 'me'" },
240
- { name: "status", sql: "TEXT NOT NULL DEFAULT 'active'" },
241
- { name: "assigned_to", sql: "TEXT NOT NULL DEFAULT ''" },
242
- { name: "assigned_by", sql: "TEXT NOT NULL DEFAULT ''" },
243
- { name: "kpis", sql: "JSONB" },
244
- { name: "version", sql: "BIGINT NOT NULL DEFAULT 1" },
245
- { name: "created_at", sql: "TEXT NOT NULL DEFAULT ''" },
246
- { name: "agent", sql: "TEXT NOT NULL DEFAULT 'manual'" },
247
- { name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
248
- ]);
249
- var TASK_EVENTS_COLUMNS = Object.freeze([
250
- { name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
251
- { name: "task_id", sql: "TEXT NOT NULL DEFAULT ''" },
252
- { name: "task_version", sql: "BIGINT NOT NULL DEFAULT 1" },
253
- { name: "kpi_id", sql: "TEXT NOT NULL DEFAULT ''" },
254
- { name: "value", sql: "BIGINT NOT NULL DEFAULT 0" },
255
- { name: "note", sql: "TEXT NOT NULL DEFAULT ''" },
256
- { name: "source", sql: "TEXT NOT NULL DEFAULT 'user'" },
257
- { name: "agent", sql: "TEXT NOT NULL DEFAULT ''" },
258
- { name: "ts", sql: "TEXT NOT NULL DEFAULT ''" },
259
- { name: "plugin_version", sql: "TEXT NOT NULL DEFAULT ''" }
260
- ]);
261
232
  var GOALS_COLUMNS = Object.freeze([
262
233
  { name: "id", sql: "TEXT NOT NULL DEFAULT ''" },
263
234
  { name: "goal_id", sql: "TEXT NOT NULL DEFAULT ''" },
@@ -323,8 +294,6 @@ validateSchema("MEMORY_COLUMNS", MEMORY_COLUMNS);
323
294
  validateSchema("SESSIONS_COLUMNS", SESSIONS_COLUMNS);
324
295
  validateSchema("SKILLS_COLUMNS", SKILLS_COLUMNS);
325
296
  validateSchema("RULES_COLUMNS", RULES_COLUMNS);
326
- validateSchema("TASKS_COLUMNS", TASKS_COLUMNS);
327
- validateSchema("TASK_EVENTS_COLUMNS", TASK_EVENTS_COLUMNS);
328
297
  validateSchema("GOALS_COLUMNS", GOALS_COLUMNS);
329
298
  validateSchema("KPIS_COLUMNS", KPIS_COLUMNS);
330
299
  validateSchema("CODEBASE_COLUMNS", CODEBASE_COLUMNS);
@@ -944,46 +913,6 @@ var DeeplakeApi = class {
944
913
  await this.healSchema(safe, RULES_COLUMNS);
945
914
  await this.ensureLookupIndex(safe, "rule_id_version", `("rule_id", "version")`);
946
915
  }
947
- /**
948
- * Create the tasks table.
949
- *
950
- * Same write pattern as rules + skills. `kpis` is a nullable JSONB
951
- * column with the agent's KPI metadata; KPI current values come from
952
- * `task_events` (SUM(value)), not this snapshot.
953
- */
954
- async ensureTasksTable(name) {
955
- const safe = sqlIdent(name);
956
- const tables = await this.listTables();
957
- if (!tables.includes(safe)) {
958
- log3(`table "${safe}" not found, creating`);
959
- await this.createTableWithRetry(buildCreateTableSql(safe, TASKS_COLUMNS), safe);
960
- log3(`table "${safe}" created`);
961
- if (!tables.includes(safe))
962
- this._tablesCache = [...tables, safe];
963
- }
964
- await this.healSchema(safe, TASKS_COLUMNS);
965
- await this.ensureLookupIndex(safe, "task_id_version", `("task_id", "version")`);
966
- }
967
- /**
968
- * Create the task-events table.
969
- *
970
- * Append-only. Every INSERT is a fresh row; never UPDATE. KPI current
971
- * value is `SUM(value) WHERE task_id=? AND kpi_id=?`. Index on
972
- * (task_id, kpi_id) is the canonical aggregation key.
973
- */
974
- async ensureTaskEventsTable(name) {
975
- const safe = sqlIdent(name);
976
- const tables = await this.listTables();
977
- if (!tables.includes(safe)) {
978
- log3(`table "${safe}" not found, creating`);
979
- await this.createTableWithRetry(buildCreateTableSql(safe, TASK_EVENTS_COLUMNS), safe);
980
- log3(`table "${safe}" created`);
981
- if (!tables.includes(safe))
982
- this._tablesCache = [...tables, safe];
983
- }
984
- await this.healSchema(safe, TASK_EVENTS_COLUMNS);
985
- await this.ensureLookupIndex(safe, "task_id_kpi_id", `("task_id", "kpi_id")`);
986
- }
987
916
  /**
988
917
  * Create the goals table.
989
918
  *
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: hivemind-goals
3
- description: Create, track and update team goals + KPIs via the Deeplake virtual filesystem at memory/goal/ and memory/kpi/. Use whenever the user mentions a goal, objective, KPI, target, milestone, or asks to track progress on something measurable.
3
+ description: Create, track and update team goals + KPIs via the Deeplake virtual filesystem at memory/goal/ and memory/kpi/. Use whenever the user mentions a goal, objective, KPI, target, milestone, or asks to track progress on something measurable. ALSO use when the user says "task", "todo", "work item", "remind me to", "fix X", or any actionable work item — the goal system replaced the legacy `hivemind tasks` CLI and now covers both objectives and tasks.
4
4
  allowed-tools: Bash
5
5
  ---
6
6
 
@@ -15,6 +15,7 @@ Activate when the user expresses any of:
15
15
  - "add a goal", "add a KPI", "what are my goals?"
16
16
  - "mark this as done", "close that goal"
17
17
  - "shipping X by Friday", "5 PRs this week", any measurable target
18
+ - "create a task", "add a todo", "remind me to fix X", any work item (the goals system absorbs the old `hivemind tasks` CLI — there is no separate task store)
18
19
 
19
20
  For "list my goals" → run `ls ~/.deeplake/memory/goal/<userName>/opened/` and `ls ~/.deeplake/memory/goal/<userName>/in_progress/`. If empty, ask the user if they want to create one.
20
21
 
@@ -144,7 +145,6 @@ Goal ownership lives in the path. KPI files do NOT have an owner segment — the
144
145
  - Do NOT use status values other than `opened`, `in_progress`, `closed`.
145
146
  - Do NOT rename the goal_id (the UUID in the filename) via `mv`. The VFS rejects goal_id renames.
146
147
  - Do NOT block on the KPI generator subprocess — always spawn it detached (`nohup … &`).
147
- - Do NOT use the old `hivemind tasks` CLI — that belonged to an earlier design and is being removed.
148
148
 
149
149
  ## Auto-progress from `git commit`
150
150
 
@@ -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 / TASKS_COLUMNS / TASK_EVENTS_COLUMNS in
103
- // deeplake-schema.ts and with the e2e test-org override convention
104
- // (memory_test / sessions_test → goals_test, etc.) documented in
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 / TASKS_COLUMNS / TASK_EVENTS_COLUMNS in
389
- // deeplake-schema.ts and with the e2e test-org override convention
390
- // (memory_test / sessions_test → goals_test, etc.) documented in
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 / TASKS_COLUMNS / TASK_EVENTS_COLUMNS in
96
- // deeplake-schema.ts and with the e2e test-org override convention
97
- // (memory_test / sessions_test → goals_test, etc.) documented in
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
  *