@tom2012/cc-web 1.5.92 → 1.5.94

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 (44) hide show
  1. package/README.md +1 -1
  2. package/backend/dist/memory-pool/global-pool-manager.d.ts +12 -0
  3. package/backend/dist/memory-pool/global-pool-manager.d.ts.map +1 -0
  4. package/backend/dist/memory-pool/global-pool-manager.js +290 -0
  5. package/backend/dist/memory-pool/global-pool-manager.js.map +1 -0
  6. package/backend/dist/memory-pool/pool-lock.d.ts +2 -0
  7. package/backend/dist/memory-pool/pool-lock.d.ts.map +1 -0
  8. package/backend/dist/memory-pool/pool-lock.js +31 -0
  9. package/backend/dist/memory-pool/pool-lock.js.map +1 -0
  10. package/backend/dist/memory-pool/pool-manager.d.ts +34 -0
  11. package/backend/dist/memory-pool/pool-manager.d.ts.map +1 -1
  12. package/backend/dist/memory-pool/pool-manager.js +91 -0
  13. package/backend/dist/memory-pool/pool-manager.js.map +1 -1
  14. package/backend/dist/memory-pool/templates.d.ts.map +1 -1
  15. package/backend/dist/memory-pool/templates.js +98 -127
  16. package/backend/dist/memory-pool/templates.js.map +1 -1
  17. package/backend/dist/memory-pool/types.d.ts +34 -0
  18. package/backend/dist/memory-pool/types.d.ts.map +1 -1
  19. package/backend/dist/routes/hooks.d.ts.map +1 -1
  20. package/backend/dist/routes/hooks.js +14 -0
  21. package/backend/dist/routes/hooks.js.map +1 -1
  22. package/backend/dist/routes/memory-pool.d.ts.map +1 -1
  23. package/backend/dist/routes/memory-pool.js +617 -57
  24. package/backend/dist/routes/memory-pool.js.map +1 -1
  25. package/frontend/dist/assets/{GraphPreview-QiSxy4LP.js → GraphPreview-BFYA_WA5.js} +1 -1
  26. package/frontend/dist/assets/{OfficePreview-DlUCjmFD.js → OfficePreview-DN-it4Af.js} +2 -2
  27. package/frontend/dist/assets/{PlanPanel-Dn5PCqCc.js → PlanPanel-DYupjf3X.js} +1 -1
  28. package/frontend/dist/assets/{ProjectPage-XG9MZm7t.js → ProjectPage-B6tVjIYr.js} +5 -5
  29. package/frontend/dist/assets/{SettingsPage-ofs1M1K_.js → SettingsPage-CQL_FfkR.js} +2 -2
  30. package/frontend/dist/assets/{ShareViewPage-u8FXEdhC.js → ShareViewPage-C_x31zAw.js} +1 -1
  31. package/frontend/dist/assets/{SkillHubPage-DYQ3--oW.js → SkillHubPage-Cgoxl30L.js} +2 -2
  32. package/frontend/dist/assets/{bot-63iGenXw.js → bot-Dst2XqWX.js} +1 -1
  33. package/frontend/dist/assets/{chevron-down-CzkwkeMW.js → chevron-down-DsAldQb3.js} +1 -1
  34. package/frontend/dist/assets/{download-DhFx0Fu-.js → download-YA6lXM4C.js} +1 -1
  35. package/frontend/dist/assets/{index-DVUjdhq8.css → index-BDYnq-Fr.css} +1 -1
  36. package/frontend/dist/assets/{index-C8aR4tRp.js → index-CY9Au1bg.js} +9 -9
  37. package/frontend/dist/assets/{index-DKsG2yPY.js → index-_m8u9esJ.js} +1 -1
  38. package/frontend/dist/assets/{jszip.min-B9vwwWDL.js → jszip.min-BC9RCrTS.js} +1 -1
  39. package/frontend/dist/assets/{matter-CCkX66fz.js → matter-Mm9BJmx6.js} +1 -1
  40. package/frontend/dist/assets/{maximize-2-B3mAuuFs.js → maximize-2-CuzznumM.js} +1 -1
  41. package/frontend/dist/assets/{save-CxQAMJ-_.js → save-Q2W6S7fk.js} +1 -1
  42. package/frontend/dist/assets/{user-DxwkzcYb.js → user-BM9GY1Xb.js} +1 -1
  43. package/frontend/dist/index.html +2 -2
  44. package/package.json +1 -1
@@ -7,19 +7,18 @@ exports.generateClaudeMdBlock = generateClaudeMdBlock;
7
7
  function generateSpecMd() {
8
8
  return `# Memory Pool 规范文档 (SPEC.md)
9
9
 
10
- > 本文档定义了记忆池系统��完整规范。AI 应在执行复杂记忆操作时参考本文档。
10
+ > 本文档定义了记忆池系统的完整规范。AI 应在执行复杂记忆操作时参考本文档。
11
11
  > 日常操作请使用 QUICK-REF.md。
12
12
 
13
13
  ## 一、核心模型:楔形容器与浮球系统
14
14
 
15
15
  记忆池是一个**楔形容器**——利用物理几何来施加计算层面的容量约束。每条记忆是容器中的一个**浮球**,对应 \`.memory-pool/balls/\` 下的一个 \`.md\` 文件。
16
16
 
17
- - **活跃层**:浮力最高的 Top-N 个球(N = \`pool.json\` 中的 \`active_capacity\`),AI 每次对话应优先加载
18
- - **深层**:其余球,不主动加载,但可通过查询或连线召回
17
+ - **活跃层**:浮力最高的 Top-N 个球(N = \`active_capacity\`),AI 每次对话应优先加载
18
+ - **表面层(Surface)**:浮力最高且总 token 直径不超过楔形顶部宽度(\`surface_width\`)的球
19
+ - **深层**:其余球,不主动加载,但可通过 hit 查询或连线召回
19
20
  - **永不消失**:浮力趋近于零但永远不为零,任何记忆都可被召回
20
21
 
21
- 物理特性——浮力、碰撞、衰减——驱动记忆的自动筛选、重新排序和重构。可视化是附带收益,而非设计目标。
22
-
23
22
  ## 二、浮力公式
24
23
 
25
24
  \`\`\`
@@ -28,198 +27,170 @@ B(t) = (B₀ + α · H) · λ^(t - t_last)
28
27
 
29
28
  | 符号 | 含义 | 来源 |
30
29
  |------|------|------|
31
- | B₀ | 初始浮力 | \`pool.json\` 球条目 \`B0\` |
32
- | H | 累计命中次数 | \`pool.json\` 球条目 \`H\` |
33
- | α | 查询增益系数 | \`pool.json\`\`alpha\`(默认 1.0) |
34
- | λ | 衰减率 | \`pool.json\`\`lambda\`(默认 0.97) |
35
- | t | 当前全局轮次 | \`pool.json\` \`t\` |
36
- | t_last | 上次访问轮次 | \`pool.json\` 球条目 \`t_last\` |
30
+ | B₀ | 初始浮力 | ccweb 按类型自动分配 |
31
+ | H | 累计命中次数 | ccweb 通过 hit API 自动计数 |
32
+ | α | 查询增益系数 | pool.json → alpha(默认 1.0) |
33
+ | λ | 衰减率 | pool.json → lambda(默认 0.97) |
34
+ | t | 当前全局轮次 | ccweb 通过 hook 自动递增 |
35
+ | t_last | 上次访问轮次 | ccweb 通过 hit API 自动更新 |
37
36
 
38
37
  **浮力动态计算**:buoyancy 不存储在文件中,每次读取时由后端根据公式实时计算。
39
38
 
40
- **永久标记**:\`permanent: true\` 的球跳过衰减项,\`B(t) = B₀ + α · H\`。
41
-
42
- **轮次规则**:每条用户消息算一轮。\`t\` 由系统 hook 自动递增,AI 无需手动管理。
39
+ **永久标记**:\`permanent: true\` 的球跳过衰减项。
43
40
 
44
41
  ## 三、球的属性
45
42
 
46
43
  | 属性 | 字段 | 说明 |
47
44
  |------|------|------|
48
- | 体积 | (正文长度) | 信息的 token 数或字数,越长越大 |
45
+ | 直径 | \`diameter\` | 内容 token 数估算,由 ccweb 自动计算并缓存 |
49
46
  | 浮力 | \`B0\`, \`H\`, \`t_last\` | 由公式计算,决定检索优先级 |
50
47
  | 硬度 | \`hardness\` (0-10) | 抗拆解能力,硬度高的球抵抗分化 |
51
48
  | 连线 | \`links[]\` | 与其他球的关联(ID 数组) |
52
49
  | 永久 | \`permanent\` | true 时不参与衰减 |
53
50
 
54
- ## 四、球的四种类型
51
+ ## 四、球的四种类型与默认 B₀
55
52
 
56
- | 类型 | B₀ 参考 | 用途 |
53
+ | 类型 | 默认 B₀ | 用途 |
57
54
  |------|---------|------|
58
- | \`feedback\` | 8-10 | 用户纠正、行为反馈——直接影响行为正确性 |
59
- | \`user\` | 5-7 | 用户身份、偏好、知识背景 |
60
- | \`project\` | 4-6 | 项目上下文、技术决策、进度状态 |
61
- | \`reference\` | 2-4 | 外部资源指针(URL、文档位置等) |
55
+ | \`feedback\` | 9 | 用户纠正、行为反馈——直接影响行为正确性 |
56
+ | \`user\` | 6 | 用户身份、偏好、知识背景 |
57
+ | \`project\` | 5 | 项目上下文、技术决策、进度状态 |
58
+ | \`reference\` | 3 | 外部资源指针(URL、文档位置等) |
62
59
 
63
60
  ## 五、文件结构
64
61
 
65
62
  \`\`\`
66
63
  .memory-pool/
67
- ├── pool.json # 唯一的元数据文件(全局参数 + 所有球的元数据)
68
- ├── balls/ # 球文件,纯 markdown 内容(无 YAML frontmatter)
64
+ ├── pool.json ccweb 独占管理(AI 不直接读写)
65
+ ├── surface.md ← ccweb 自动生成(活跃层摘要)
66
+ ├── balls/ # 球文件,纯 markdown 内容
69
67
  │ ├── ball_0001.md
70
68
  │ └── ...
71
- ├── QUICK-REF.md # 日常操作参考
72
- └── SPEC.md # 本文档
73
- \`\`\`
74
-
75
- ### 5.1 pool.json 格式
76
-
77
- \`\`\`json
78
- {
79
- "version": 2,
80
- "t": 0,
81
- "lambda": 0.97,
82
- "alpha": 1.0,
83
- "active_capacity": 20,
84
- "next_id": 1,
85
- "pool": "project",
86
- "initialized_at": "2026-04-03T10:00:00Z",
87
- "balls": [
88
- {
89
- "id": "ball_0001",
90
- "type": "feedback",
91
- "summary": "不在代码中��加多余注释",
92
- "B0": 8,
93
- "H": 3,
94
- "t_last": 156,
95
- "hardness": 7,
96
- "permanent": false,
97
- "links": ["ball_0015", "ball_0038"],
98
- "created_at": "2026-04-03T10:00:00Z"
99
- }
100
- ]
101
- }
69
+ ├── QUICK-REF.md # AI 操作参考(本文档)
70
+ └── SPEC.md # 完整规范
102
71
  \`\`\`
103
72
 
104
- ### 5.2 球文件格式
105
-
106
- 文件路径:\`.memory-pool/balls/ball_XXXX.md\`
73
+ ## 六、操作流程(通过 ccweb API)
107
74
 
108
- 球���件为纯 markdown,不包含 YAML frontmatter。所有元数据存储在 \`pool.json\` 中。
109
-
110
- ## 六、操作流程
75
+ 所有操作通过 ccweb REST API 完成,AI 不再直接操作 pool.json
111
76
 
112
77
  ### 6.1 创建球
78
+ 调用 \`POST /api/memory-pool/{projectId}/balls\`,传入 type、summary、content。
79
+ ccweb 自动:分配 ID、设定 B₀、写入 ball.md、更新 pool.json、重建 surface.md。
113
80
 
114
- 1. 读取 \`pool.json\`,获取 \`next_id\` 和当前 \`t\`
115
- 2. 创建 \`balls/ball_XXXX.md\`,写入纯 markdown 正文
116
- 3. 在 \`pool.json\` 的 \`balls\` 数组中添加新球条目
117
- 4. \`pool.json\` 的 \`next_id\` += 1
118
- 5. 写回 \`pool.json\`
119
-
120
- ### 6.2 查询/使用球(命中更新)
121
-
122
- 每次在对话中使用某个球的信息时:
123
- 1. 在 \`pool.json\` 中找到该球条目
124
- 2. \`H\` += 1,\`t_last\` = 当前 \`t\`
125
- 3. 写回 \`pool.json\`
126
-
127
- ### 6.3 维护
81
+ ### 6.2 命中查询
82
+ 调用 \`POST /api/memory-pool/{projectId}/balls/{ballId}/hit\`。
83
+ ccweb 自动:H+=1、t_last=t、返回球内容和关联球摘要。
128
84
 
129
- **衰减**:不需要显式操作——浮力公式中的 \`λ^(t - t_last)\` 自动完成衰减,由后端在读取时动态计算。
85
+ ### 6.3 修改球内容
86
+ 先 Edit \`balls/ball_XXXX.md\`,然后调用 \`PUT /api/memory-pool/{projectId}/balls/{ballId}\`。
87
+ ccweb 自动:重算 diameter、更新 pool.json、重建 surface.md。
130
88
 
131
- **分化**(大球拆为多个小球):
132
- - 触发条件:活跃层空间不足,且存在体积大的球
133
- - 硬度约束��硬度 7 的球不拆
134
- - 操作:删除原球文件和元数据,创建多个新球,新球之间建立连线
135
-
136
- ### 6.4 连线召回
137
-
138
- 查询命中活跃层某球时,检查其 \`links\`,拉出关联球(H+=1, t_last 重置)。
89
+ ### 6.4 删除球
90
+ 调用 \`DELETE /api/memory-pool/{projectId}/balls/{ballId}\`。
91
+ ccweb 自动:删文件、清理 links、更新 pool.json、重建 surface.md。
139
92
 
140
93
  ### 6.5 轮次自增
94
+ \`t\` 由 ccweb 在 Claude Code Stop hook 事件时自动递增。AI 也可手动调用 \`POST /tick\`。
141
95
 
142
- \`t\` 由系统 hook 自动递增(每条用户消息 +1)。AI 无需手动管理轮次。
96
+ ## 七、多容器架构
143
97
 
144
- ## 七、多容器架构(预留)
98
+ - **项目池**(\`pool: "project"\`):\`.memory-pool/\`,\`lambda: 0.97\`
99
+ - **全局池**(\`pool: "global"\`):\`~/.ccweb/memory-pool/\`,\`lambda: 0.99\`
145
100
 
146
- 当前为项目级记忆池(\`pool: "project"\`)。未来可扩展全局池(\`~/.ccweb/memory-pool/\`,\`pool: "global"\`,\`lambda: 0.99\`)。
101
+ 全局池的 \`t\` 按日历天数递增。AI 通过 \`GET /api/memory-pool/global/surface\` 访问全局记忆,无需导入到项目池。
147
102
  `;
148
103
  }
149
104
  function generateQuickRefMd() {
150
105
  return `# Memory Pool 快速参考 (QUICK-REF.md)
151
106
 
152
107
  > AI 日常操作记忆池时读取此文档。完整规范见 SPEC.md。
108
+ > 所有操作通过 ccweb API 完成,**不要直接读写 pool.json**。
109
+
110
+ ## API 端点
111
+
112
+ BASE: \`/api/memory-pool/{projectId}\`
113
+
114
+ ## 对话开始
115
+
116
+ \`\`\`
117
+ GET /surface → 获取活跃层记忆(按浮力排序,受楔形宽度限制)
118
+ \`\`\`
119
+
120
+ 按需读取具体球:
121
+ \`\`\`
122
+ POST /balls/{ballId}/hit → 返回内容 + 关联球摘要(自动计数 H+=1)
123
+ \`\`\`
124
+
125
+ 如需查看全局记忆:
126
+ \`\`\`
127
+ GET /api/memory-pool/global/surface → 全局活跃层
128
+ POST /api/memory-pool/global/balls/{ballId}/hit → 全局球命中查询
129
+ \`\`\`
153
130
 
154
131
  ## 创建球
155
132
 
156
- 1. 读取 \`pool.json\`,获取 \`next_id\` 和 \`t\`
157
- 2. 创建 \`balls/ball_XXXX.md\`(纯 markdown,无 frontmatter)
158
- 3. \`pool.json\` \`balls\` 数组中添加条目:
159
-
160
- \`\`\`json
161
- {
162
- "id": "ball_XXXX",
163
- "type": "feedback",
164
- "summary": "简短摘要",
165
- "B0": 8,
166
- "H": 0,
167
- "t_last": 当前t,
168
- "hardness": 7,
169
- "permanent": false,
170
- "links": [],
171
- "created_at": "ISO时间"
172
- }
133
+ \`\`\`
134
+ POST /balls
135
+ Body: { "type": "feedback", "summary": "简短摘要", "content": "markdown正文" }
136
+ 可选: "links": ["ball_0004"], "b0_override": 8
173
137
  \`\`\`
174
138
 
175
- 4. \`next_id\` += 1,写回 \`pool.json\`
139
+ type 决定默认 B₀:feedback=9 | user=6 | project=5 | reference=3
176
140
 
177
- **B₀ 参考**:feedback=8-10 | user=5-7 | project=4-6 | reference=2-4
141
+ ## 修改球
178
142
 
179
- ## 浮力计算
143
+ 1. 用 Edit 工具修改 \`.memory-pool/balls/ball_XXXX.md\`
144
+ 2. 调用:\`PUT /balls/{ballId}\` Body: \`{ "summary": "新摘要" }\`(summary 可选)
145
+
146
+ ## 删除球
180
147
 
181
148
  \`\`\`
182
- B(t) = (B0 + alpha * H) * lambda^(t - t_last)
149
+ DELETE /balls/{ballId}
183
150
  \`\`\`
184
151
 
185
- 默认参数在 pool.json:lambda=0.97, alpha=1.0
186
- 永久球(permanent=true)不乘衰减项。
187
- buoyancy 由后端动态计算,不存储在文件中。
152
+ ccweb 自动清理其他球对该球的 links 引用。
188
153
 
189
- ## 命中更新
154
+ ## 管理连线
190
155
 
191
- 使用某球信息时:在 pool.json 中找到该球,H += 1, t_last = 当前 t,写回 pool.json
156
+ \`\`\`
157
+ PATCH /balls/{ballId}/links
158
+ Body: { "add": ["ball_0007"], "remove": ["ball_0003"] }
159
+ \`\`\`
192
160
 
193
- ## 维护流程
161
+ ## 纯读取(不增加命中计数)
194
162
 
195
- 1. 读取 pool.json
196
- 2. 浮力由后端动态计算,无需手动重算
197
- 3. 检查是否需要分化(活跃层满 + 大球 + 硬度 < 7)
198
- 4. 写回 pool.json
163
+ \`\`\`
164
+ GET /ball/{ballId} → 只返回内容,不影响 H 和 t_last
165
+ \`\`\`
199
166
 
200
167
  ## 轮次管理
201
168
 
202
- \`t\` 由系统 hook 自动递增,AI 无需手动管理。
169
+ \`t\` ccweb 在对话结束时自动递增(Stop hook)。无需手动操作。
170
+
171
+ ## 维护
203
172
 
204
- ## pool.json 更新
173
+ \`\`\`
174
+ POST /maintenance → 返回分化建议 + 异常检测
175
+ \`\`\`
205
176
 
206
- 每次修改球信息后写回 pool.json。只需操作这一个文件(+ 球的 markdown 文件)。
177
+ 分化执行:创建多个新球(POST /balls)→ 删除原球(DELETE /balls/{id})。
207
178
  `;
208
179
  }
209
180
  function generateClaudeMdBlock() {
210
181
  return `## 记忆池(Memory Pool)
211
182
 
212
- 本项目已启用记忆池系统。
183
+ 本项目已启用记忆池系统,通过 ccweb API 管理。
213
184
 
214
185
  **每次对话开始时:**
215
- 1. 读取 \`.memory-pool/QUICK-REF.md\` 了解操作规范
216
- 2. 读取 \`.memory-pool/pool.json\` 加载全局参数和活跃层记忆
217
- 3. 将活跃层记忆纳入当前对话上下文
186
+ 1. 读取 \`.memory-pool/QUICK-REF.md\` 了解 API 操作规范
187
+ 2. 调用 \`GET /api/memory-pool/{projectId}/surface\` 获取活跃层记忆
188
+ 3. 按需调用 \`POST /balls/{ballId}/hit\` 获取具体球内容
218
189
 
219
190
  **对话过程中:**
220
- - 遇到重要信息时主动提议存入记忆池
221
- - 用户要求记忆操作时参照 QUICK-REF.md 执行
222
- - 每次操作后更新 pool.json
191
+ - 遇到重要信息时,通过 \`POST /balls\` 创建新球
192
+ - 使用球信息时,通过 \`POST /balls/{ballId}/hit\` 自动计数
193
+ - 不要直接读写 pool.json,所有元数据由 ccweb 管理
223
194
 
224
195
  **完整规范:** \`.memory-pool/SPEC.md\`
225
196
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/memory-pool/templates.ts"],"names":[],"mappings":";AAAA,uCAAuC;;AAEvC,wCA6IC;AAED,gDA2DC;AAED,sDAiBC;AA7ND,SAAgB,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2IR,CAAC;AACF,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDR,CAAC;AACF,CAAC;AAED,SAAgB,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;CAeR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/memory-pool/templates.ts"],"names":[],"mappings":";AAAA,uCAAuC;;AAEvC,wCAgGC;AAED,gDA2EC;AAED,sDAiBC;AAhMD,SAAgB,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8FR,CAAC;AACF,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyER,CAAC;AACF,CAAC;AAED,SAAgB,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;CAeR,CAAC;AACF,CAAC"}
@@ -1,3 +1,8 @@
1
+ export interface GlobalBallOrigin {
2
+ source_project: string;
3
+ source_ball_id: string;
4
+ synced_at: string;
5
+ }
1
6
  export interface PoolBallMeta {
2
7
  id: string;
3
8
  type: 'user' | 'feedback' | 'project' | 'reference';
@@ -9,6 +14,10 @@ export interface PoolBallMeta {
9
14
  permanent: boolean;
10
15
  links: string[];
11
16
  created_at: string;
17
+ diameter?: number;
18
+ origins?: GlobalBallOrigin[];
19
+ orphaned?: boolean;
20
+ pre_orphan_B0?: number;
12
21
  }
13
22
  export interface PoolJson {
14
23
  version: number;
@@ -16,12 +25,37 @@ export interface PoolJson {
16
25
  lambda: number;
17
26
  alpha: number;
18
27
  active_capacity: number;
28
+ surface_width: number;
19
29
  next_id: number;
20
30
  pool: string;
21
31
  initialized_at: string;
22
32
  balls: PoolBallMeta[];
33
+ last_tick_at?: string;
34
+ last_tick_session?: string;
35
+ global_pool_path?: string;
23
36
  }
24
37
  export interface PoolBallWithBuoyancy extends PoolBallMeta {
25
38
  buoyancy: number;
26
39
  }
40
+ export interface SourceEntry {
41
+ project_id: string;
42
+ project_name: string;
43
+ pool_path: string;
44
+ registered_at: string;
45
+ last_synced_at: string | null;
46
+ status: 'active' | 'unreachable';
47
+ unreachable_count?: number;
48
+ }
49
+ export interface SourcesJson {
50
+ version: number;
51
+ sources: SourceEntry[];
52
+ }
53
+ export interface SyncResult {
54
+ added: number;
55
+ updated: number;
56
+ skipped: number;
57
+ orphaned: number;
58
+ unreachable_projects: string[];
59
+ synced_projects: string[];
60
+ }
27
61
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/memory-pool/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/memory-pool/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/routes/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,QAAA,MAAM,MAAM,4CAAW,CAAC;AAmExB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/routes/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,QAAA,MAAM,MAAM,4CAAW,CAAC;AA8ExB,eAAe,MAAM,CAAC"}
@@ -50,6 +50,8 @@ const auth_1 = require("../auth");
50
50
  const config_1 = require("../config");
51
51
  const session_manager_1 = require("../session-manager");
52
52
  const notify_service_1 = require("../notify-service");
53
+ const pool_manager_1 = require("../memory-pool/pool-manager");
54
+ const pool_lock_1 = require("../memory-pool/pool-lock");
53
55
  const router = (0, express_1.Router)();
54
56
  function findProjectByDir(dir) {
55
57
  const projects = (0, config_1.getProjects)();
@@ -88,6 +90,18 @@ router.post('/', (req, res) => {
88
90
  // Then read the final text block from JSONL.
89
91
  session_manager_1.sessionManager.clearSemanticStatus(projectId);
90
92
  session_manager_1.sessionManager.triggerRead(projectId);
93
+ // Auto-tick memory pool on conversation end
94
+ try {
95
+ const project = (0, config_1.getProject)(projectId);
96
+ if (project) {
97
+ const poolDir = path.join(project.folderPath, '.memory-pool');
98
+ if ((0, pool_manager_1.isInitialized)(poolDir)) {
99
+ const sessionId = req.body.session;
100
+ (0, pool_lock_1.withPoolLock)(poolDir, () => (0, pool_manager_1.tickPool)(poolDir, sessionId)).catch(() => { });
101
+ }
102
+ }
103
+ }
104
+ catch { /* non-fatal: don't break Stop handling */ }
91
105
  // Fire notification 300ms after Stop so JSONL has been read
92
106
  setTimeout(() => {
93
107
  const p = (0, config_1.getProject)(projectId);
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/routes/hooks.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,qCAAoD;AACpD,2CAA6B;AAC7B,kCAAyC;AACzC,sCAAoD;AACpD,wDAAoD;AACpD,sDAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AASxB,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,QAAQ,GAAG,IAAA,oBAAW,GAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC5E,OAAO,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAY,EAAE,GAAa,EAAQ,EAAE;IACrD,IAAI,CAAC,IAAA,qBAAc,EAAC,GAAG,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAgB,CAAC;IAElD,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,0EAA0E;QAC1E,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,YAAY;YACf,oEAAoE;YACpE,gEAAgE;YAChE,gCAAc,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM;QAER,KAAK,aAAa;YAChB,6DAA6D;YAC7D,gCAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM;QAER,KAAK,MAAM;YACT,0FAA0F;YAC1F,6CAA6C;YAC7C,gCAAc,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAC9C,gCAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACtC,4DAA4D;YAC5D,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,CAAC,GAAG,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC;gBAChC,IAAI,CAAC;oBAAE,KAAK,8BAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAChE,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM;QAER;YACE,MAAM;IACV,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/routes/hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory-pool.d.ts","sourceRoot":"","sources":["../../src/routes/memory-pool.ts"],"names":[],"mappings":"AAkBA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAiPxB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"memory-pool.d.ts","sourceRoot":"","sources":["../../src/routes/memory-pool.ts"],"names":[],"mappings":"AAmCA,QAAA,MAAM,MAAM,4CAAW,CAAC;AA4yBxB,eAAe,MAAM,CAAC"}