@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.
- package/README.md +1 -1
- package/backend/dist/memory-pool/global-pool-manager.d.ts +12 -0
- package/backend/dist/memory-pool/global-pool-manager.d.ts.map +1 -0
- package/backend/dist/memory-pool/global-pool-manager.js +290 -0
- package/backend/dist/memory-pool/global-pool-manager.js.map +1 -0
- package/backend/dist/memory-pool/pool-lock.d.ts +2 -0
- package/backend/dist/memory-pool/pool-lock.d.ts.map +1 -0
- package/backend/dist/memory-pool/pool-lock.js +31 -0
- package/backend/dist/memory-pool/pool-lock.js.map +1 -0
- package/backend/dist/memory-pool/pool-manager.d.ts +34 -0
- package/backend/dist/memory-pool/pool-manager.d.ts.map +1 -1
- package/backend/dist/memory-pool/pool-manager.js +91 -0
- package/backend/dist/memory-pool/pool-manager.js.map +1 -1
- package/backend/dist/memory-pool/templates.d.ts.map +1 -1
- package/backend/dist/memory-pool/templates.js +98 -127
- package/backend/dist/memory-pool/templates.js.map +1 -1
- package/backend/dist/memory-pool/types.d.ts +34 -0
- package/backend/dist/memory-pool/types.d.ts.map +1 -1
- package/backend/dist/routes/hooks.d.ts.map +1 -1
- package/backend/dist/routes/hooks.js +14 -0
- package/backend/dist/routes/hooks.js.map +1 -1
- package/backend/dist/routes/memory-pool.d.ts.map +1 -1
- package/backend/dist/routes/memory-pool.js +617 -57
- package/backend/dist/routes/memory-pool.js.map +1 -1
- package/frontend/dist/assets/{GraphPreview-QiSxy4LP.js → GraphPreview-BFYA_WA5.js} +1 -1
- package/frontend/dist/assets/{OfficePreview-DlUCjmFD.js → OfficePreview-DN-it4Af.js} +2 -2
- package/frontend/dist/assets/{PlanPanel-Dn5PCqCc.js → PlanPanel-DYupjf3X.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-XG9MZm7t.js → ProjectPage-B6tVjIYr.js} +5 -5
- package/frontend/dist/assets/{SettingsPage-ofs1M1K_.js → SettingsPage-CQL_FfkR.js} +2 -2
- package/frontend/dist/assets/{ShareViewPage-u8FXEdhC.js → ShareViewPage-C_x31zAw.js} +1 -1
- package/frontend/dist/assets/{SkillHubPage-DYQ3--oW.js → SkillHubPage-Cgoxl30L.js} +2 -2
- package/frontend/dist/assets/{bot-63iGenXw.js → bot-Dst2XqWX.js} +1 -1
- package/frontend/dist/assets/{chevron-down-CzkwkeMW.js → chevron-down-DsAldQb3.js} +1 -1
- package/frontend/dist/assets/{download-DhFx0Fu-.js → download-YA6lXM4C.js} +1 -1
- package/frontend/dist/assets/{index-DVUjdhq8.css → index-BDYnq-Fr.css} +1 -1
- package/frontend/dist/assets/{index-C8aR4tRp.js → index-CY9Au1bg.js} +9 -9
- package/frontend/dist/assets/{index-DKsG2yPY.js → index-_m8u9esJ.js} +1 -1
- package/frontend/dist/assets/{jszip.min-B9vwwWDL.js → jszip.min-BC9RCrTS.js} +1 -1
- package/frontend/dist/assets/{matter-CCkX66fz.js → matter-Mm9BJmx6.js} +1 -1
- package/frontend/dist/assets/{maximize-2-B3mAuuFs.js → maximize-2-CuzznumM.js} +1 -1
- package/frontend/dist/assets/{save-CxQAMJ-_.js → save-Q2W6S7fk.js} +1 -1
- package/frontend/dist/assets/{user-DxwkzcYb.js → user-BM9GY1Xb.js} +1 -1
- package/frontend/dist/index.html +2 -2
- 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
|
-
>
|
|
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 = \`
|
|
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₀ | 初始浮力 |
|
|
32
|
-
| H | 累计命中次数 |
|
|
33
|
-
| α | 查询增益系数 |
|
|
34
|
-
| λ | 衰减率 |
|
|
35
|
-
| t | 当前全局轮次 |
|
|
36
|
-
| 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\`
|
|
41
|
-
|
|
42
|
-
**轮次规则**:每条用户消息算一轮。\`t\` 由系统 hook 自动递增,AI 无需手动管理。
|
|
39
|
+
**永久标记**:\`permanent: true\` 的球跳过衰减项。
|
|
43
40
|
|
|
44
41
|
## 三、球的属性
|
|
45
42
|
|
|
46
43
|
| 属性 | 字段 | 说明 |
|
|
47
44
|
|------|------|------|
|
|
48
|
-
|
|
|
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\` |
|
|
59
|
-
| \`user\` |
|
|
60
|
-
| \`project\` |
|
|
61
|
-
| \`reference\` |
|
|
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
|
-
├──
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
文件路径:\`.memory-pool/balls/ball_XXXX.md\`
|
|
73
|
+
## 六、操作流程(通过 ccweb API)
|
|
107
74
|
|
|
108
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
96
|
+
## 七、多容器架构
|
|
143
97
|
|
|
144
|
-
|
|
98
|
+
- **项目池**(\`pool: "project"\`):\`.memory-pool/\`,\`lambda: 0.97\`
|
|
99
|
+
- **全局池**(\`pool: "global"\`):\`~/.ccweb/memory-pool/\`,\`lambda: 0.99\`
|
|
145
100
|
|
|
146
|
-
|
|
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
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
|
|
139
|
+
type 决定默认 B₀:feedback=9 | user=6 | project=5 | reference=3
|
|
176
140
|
|
|
177
|
-
|
|
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
|
-
|
|
149
|
+
DELETE /balls/{ballId}
|
|
183
150
|
\`\`\`
|
|
184
151
|
|
|
185
|
-
|
|
186
|
-
永久球(permanent=true)不乘衰减项。
|
|
187
|
-
buoyancy 由后端动态计算,不存储在文件中。
|
|
152
|
+
ccweb 自动清理其他球对该球的 links 引用。
|
|
188
153
|
|
|
189
|
-
##
|
|
154
|
+
## 管理连线
|
|
190
155
|
|
|
191
|
-
|
|
156
|
+
\`\`\`
|
|
157
|
+
PATCH /balls/{ballId}/links
|
|
158
|
+
Body: { "add": ["ball_0007"], "remove": ["ball_0003"] }
|
|
159
|
+
\`\`\`
|
|
192
160
|
|
|
193
|
-
##
|
|
161
|
+
## 纯读取(不增加命中计数)
|
|
194
162
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
4. 写回 pool.json
|
|
163
|
+
\`\`\`
|
|
164
|
+
GET /ball/{ballId} → 只返回内容,不影响 H 和 t_last
|
|
165
|
+
\`\`\`
|
|
199
166
|
|
|
200
167
|
## 轮次管理
|
|
201
168
|
|
|
202
|
-
\`t\`
|
|
169
|
+
\`t\` 由 ccweb 在对话结束时自动递增(Stop hook)。无需手动操作。
|
|
170
|
+
|
|
171
|
+
## 维护
|
|
203
172
|
|
|
204
|
-
|
|
173
|
+
\`\`\`
|
|
174
|
+
POST /maintenance → 返回分化建议 + 异常检测
|
|
175
|
+
\`\`\`
|
|
205
176
|
|
|
206
|
-
|
|
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.
|
|
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
|
-
-
|
|
222
|
-
-
|
|
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,
|
|
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;
|
|
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;
|
|
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;
|
|
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;AAClD,8DAAsE;AACtE,wDAAwD;AAExD,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,4CAA4C;YAC5C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC;gBACtC,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;oBAC9D,IAAI,IAAA,4BAAa,EAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,MAAM,SAAS,GAAI,GAAG,CAAC,IAAiB,CAAC,OAAO,CAAC;wBACjD,IAAA,wBAAY,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAA,uBAAQ,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;YACtD,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-pool.d.ts","sourceRoot":"","sources":["../../src/routes/memory-pool.ts"],"names":[],"mappings":"
|
|
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"}
|