@thread-memory/core 1.0.1 → 1.0.3
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/package.json +2 -2
- package/dist/assets.test.d.ts +0 -1
- package/dist/assets.test.js +0 -88
- package/dist/assets.test.js.map +0 -1
- package/dist/events.test.d.ts +0 -1
- package/dist/events.test.js +0 -46
- package/dist/events.test.js.map +0 -1
- package/dist/feedback-guard.test.d.ts +0 -1
- package/dist/feedback-guard.test.js +0 -67
- package/dist/feedback-guard.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -1
- package/dist/index.test.js +0 -8
- package/dist/index.test.js.map +0 -1
- package/dist/isolation.test.d.ts +0 -1
- package/dist/isolation.test.js +0 -100
- package/dist/isolation.test.js.map +0 -1
- package/dist/light-confirm.test.d.ts +0 -1
- package/dist/light-confirm.test.js +0 -236
- package/dist/light-confirm.test.js.map +0 -1
- package/dist/lineage.test.d.ts +0 -1
- package/dist/lineage.test.js +0 -56
- package/dist/lineage.test.js.map +0 -1
- package/dist/migrate.test.d.ts +0 -1
- package/dist/migrate.test.js +0 -111
- package/dist/migrate.test.js.map +0 -1
- package/dist/nav.test.d.ts +0 -1
- package/dist/nav.test.js +0 -100
- package/dist/nav.test.js.map +0 -1
- package/dist/project-key.test.d.ts +0 -1
- package/dist/project-key.test.js +0 -29
- package/dist/project-key.test.js.map +0 -1
- package/dist/query.test.d.ts +0 -1
- package/dist/query.test.js +0 -165
- package/dist/query.test.js.map +0 -1
- package/dist/schema.test.d.ts +0 -1
- package/dist/schema.test.js +0 -167
- package/dist/schema.test.js.map +0 -1
- package/dist/sediment.test.d.ts +0 -1
- package/dist/sediment.test.js +0 -89
- package/dist/sediment.test.js.map +0 -1
- package/dist/segment.test.d.ts +0 -1
- package/dist/segment.test.js +0 -37
- package/dist/segment.test.js.map +0 -1
- package/dist/state-delta.test.d.ts +0 -1
- package/dist/state-delta.test.js +0 -90
- package/dist/state-delta.test.js.map +0 -1
- package/dist/status-card.test.d.ts +0 -1
- package/dist/status-card.test.js +0 -126
- package/dist/status-card.test.js.map +0 -1
- package/dist/store.test.d.ts +0 -1
- package/dist/store.test.js +0 -394
- package/dist/store.test.js.map +0 -1
- package/dist/v7.test.d.ts +0 -1
- package/dist/v7.test.js +0 -106
- package/dist/v7.test.js.map +0 -1
package/dist/status-card.test.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
2
|
-
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
import { buildStatusCard, detectSituation } from "./status-card.js";
|
|
6
|
-
import { ThreadStore } from "./store.js";
|
|
7
|
-
let dir;
|
|
8
|
-
let store;
|
|
9
|
-
beforeAll(() => {
|
|
10
|
-
dir = mkdtempSync(join(tmpdir(), "thread-card-"));
|
|
11
|
-
store = new ThreadStore({ eventsPath: join(dir, "events.db"), structuredPath: join(dir, "structured.db"), projectKey: "card-proj" });
|
|
12
|
-
for (let i = 1; i <= 6; i++) {
|
|
13
|
-
store.addGoal("s1", `目标 ${i}`);
|
|
14
|
-
store.addDecision("s1", `决策 ${i}`);
|
|
15
|
-
}
|
|
16
|
-
store.addFeedback("s1", "偏好 1", "preference");
|
|
17
|
-
store.append({ session_id: "s1", kind: "user_message", ts: new Date().toISOString(), body: "事件 1" });
|
|
18
|
-
store.append({ session_id: "s1", kind: "assistant_message", ts: new Date().toISOString(), body: "事件 2" });
|
|
19
|
-
});
|
|
20
|
-
afterAll(() => {
|
|
21
|
-
store.close();
|
|
22
|
-
rmSync(dir, { recursive: true, force: true });
|
|
23
|
-
});
|
|
24
|
-
describe("buildStatusCard(外部借鉴 ①③:首轮加权 + 收束语)", () => {
|
|
25
|
-
it("尾行收束语为绑定式行动引导(③)", () => {
|
|
26
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj" });
|
|
27
|
-
expect(card).toContain("需要更早的历史细节时,调用 query_session_memory 工具查询,并基于结果给出结论。");
|
|
28
|
-
});
|
|
29
|
-
it("候选唤醒(2026-08-20 复盘修复):待确认计数 + 前 2 条原文入卡", () => {
|
|
30
|
-
store.addPendingCandidate({ sessionId: "s1", text: "候选决策 A", kind: "decision", projectKey: "card-proj" });
|
|
31
|
-
store.addPendingCandidate({ sessionId: "s1", text: "候选决策 B", kind: "decision", projectKey: "card-proj" });
|
|
32
|
-
store.addPendingCandidate({ sessionId: "s1", text: "候选偏好 C", kind: "preference", projectKey: "card-proj" });
|
|
33
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj" });
|
|
34
|
-
expect(card).toContain("待处理候选(3 条");
|
|
35
|
-
expect(card).toContain("候选偏好 C"); // 最近优先(listPendingCandidates ORDER BY id DESC)
|
|
36
|
-
expect(card).toContain("候选决策 B");
|
|
37
|
-
expect(card).not.toContain("候选决策 A"); // 只露前 2 条,控制预算
|
|
38
|
-
// 清理候选,避免影响后续用例
|
|
39
|
-
store.ignoreAllPendingCandidates({ projectKey: "card-proj" });
|
|
40
|
-
});
|
|
41
|
-
it("首轮档展示更多目标/决策(① 锚点全量)", () => {
|
|
42
|
-
const normal = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj" });
|
|
43
|
-
const first = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", firstTurn: true });
|
|
44
|
-
const countOf = (card, marker) => card.split("\n").filter((l) => l.includes(marker)).length;
|
|
45
|
-
expect(countOf(first, "决策 ")).toBeGreaterThan(countOf(normal, "决策 "));
|
|
46
|
-
expect(countOf(first, "目标 ")).toBeGreaterThan(countOf(normal, "目标 "));
|
|
47
|
-
});
|
|
48
|
-
it("首轮档默认 recent 更多(5 条档)", () => {
|
|
49
|
-
const first = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", firstTurn: true });
|
|
50
|
-
const events = first.split("\n").filter((l) => l.startsWith(" - "));
|
|
51
|
-
expect(events.length).toBeGreaterThanOrEqual(2);
|
|
52
|
-
});
|
|
53
|
-
it("隔离 + 首轮组合不降级崩溃", () => {
|
|
54
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", isolated: true, firstTurn: true });
|
|
55
|
-
expect(card).toContain("本会话已隔离");
|
|
56
|
-
});
|
|
57
|
-
it("行尾带行 id(① 治理可见性:目标/决策/偏好均可定位)", () => {
|
|
58
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj" });
|
|
59
|
-
expect(card).toMatch(/决策 1 #\d+/);
|
|
60
|
-
expect(card).toMatch(/目标 \d+ #\d+/);
|
|
61
|
-
expect(card).toMatch(/偏好 1 #\d+/);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe("detectSituation(§1.5 P0 情境判定,程序确定性)", () => {
|
|
65
|
-
it("首轮且本会话无事件、项目有历史 → new-session(跨会话续接)", () => {
|
|
66
|
-
// s1 有历史(beforeAll 造),s2 是本会话(无事件)→ 续接情境
|
|
67
|
-
expect(detectSituation(store, { sessionId: "s2", turn: 1, projectKey: "card-proj" })).toBe("new-session");
|
|
68
|
-
});
|
|
69
|
-
it("首轮且本会话已有事件(续写会话)→ normal", () => {
|
|
70
|
-
// s1 自己有事件 → 不是新会话续接
|
|
71
|
-
expect(detectSituation(store, { sessionId: "s1", turn: 1, projectKey: "card-proj" })).toBe("normal");
|
|
72
|
-
});
|
|
73
|
-
it("最近事件含 compact_checkpoint → post-compact", () => {
|
|
74
|
-
store.append({
|
|
75
|
-
session_id: "s1",
|
|
76
|
-
kind: "compact_checkpoint",
|
|
77
|
-
ts: new Date().toISOString(),
|
|
78
|
-
body: "摘要全文",
|
|
79
|
-
});
|
|
80
|
-
expect(detectSituation(store, { sessionId: "s1", turn: 5, projectKey: "card-proj" })).toBe("post-compact");
|
|
81
|
-
});
|
|
82
|
-
it("无 checkpoint 且非首轮 → normal", () => {
|
|
83
|
-
expect(detectSituation(store, { sessionId: "brand-new", turn: 5, projectKey: "card-proj" })).toBe("normal");
|
|
84
|
-
});
|
|
85
|
-
it("项目有比本会话最新事件更新的决策 → decision-change(§1.5.3c 机制 3)", () => {
|
|
86
|
-
// 先造一个本会话事件(作为时间基准,用过去时间),再在另一会话定决策(updated_at 明确更晚)
|
|
87
|
-
const past = new Date(Date.now() - 60_000).toISOString();
|
|
88
|
-
store.append({ session_id: "s-change", kind: "user_message", ts: past, body: "本会话事件" });
|
|
89
|
-
store.addDecision("s-other", "新定的开发基线决策(标准模式为主)");
|
|
90
|
-
// 判定:本会话最新事件(60s 前)< 项目最近决策 updated_at(现在)→ decision-change
|
|
91
|
-
expect(detectSituation(store, { sessionId: "s-change", turn: 2, projectKey: "card-proj" })).toBe("decision-change");
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
describe("buildStatusCard 情境传达块(§1.5 P0 C+A)", () => {
|
|
95
|
-
it("new-session 情境出现会话接续块(含沿用决策)", () => {
|
|
96
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", situation: "new-session" });
|
|
97
|
-
expect(card).toContain("会话接续");
|
|
98
|
-
expect(card).toContain("生效决策");
|
|
99
|
-
expect(card).toContain("基于以上继续");
|
|
100
|
-
});
|
|
101
|
-
it("post-compact 情境出现压缩回归块(目标重述)", () => {
|
|
102
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", situation: "post-compact" });
|
|
103
|
-
expect(card).toContain("压缩后回归");
|
|
104
|
-
expect(card).toContain("主线目标不变");
|
|
105
|
-
});
|
|
106
|
-
it("normal 情境不出现传达块(避免每轮塞指令)", () => {
|
|
107
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", situation: "normal" });
|
|
108
|
-
expect(card).not.toContain("会话接续");
|
|
109
|
-
expect(card).not.toContain("压缩后回归");
|
|
110
|
-
});
|
|
111
|
-
it("隔离 + new-session 组合不出现续接块(隔离不继承)", () => {
|
|
112
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", situation: "new-session", isolated: true });
|
|
113
|
-
expect(card).not.toContain("会话接续");
|
|
114
|
-
expect(card).toContain("本会话已隔离");
|
|
115
|
-
});
|
|
116
|
-
it("decision-change 情境出现最近决策块(§1.5.3c 机制 3)", () => {
|
|
117
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", situation: "decision-change" });
|
|
118
|
-
expect(card).toContain("最近决策");
|
|
119
|
-
expect(card).toContain("基于最近决策行动");
|
|
120
|
-
});
|
|
121
|
-
it("normal 情境不出现最近决策块", () => {
|
|
122
|
-
const card = buildStatusCard(store, { sessionId: "s1", projectKey: "card-proj", situation: "normal" });
|
|
123
|
-
expect(card).not.toContain("最近决策");
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
//# sourceMappingURL=status-card.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status-card.test.js","sourceRoot":"","sources":["../src/status-card.test.ts"],"names":[],"mappings":"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"}
|
package/dist/store.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/store.test.js
DELETED
|
@@ -1,394 +0,0 @@
|
|
|
1
|
-
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
2
|
-
import { mkdtempSync, rmSync } from "node:fs";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
import { applyScopePriority, ThreadStore } from "./store.js";
|
|
6
|
-
let dir;
|
|
7
|
-
let store;
|
|
8
|
-
beforeAll(() => {
|
|
9
|
-
dir = mkdtempSync(join(tmpdir(), "thread-"));
|
|
10
|
-
store = new ThreadStore({ eventsPath: join(dir, "events.db"), structuredPath: join(dir, "structured.db"), projectKey: "test-proj" });
|
|
11
|
-
});
|
|
12
|
-
afterAll(() => {
|
|
13
|
-
store.close();
|
|
14
|
-
rmSync(dir, { recursive: true, force: true });
|
|
15
|
-
});
|
|
16
|
-
describe("ThreadStore", () => {
|
|
17
|
-
it("appends events with per-session sequence", () => {
|
|
18
|
-
const e1 = store.append({
|
|
19
|
-
session_id: "s1",
|
|
20
|
-
kind: "user_message",
|
|
21
|
-
ts: "2026-08-13T00:00:00.000Z",
|
|
22
|
-
body: "hello",
|
|
23
|
-
});
|
|
24
|
-
const e2 = store.append({
|
|
25
|
-
session_id: "s1",
|
|
26
|
-
kind: "tool_call",
|
|
27
|
-
ts: "2026-08-13T00:00:01.000Z",
|
|
28
|
-
body: "run tests",
|
|
29
|
-
});
|
|
30
|
-
const e3 = store.append({
|
|
31
|
-
session_id: "s2",
|
|
32
|
-
kind: "user_message",
|
|
33
|
-
ts: "2026-08-13T00:00:02.000Z",
|
|
34
|
-
body: "hi",
|
|
35
|
-
});
|
|
36
|
-
expect(e1.seq).toBe(1);
|
|
37
|
-
expect(e2.seq).toBe(2);
|
|
38
|
-
expect(e3.seq).toBe(1);
|
|
39
|
-
});
|
|
40
|
-
it("truncates oversized bodies and marks them", () => {
|
|
41
|
-
const big = "x".repeat(200_000);
|
|
42
|
-
const e = store.append({
|
|
43
|
-
session_id: "s1",
|
|
44
|
-
kind: "tool_result",
|
|
45
|
-
ts: "2026-08-13T00:00:03.000Z",
|
|
46
|
-
body: big,
|
|
47
|
-
});
|
|
48
|
-
expect(e.truncated).toBe(true);
|
|
49
|
-
expect(e.body.length).toBeLessThan(big.length);
|
|
50
|
-
});
|
|
51
|
-
it("indexes on write and searches with BM25", () => {
|
|
52
|
-
store.append({
|
|
53
|
-
session_id: "s1",
|
|
54
|
-
kind: "user_message",
|
|
55
|
-
ts: "2026-08-13T00:00:03.000Z",
|
|
56
|
-
body: "run the full test suite now",
|
|
57
|
-
});
|
|
58
|
-
const hits = store.search("test");
|
|
59
|
-
expect(hits.length).toBeGreaterThan(0);
|
|
60
|
-
expect(hits[0].session_id).toBe("s1");
|
|
61
|
-
});
|
|
62
|
-
it("does not index tool_call/tool_result (FTS layering)", () => {
|
|
63
|
-
const before = store.search("bcrypt").length;
|
|
64
|
-
store.append({
|
|
65
|
-
session_id: "s1",
|
|
66
|
-
kind: "tool_call",
|
|
67
|
-
ts: "2026-08-13T00:00:04.000Z",
|
|
68
|
-
body: "创建 auth 模块,使用 bcrypt 加密密码",
|
|
69
|
-
});
|
|
70
|
-
store.append({
|
|
71
|
-
session_id: "s1",
|
|
72
|
-
kind: "tool_result",
|
|
73
|
-
ts: "2026-08-13T00:00:05.000Z",
|
|
74
|
-
body: "auth 模块已创建,含 bcrypt 哈希函数",
|
|
75
|
-
});
|
|
76
|
-
const after = store.search("bcrypt").length;
|
|
77
|
-
expect(after).toBe(before);
|
|
78
|
-
});
|
|
79
|
-
// 0-e 中文检索升级验收:jieba 词级分词 + 全 OR + BM25(替代原单字 AND,缺一字即 miss)
|
|
80
|
-
it("中文查询词级命中(登录方案 → 命中含「登录/方案」正文)", () => {
|
|
81
|
-
store.append({
|
|
82
|
-
session_id: "s-cn",
|
|
83
|
-
kind: "user_message",
|
|
84
|
-
ts: "2026-08-18T00:00:00.000Z",
|
|
85
|
-
body: "登录方案改成JWT,部署到周五",
|
|
86
|
-
});
|
|
87
|
-
const hits = store.search("登录方案");
|
|
88
|
-
expect(hits.length).toBeGreaterThan(0);
|
|
89
|
-
expect(hits.some((h) => h.session_id === "s-cn")).toBe(true);
|
|
90
|
-
});
|
|
91
|
-
it("2 字词查询正常(「登录」是完整 token,不再依赖 trigram)", () => {
|
|
92
|
-
const hits = store.search("登录");
|
|
93
|
-
expect(hits.length).toBeGreaterThan(0);
|
|
94
|
-
expect(hits.some((h) => h.session_id === "s-cn")).toBe(true);
|
|
95
|
-
});
|
|
96
|
-
it("部分词命中仍召回(词级 OR:只记得「部署」也能召回)", () => {
|
|
97
|
-
const hits = store.search("部署时间");
|
|
98
|
-
expect(hits.some((h) => h.session_id === "s-cn")).toBe(true);
|
|
99
|
-
});
|
|
100
|
-
it("短句子串查询(「怎么定的」→ 命中决策上下文)", () => {
|
|
101
|
-
store.append({
|
|
102
|
-
session_id: "s-cn",
|
|
103
|
-
kind: "user_message",
|
|
104
|
-
ts: "2026-08-18T00:00:05.000Z",
|
|
105
|
-
body: "决策:开发基线用标准模式为主",
|
|
106
|
-
});
|
|
107
|
-
const hits = store.search("开发基线怎么定的");
|
|
108
|
-
expect(hits.some((h) => h.session_id === "s-cn")).toBe(true);
|
|
109
|
-
});
|
|
110
|
-
// 0-e 定案第 5 条(trigram 子串召回兜底):主路径 jieba 词级 0 命中时,
|
|
111
|
-
// 查询是正文 token 的连续子串("用户只记得半句")→ body_tri 短语匹配兜底召回
|
|
112
|
-
it("半句子串兜底召回(主路径 0 命中 → trigram 命中「eepseek」∈ deepseek)", () => {
|
|
113
|
-
store.append({
|
|
114
|
-
session_id: "s-frag",
|
|
115
|
-
kind: "user_message",
|
|
116
|
-
ts: "2026-08-18T00:10:00.000Z",
|
|
117
|
-
body: "模型选定 deepseek-v4-flash 作为主力,事件存储用 better-sqlite3",
|
|
118
|
-
});
|
|
119
|
-
const hits = store.search("eepseek");
|
|
120
|
-
expect(hits.some((h) => h.session_id === "s-frag")).toBe(true);
|
|
121
|
-
});
|
|
122
|
-
it("半句子串兜底保持主路径语义(整词仍走 body_seg BM25)", () => {
|
|
123
|
-
const hits = store.search("deepseek");
|
|
124
|
-
expect(hits.some((h) => h.session_id === "s-frag")).toBe(true);
|
|
125
|
-
expect(hits[0].session_id).toBe("s-frag");
|
|
126
|
-
});
|
|
127
|
-
it("半句子串兜底遵守隔离语义(其他会话不可见,本会话可见)", () => {
|
|
128
|
-
store.append({
|
|
129
|
-
session_id: "s-frag-iso",
|
|
130
|
-
kind: "user_message",
|
|
131
|
-
ts: "2026-08-18T00:11:00.000Z",
|
|
132
|
-
body: "孤岛验证 tokenizer-v5 半句隔离",
|
|
133
|
-
}, { isolation: true });
|
|
134
|
-
const hidden = store.search("okenizer", { sessionId: "s2" });
|
|
135
|
-
expect(hidden.some((h) => h.session_id === "s-frag-iso")).toBe(false);
|
|
136
|
-
const self = store.search("okenizer", { sessionId: "s-frag-iso" });
|
|
137
|
-
expect(self.some((h) => h.session_id === "s-frag-iso")).toBe(true);
|
|
138
|
-
});
|
|
139
|
-
it("trigram 兜底 <3 字符查询返回空;≥3 字符子串正常命中", () => {
|
|
140
|
-
// "ee" 不足 3 字符(trigram 需 ≥3)→ 空(不报错)
|
|
141
|
-
expect(store.search("ee")).toEqual([]);
|
|
142
|
-
// "eep" 恰好 3 字符且是 deepseek 子串 → 命中
|
|
143
|
-
expect(store.search("eep")).not.toEqual([]);
|
|
144
|
-
// 中文 2 字词走主路径词级命中
|
|
145
|
-
expect(store.search("登录")).not.toEqual([]);
|
|
146
|
-
});
|
|
147
|
-
it("filters search by session and hides isolated content from others", () => {
|
|
148
|
-
// 未隔离内容跨会话可见(跨会话继承检索语义)
|
|
149
|
-
const visible = store.search("hello", { sessionId: "s2" });
|
|
150
|
-
expect(visible.length).toBeGreaterThan(0);
|
|
151
|
-
// 隔离内容对其他会话不可见(全链路过滤)
|
|
152
|
-
store.append({
|
|
153
|
-
session_id: "s-iso",
|
|
154
|
-
kind: "user_message",
|
|
155
|
-
ts: "2026-08-13T00:00:06.000Z",
|
|
156
|
-
body: "秘密计划代号红隼",
|
|
157
|
-
}, { isolation: true });
|
|
158
|
-
const hidden = store.search("红隼", { sessionId: "s2" });
|
|
159
|
-
expect(hidden).toHaveLength(0);
|
|
160
|
-
const self = store.search("红隼", { sessionId: "s-iso" });
|
|
161
|
-
expect(self.length).toBeGreaterThan(0);
|
|
162
|
-
});
|
|
163
|
-
it("starts a new episode on user message", () => {
|
|
164
|
-
const seqBefore = store.append({
|
|
165
|
-
session_id: "s4",
|
|
166
|
-
kind: "tool_call",
|
|
167
|
-
ts: "2026-08-13T00:00:01.000Z",
|
|
168
|
-
body: "step1",
|
|
169
|
-
}).seq;
|
|
170
|
-
const user = store.append({
|
|
171
|
-
session_id: "s4",
|
|
172
|
-
kind: "user_message",
|
|
173
|
-
ts: "2026-08-13T00:00:02.000Z",
|
|
174
|
-
body: "next task",
|
|
175
|
-
});
|
|
176
|
-
const ep = store.getActiveEpisode("s4");
|
|
177
|
-
expect(ep?.seq_start).toBe(user.seq);
|
|
178
|
-
expect(seqBefore).toBe(user.seq - 1);
|
|
179
|
-
});
|
|
180
|
-
it("writes a deterministic summary when an episode closes", () => {
|
|
181
|
-
store.append({
|
|
182
|
-
session_id: "s3",
|
|
183
|
-
kind: "user_message",
|
|
184
|
-
ts: "2026-08-13T00:00:00.000Z",
|
|
185
|
-
body: "使用 sqlite 存储",
|
|
186
|
-
});
|
|
187
|
-
store.append({
|
|
188
|
-
session_id: "s3",
|
|
189
|
-
kind: "tool_call",
|
|
190
|
-
ts: "2026-08-13T00:00:01.000Z",
|
|
191
|
-
body: "init db",
|
|
192
|
-
});
|
|
193
|
-
store.append({
|
|
194
|
-
session_id: "s3",
|
|
195
|
-
kind: "user_message",
|
|
196
|
-
ts: "2026-08-13T00:00:02.000Z",
|
|
197
|
-
body: "继续",
|
|
198
|
-
});
|
|
199
|
-
const ep = store.getLatestEpisodeWithSummary("s3");
|
|
200
|
-
expect(ep?.seq_end).toBe(2);
|
|
201
|
-
expect(ep?.summary).toContain("使用 sqlite 存储");
|
|
202
|
-
expect(ep?.summary).toContain("init db");
|
|
203
|
-
});
|
|
204
|
-
it("parses stored meta back into objects", () => {
|
|
205
|
-
const ev = store.append({
|
|
206
|
-
session_id: "s4",
|
|
207
|
-
kind: "tool_call",
|
|
208
|
-
ts: "2026-08-13T00:00:00.000Z",
|
|
209
|
-
body: "x",
|
|
210
|
-
meta: { tool_name: "Edit", file_path: "src/a.ts" },
|
|
211
|
-
});
|
|
212
|
-
expect(ev.meta).toEqual({ tool_name: "Edit", file_path: "src/a.ts" });
|
|
213
|
-
const recent = store.getRecentEvents("s4", 1);
|
|
214
|
-
expect(recent[0].meta).toEqual({ tool_name: "Edit", file_path: "src/a.ts" });
|
|
215
|
-
});
|
|
216
|
-
it("dedupes by origin (idempotent append)", () => {
|
|
217
|
-
const e1 = store.append({
|
|
218
|
-
session_id: "s5",
|
|
219
|
-
kind: "user_message",
|
|
220
|
-
ts: "2026-08-13T00:00:00.000Z",
|
|
221
|
-
body: "dup test",
|
|
222
|
-
}, { origin: "qoder://transcript#uuid-1" });
|
|
223
|
-
const e2 = store.append({
|
|
224
|
-
session_id: "s5",
|
|
225
|
-
kind: "user_message",
|
|
226
|
-
ts: "2026-08-13T00:00:00.000Z",
|
|
227
|
-
body: "dup test",
|
|
228
|
-
}, { origin: "qoder://transcript#uuid-1" });
|
|
229
|
-
expect(e2.id).toBe(e1.id);
|
|
230
|
-
const count = store.eventsDb.prepare("SELECT COUNT(*) AS c FROM events WHERE origin = ?").get("qoder://transcript#uuid-1");
|
|
231
|
-
expect(count.c).toBe(1);
|
|
232
|
-
});
|
|
233
|
-
it("spills oversized bodies with expand recovery", () => {
|
|
234
|
-
const big = "y".repeat(6000);
|
|
235
|
-
const e = store.append({
|
|
236
|
-
session_id: "s5",
|
|
237
|
-
kind: "tool_result",
|
|
238
|
-
ts: "2026-08-13T00:00:01.000Z",
|
|
239
|
-
body: big,
|
|
240
|
-
}, { spillRef: "transcript#tool-1" });
|
|
241
|
-
expect(e.spilled).toBe(1);
|
|
242
|
-
expect(e.body.length).toBeLessThan(1000);
|
|
243
|
-
const restored = store.expand(e.id);
|
|
244
|
-
expect(restored).toBe(big);
|
|
245
|
-
});
|
|
246
|
-
it("expands non-spilled event body", () => {
|
|
247
|
-
const e = store.append({
|
|
248
|
-
session_id: "s5",
|
|
249
|
-
kind: "user_message",
|
|
250
|
-
ts: "2026-08-13T00:00:02.000Z",
|
|
251
|
-
body: "plain body",
|
|
252
|
-
});
|
|
253
|
-
expect(store.expand(e.id)).toBe("plain body");
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
describe("structured scope (B②-4)", () => {
|
|
257
|
-
it("writes scope/project_key/origin on structured rows", () => {
|
|
258
|
-
const g = store.addGoal("s6", "目标 A", { scope: "session", projectKey: "p1", origin: "o-goal-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
259
|
-
const d = store.addDecision("s6", "决策 B", { scope: "project", projectKey: "p1", origin: "o-dec-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
260
|
-
const f = store.addFeedback("s6", "偏好 C", "preference", { scope: "global", origin: "o-fb-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
261
|
-
expect(g.scope).toBe("session");
|
|
262
|
-
expect(g.project_key).toBe("p1");
|
|
263
|
-
expect(g.origin).toBe("o-goal-1");
|
|
264
|
-
expect(d.scope).toBe("project");
|
|
265
|
-
expect(d.project_key).toBe("p1");
|
|
266
|
-
expect(f.scope).toBe("global");
|
|
267
|
-
expect(f.project_key).toBeNull();
|
|
268
|
-
});
|
|
269
|
-
it("dedupes structured writes by origin across sessions", () => {
|
|
270
|
-
const d1 = store.proposeDecision("s6", "同源决策", { scope: "project", projectKey: "p1", origin: "o-dec-same", ts: "2026-08-13T00:00:00.000Z" });
|
|
271
|
-
const d2 = store.proposeDecision("s7", "同源决策不同描述", { scope: "project", projectKey: "p1", origin: "o-dec-same", ts: "2026-08-13T00:00:00.000Z" });
|
|
272
|
-
expect(d2.id).toBe(d1.id);
|
|
273
|
-
});
|
|
274
|
-
it("merged decisions include same-project rows from other sessions, hard-filter others", () => {
|
|
275
|
-
store.addDecision("s8", "pnpm 包管理", { scope: "project", projectKey: "proj-x", origin: "o-x-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
276
|
-
store.addDecision("s8", "会话内临时决策", { scope: "session", projectKey: "proj-x", origin: "o-x-2", ts: "2026-08-13T00:00:02.000Z" });
|
|
277
|
-
store.addDecision("s9", "另一项目决策", { scope: "project", projectKey: "proj-y", origin: "o-y-1", ts: "2026-08-13T00:00:04.000Z" });
|
|
278
|
-
store.addDecision("s10", "无关项目", { scope: "project", projectKey: "proj-z", origin: "o-z-1", ts: "2026-08-13T00:00:06.000Z" });
|
|
279
|
-
const merged = store.getActiveDecisionsMerged("s9", "proj-y");
|
|
280
|
-
const texts = merged.map((d) => d.text);
|
|
281
|
-
expect(texts).toContain("另一项目决策");
|
|
282
|
-
expect(texts).not.toContain("pnpm 包管理");
|
|
283
|
-
expect(texts).not.toContain("会话内临时决策");
|
|
284
|
-
expect(texts).not.toContain("无关项目");
|
|
285
|
-
});
|
|
286
|
-
it("merged goals include same-project rows from other sessions", () => {
|
|
287
|
-
store.addGoal("s8", "重构核心模块", { scope: "project", projectKey: "proj-x", origin: "o-gx-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
288
|
-
store.addGoal("s9", "本会话目标", { scope: "session", projectKey: "proj-y", origin: "o-gy-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
289
|
-
const merged = store.getActiveGoalsMerged("s9", "proj-y");
|
|
290
|
-
expect(merged.map((g) => g.text)).toEqual(["本会话目标"]);
|
|
291
|
-
const x = store.getActiveGoalsMerged("s9", "proj-x");
|
|
292
|
-
expect(x.map((g) => g.text)).toContain("重构核心模块");
|
|
293
|
-
});
|
|
294
|
-
it("merged feedback includes global rows and own-session rows only", () => {
|
|
295
|
-
store.addFeedback("s8", "全局偏好:用 pnpm", "preference", { scope: "global", projectKey: "proj-x", origin: "o-fx-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
296
|
-
store.addFeedback("s9", "项目偏好:用 vitest", "preference", { scope: "project", projectKey: "proj-y", origin: "o-fy-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
297
|
-
store.addFeedback("s10", "他项目偏好", "preference", { scope: "project", projectKey: "proj-z", origin: "o-fz-1", ts: "2026-08-13T00:00:00.000Z" });
|
|
298
|
-
const merged = store.getFeedbackMerged("s9", "proj-y", 10);
|
|
299
|
-
const texts = merged.map((f) => f.text);
|
|
300
|
-
expect(texts).toContain("全局偏好:用 pnpm");
|
|
301
|
-
expect(texts).toContain("项目偏好:用 vitest");
|
|
302
|
-
expect(texts).not.toContain("他项目偏好");
|
|
303
|
-
});
|
|
304
|
-
it("scope defaults to project (先到先得) when not specified", () => {
|
|
305
|
-
const d = store.addDecision("s11", "默认项目级决策", { projectKey: "proj-x", ts: "2026-08-13T00:00:00.000Z" });
|
|
306
|
-
expect(d.scope).toBe("project");
|
|
307
|
-
expect(d.project_key).toBe("proj-x");
|
|
308
|
-
expect(d.status).toBe("active");
|
|
309
|
-
});
|
|
310
|
-
});
|
|
311
|
-
describe("applyScopePriority (B③)", () => {
|
|
312
|
-
it("keeps highest-priority scope for the same normalized text", () => {
|
|
313
|
-
const rows = [
|
|
314
|
-
{ id: 1, text: "包管理用 pnpm", scope: "global" },
|
|
315
|
-
{ id: 2, text: "包管理用 pnpm。", scope: "project" },
|
|
316
|
-
{ id: 3, text: "包管理用 pnpm", scope: "session" },
|
|
317
|
-
];
|
|
318
|
-
const out = applyScopePriority(rows);
|
|
319
|
-
expect(out).toHaveLength(1);
|
|
320
|
-
expect(out[0].scope).toBe("session");
|
|
321
|
-
});
|
|
322
|
-
it("project overrides global for the same fact (项目特例覆盖全局默认)", () => {
|
|
323
|
-
const rows = [
|
|
324
|
-
{ id: 1, text: "用 pnpm", scope: "global" },
|
|
325
|
-
{ id: 2, text: "用 pnpm", scope: "project" },
|
|
326
|
-
];
|
|
327
|
-
const out = applyScopePriority(rows);
|
|
328
|
-
expect(out).toHaveLength(1);
|
|
329
|
-
expect(out[0].scope).toBe("project");
|
|
330
|
-
});
|
|
331
|
-
it("keeps distinct facts regardless of scope", () => {
|
|
332
|
-
const rows = [
|
|
333
|
-
{ id: 1, text: "用 pnpm", scope: "global" },
|
|
334
|
-
{ id: 2, text: "用 yarn", scope: "project" },
|
|
335
|
-
];
|
|
336
|
-
const out = applyScopePriority(rows);
|
|
337
|
-
expect(out).toHaveLength(2);
|
|
338
|
-
});
|
|
339
|
-
it("treats missing scope as project (旧行默认)", () => {
|
|
340
|
-
const rows = [
|
|
341
|
-
{ id: 1, text: "决策 A", scope: undefined },
|
|
342
|
-
{ id: 2, text: "决策 A", scope: "session" },
|
|
343
|
-
];
|
|
344
|
-
const out = applyScopePriority(rows);
|
|
345
|
-
expect(out).toHaveLength(1);
|
|
346
|
-
expect(out[0].scope).toBe("session");
|
|
347
|
-
});
|
|
348
|
-
});
|
|
349
|
-
describe("显式通道资源治理(2026-08-21 /thread-reg|rev|pub 资源集)", () => {
|
|
350
|
-
it("getGoals 返回全状态目标(reg gol 无参列表的 id 来源)", () => {
|
|
351
|
-
const g1 = store.addGoal("s-g1", "进行中的目标", { projectKey: "test-proj" });
|
|
352
|
-
store.updateGoalStatus("s-g1", g1.id, "completed");
|
|
353
|
-
const g2 = store.addGoal("s-g1", "已废弃的目标", { projectKey: "test-proj" });
|
|
354
|
-
store.updateGoalStatus("s-g1", g2.id, "abandoned");
|
|
355
|
-
const all = store.getGoals("s-g1");
|
|
356
|
-
expect(all.map((g) => g.status).sort()).toEqual(["abandoned", "completed"]);
|
|
357
|
-
});
|
|
358
|
-
it("deleteAsset 硬删除 + 血缘边清理,事件流水保留", () => {
|
|
359
|
-
const ev = store.append({
|
|
360
|
-
session_id: "s-g2",
|
|
361
|
-
kind: "tool_call",
|
|
362
|
-
ts: "2026-08-13T00:00:00.000Z",
|
|
363
|
-
body: "write docs/x.md",
|
|
364
|
-
meta: { tool_name: "write", file_path: "docs/x.md" },
|
|
365
|
-
});
|
|
366
|
-
const a = store.registerAsset({ sessionId: "s-g2", path: "docs/x.md", title: "X 文档", sourceEvent: ev.id });
|
|
367
|
-
expect(store.listAssets({ sessionId: "s-g2" })).toHaveLength(1);
|
|
368
|
-
expect(store.deleteAsset(a.id)).toBe(true);
|
|
369
|
-
expect(store.listAssets({ sessionId: "s-g2" })).toHaveLength(0);
|
|
370
|
-
expect(store.getRelatedEdges("s-g2", "asset", a.id)).toHaveLength(0);
|
|
371
|
-
expect(store.deleteAsset(a.id)).toBe(false);
|
|
372
|
-
});
|
|
373
|
-
it("registerAsset 路径幂等(2026-08-21 狗粮实证:同 path 重复堆行 12 行)", () => {
|
|
374
|
-
const a1 = store.registerAsset({ sessionId: "s-g2b", path: "README.md", title: "旧标题" });
|
|
375
|
-
const a2 = store.registerAsset({ sessionId: "s-g2b", path: "README.md", title: "新标题" });
|
|
376
|
-
expect(a2.id).toBe(a1.id);
|
|
377
|
-
expect(store.listAssets({ sessionId: "s-g2b" })).toHaveLength(1);
|
|
378
|
-
// 标题刷新为最新
|
|
379
|
-
expect(store.getAsset(a1.id)?.title).toBe("新标题");
|
|
380
|
-
// 跨会话可见范围去重:他会话注册同 path 也不新增(isolation=0 行全局可见)
|
|
381
|
-
const a3 = store.registerAsset({ sessionId: "s-g2c", path: "README.md", title: "标题三" });
|
|
382
|
-
expect(a3.id).toBe(a1.id);
|
|
383
|
-
});
|
|
384
|
-
it("listIsolatedRows 覆盖 ast 产出 + 三元组,unisolateRow 支持 knowledge_assets", () => {
|
|
385
|
-
const a = store.registerAsset({ sessionId: "s-g3", path: "docs/iso.md", title: "隔离产出", isolation: true });
|
|
386
|
-
store.addGoal("s-g3", "隔离目标", { projectKey: "test-proj", isolation: true });
|
|
387
|
-
const rows = store.listIsolatedRows("s-g3");
|
|
388
|
-
expect(rows.some((r) => r.kind === "ast" && r.id === a.id)).toBe(true);
|
|
389
|
-
expect(rows.some((r) => r.kind === "goal")).toBe(true);
|
|
390
|
-
expect(store.unisolateRow("s-g3", "knowledge_assets", a.id)).toBe(true);
|
|
391
|
-
expect(store.listIsolatedRows("s-g3").some((r) => r.kind === "ast")).toBe(false);
|
|
392
|
-
});
|
|
393
|
-
});
|
|
394
|
-
//# sourceMappingURL=store.test.js.map
|
package/dist/store.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.test.js","sourceRoot":"","sources":["../src/store.test.ts"],"names":[],"mappings":"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"}
|
package/dist/v7.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|