@thread-memory/core 0.1.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 (76) hide show
  1. package/dist/events.d.ts +18 -0
  2. package/dist/events.js +17 -0
  3. package/dist/events.js.map +1 -0
  4. package/dist/events.test.d.ts +1 -0
  5. package/dist/events.test.js +46 -0
  6. package/dist/events.test.js.map +1 -0
  7. package/dist/feedback-guard.d.ts +3 -0
  8. package/dist/feedback-guard.js +33 -0
  9. package/dist/feedback-guard.js.map +1 -0
  10. package/dist/feedback-guard.test.d.ts +1 -0
  11. package/dist/feedback-guard.test.js +67 -0
  12. package/dist/feedback-guard.test.js.map +1 -0
  13. package/dist/governor.d.ts +16 -0
  14. package/dist/governor.js +25 -0
  15. package/dist/governor.js.map +1 -0
  16. package/dist/index.d.ts +12 -0
  17. package/dist/index.js +13 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/index.test.d.ts +1 -0
  20. package/dist/index.test.js +8 -0
  21. package/dist/index.test.js.map +1 -0
  22. package/dist/isolation.test.d.ts +1 -0
  23. package/dist/isolation.test.js +102 -0
  24. package/dist/isolation.test.js.map +1 -0
  25. package/dist/light-confirm.d.ts +37 -0
  26. package/dist/light-confirm.js +149 -0
  27. package/dist/light-confirm.js.map +1 -0
  28. package/dist/light-confirm.test.d.ts +1 -0
  29. package/dist/light-confirm.test.js +154 -0
  30. package/dist/light-confirm.test.js.map +1 -0
  31. package/dist/lineage.test.d.ts +1 -0
  32. package/dist/lineage.test.js +58 -0
  33. package/dist/lineage.test.js.map +1 -0
  34. package/dist/migrate.d.ts +45 -0
  35. package/dist/migrate.js +349 -0
  36. package/dist/migrate.js.map +1 -0
  37. package/dist/migrate.test.d.ts +1 -0
  38. package/dist/migrate.test.js +111 -0
  39. package/dist/migrate.test.js.map +1 -0
  40. package/dist/paths.d.ts +7 -0
  41. package/dist/paths.js +16 -0
  42. package/dist/paths.js.map +1 -0
  43. package/dist/project-key.d.ts +3 -0
  44. package/dist/project-key.js +48 -0
  45. package/dist/project-key.js.map +1 -0
  46. package/dist/project-key.test.d.ts +1 -0
  47. package/dist/project-key.test.js +29 -0
  48. package/dist/project-key.test.js.map +1 -0
  49. package/dist/query.d.ts +49 -0
  50. package/dist/query.js +165 -0
  51. package/dist/query.js.map +1 -0
  52. package/dist/query.test.d.ts +1 -0
  53. package/dist/query.test.js +162 -0
  54. package/dist/query.test.js.map +1 -0
  55. package/dist/schema.d.ts +4 -0
  56. package/dist/schema.js +92 -0
  57. package/dist/schema.js.map +1 -0
  58. package/dist/schema.test.d.ts +1 -0
  59. package/dist/schema.test.js +80 -0
  60. package/dist/schema.test.js.map +1 -0
  61. package/dist/state.d.ts +4 -0
  62. package/dist/state.js +15 -0
  63. package/dist/state.js.map +1 -0
  64. package/dist/status-card.d.ts +10 -0
  65. package/dist/status-card.js +65 -0
  66. package/dist/status-card.js.map +1 -0
  67. package/dist/status-card.test.d.ts +1 -0
  68. package/dist/status-card.test.js +53 -0
  69. package/dist/status-card.test.js.map +1 -0
  70. package/dist/store.d.ts +170 -0
  71. package/dist/store.js +664 -0
  72. package/dist/store.js.map +1 -0
  73. package/dist/store.test.d.ts +1 -0
  74. package/dist/store.test.js +284 -0
  75. package/dist/store.test.js.map +1 -0
  76. package/package.json +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,111 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
2
+ import Database from "better-sqlite3";
3
+ import { existsSync, mkdtempSync, rmSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { hashProjectKey } from "./project-key.js";
7
+ import { migrateSplit, replayIncrement, snapshotTableMaxIds } from "./migrate.js";
8
+ import { ThreadStore } from "./store.js";
9
+ let dir;
10
+ let oldPath;
11
+ let root;
12
+ let store;
13
+ let eventsPath;
14
+ let structuredPath;
15
+ const PK = "d:/test/proj";
16
+ beforeAll(() => {
17
+ dir = mkdtempSync(join(tmpdir(), "thread-migrate-b4-"));
18
+ oldPath = join(dir, "sms.db");
19
+ root = join(dir, "thread-root");
20
+ // 构造现网形态旧单库:v2 schema + NULL project_key 旧行 + 事件/结构化/血缘
21
+ const old = new Database(oldPath);
22
+ old.exec(`CREATE TABLE events (
23
+ id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, kind TEXT NOT NULL,
24
+ ts TEXT NOT NULL, seq INTEGER NOT NULL, body TEXT NOT NULL, meta TEXT,
25
+ truncated INTEGER NOT NULL DEFAULT 0, project_key TEXT, scope TEXT NOT NULL DEFAULT 'project',
26
+ origin TEXT, spilled INTEGER NOT NULL DEFAULT 0
27
+ );
28
+ CREATE TABLE episodes (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, seq_start INTEGER NOT NULL, seq_end INTEGER, status TEXT NOT NULL DEFAULT 'active', summary TEXT, created_at TEXT NOT NULL);
29
+ CREATE TABLE spills (id INTEGER PRIMARY KEY AUTOINCREMENT, event_id INTEGER NOT NULL, ref TEXT NOT NULL, blob TEXT, sha256 TEXT NOT NULL, created_at TEXT NOT NULL);
30
+ CREATE TABLE goals (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, text TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'active', source_event INTEGER, created_at TEXT NOT NULL, project_key TEXT, scope TEXT NOT NULL DEFAULT 'project', origin TEXT);
31
+ CREATE TABLE decisions (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, text TEXT NOT NULL, status TEXT NOT NULL DEFAULT 'proposed', superseded_by INTEGER, source_event INTEGER, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, project_key TEXT, scope TEXT NOT NULL DEFAULT 'project', origin TEXT);
32
+ CREATE TABLE feedback (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, text TEXT NOT NULL, kind TEXT NOT NULL DEFAULT 'preference', source_event INTEGER, created_at TEXT NOT NULL, project_key TEXT, scope TEXT NOT NULL DEFAULT 'project', origin TEXT);
33
+ CREATE TABLE lineage_edges (id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL, src_type TEXT NOT NULL, src_id INTEGER, dst_type TEXT NOT NULL, dst_id INTEGER, ref TEXT, edge_type TEXT NOT NULL, confidence REAL NOT NULL DEFAULT 1.0, ts TEXT NOT NULL);
34
+ CREATE TABLE entities (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, kind TEXT NOT NULL);
35
+ CREATE TABLE decision_entities (decision_id INTEGER NOT NULL, entity_id INTEGER NOT NULL, edge TEXT NOT NULL DEFAULT 'references', ts TEXT NOT NULL, PRIMARY KEY (decision_id, entity_id));
36
+ CREATE TABLE metrics (id INTEGER PRIMARY KEY AUTOINCREMENT, event_id INTEGER, name TEXT NOT NULL, value REAL NOT NULL, ts TEXT NOT NULL);
37
+ INSERT INTO events (id, session_id, kind, ts, seq, body, project_key, origin) VALUES (1, 's1', 'user_message', '2026-08-14T00:00:00.000Z', 1, '旧事件无键', NULL, NULL);
38
+ INSERT INTO events (id, session_id, kind, ts, seq, body, project_key, origin) VALUES (2, 's1', 'tool_call', '2026-08-14T00:00:01.000Z', 2, 'edit a.ts', 'd:/test/proj', 'qoder://transcript#t1');
39
+ INSERT INTO episodes (id, session_id, seq_start, status, created_at) VALUES (1, 's1', 1, 'active', '2026-08-14T00:00:00.000Z');
40
+ INSERT INTO spills (id, event_id, ref, blob, sha256, created_at) VALUES (1, 2, 'spill:2', '原文大块', 'abc', '2026-08-14T00:00:01.000Z');
41
+ INSERT INTO goals (id, session_id, text, status, source_event, created_at, project_key, scope, origin) VALUES (1, 's1', '旧目标', 'active', 1, '2026-08-14T00:00:00.000Z', NULL, 'project', NULL);
42
+ INSERT INTO feedback (id, session_id, text, kind, source_event, created_at, project_key, scope, origin) VALUES (1, 's1', '全局偏好', 'preference', 1, '2026-08-14T00:00:00.000Z', NULL, 'global', NULL);
43
+ INSERT INTO lineage_edges (id, session_id, src_type, src_id, dst_type, dst_id, ref, edge_type, ts) VALUES (1, 's1', 'event', 2, 'file', NULL, 'a.ts', 'touches_file', '2026-08-14T00:00:01.000Z');
44
+ INSERT INTO lineage_edges (id, session_id, src_type, src_id, dst_type, dst_id, ref, edge_type, ts) VALUES (2, 's1', 'goal', 1, 'event', 1, NULL, 'derived_from', '2026-08-14T00:00:00.000Z');
45
+ `);
46
+ old.close();
47
+ });
48
+ afterAll(() => {
49
+ store?.close();
50
+ rmSync(dir, { recursive: true, force: true });
51
+ });
52
+ describe("B④ migrateSplit", () => {
53
+ it("splits single db into structured + project event db with backfill and checks", () => {
54
+ const result = migrateSplit({ oldPath, root, projectKey: PK, dryRun: false });
55
+ expect(result.projectKey).toBe(PK);
56
+ // 事件回填:1 行 NULL → PK
57
+ expect(result.events.copied).toBe(2);
58
+ expect(result.events.backfilled).toBe(1);
59
+ // 结构化回填:goal NULL project → 追溯 source_event(1) 无键 → PK;feedback global 留 NULL
60
+ expect(result.structured.goals).toBe(1);
61
+ expect(result.structured.feedback).toBe(1);
62
+ expect(result.structured.backfilled).toBe(1);
63
+ // 血缘按域拆分
64
+ expect(result.lineage.events).toBe(1);
65
+ expect(result.lineage.structured).toBe(1);
66
+ expect(result.integrity.events).toBe(true);
67
+ expect(result.integrity.structured).toBe(true);
68
+ eventsPath = join(root, "projects", hashProjectKey(PK), "events.db");
69
+ structuredPath = join(root, "structured.db");
70
+ expect(existsSync(eventsPath)).toBe(true);
71
+ expect(existsSync(structuredPath)).toBe(true);
72
+ store = new ThreadStore({ eventsPath, structuredPath });
73
+ // 事件回填正确(列值 = 规范化路径,不是 hash)
74
+ const ev = store.eventsDb.prepare("SELECT project_key FROM events WHERE id = 1").get();
75
+ expect(ev.project_key).toBe(PK);
76
+ // 结构化回填正确
77
+ const goal = store.structuredDb.prepare("SELECT project_key, scope FROM goals WHERE id = 1").get();
78
+ expect(goal.project_key).toBe(PK);
79
+ expect(goal.scope).toBe("project");
80
+ const fb = store.structuredDb.prepare("SELECT project_key, scope FROM feedback WHERE id = 1").get();
81
+ expect(fb.project_key).toBeNull();
82
+ expect(fb.scope).toBe("global");
83
+ // 血缘分库正确
84
+ expect(store.getEventsForFile("s1", "a.ts").length).toBe(1);
85
+ expect(store.getRelatedEdges("s1", "goal", 1).some((r) => r.edge_type === "derived_from")).toBe(true);
86
+ // 旧库备份
87
+ expect(existsSync(`${oldPath}.bak-b4`)).toBe(true);
88
+ });
89
+ it("replays increment after snapshot (零差异)", () => {
90
+ // 迁移前快照(此时旧库 max(events.id)=2)
91
+ const snapshot = snapshotTableMaxIds(oldPath);
92
+ expect(snapshot.events).toBe(2);
93
+ expect(snapshot.feedback).toBe(1);
94
+ // 快照后旧库新增事件 + 结构化行
95
+ const old = new Database(oldPath);
96
+ old.exec(`INSERT INTO events (id, session_id, kind, ts, seq, body, project_key, origin) VALUES (3, 's2', 'user_message', '2026-08-14T00:00:02.000Z', 1, '增量事件', 'd:/test/proj', 'qoder://transcript#t2');
97
+ INSERT INTO feedback (id, session_id, text, kind, source_event, created_at, project_key, scope, origin) VALUES (2, 's2', '增量反馈', 'preference', 3, '2026-08-14T00:00:02.000Z', NULL, 'project', NULL);
98
+ INSERT INTO lineage_edges (id, session_id, src_type, src_id, dst_type, dst_id, ref, edge_type, ts) VALUES (3, 's2', 'event', 3, 'file', NULL, 'b.ts', 'touches_file', '2026-08-14T00:00:02.000Z');`);
99
+ old.close();
100
+ const replayed = replayIncrement(oldPath, root, PK, snapshot);
101
+ expect(replayed.events).toBe(1);
102
+ store.close();
103
+ store = new ThreadStore({ eventsPath, structuredPath });
104
+ const total = store.eventsDb.prepare("SELECT COUNT(*) AS c FROM events").get();
105
+ expect(total.c).toBe(3);
106
+ const fb = store.structuredDb.prepare("SELECT project_key FROM feedback WHERE id = 2").get();
107
+ expect(fb.project_key).toBe(PK);
108
+ expect(store.getEventsForFile("s2", "b.ts").length).toBe(1);
109
+ });
110
+ });
111
+ //# sourceMappingURL=migrate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.test.js","sourceRoot":"","sources":["../src/migrate.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface ThreadPaths {
2
+ structuredDbPath: string;
3
+ eventsDbPath: string;
4
+ root: string;
5
+ }
6
+ export declare function threadRoot(): string;
7
+ export declare function defaultPaths(cwd?: string): ThreadPaths;
package/dist/paths.js ADDED
@@ -0,0 +1,16 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { deriveProjectKeyHash } from "./project-key.js";
4
+ export function threadRoot() {
5
+ return process.env.THREAD_ROOT ?? join(homedir(), ".thread");
6
+ }
7
+ export function defaultPaths(cwd) {
8
+ const root = threadRoot();
9
+ const projectKeyHash = deriveProjectKeyHash(cwd ?? process.cwd());
10
+ return {
11
+ structuredDbPath: join(root, "structured.db"),
12
+ eventsDbPath: join(root, "projects", projectKeyHash, "events.db"),
13
+ root,
14
+ };
15
+ }
16
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAUxD,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,cAAc,GAAG,oBAAoB,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClE,OAAO;QACL,gBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;QAC7C,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC;QACjE,IAAI;KACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function deriveProjectKey(cwd: string): string;
2
+ export declare function hashProjectKey(key: string): string;
3
+ export declare function deriveProjectKeyHash(cwd: string): string;
@@ -0,0 +1,48 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { realpathSync } from "node:fs";
3
+ import { platform } from "node:os";
4
+ // 项目身份键 = 规范化 git 根(realpath + 分隔符/大小写归一;非 git 退化为规范化 cwd)。
5
+ // 避免同一项目因路径写法不同(D:\x vs d:/x vs /d/x)分裂命名空间。
6
+ export function deriveProjectKey(cwd) {
7
+ const normalized = normalizePath(resolveGitRoot(cwd) ?? cwd);
8
+ return normalized;
9
+ }
10
+ export function hashProjectKey(key) {
11
+ let hash = 0;
12
+ for (let i = 0; i < key.length; i++) {
13
+ hash = (hash * 31 + key.charCodeAt(i)) | 0;
14
+ }
15
+ return (hash >>> 0).toString(36);
16
+ }
17
+ export function deriveProjectKeyHash(cwd) {
18
+ return hashProjectKey(deriveProjectKey(cwd));
19
+ }
20
+ function resolveGitRoot(cwd) {
21
+ try {
22
+ const root = execFileSync("git", ["rev-parse", "--show-toplevel"], {
23
+ cwd,
24
+ encoding: "utf8",
25
+ stdio: ["ignore", "pipe", "ignore"],
26
+ timeout: 5000,
27
+ }).trim();
28
+ return root || undefined;
29
+ }
30
+ catch {
31
+ return undefined;
32
+ }
33
+ }
34
+ function normalizePath(p) {
35
+ let out = p;
36
+ try {
37
+ out = realpathSync(p);
38
+ }
39
+ catch {
40
+ out = p;
41
+ }
42
+ if (platform() === "win32") {
43
+ out = out.replace(/\\/g, "/");
44
+ out = out.replace(/^([a-zA-Z]):/, (_, drive) => drive.toLowerCase() + ":");
45
+ }
46
+ return out.replace(/\/+$/, "");
47
+ }
48
+ //# sourceMappingURL=project-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-key.js","sourceRoot":"","sources":["../src/project-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,4DAA4D;AAC5D,6CAA6C;AAE7C,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE;YACjE,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,IAAI,SAAS,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,CAAC,CAAC;IACV,CAAC;IACD,IAAI,QAAQ,EAAE,KAAK,OAAO,EAAE,CAAC;QAC3B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { deriveProjectKey, deriveProjectKeyHash } from "./project-key.js";
3
+ describe("project key", () => {
4
+ it("derives a key for the current repo root", () => {
5
+ const key = deriveProjectKey(process.cwd());
6
+ expect(key.length).toBeGreaterThan(0);
7
+ expect(key).not.toMatch(/\\$/);
8
+ });
9
+ it("normalizes trailing slashes and separators", () => {
10
+ // 同一路径的不同写法应归一(Windows 反斜杠 → 正斜杠 + 盘符小写)
11
+ const a = "D:/Agent-work/workspace/Thread/";
12
+ const b = "D:\\Agent-work\\workspace\\Thread";
13
+ expect(normalizeForTest(a)).toBe(normalizeForTest(b));
14
+ });
15
+ it("hash is stable and distinct per key", () => {
16
+ const h1 = deriveProjectKeyHash("D:/Agent-work/workspace/Thread");
17
+ const h2 = deriveProjectKeyHash("D:/Agent-work/workspace/Thread/");
18
+ const h3 = deriveProjectKeyHash("D:/Agent-work/workspace/Other");
19
+ expect(h1).toBe(h2);
20
+ expect(h1).not.toBe(h3);
21
+ });
22
+ });
23
+ function normalizeForTest(p) {
24
+ return p
25
+ .replace(/\\/g, "/")
26
+ .replace(/^([a-zA-Z]):/, (_, d) => d.toLowerCase() + ":")
27
+ .replace(/\/+$/, "");
28
+ }
29
+ //# sourceMappingURL=project-key.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-key.test.js","sourceRoot":"","sources":["../src/project-key.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,yCAAyC;QACzC,MAAM,CAAC,GAAG,iCAAiC,CAAC;QAC5C,MAAM,CAAC,GAAG,mCAAmC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,EAAE,GAAG,oBAAoB,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,EAAE,GAAG,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;QACnE,MAAM,EAAE,GAAG,oBAAoB,CAAC,+BAA+B,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,CAAS;IACjC,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;SAChE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { ThreadStore } from "./store.js";
2
+ import type { EventKind } from "./events.js";
3
+ export interface QueryOptions {
4
+ tokenBudget?: number;
5
+ sessionId?: string;
6
+ limit?: number;
7
+ }
8
+ export interface QueryHit {
9
+ segment_id: number;
10
+ kind: string;
11
+ ts: string;
12
+ seq: number;
13
+ body: string;
14
+ score: number;
15
+ isolation?: number;
16
+ }
17
+ export type QueryStatus = "found" | "degraded" | "not-found";
18
+ export interface QueryResult {
19
+ status: QueryStatus;
20
+ results: QueryHit[];
21
+ note?: string;
22
+ }
23
+ export interface StructuredQueryOptions {
24
+ sessionId?: string;
25
+ timeRange?: {
26
+ since?: string;
27
+ until?: string;
28
+ };
29
+ kind?: EventKind | EventKind[];
30
+ order?: "asc" | "desc";
31
+ limit?: number;
32
+ count?: boolean;
33
+ }
34
+ export interface StructuredQueryResult {
35
+ status: "found" | "not-found";
36
+ results: QueryHit[];
37
+ count?: number;
38
+ }
39
+ export declare function queryMemory(store: ThreadStore, query: string, opts?: QueryOptions): QueryResult;
40
+ export declare function queryEvents(store: ThreadStore, opts: StructuredQueryOptions): StructuredQueryResult;
41
+ export type StructuredTableName = "goals" | "decisions" | "feedback";
42
+ export interface StructuredTableQueryOptions {
43
+ sessionId?: string;
44
+ table: StructuredTableName;
45
+ order?: "asc" | "desc";
46
+ limit?: number;
47
+ count?: boolean;
48
+ }
49
+ export declare function queryStructured(store: ThreadStore, opts: StructuredTableQueryOptions): StructuredQueryResult;
package/dist/query.js ADDED
@@ -0,0 +1,165 @@
1
+ const DEFAULT_TOKEN_BUDGET = 4000;
2
+ const CHARS_PER_TOKEN = 2;
3
+ const KIND_LABELS = {
4
+ user_message: "user",
5
+ assistant_message: "assistant",
6
+ tool_call: "tool_call",
7
+ tool_result: "tool_result",
8
+ session_start: "session_start",
9
+ session_end: "session_end",
10
+ compact_checkpoint: "compact",
11
+ };
12
+ export function queryMemory(store, query, opts = {}) {
13
+ const hits = store.search(query, { limit: opts.limit ?? 20, sessionId: opts.sessionId });
14
+ if (hits.length === 0) {
15
+ const fallback = findEpisodeSummary(store, opts.sessionId, query);
16
+ if (fallback) {
17
+ return {
18
+ status: "degraded",
19
+ results: [fallback],
20
+ note: "精确检索未命中,已退回情节摘要。",
21
+ };
22
+ }
23
+ return {
24
+ status: "not-found",
25
+ results: [],
26
+ note: buildNotFoundNote(query),
27
+ };
28
+ }
29
+ const budgetChars = (opts.tokenBudget ?? DEFAULT_TOKEN_BUDGET) * CHARS_PER_TOKEN;
30
+ const results = [];
31
+ let used = 0;
32
+ for (const h of hits) {
33
+ const item = {
34
+ segment_id: h.id,
35
+ kind: KIND_LABELS[h.kind] ?? h.kind,
36
+ ts: h.ts,
37
+ seq: h.seq,
38
+ body: h.body,
39
+ score: h.score,
40
+ };
41
+ const cost = item.body.length + 64;
42
+ if (used + cost > budgetChars && results.length > 0) {
43
+ break;
44
+ }
45
+ results.push(item);
46
+ used += cost;
47
+ }
48
+ return { status: "found", results };
49
+ }
50
+ // 结构化事件查询:精确时序/过滤/计数,不走 FTS——服务层抽查/审计路径(接口内聚,单一工具内路由)
51
+ export function queryEvents(store, opts) {
52
+ const where = [];
53
+ const params = [];
54
+ if (opts.sessionId) {
55
+ // 当前会话可见自己的全部内容(含隔离),其他会话只见未隔离行
56
+ where.push("(session_id = ? OR isolation = 0)");
57
+ params.push(opts.sessionId);
58
+ }
59
+ else {
60
+ where.push("isolation = 0");
61
+ }
62
+ if (opts.timeRange?.since) {
63
+ where.push("ts >= ?");
64
+ params.push(opts.timeRange.since);
65
+ }
66
+ if (opts.timeRange?.until) {
67
+ where.push("ts <= ?");
68
+ params.push(opts.timeRange.until);
69
+ }
70
+ if (opts.kind) {
71
+ const kinds = Array.isArray(opts.kind) ? opts.kind : [opts.kind];
72
+ where.push(`kind IN (${kinds.map(() => "?").join(", ")})`);
73
+ params.push(...kinds);
74
+ }
75
+ const whereSql = where.length > 0 ? `WHERE ${where.join(" AND ")}` : "";
76
+ if (opts.count) {
77
+ const row = store.eventsDb.prepare(`SELECT COUNT(*) AS c FROM events ${whereSql}`).get(...params);
78
+ return { status: row.c > 0 ? "found" : "not-found", results: [], count: row.c };
79
+ }
80
+ const order = opts.order === "asc" ? "ASC" : "DESC";
81
+ const limit = Math.min(opts.limit ?? 20, 50);
82
+ const rows = store.eventsDb
83
+ .prepare(`SELECT id, session_id, kind, ts, seq, body, truncated, isolation FROM events ${whereSql} ORDER BY ts ${order}, id ${order} LIMIT ?`)
84
+ .all(...params, limit);
85
+ if (rows.length === 0) {
86
+ return { status: "not-found", results: [] };
87
+ }
88
+ return {
89
+ status: "found",
90
+ results: rows.map((r) => ({
91
+ segment_id: r.id,
92
+ kind: KIND_LABELS[r.kind] ?? r.kind,
93
+ ts: r.ts,
94
+ seq: r.seq,
95
+ body: r.body,
96
+ score: 0,
97
+ isolation: r.isolation,
98
+ })),
99
+ };
100
+ }
101
+ const TABLE_COLUMNS = {
102
+ goals: "id, session_id, text, status, scope, isolation, created_at",
103
+ decisions: "id, session_id, text, status, scope, isolation, created_at",
104
+ feedback: "id, session_id, text, kind, scope, isolation, created_at",
105
+ };
106
+ export function queryStructured(store, opts) {
107
+ const where = opts.sessionId ? "WHERE (session_id = ? OR isolation = 0)" : "WHERE isolation = 0";
108
+ const params = opts.sessionId ? [opts.sessionId] : [];
109
+ if (opts.count) {
110
+ const row = store.structuredDb.prepare(`SELECT COUNT(*) AS c FROM ${opts.table} ${where}`).get(...params);
111
+ return { status: row.c > 0 ? "found" : "not-found", results: [], count: row.c };
112
+ }
113
+ const order = opts.order === "asc" ? "ASC" : "DESC";
114
+ const limit = Math.min(opts.limit ?? 20, 50);
115
+ const rows = store.structuredDb
116
+ .prepare(`SELECT ${TABLE_COLUMNS[opts.table]} FROM ${opts.table} ${where} ORDER BY id ${order} LIMIT ?`)
117
+ .all(...params, limit);
118
+ if (rows.length === 0) {
119
+ return { status: "not-found", results: [] };
120
+ }
121
+ return {
122
+ status: "found",
123
+ results: rows.map((r) => ({
124
+ segment_id: r.id,
125
+ kind: r.kind ?? r.status ?? opts.table,
126
+ ts: r.created_at,
127
+ seq: r.id,
128
+ body: r.text,
129
+ score: 0,
130
+ isolation: r.isolation,
131
+ })),
132
+ };
133
+ }
134
+ function findEpisodeSummary(store, sessionId, query) {
135
+ if (!sessionId) {
136
+ return undefined;
137
+ }
138
+ const episode = store.getLatestEpisodeWithSummary(sessionId);
139
+ const summary = episode?.summary;
140
+ if (!summary) {
141
+ return undefined;
142
+ }
143
+ const tokens = query.split(/\s+/).filter(Boolean);
144
+ if (!tokens.every((t) => summary.includes(t))) {
145
+ return undefined;
146
+ }
147
+ return {
148
+ segment_id: episode.id,
149
+ kind: "summary",
150
+ ts: episode.created_at,
151
+ seq: episode.seq_start,
152
+ body: summary,
153
+ score: 0,
154
+ };
155
+ }
156
+ function buildNotFoundNote(query) {
157
+ return [
158
+ `会话记忆中未检索到与「${query.slice(0, 100)}」相关的内容。`,
159
+ "建议:",
160
+ "1. 换用更具体的关键词(文件路径、函数名、命令)重试;",
161
+ "2. 该信息可能在更早的会话或外部资料中,可扩大查询范围或直接补充说明;",
162
+ "3. 请补充触发该信息的上下文,以便继续定位。",
163
+ ].join("\n");
164
+ }
165
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};