nodebench-mcp 2.69.0 → 3.0.0

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 (214) hide show
  1. package/README.md +95 -39
  2. package/dist/agents/alertRouter.d.ts +38 -0
  3. package/dist/agents/alertRouter.js +151 -0
  4. package/dist/agents/alertRouter.js.map +1 -0
  5. package/dist/agents/entityMemory.d.ts +40 -0
  6. package/dist/agents/entityMemory.js +64 -0
  7. package/dist/agents/entityMemory.js.map +1 -0
  8. package/dist/agents/subAgents.d.ts +35 -0
  9. package/dist/agents/subAgents.js +62 -0
  10. package/dist/agents/subAgents.js.map +1 -0
  11. package/dist/benchmarks/benchmarkRunner.js +14 -0
  12. package/dist/benchmarks/benchmarkRunner.js.map +1 -1
  13. package/dist/benchmarks/chainEval.js +107 -0
  14. package/dist/benchmarks/chainEval.js.map +1 -1
  15. package/dist/benchmarks/llmJudgeEval.js +85 -0
  16. package/dist/benchmarks/llmJudgeEval.js.map +1 -1
  17. package/dist/benchmarks/searchQualityEval.js +118 -5
  18. package/dist/benchmarks/searchQualityEval.js.map +1 -1
  19. package/dist/cli/search.d.ts +13 -0
  20. package/dist/cli/search.js +130 -0
  21. package/dist/cli/search.js.map +1 -0
  22. package/dist/db.d.ts +6 -2
  23. package/dist/db.js +470 -3
  24. package/dist/db.js.map +1 -1
  25. package/dist/index.js +349 -64
  26. package/dist/index.js.map +1 -1
  27. package/dist/profiler/behaviorStore.d.ts +97 -0
  28. package/dist/profiler/behaviorStore.js +276 -0
  29. package/dist/profiler/behaviorStore.js.map +1 -0
  30. package/dist/profiler/eventCollector.d.ts +119 -0
  31. package/dist/profiler/eventCollector.js +267 -0
  32. package/dist/profiler/eventCollector.js.map +1 -0
  33. package/dist/profiler/index.d.ts +15 -0
  34. package/dist/profiler/index.js +16 -0
  35. package/dist/profiler/index.js.map +1 -0
  36. package/dist/profiler/mcpProxy.d.ts +49 -0
  37. package/dist/profiler/mcpProxy.js +123 -0
  38. package/dist/profiler/mcpProxy.js.map +1 -0
  39. package/dist/profiler/modelRouter.d.ts +30 -0
  40. package/dist/profiler/modelRouter.js +99 -0
  41. package/dist/profiler/modelRouter.js.map +1 -0
  42. package/dist/profiler/otelReceiver.d.ts +17 -0
  43. package/dist/profiler/otelReceiver.js +62 -0
  44. package/dist/profiler/otelReceiver.js.map +1 -0
  45. package/dist/profiler/proofEngine.d.ts +41 -0
  46. package/dist/profiler/proofEngine.js +93 -0
  47. package/dist/profiler/proofEngine.js.map +1 -0
  48. package/dist/profiler/workflowTemplates.d.ts +41 -0
  49. package/dist/profiler/workflowTemplates.js +95 -0
  50. package/dist/profiler/workflowTemplates.js.map +1 -0
  51. package/dist/providers/localMemoryProvider.js +3 -2
  52. package/dist/providers/localMemoryProvider.js.map +1 -1
  53. package/dist/runtimeConfig.d.ts +11 -0
  54. package/dist/runtimeConfig.js +27 -0
  55. package/dist/runtimeConfig.js.map +1 -0
  56. package/dist/security/auditLog.js +8 -3
  57. package/dist/security/auditLog.js.map +1 -1
  58. package/dist/subconscious/blocks.d.ts +43 -0
  59. package/dist/subconscious/blocks.js +158 -0
  60. package/dist/subconscious/blocks.js.map +1 -0
  61. package/dist/subconscious/classifier.d.ts +22 -0
  62. package/dist/subconscious/classifier.js +118 -0
  63. package/dist/subconscious/classifier.js.map +1 -0
  64. package/dist/subconscious/graphEngine.d.ts +65 -0
  65. package/dist/subconscious/graphEngine.js +234 -0
  66. package/dist/subconscious/graphEngine.js.map +1 -0
  67. package/dist/subconscious/index.d.ts +19 -0
  68. package/dist/subconscious/index.js +20 -0
  69. package/dist/subconscious/index.js.map +1 -0
  70. package/dist/subconscious/tools.d.ts +5 -0
  71. package/dist/subconscious/tools.js +255 -0
  72. package/dist/subconscious/tools.js.map +1 -0
  73. package/dist/subconscious/whisperPolicy.d.ts +20 -0
  74. package/dist/subconscious/whisperPolicy.js +171 -0
  75. package/dist/subconscious/whisperPolicy.js.map +1 -0
  76. package/dist/sweep/engine.d.ts +27 -0
  77. package/dist/sweep/engine.js +244 -0
  78. package/dist/sweep/engine.js.map +1 -0
  79. package/dist/sweep/index.d.ts +9 -0
  80. package/dist/sweep/index.js +8 -0
  81. package/dist/sweep/index.js.map +1 -0
  82. package/dist/sweep/sources/github_trending.d.ts +6 -0
  83. package/dist/sweep/sources/github_trending.js +37 -0
  84. package/dist/sweep/sources/github_trending.js.map +1 -0
  85. package/dist/sweep/sources/hackernews.d.ts +7 -0
  86. package/dist/sweep/sources/hackernews.js +57 -0
  87. package/dist/sweep/sources/hackernews.js.map +1 -0
  88. package/dist/sweep/sources/openbb_finance.d.ts +9 -0
  89. package/dist/sweep/sources/openbb_finance.js +46 -0
  90. package/dist/sweep/sources/openbb_finance.js.map +1 -0
  91. package/dist/sweep/sources/producthunt.d.ts +6 -0
  92. package/dist/sweep/sources/producthunt.js +41 -0
  93. package/dist/sweep/sources/producthunt.js.map +1 -0
  94. package/dist/sweep/sources/web_signals.d.ts +7 -0
  95. package/dist/sweep/sources/web_signals.js +63 -0
  96. package/dist/sweep/sources/web_signals.js.map +1 -0
  97. package/dist/sweep/sources/yahoo_finance.d.ts +6 -0
  98. package/dist/sweep/sources/yahoo_finance.js +47 -0
  99. package/dist/sweep/sources/yahoo_finance.js.map +1 -0
  100. package/dist/sweep/types.d.ts +50 -0
  101. package/dist/sweep/types.js +9 -0
  102. package/dist/sweep/types.js.map +1 -0
  103. package/dist/sync/founderEpisodeStore.d.ts +98 -0
  104. package/dist/sync/founderEpisodeStore.js +230 -0
  105. package/dist/sync/founderEpisodeStore.js.map +1 -0
  106. package/dist/sync/hyperloopArchive.d.ts +51 -0
  107. package/dist/sync/hyperloopArchive.js +153 -0
  108. package/dist/sync/hyperloopArchive.js.map +1 -0
  109. package/dist/sync/hyperloopEval.d.ts +123 -0
  110. package/dist/sync/hyperloopEval.js +389 -0
  111. package/dist/sync/hyperloopEval.js.map +1 -0
  112. package/dist/sync/hyperloopEval.test.d.ts +4 -0
  113. package/dist/sync/hyperloopEval.test.js +60 -0
  114. package/dist/sync/hyperloopEval.test.js.map +1 -0
  115. package/dist/sync/protocol.d.ts +172 -0
  116. package/dist/sync/protocol.js +9 -0
  117. package/dist/sync/protocol.js.map +1 -0
  118. package/dist/sync/sessionMemory.d.ts +47 -0
  119. package/dist/sync/sessionMemory.js +138 -0
  120. package/dist/sync/sessionMemory.js.map +1 -0
  121. package/dist/sync/store.d.ts +384 -0
  122. package/dist/sync/store.js +1435 -0
  123. package/dist/sync/store.js.map +1 -0
  124. package/dist/sync/store.test.d.ts +4 -0
  125. package/dist/sync/store.test.js +43 -0
  126. package/dist/sync/store.test.js.map +1 -0
  127. package/dist/sync/syncBridgeClient.d.ts +30 -0
  128. package/dist/sync/syncBridgeClient.js +172 -0
  129. package/dist/sync/syncBridgeClient.js.map +1 -0
  130. package/dist/tools/autonomousDeliveryTools.d.ts +2 -0
  131. package/dist/tools/autonomousDeliveryTools.js +1104 -0
  132. package/dist/tools/autonomousDeliveryTools.js.map +1 -0
  133. package/dist/tools/claudeCodeIngestTools.d.ts +10 -0
  134. package/dist/tools/claudeCodeIngestTools.js +347 -0
  135. package/dist/tools/claudeCodeIngestTools.js.map +1 -0
  136. package/dist/tools/coreWorkflowTools.d.ts +2 -0
  137. package/dist/tools/coreWorkflowTools.js +488 -0
  138. package/dist/tools/coreWorkflowTools.js.map +1 -0
  139. package/dist/tools/deltaTools.d.ts +15 -0
  140. package/dist/tools/deltaTools.js +1522 -0
  141. package/dist/tools/deltaTools.js.map +1 -0
  142. package/dist/tools/entityLookupTools.d.ts +14 -0
  143. package/dist/tools/entityLookupTools.js +159 -0
  144. package/dist/tools/entityLookupTools.js.map +1 -0
  145. package/dist/tools/entityTemporalTools.d.ts +12 -0
  146. package/dist/tools/entityTemporalTools.js +330 -0
  147. package/dist/tools/entityTemporalTools.js.map +1 -0
  148. package/dist/tools/founderLocalPipeline.d.ts +215 -0
  149. package/dist/tools/founderLocalPipeline.js +1516 -2
  150. package/dist/tools/founderLocalPipeline.js.map +1 -1
  151. package/dist/tools/founderOperatingModel.d.ts +120 -0
  152. package/dist/tools/founderOperatingModel.js +469 -0
  153. package/dist/tools/founderOperatingModel.js.map +1 -0
  154. package/dist/tools/founderOperatingModelTools.d.ts +2 -0
  155. package/dist/tools/founderOperatingModelTools.js +169 -0
  156. package/dist/tools/founderOperatingModelTools.js.map +1 -0
  157. package/dist/tools/founderStrategicOpsTools.d.ts +2 -0
  158. package/dist/tools/founderStrategicOpsTools.js +1310 -0
  159. package/dist/tools/founderStrategicOpsTools.js.map +1 -0
  160. package/dist/tools/graphifyTools.d.ts +19 -0
  161. package/dist/tools/graphifyTools.js +375 -0
  162. package/dist/tools/graphifyTools.js.map +1 -0
  163. package/dist/tools/index.d.ts +3 -0
  164. package/dist/tools/index.js +4 -0
  165. package/dist/tools/index.js.map +1 -1
  166. package/dist/tools/monteCarloTools.d.ts +16 -0
  167. package/dist/tools/monteCarloTools.js +225 -0
  168. package/dist/tools/monteCarloTools.js.map +1 -0
  169. package/dist/tools/packetCompilerTools.d.ts +12 -0
  170. package/dist/tools/packetCompilerTools.js +322 -0
  171. package/dist/tools/packetCompilerTools.js.map +1 -0
  172. package/dist/tools/planSynthesisTools.d.ts +15 -0
  173. package/dist/tools/planSynthesisTools.js +455 -0
  174. package/dist/tools/planSynthesisTools.js.map +1 -0
  175. package/dist/tools/profilerTools.d.ts +20 -0
  176. package/dist/tools/profilerTools.js +364 -0
  177. package/dist/tools/profilerTools.js.map +1 -0
  178. package/dist/tools/savingsTools.d.ts +11 -0
  179. package/dist/tools/savingsTools.js +155 -0
  180. package/dist/tools/savingsTools.js.map +1 -0
  181. package/dist/tools/scenarioCompilerTools.d.ts +14 -0
  182. package/dist/tools/scenarioCompilerTools.js +290 -0
  183. package/dist/tools/scenarioCompilerTools.js.map +1 -0
  184. package/dist/tools/sharedContextTools.d.ts +2 -0
  185. package/dist/tools/sharedContextTools.js +423 -0
  186. package/dist/tools/sharedContextTools.js.map +1 -0
  187. package/dist/tools/sitemapTools.d.ts +15 -0
  188. package/dist/tools/sitemapTools.js +560 -0
  189. package/dist/tools/sitemapTools.js.map +1 -0
  190. package/dist/tools/sweepTools.d.ts +9 -0
  191. package/dist/tools/sweepTools.js +112 -0
  192. package/dist/tools/sweepTools.js.map +1 -0
  193. package/dist/tools/syncBridgeTools.d.ts +2 -0
  194. package/dist/tools/syncBridgeTools.js +258 -0
  195. package/dist/tools/syncBridgeTools.js.map +1 -0
  196. package/dist/tools/toolRegistry.js +1216 -49
  197. package/dist/tools/toolRegistry.js.map +1 -1
  198. package/dist/tools/workspaceTools.d.ts +19 -0
  199. package/dist/tools/workspaceTools.js +762 -0
  200. package/dist/tools/workspaceTools.js.map +1 -0
  201. package/dist/toolsetRegistry.js +88 -2
  202. package/dist/toolsetRegistry.js.map +1 -1
  203. package/package.json +36 -36
  204. package/rules/nodebench-agentic-reliability.md +32 -0
  205. package/rules/nodebench-analyst-diagnostic.md +25 -0
  206. package/rules/nodebench-auto-qa.md +31 -0
  207. package/rules/nodebench-completion-traceability.md +22 -0
  208. package/rules/nodebench-flywheel-continuous.md +25 -0
  209. package/rules/nodebench-pre-release-review.md +24 -0
  210. package/rules/nodebench-qa-dogfood.md +26 -0
  211. package/rules/nodebench-scenario-testing.md +30 -0
  212. package/rules/nodebench-self-direction.md +23 -0
  213. package/rules/nodebench-self-judge-loop.md +24 -0
  214. package/scripts/install.sh +215 -0
package/dist/db.js CHANGED
@@ -1,8 +1,87 @@
1
- import Database from "better-sqlite3";
2
- import { homedir } from "node:os";
1
+ import { createRequire } from "node:module";
3
2
  import { join } from "node:path";
4
3
  import { mkdirSync } from "node:fs";
4
+ const require = createRequire(import.meta.url);
5
5
  let _db = null;
6
+ let _databaseCtor;
7
+ const OBJECT_NODES_FTS_SQL = `
8
+ CREATE VIRTUAL TABLE IF NOT EXISTS object_nodes_fts USING fts5(
9
+ label,
10
+ metadata_json,
11
+ content='object_nodes',
12
+ content_rowid='rowid'
13
+ );
14
+ `;
15
+ const OBJECT_NODES_FTS_TRIGGERS_SQL = `
16
+ CREATE TRIGGER IF NOT EXISTS object_nodes_fts_insert AFTER INSERT ON object_nodes BEGIN
17
+ INSERT INTO object_nodes_fts(rowid, label, metadata_json)
18
+ VALUES (new.rowid, new.label, new.metadata_json);
19
+ END;
20
+
21
+ CREATE TRIGGER IF NOT EXISTS object_nodes_fts_delete AFTER DELETE ON object_nodes BEGIN
22
+ INSERT INTO object_nodes_fts(object_nodes_fts, rowid, label, metadata_json)
23
+ VALUES ('delete', old.rowid, old.label, old.metadata_json);
24
+ END;
25
+
26
+ CREATE TRIGGER IF NOT EXISTS object_nodes_fts_update AFTER UPDATE ON object_nodes BEGIN
27
+ INSERT INTO object_nodes_fts(object_nodes_fts, rowid, label, metadata_json)
28
+ VALUES ('delete', old.rowid, old.label, old.metadata_json);
29
+ INSERT INTO object_nodes_fts(rowid, label, metadata_json)
30
+ VALUES (new.rowid, new.label, new.metadata_json);
31
+ END;
32
+ `;
33
+ function loadDatabaseCtor() {
34
+ if (_databaseCtor !== undefined)
35
+ return _databaseCtor;
36
+ try {
37
+ _databaseCtor = require("better-sqlite3");
38
+ }
39
+ catch {
40
+ _databaseCtor = null;
41
+ }
42
+ return _databaseCtor;
43
+ }
44
+ function getNodebenchDataDir() {
45
+ const configured = process.env.NODEBENCH_DATA_DIR?.trim();
46
+ if (configured)
47
+ return configured;
48
+ if (process.env.VERCEL)
49
+ return "/tmp/.nodebench";
50
+ const home = process.env.HOME || process.env.USERPROFILE || process.cwd();
51
+ return join(home, ".nodebench");
52
+ }
53
+ function createNoopStatement(sql) {
54
+ const normalized = sql.toLowerCase();
55
+ return {
56
+ get: () => {
57
+ if (normalized.includes("count("))
58
+ return { c: 0 };
59
+ if (normalized.includes("min("))
60
+ return { t: null };
61
+ if (normalized.includes("max("))
62
+ return { t: null };
63
+ return undefined;
64
+ },
65
+ all: () => [],
66
+ run: () => ({ changes: 0, lastInsertRowid: 0 }),
67
+ };
68
+ }
69
+ function createNoopDb() {
70
+ return {
71
+ prepare(sql) {
72
+ return createNoopStatement(sql);
73
+ },
74
+ exec() {
75
+ return undefined;
76
+ },
77
+ pragma() {
78
+ return undefined;
79
+ },
80
+ transaction(fn) {
81
+ return ((...args) => fn(...args));
82
+ },
83
+ };
84
+ }
6
85
  const SCHEMA_SQL = `
7
86
  PRAGMA journal_mode = WAL;
8
87
  PRAGMA busy_timeout = 5000;
@@ -721,11 +800,348 @@ CREATE TRIGGER IF NOT EXISTS content_archive_fts_insert AFTER INSERT ON content_
721
800
  INSERT INTO content_archive_fts(rowid, title, digest, themes)
722
801
  VALUES (new.rowid, new.title, COALESCE(new.digest, ''), COALESCE(new.themes, ''));
723
802
  END;
803
+
804
+ -- ═══════════════════════════════════════════
805
+ -- LOCAL-FIRST IDENTITY / PROVENANCE / SYNC
806
+ -- Durable objects, receipts, account bindings,
807
+ -- and outbound sync queue for web account replication.
808
+ -- ═══════════════════════════════════════════
809
+
810
+ CREATE TABLE IF NOT EXISTS object_nodes (
811
+ id TEXT PRIMARY KEY,
812
+ kind TEXT NOT NULL,
813
+ label TEXT NOT NULL,
814
+ source TEXT NOT NULL DEFAULT 'local',
815
+ status TEXT NOT NULL DEFAULT 'active',
816
+ metadata_json TEXT NOT NULL DEFAULT '{}',
817
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
818
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
819
+ );
820
+
821
+ CREATE INDEX IF NOT EXISTS idx_object_nodes_kind ON object_nodes(kind);
822
+ CREATE INDEX IF NOT EXISTS idx_object_nodes_source ON object_nodes(source);
823
+ CREATE INDEX IF NOT EXISTS idx_object_nodes_updated ON object_nodes(updated_at DESC);
824
+
825
+ CREATE TABLE IF NOT EXISTS object_edges (
826
+ id TEXT PRIMARY KEY,
827
+ from_id TEXT NOT NULL REFERENCES object_nodes(id) ON DELETE CASCADE,
828
+ to_id TEXT NOT NULL REFERENCES object_nodes(id) ON DELETE CASCADE,
829
+ edge_type TEXT NOT NULL,
830
+ confidence REAL NOT NULL DEFAULT 1.0,
831
+ metadata_json TEXT NOT NULL DEFAULT '{}',
832
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
833
+ UNIQUE(from_id, to_id, edge_type)
834
+ );
835
+
836
+ CREATE INDEX IF NOT EXISTS idx_object_edges_from ON object_edges(from_id);
837
+ CREATE INDEX IF NOT EXISTS idx_object_edges_to ON object_edges(to_id);
838
+ CREATE INDEX IF NOT EXISTS idx_object_edges_type ON object_edges(edge_type);
839
+
840
+ CREATE TABLE IF NOT EXISTS execution_receipts (
841
+ id TEXT PRIMARY KEY,
842
+ run_id TEXT,
843
+ trace_id TEXT,
844
+ step_id TEXT,
845
+ object_id TEXT REFERENCES object_nodes(id) ON DELETE SET NULL,
846
+ tool_name TEXT,
847
+ action_type TEXT NOT NULL,
848
+ summary TEXT NOT NULL,
849
+ input_hash TEXT,
850
+ output_hash TEXT,
851
+ status TEXT NOT NULL DEFAULT 'recorded',
852
+ metadata_json TEXT NOT NULL DEFAULT '{}',
853
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
854
+ );
855
+
856
+ CREATE INDEX IF NOT EXISTS idx_execution_receipts_run ON execution_receipts(run_id);
857
+ CREATE INDEX IF NOT EXISTS idx_execution_receipts_trace ON execution_receipts(trace_id);
858
+ CREATE INDEX IF NOT EXISTS idx_execution_receipts_object ON execution_receipts(object_id);
859
+ CREATE INDEX IF NOT EXISTS idx_execution_receipts_created ON execution_receipts(created_at DESC);
860
+
861
+ CREATE TABLE IF NOT EXISTS local_artifacts (
862
+ id TEXT PRIMARY KEY,
863
+ run_id TEXT,
864
+ object_id TEXT REFERENCES object_nodes(id) ON DELETE SET NULL,
865
+ kind TEXT NOT NULL,
866
+ path TEXT,
867
+ content_hash TEXT,
868
+ summary TEXT,
869
+ verification_status TEXT NOT NULL DEFAULT 'unverified',
870
+ metadata_json TEXT NOT NULL DEFAULT '{}',
871
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
872
+ );
873
+
874
+ CREATE INDEX IF NOT EXISTS idx_local_artifacts_run ON local_artifacts(run_id);
875
+ CREATE INDEX IF NOT EXISTS idx_local_artifacts_object ON local_artifacts(object_id);
876
+ CREATE INDEX IF NOT EXISTS idx_local_artifacts_kind ON local_artifacts(kind);
877
+
878
+ CREATE TABLE IF NOT EXISTS local_outcomes (
879
+ id TEXT PRIMARY KEY,
880
+ run_id TEXT,
881
+ object_id TEXT REFERENCES object_nodes(id) ON DELETE SET NULL,
882
+ outcome_type TEXT NOT NULL,
883
+ headline TEXT NOT NULL,
884
+ user_value TEXT,
885
+ stakeholder_value TEXT,
886
+ status TEXT NOT NULL DEFAULT 'draft',
887
+ evidence_json TEXT NOT NULL DEFAULT '[]',
888
+ metadata_json TEXT NOT NULL DEFAULT '{}',
889
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
890
+ );
891
+
892
+ CREATE INDEX IF NOT EXISTS idx_local_outcomes_run ON local_outcomes(run_id);
893
+ CREATE INDEX IF NOT EXISTS idx_local_outcomes_object ON local_outcomes(object_id);
894
+ CREATE INDEX IF NOT EXISTS idx_local_outcomes_status ON local_outcomes(status);
895
+
896
+ CREATE TABLE IF NOT EXISTS device_bindings (
897
+ device_id TEXT PRIMARY KEY,
898
+ device_name TEXT NOT NULL,
899
+ platform TEXT,
900
+ app_version TEXT,
901
+ bridge_url TEXT,
902
+ device_token TEXT,
903
+ binding_status TEXT NOT NULL DEFAULT 'unpaired',
904
+ metadata_json TEXT NOT NULL DEFAULT '{}',
905
+ paired_at TEXT,
906
+ last_seen_at TEXT,
907
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
908
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
909
+ );
910
+
911
+ CREATE INDEX IF NOT EXISTS idx_device_bindings_status ON device_bindings(binding_status);
912
+
913
+ CREATE TABLE IF NOT EXISTS account_bindings (
914
+ id TEXT PRIMARY KEY,
915
+ device_id TEXT NOT NULL REFERENCES device_bindings(device_id) ON DELETE CASCADE,
916
+ user_id TEXT NOT NULL,
917
+ workspace_id TEXT,
918
+ scopes_json TEXT NOT NULL DEFAULT '[]',
919
+ sync_enabled INTEGER NOT NULL DEFAULT 1,
920
+ sync_mode TEXT NOT NULL DEFAULT 'connected',
921
+ metadata_json TEXT NOT NULL DEFAULT '{}',
922
+ paired_at TEXT NOT NULL DEFAULT (datetime('now')),
923
+ last_synced_at TEXT,
924
+ revoked_at TEXT,
925
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
926
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
927
+ );
928
+
929
+ CREATE INDEX IF NOT EXISTS idx_account_bindings_device ON account_bindings(device_id);
930
+ CREATE INDEX IF NOT EXISTS idx_account_bindings_user ON account_bindings(user_id);
931
+ CREATE INDEX IF NOT EXISTS idx_account_bindings_active ON account_bindings(sync_enabled, revoked_at);
932
+
933
+ CREATE TABLE IF NOT EXISTS sync_queue (
934
+ id TEXT PRIMARY KEY,
935
+ object_id TEXT,
936
+ object_kind TEXT NOT NULL,
937
+ op_type TEXT NOT NULL,
938
+ payload_json TEXT NOT NULL,
939
+ payload_hash TEXT NOT NULL,
940
+ sync_status TEXT NOT NULL DEFAULT 'pending',
941
+ retry_count INTEGER NOT NULL DEFAULT 0,
942
+ last_error TEXT,
943
+ last_attempt_at TEXT,
944
+ acknowledged_at TEXT,
945
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
946
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
947
+ );
948
+
949
+ CREATE INDEX IF NOT EXISTS idx_sync_queue_status ON sync_queue(sync_status, created_at);
950
+ CREATE INDEX IF NOT EXISTS idx_sync_queue_object ON sync_queue(object_id, object_kind);
951
+
952
+ CREATE TABLE IF NOT EXISTS sync_receipts (
953
+ id TEXT PRIMARY KEY,
954
+ queue_id TEXT NOT NULL REFERENCES sync_queue(id) ON DELETE CASCADE,
955
+ server_receipt_id TEXT,
956
+ device_id TEXT,
957
+ user_id TEXT,
958
+ workspace_id TEXT,
959
+ status TEXT NOT NULL,
960
+ detail_json TEXT NOT NULL DEFAULT '{}',
961
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
962
+ );
963
+
964
+ CREATE INDEX IF NOT EXISTS idx_sync_receipts_queue ON sync_receipts(queue_id);
965
+ CREATE INDEX IF NOT EXISTS idx_sync_receipts_device ON sync_receipts(device_id);
966
+
967
+ CREATE TABLE IF NOT EXISTS shared_context_peers (
968
+ peer_id TEXT PRIMARY KEY,
969
+ product TEXT NOT NULL,
970
+ tenant_id TEXT,
971
+ workspace_id TEXT,
972
+ surface TEXT NOT NULL,
973
+ role TEXT NOT NULL,
974
+ capabilities_json TEXT NOT NULL DEFAULT '[]',
975
+ context_scopes_json TEXT NOT NULL DEFAULT '[]',
976
+ status TEXT NOT NULL DEFAULT 'active',
977
+ summary_json TEXT NOT NULL DEFAULT '{}',
978
+ metadata_json TEXT NOT NULL DEFAULT '{}',
979
+ last_heartbeat_at TEXT NOT NULL,
980
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
981
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
982
+ );
983
+
984
+ CREATE INDEX IF NOT EXISTS idx_shared_context_peers_product ON shared_context_peers(product);
985
+ CREATE INDEX IF NOT EXISTS idx_shared_context_peers_workspace ON shared_context_peers(workspace_id);
986
+ CREATE INDEX IF NOT EXISTS idx_shared_context_peers_role ON shared_context_peers(role);
987
+ CREATE INDEX IF NOT EXISTS idx_shared_context_peers_status ON shared_context_peers(status);
988
+
989
+ CREATE TABLE IF NOT EXISTS shared_context_packets (
990
+ context_id TEXT PRIMARY KEY,
991
+ context_type TEXT NOT NULL,
992
+ producer_peer_id TEXT NOT NULL REFERENCES shared_context_peers(peer_id) ON DELETE CASCADE,
993
+ tenant_id TEXT,
994
+ workspace_id TEXT,
995
+ scope_json TEXT NOT NULL DEFAULT '[]',
996
+ subject TEXT NOT NULL,
997
+ summary TEXT NOT NULL,
998
+ claims_json TEXT NOT NULL DEFAULT '[]',
999
+ evidence_refs_json TEXT NOT NULL DEFAULT '[]',
1000
+ state_snapshot_json TEXT NOT NULL DEFAULT '{}',
1001
+ time_window_json TEXT NOT NULL DEFAULT '{}',
1002
+ freshness_json TEXT NOT NULL DEFAULT '{}',
1003
+ permissions_json TEXT NOT NULL DEFAULT '{}',
1004
+ confidence REAL,
1005
+ lineage_json TEXT NOT NULL DEFAULT '{}',
1006
+ invalidates_json TEXT NOT NULL DEFAULT '[]',
1007
+ next_actions_json TEXT NOT NULL DEFAULT '[]',
1008
+ version INTEGER NOT NULL DEFAULT 1,
1009
+ status TEXT NOT NULL DEFAULT 'active',
1010
+ metadata_json TEXT NOT NULL DEFAULT '{}',
1011
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1012
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
1013
+ );
1014
+
1015
+ CREATE INDEX IF NOT EXISTS idx_shared_context_packets_type ON shared_context_packets(context_type);
1016
+ CREATE INDEX IF NOT EXISTS idx_shared_context_packets_peer ON shared_context_packets(producer_peer_id);
1017
+ CREATE INDEX IF NOT EXISTS idx_shared_context_packets_workspace ON shared_context_packets(workspace_id);
1018
+ CREATE INDEX IF NOT EXISTS idx_shared_context_packets_status ON shared_context_packets(status);
1019
+ CREATE INDEX IF NOT EXISTS idx_shared_context_packets_created ON shared_context_packets(created_at DESC);
1020
+
1021
+ CREATE TABLE IF NOT EXISTS shared_context_packet_acks (
1022
+ id TEXT PRIMARY KEY,
1023
+ context_id TEXT NOT NULL REFERENCES shared_context_packets(context_id) ON DELETE CASCADE,
1024
+ peer_id TEXT NOT NULL REFERENCES shared_context_peers(peer_id) ON DELETE CASCADE,
1025
+ ack_status TEXT NOT NULL DEFAULT 'acknowledged',
1026
+ detail_json TEXT NOT NULL DEFAULT '{}',
1027
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1028
+ UNIQUE(context_id, peer_id)
1029
+ );
1030
+
1031
+ CREATE INDEX IF NOT EXISTS idx_shared_context_packet_acks_peer ON shared_context_packet_acks(peer_id);
1032
+
1033
+ CREATE TABLE IF NOT EXISTS shared_context_messages (
1034
+ id TEXT PRIMARY KEY,
1035
+ from_peer_id TEXT NOT NULL REFERENCES shared_context_peers(peer_id) ON DELETE CASCADE,
1036
+ to_peer_id TEXT NOT NULL REFERENCES shared_context_peers(peer_id) ON DELETE CASCADE,
1037
+ message_class TEXT NOT NULL,
1038
+ payload_json TEXT NOT NULL DEFAULT '{}',
1039
+ status TEXT NOT NULL DEFAULT 'unread',
1040
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1041
+ read_at TEXT
1042
+ );
1043
+
1044
+ CREATE INDEX IF NOT EXISTS idx_shared_context_messages_to_peer ON shared_context_messages(to_peer_id, status, created_at DESC);
1045
+ CREATE INDEX IF NOT EXISTS idx_shared_context_messages_from_peer ON shared_context_messages(from_peer_id, created_at DESC);
1046
+
1047
+ CREATE TABLE IF NOT EXISTS shared_context_tasks (
1048
+ task_id TEXT PRIMARY KEY,
1049
+ task_type TEXT NOT NULL,
1050
+ proposer_peer_id TEXT NOT NULL REFERENCES shared_context_peers(peer_id) ON DELETE CASCADE,
1051
+ assignee_peer_id TEXT NOT NULL REFERENCES shared_context_peers(peer_id) ON DELETE CASCADE,
1052
+ status TEXT NOT NULL DEFAULT 'proposed',
1053
+ task_spec_json TEXT NOT NULL DEFAULT '{}',
1054
+ input_context_ids_json TEXT NOT NULL DEFAULT '[]',
1055
+ output_context_id TEXT REFERENCES shared_context_packets(context_id) ON DELETE SET NULL,
1056
+ reason TEXT,
1057
+ metadata_json TEXT NOT NULL DEFAULT '{}',
1058
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1059
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
1060
+ );
1061
+
1062
+ CREATE INDEX IF NOT EXISTS idx_shared_context_tasks_assignee ON shared_context_tasks(assignee_peer_id, status, created_at DESC);
1063
+ CREATE INDEX IF NOT EXISTS idx_shared_context_tasks_proposer ON shared_context_tasks(proposer_peer_id, created_at DESC);
1064
+
1065
+ CREATE TABLE IF NOT EXISTS founder_harness_episodes (
1066
+ episode_id TEXT PRIMARY KEY,
1067
+ correlation_id TEXT NOT NULL,
1068
+ session_key TEXT,
1069
+ workspace_id TEXT,
1070
+ company_key TEXT,
1071
+ surface TEXT NOT NULL,
1072
+ episode_type TEXT NOT NULL,
1073
+ status TEXT NOT NULL DEFAULT 'active',
1074
+ query TEXT,
1075
+ lens TEXT,
1076
+ entity_name TEXT,
1077
+ packet_id TEXT,
1078
+ packet_type TEXT,
1079
+ workflow_asset_id TEXT,
1080
+ workflow_envelope_id TEXT,
1081
+ context_id TEXT,
1082
+ task_id TEXT,
1083
+ summary TEXT,
1084
+ state_before_json TEXT,
1085
+ state_after_json TEXT,
1086
+ state_before_hash TEXT,
1087
+ state_after_hash TEXT,
1088
+ spans_json TEXT NOT NULL DEFAULT '[]',
1089
+ trace_step_count INTEGER,
1090
+ tools_invoked_json TEXT NOT NULL DEFAULT '[]',
1091
+ artifacts_produced_json TEXT NOT NULL DEFAULT '[]',
1092
+ important_changes_detected INTEGER,
1093
+ contradictions_detected INTEGER,
1094
+ metadata_json TEXT,
1095
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
1096
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
1097
+ completed_at TEXT
1098
+ );
1099
+
1100
+ CREATE INDEX IF NOT EXISTS idx_founder_harness_episodes_session ON founder_harness_episodes(session_key, started_at DESC);
1101
+ CREATE INDEX IF NOT EXISTS idx_founder_harness_episodes_workspace ON founder_harness_episodes(workspace_id, started_at DESC);
1102
+ CREATE INDEX IF NOT EXISTS idx_founder_harness_episodes_status ON founder_harness_episodes(status, started_at DESC);
1103
+ CREATE INDEX IF NOT EXISTS idx_founder_harness_episodes_correlation ON founder_harness_episodes(correlation_id);
1104
+
1105
+ -- ═══════════════════════════════════════════
1106
+ -- SUBCONSCIOUS MEMORY BLOCKS
1107
+ -- ═══════════════════════════════════════════
1108
+
1109
+ CREATE TABLE IF NOT EXISTS subconscious_blocks (
1110
+ id TEXT PRIMARY KEY,
1111
+ label TEXT NOT NULL,
1112
+ value TEXT NOT NULL DEFAULT '',
1113
+ version INTEGER NOT NULL DEFAULT 1,
1114
+ confidence TEXT NOT NULL DEFAULT 'low',
1115
+ source_events TEXT NOT NULL DEFAULT '[]',
1116
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
1117
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
1118
+ );
1119
+
1120
+ CREATE TABLE IF NOT EXISTS subconscious_whisper_log (
1121
+ id TEXT PRIMARY KEY,
1122
+ session_id TEXT NOT NULL,
1123
+ block_ids TEXT NOT NULL DEFAULT '[]',
1124
+ whisper_text TEXT NOT NULL,
1125
+ classification TEXT NOT NULL,
1126
+ suppressed INTEGER NOT NULL DEFAULT 0,
1127
+ reason TEXT,
1128
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
1129
+ );
1130
+
1131
+ CREATE INDEX IF NOT EXISTS idx_whisper_log_session ON subconscious_whisper_log(session_id, created_at DESC);
1132
+
1133
+ ${OBJECT_NODES_FTS_SQL.trim()}
1134
+ ${OBJECT_NODES_FTS_TRIGGERS_SQL.trim()}
724
1135
  `;
725
1136
  export function getDb() {
726
1137
  if (_db)
727
1138
  return _db;
728
- const dir = join(homedir(), ".nodebench");
1139
+ const Database = loadDatabaseCtor();
1140
+ if (!Database) {
1141
+ _db = createNoopDb();
1142
+ return _db;
1143
+ }
1144
+ const dir = getNodebenchDataDir();
729
1145
  mkdirSync(dir, { recursive: true });
730
1146
  _db = new Database(join(dir, "nodebench.db"));
731
1147
  _db.exec(SCHEMA_SQL);
@@ -741,10 +1157,61 @@ export function getDb() {
741
1157
  if (g.c > 0 && gFts.c === 0) {
742
1158
  _db.exec("INSERT INTO gaps_fts(gaps_fts) VALUES('rebuild')");
743
1159
  }
1160
+ ensureObjectNodesFtsHealthy();
744
1161
  }
745
1162
  catch { /* FTS tables not yet available — fresh DB, triggers will handle it */ }
746
1163
  return _db;
747
1164
  }
1165
+ function looksLikeSqliteFtsFailure(error, tableName) {
1166
+ const message = error instanceof Error ? error.message : String(error ?? "");
1167
+ return (message.includes(tableName)
1168
+ || message.includes("SQLITE_CORRUPT_VTAB")
1169
+ || message.includes("database disk image is malformed")
1170
+ || message.includes("malformed")
1171
+ || message.includes("no such table"));
1172
+ }
1173
+ export function ensureObjectNodesFtsHealthy() {
1174
+ const db = getDb();
1175
+ try {
1176
+ const objectCount = db.prepare("SELECT COUNT(*) as c FROM object_nodes").get();
1177
+ const ftsCount = db.prepare("SELECT COUNT(*) as c FROM object_nodes_fts").get();
1178
+ if ((objectCount.c ?? 0) > 0 && (ftsCount.c ?? 0) === 0) {
1179
+ db.exec("INSERT INTO object_nodes_fts(object_nodes_fts) VALUES('rebuild')");
1180
+ }
1181
+ }
1182
+ catch (error) {
1183
+ if (!looksLikeSqliteFtsFailure(error, "object_nodes_fts")) {
1184
+ throw error;
1185
+ }
1186
+ rebuildObjectNodesFts();
1187
+ }
1188
+ }
1189
+ export function rebuildObjectNodesFts() {
1190
+ const db = getDb();
1191
+ db.exec("DROP TRIGGER IF EXISTS object_nodes_fts_insert");
1192
+ db.exec("DROP TRIGGER IF EXISTS object_nodes_fts_delete");
1193
+ db.exec("DROP TRIGGER IF EXISTS object_nodes_fts_update");
1194
+ db.exec("DROP TABLE IF EXISTS object_nodes_fts");
1195
+ db.exec("DROP TABLE IF EXISTS object_nodes_fts_data");
1196
+ db.exec("DROP TABLE IF EXISTS object_nodes_fts_idx");
1197
+ db.exec("DROP TABLE IF EXISTS object_nodes_fts_docsize");
1198
+ db.exec("DROP TABLE IF EXISTS object_nodes_fts_config");
1199
+ db.exec(OBJECT_NODES_FTS_SQL);
1200
+ db.exec(OBJECT_NODES_FTS_TRIGGERS_SQL);
1201
+ db.exec("INSERT INTO object_nodes_fts(object_nodes_fts) VALUES('rebuild')");
1202
+ }
1203
+ export function withObjectNodesFtsRepair(operation) {
1204
+ try {
1205
+ return operation();
1206
+ }
1207
+ catch (error) {
1208
+ if (!looksLikeSqliteFtsFailure(error, "object_nodes_fts")) {
1209
+ throw error;
1210
+ }
1211
+ rebuildObjectNodesFts();
1212
+ return operation();
1213
+ }
1214
+ }
748
1215
  export function isFirstRun() {
749
1216
  const db = getDb();
750
1217
  const ctx = db.prepare("SELECT COUNT(*) as c FROM project_context").get();
package/dist/db.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}