@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.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +17 -35
- package/bundle/cli.js +10120 -21928
- 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/codex/bundle/stop.js
CHANGED
|
@@ -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
|
|
108
|
-
//
|
|
109
|
-
//
|
|
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
|
|
package/cursor/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
|
*
|